Je robot besturen vanaf je PC. Tover je PC om in een dashboard met het Basisstation of maak er zelfs een cockpit van met bijvoorbeeld een joystick. Vanuit de cockpit kan je drive by wire (wiki) je robot besturen.
- json npm etc
|
+ npm@6.13.7
+ canvas-gauges@2.1.5
https://www.cssscript.com/canvas-based-html5-gauge-library-gauge-js/
https://github.com/HanSolo/charts
file:///var/www/html/Gerrit/SteelSeries-Canvas-master/demoExtras.html
|
- Software
|
python3 /var/www/html/robotigs/software/Dashboard/dashboard-01.pyx.py
- Dashboard-01
We hebben nu in Python een joystick. De volgende stap is dat we daarmee een robot willen voortbewegen. We kunnen ook serieel communiceren met het basisstation. Dan rest nu de vraag: Wat gaan we communiceren? En wat laten we op het dashboard zien? Eerst maar eens een basis window maken met PySide2.
- /usr/local/lib/python3.6/dist-packages/PySide2/examples
We hebben nu in Python een joystick. De volgende stap is dat we daarmee een robot willen voortbewegen. We kunnen ook serieel communiceren met het basisstation. Dan rest nu de vraag: Wat gaan we communiceren? En wat laten we op het dashboard zien? Eerst maar eens een basis window maken met PySide2.
- Dashboard.php
Hier staat een testversie. Op zoek naar gauges.
|
- Doelstelling
|
Moet functioneel zijn maar ook leuk voor jongens met toeters en bellen.
|
- Beschrijving
|
Deze robot valt uiteen in 2 delen:
- Dashboard
Dit is de software die op de pc loopt. Het doet zoveel als dat de naam zegt.
- Basistation
Dit is de hardware die moet worden aangesloten via een USB kabel. Deze hardware bevat onder andere een LoRa zender/ontvanger.
|
- Dashboard
|
Het is geschreven in Python. Voor de grafische desktop is Qt gebruikt.
De onderstaande onderdelen kunnen bijdragen aan een verhoogde gebruikerservaring.
- De computer
De cockpit draait op een pc of laptop.
- Joystick
We hebben nu in Python een joystick. De volgende stap is dat we daarmee een robot willen voortbewegen.
|
- Basisstation
|
- Werking
Het basisstation bestaat uit een arduino UNO en is via een USB kabel aangesloten op een PC/Laptop. Daar haalt de Arduino dan ook zijn voeding vandaan. De communicatie tussen PC en robot verloopt via LoRa en dat is eigenlijk alles waar de Arduino zich druk over hoeft te maken. De robot moet dus voorbereid zijn om zelf ook met LoRa te kunnen communiceren.
|
- Legacy
|
De onderstaande heeft betrekking op dit project:
- navigation.php
navigation is a php tool that shows all data collected by your robot on navigation. It requires Apache and php installed. This should run at all major platforms as well.
- read_joystick.php
een joystick.
- brains.php
brains.php like battery state from the battery monitor. Extplane.
- bolderbotMini.php
bolderbotMini.php Test Bolderbot.
- Skype
Skype provides eyes and ears in the cockpit. It runs on all major platforms.
- 1sheeld internet
1sheeld internet Exchange data: sensor data <-> commands.
|
//SHOW ALL PARTS USED IN THIS ROBOT *****************************************
// Location:/robotigs/includes/ list_parts_per_bot.php
// This is an include, so no parsing needed
// DISPLAY $PART_LIST
if ($part_list){
$lijst = explode(" , ", $part_list);
$aantal = str_word_count($part_list, 0, " ") - 2; //Needed for positioning
$bedrag = 0;
$cntrlp = 0;
echo (" ");
echo ("");
echo ("Onderdelen van deze robot:");
echo (" | ");
echo (" ");
//*** SHOW PARTS IN STORED SEQUENCE ($parts_list) ---------------------------
while(isset($lijst[$cntrlp])){
$partkey = $lijst[$cntrlp];
$qrylp=("SELECT tblsystext.txtname
, onderdelen.prt_icon_link
, onderdelen.prijseurinclbtw
, onderdelen.idsrtodd
, onderdelen.lanid
FROM onderdelen INNER JOIN tblsystext ON onderdelen.partid = tblsystext.recordid
WHERE tblsystext.lanid = onderdelen.lanid
AND tblsystext.txlid = 19
AND onderdelen.partid = $partkey
;");
$resultlp = pg_query($con1, $qrylp);
$rowlp = pg_fetch_array($resultlp);
if ($rowlp[4] == 1) {$imgname = "nederland.gif";}
if ($rowlp[4] == 2) {$imgname = "deutschland.gif";}
if ($rowlp[4] == 3) {$imgname = "uk.gif";}
if ($rowlp[4] == 4) {$imgname = "france.gif";}
//*** SHOW RECORD
echo ("");
echo ("");
echo (" | ");
echo ("");
echo ("$rowlp[0] | ");
echo (""); //Show group
$prtsrttxt = get_prtsrt_name2($con1, $koekje[2], $rowlp[3]);
echo ("");
echo ("$prtsrttxt | "); //End of show group
if ($koekje[3]=="1") { //If this user wants to translate then
//echo (" ");
//echo ("");
//echo (" | ");
echo ("");
echo ("");
echo (" ");
if ($cntrlp==0){
echo (" ");
}else{
echo ("");
echo (" ");
}
if ($cntrlp == $aantal){
echo (" ");
}else{
echo ("");
echo ("");
}
echo (" | ");
}
echo (" ");
$bedrag = $bedrag + $rowlp[2]; //Calculate total robot price
$cntrlp++;
} //End of while displaying this mother part AND childparts
echo (" ");
if ($koekje[0]>0 and $koekje[3]>0){ //User is logged in and translates
$bedrag_formatted = number_format($bedrag / 100, 0, ',', '.');
echo ("Project costs: € $bedrag_formatted");
}
} //End of if ($part_list) -----------------------------------------------------
////////////////////////////////////////////////////////////////////////////////
function get_prtsrt_name2($conid, $lan, $recid){
$qry = ("SELECT * FROM tblsystext
WHERE txlid = 26
AND lanid = $lan
AND recordid = $recid
;");
$result = pg_query($conid, $qry);
$row = pg_fetch_array($result);
return ("$row[1]");
}
?>
// LIST ALL SOFTWARE THAT WILL RUN OM THIS PLATFORM **************************
// INCLUDED IN ALL ROBOTS TO CHECK THEIR DIRECTORY
$qry=("SELECT software_basedir
FROM farmbotversie
WHERE id = $idbot;");
$result = pg_query($con1, $qry);
$col = pg_fetch_array ($result ,0);
$dir1 = "/var/www/html/robotigs/software/$col[0]";
$arr1 = glob($dir1, GLOB_ONLYDIR);
if (isset($arr1[0])){
echo (" ");
$folder = $arr1[0];
$countertmp = 0;
foreach (scandir($folder, 1) as $filename) {
if ($filename<>"." AND $filename <>".."){
if ($countertmp == 0){
$countertmp++;
echo ("Software voor deze robot");
echo (" | ");
} //End of if ($countertmp == 0)
$tmp = "/";
$dir = substr($folder, 14) ."/";
$link = $tmp .$dir .$filename;
$showname = substr($filename, 0 ,-4);
echo "$showname | ";
} //End of if ($filename<>"." AND $filename <>".."){
} //End of foreach (scandir($folder, 1) as $filename)
echo (" ");
} //End of if (isset($arr1[0]))
?>
//ONLY FOR SYS MANAGER ******************************************************
//*** ADD A PART TO THIS ROBOT -------------------------------------------------
//This is an include, so no parsing needed
if ($koekje[0]>0 and $koekje[3]>0){ //User is logged in and translates
echo ("");
echo ("Add a part to this robot ");
echo (" | ");
$qryap=("SELECT tblsystext.txtname
, tblsystext.recordid
FROM onderdelen
INNER JOIN tblsystext ON onderdelen.partid = tblsystext.recordid
WHERE txlid = 19
AND tblsystext.lanid = onderdelen.lanid
AND selectable = 0
AND '$part_list' NOT LIKE '% ' || tblsystext.recordid || ' %'
ORDER BY tblsystext.txtname
;");
$resultap = pg_query($con1, $qryap);
echo ("");
echo ("  ");
echo ("==> Add");
echo (' | ');
} //End of if ($koekje[0]>0) End of only for logged in users
//SPECIFIC INFO FOR SYS MANAGER *********************************************
//This is an include, so no parsing needed
if ($koekje[0]>0 and $koekje[3]>0){ //User is logged in and translates
$qrydb=("SELECT farmbotversie.*
FROM farmbotversie
WHERE id = $idbot
;");
$resultdb = pg_query($con1, $qrydb);
while($row = pg_fetch_array($resultdb)){ //Fields accesible by their name
foreach( $row AS $key => $val ){
$$key = stripslashes( $val );
}
}
$jaar = substr($changeddate,0,4);
$maand = substr($changeddate,5,2);
$dag = substr($changeddate,8,2);
$last_stamp = ("$dag $maand $jaar");
$jaar = substr($createddate,0,4);
$maand = substr($createddate,5,2);
$dag = substr($createddate,8,2);
$create_stamp = ("$dag $maand $jaar");
echo ("");
echo ("");
echo ("");
echo ("General information ");
echo ("(");
echo ("edit)");
echo (" | ");
//*** LAST CHANGE MADE TO THIS ROBOT ----------------------------------------
echo ("Laatste wijziging   | ");
echo("$last_stamp | ");
//*** RECORD CREATED DATE ---------------------------------------------------
echo ("Aangemaakt   | ");
echo("$create_stamp | ");
// *** PART OWNER -----------------------------------------------------------
echo ("Eigenaar   | ");
//Needs botmaster from the file, tblsysuser.usrid
$name = get_person_name($con1, $bot_master, $koekje[2]);
echo("$name | ");
// *** VERSIENAAM -----------------------------------------------------------
echo ("Versienaam:   | ");
echo("$versienaam | ");
// *** FLESSENHALS -----------------------------------------------------------
echo ("Flessenhals:   | ");
echo("$flessenhals | ");
// *** RECORD STATUS --------------------------------------------------------
echo ("Record status   | ");
$statTxt = getStatTxt($con1, $status, $koekje[2]);
echo("$statTxt");
echo (" | ");
if ($koekje[0]>0 and $koekje[3]>0){ //User is logged in and translates
$tmp = get_txt($con1, 9, $koekje[2], 3918); //Fieldname at screen LANGUAGE
if ($lanid == 1) {$imgname = "nederland.png";}
if ($lanid == 2) {$imgname = "deutschland.png";}
if ($lanid == 3) {$imgname = "uk.png";}
if ($lanid == 4) {$imgname = "france.png";}
echo ("$tmp | ");
echo ("");
echo (" | ");
}
echo (" ");
} //End of if ($koekje[0]>0)
| //Location:/robotigs/includes/ picts_show.php
// Requieres: $pict_list and several picture handling javascript routines
//*** FROM HERE ON THE PICTURE CORNER STARTS -----------------------------------
if ($pict_list){ //There are 1 or more pictures to be printed
echo ("");
$counter = 0;
$aantal = str_word_count($pict_list, 0, "0123456789");
$lijst = str_word_count($pict_list, 1, "0123456789");
while($counter < $aantal){
$pictkey = $lijst[$counter];
$qryy1 = ("SELECT *
FROM illustrations
WHERE ill_id = $pictkey
;");
$resulty1 = pg_query($con1, $qryy1);
while($row = pg_fetch_array($resulty1)){ //Fields accesible by their name
foreach( $row AS $key => $val ){
$$key = stripslashes( $val );
}
}
$image = ("/robotigs/documentatie/plaatjes/$ill_name");
$pictfull = str_replace('_small', '', $image); //Pictfull=biggest version
$alt = ("Just wait till your 57....");
$txtname = get_txt($con1, 18, $koekje[2], $ill_id); //Robot illustrations subtitles
echo ("");
echo (' ');
$nummer = $counter + 1;
$txtAfb = get_txt($con1, 9, $koekje[2], 3865); //Pic Afb
if ($koekje[0]>0 and $koekje[3]>0){ //User is logged in and translates
echo ("$txtAfb $nummer: ");
echo ("$txtname");
echo (" ");
echo ("Ontkoppelen ");
if ($counter==0){
echo ("Up ");
}else{
echo ("Up ");
}
if ($nummer == $aantal){
echo ("Down");
}else{
echo ("Down");
}
}else{ //Else of if Meaning the current useer is logged in
echo ("$txtAfb $nummer: $txtname");
}
echo (''); //End of this picture
$counter++; //Prepair for next picture
}
echo (' | '); //All pictures are printed
} //End of if there are 1 or more pictures to be printed ----------------------
?>