0% found this document useful (0 votes)
47 views4 pages

Web

The document describes a web interface for controlling a two-legged robot. It contains sliders to adjust 12 different robot parameters like joint positions, velocities, step size, etc. There are also buttons to send commands to run, auto-run, turn left/right. All slider values are displayed and sending commands opens a WebSocket to transmit the data to control the robot.

Uploaded by

Thinh Hoang
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
47 views4 pages

Web

The document describes a web interface for controlling a two-legged robot. It contains sliders to adjust 12 different robot parameters like joint positions, velocities, step size, etc. There are also buttons to send commands to run, auto-run, turn left/right. All slider values are displayed and sending commands opens a WebSocket to transmit the data to control the robot.

Uploaded by

Thinh Hoang
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

<!

DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
.slidecontainer {
width: 100%;
}

.slider {
-webkit-appearance: none;
margin-left:10%;
position: absolute;
text-align: center;
width: 70%;
height: 25px;
background: #d3d3d3;
outline: none;
opacity: 0.7;
-webkit-transition: .2s;
transition: opacity .2s;

.slider:hover {
opacity: 1;
}

.slider::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 25px;
height: 25px;
background: #04AA6D;
cursor: pointer;
}

.slider::-moz-range-thumb {
width: 25px;
height: 25px;
background: #04AA6D;
cursor: pointer;
}
.button:hover{
background-color: #4CAF50;
color: green;
}
</style>
</head>
<body>

<h1>2 LEG ROBOT</h1>

<div class="slidecontainer">
<a id="val1">S1:71</a><input type="range" min="30" max="86" value="71" step="1"
class="slider" id="myRange1">
<br><br><a id="val2">S2:101</a><input type="range" min="60" max="160" step="1"
value="101" class="slider" id="myRange2"><br>
<br><a id="val3">S3:</a><input type="range" min="50" max="170" value="102"
class="slider" id="myRange3"><br>
<br><a id="val4">a_right:</a><input type="range" min="1" max="15" value="1"
step="0.1" class="slider" id="myRange4"><br>
<br><a id="val5">v_right:</a><input type="range" min="60" max="180" value="40"
class="slider" id="myRange5"><br>
<br><a id="val6">S6:50</a><input type="range" min="35" step="1" max="85" value="50"
class="slider" id="myRange6"><br>
<br><a id="val7">S7:50</a><input type="range" min="40" step="1" max="90" value="50"
class="slider" id="myRange7"><br>
<br><a id="val8">S8:40</a><input type="range" min="0" step="1" max="130" value="40"
class="slider" id="myRange8"><br>
<br><a id="val9">a_left:</a><input type="range" min="1" step="0.1" max="15"
value="1" class="slider" id="myRange9"><br>
<br><a id="val10">v_left:</a><input type="range" min="60" step="1" max="180"
value="45" class="slider" id="myRange10"><br>
<br><a id="val11">buoc:10</a><input type="range" min="0" step="1.1" max="20"
value="10" class="slider" id="myRange11"><br>
<br><a id="val12">Ban_chan:5</a><input type="range" min="-5" step="1.1" max="15"
value="5" class="slider" id="myRange12"><br>
<br><a id="but_run"></a><button onclick="sendFunction()">RUN</button><br>
<button onclick="autoFunction()">AUTO</button>
<button onclick="autoFunction2()">AUTO2</button>
<button onclick="left()">LEFT</button>
<button onclick="right()">RIGHT</button>
</div>

</body>
<script>
const WS_URL = "ws://" + window.location.host + ":82";
const ws = new WebSocket(WS_URL);
var range_ = new Array();
var value_ = new Array();
range_.push(document.getElementById("myRange1"));
range_.push(document.getElementById("myRange2"));
range_.push(document.getElementById("myRange3"));
range_.push(document.getElementById("myRange4"));
range_.push(document.getElementById("myRange5"));
range_.push(document.getElementById("myRange6"));
range_.push(document.getElementById("myRange7"));
range_.push(document.getElementById("myRange8"));
range_.push(document.getElementById("myRange9"));
range_.push(document.getElementById("myRange10"));
range_.push(document.getElementById("myRange11"));
value_.push(document.getElementById("val1"));
value_.push(document.getElementById("val2"));
value_.push(document.getElementById("val3"));
value_.push(document.getElementById("val4"));
value_.push(document.getElementById("val5"));
value_.push(document.getElementById("val6"));
value_.push(document.getElementById("val7"));
value_.push(document.getElementById("val8"));
value_.push(document.getElementById("val9"));
value_.push(document.getElementById("val10"));
value_.push(document.getElementById("val11"));
range_.push(document.getElementById("myRange12"));
value_.push(document.getElementById("val12"));
for(let i = 0 ;i<10;i++)
{
range_[i].oninput = function()
{
if(i==3)
{
value_[i].innerHTML ="a_right:"+this.value;
send("s"+i+this.value);
}
else if(i==4)
{
value_[i].innerHTML ="v_right:"+this.value;
send("s"+i+this.value);
}
else if(i==8)
{
value_[i].innerHTML ="a_left:"+this.value;
send("s"+i+this.value);
}
else if(i==9)
{
value_[i].innerHTML ="v_left"+this.value;
send("s"+i+this.value);
}
else{
value_[i].innerHTML = "S"+(i+1)+":"+this.value;
send("s"+i+this.value);
}
}
}
range_[10].oninput = function()
{
value_[10].innerHTML = "buoc"+":"+this.value;
send("h"+this.value);
}
range_[11].oninput = function()
{
value_[11].innerHTML = "offset_ban_chan"+":"+this.value;
send("k"+this.value);
}
function autoFunction(){
send("td");
console.log(2);
}
function left()
{
send("u1");
}
function right()
{
send("u2");
}
function autoFunction2(){
send("l");
console.log(2);
}
function sendFunction(){
send("r");
console.log(5 + 6);
}
var lastText, lastSend, sendTimeout;
let connection_resolvers = [];
let checkConnection = () => {
return new Promise((resolve, reject) => {
if (ws.readyState === WebSocket.OPEN) {
resolve();
}
else {
connection_resolvers.push({resolve, reject});
}
});
}

ws.addEventListener('open', () => {
connection_resolvers.forEach(r => r.resolve())
});
async function send(data) {
await checkConnection();
ws.send(data);
}

</script>
</html>

You might also like