Roboterprojekt/Software: Unterschied zwischen den Versionen
(Cartographer mit IMU) |
K |
||
(43 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
=== SD Karten als Bootlaufwerk === | |||
ultra Sandisk-microSD Karte hat kein USB Boot aktiviert in boot config | |||
extreme Sandisk-microSD Karte muss für USB Boot im Jetson Nano verbleiben. Bootloader lädt USB Treiber nach und bootet dann von /dev/sda1. | |||
=== Kompilieren === | |||
* hoverboard-driver - wichtig ist den Makarov Fork des Submodules zu verwenden https://github.com/alex-makarov/bipropellant-hoverboard-api.git | |||
- Ansonsten gibt es einen Linker-Error | |||
git clone --recurse-submodules https://github.com/naoki-mizuno/ds4_driver | |||
für einen spezifischen Commit nach dem clone: "git checkout HIER_DEN_HASH" | |||
Start/Select für Motor RPlidar Start/Stop Motor beim ersten mal 2x drücken. Erster Befehl wird verworfen. (TODO) | === Helfer Skripte === | ||
(Jetbot)(Start/Select für Motor RPlidar Start/Stop Motor beim ersten mal 2x drücken. Erster Befehl wird verworfen. (TODO)) | |||
Anstatt eine UDEV Rule für /dev/ttyUSB* anzulegen den Benutzer in die Gruppe dialout adden für RW-Zugriff. | === Zugriffsrechte USB und Bluetooth Peripherie === | ||
Anstatt eine UDEV Rule für /dev/ttyUSB* anzulegen den Benutzer in die Gruppe dialout (USB) und input (PS4 BT Controller) adden für RW-Zugriff. | |||
=== Autostart beim Einschalten des Nano === | |||
In GNOME Startprogrammen ein Skript zum Starten der Roboter Software zum Starten für Headless Betrieb. | In GNOME Startprogrammen ein Skript zum Starten der Roboter Software zum Starten für Headless Betrieb. | ||
=== VNC Server === | |||
Wir verwenden den vino VNC Server. "xrandr --fb 1920x1080" damit headless die Auflösung passt - funktioniert sowohl mit x11vnc als auch mit Vino? "setxkbmap de" damit alle Tastatureingaben von Sonderzeichen über VNC funktionieren (|` usw.) | |||
Damit in jedem Fall auch ohne einem angeschlossenen Monitor der X11 Server gestartet wird, muss in der Datei /etc/X11/xorg.conf die Option AllowEmptyInitialConfiguration für das verwendete Device (z.B. "Device0") auf true gesetzt werden. | |||
=== SSH Server === | |||
SSH Server ist standardmäßig aktiviert. Für den Login Benutzer/Passwort "jetbot" verwenden. | |||
=== Powermodi === | |||
MAXN und 5W Modus - 4 vs 2 CPUs. Halbe Leistung. Bei MAXN passieren Spannungsfehler wenn nur mit dem USB Powerbar betrieben und der Nano schaltet sich komplett aus. Für Mobilbetrieb mit dem USB Powerbar anscheinend 5W Modus notwendig. Mit dem Akkupack alleine möglich im MAXN Betrieb, aber Kombination aus Akkupack und Powerbar ideal. Der separate Bleiakku hat keinen nennenswerten Mehrwert hinsichtlich der Akkulaufzeiten gebracht. | |||
=== Stromverbrauch/Akkubetrieb Laufzeiten === | |||
!!Folgendes vermutlich NUR OHNE das Akkupack mit dem Display!! Der Dienst jetbot_stats zum Befüllen des Displays auf der Akkupack Erweiterung ist ressourcenhungrig. Im 5W Modus frisst er ca. 15% CPU pro Core. Das ist unverhältnismäßig hoch. Zyklisch wird mindestens ein python Skript aufgerufen das für die Last sorgt. Daher folgende Befehle angebracht zum dauerhaften deaktivieren: "systemctl stop jetbot_stats" und "systemctl disable jetbot_stats" | !!Folgendes vermutlich NUR OHNE das Akkupack mit dem Display!! Der Dienst jetbot_stats zum Befüllen des Displays auf der Akkupack Erweiterung ist ressourcenhungrig. Im 5W Modus frisst er ca. 15% CPU pro Core. Das ist unverhältnismäßig hoch. Zyklisch wird mindestens ein python Skript aufgerufen das für die Last sorgt. Daher folgende Befehle angebracht zum dauerhaften deaktivieren: "systemctl stop jetbot_stats" und "systemctl disable jetbot_stats" | ||
=== TF Laser === | |||
Static transform für Laser immer notwendig damit ein relativer Bezug im Raum zur Hardware errechnet werden kann - Frame "laser" | Static transform für Laser immer notwendig damit ein relativer Bezug im Raum zur Hardware errechnet werden kann - Frame "laser" | ||
=== Jetbot Image Einrichtung === | |||
Automatische Updates abschalten. Die CPU wird sonst zu unvorhergesehen Zeiten komplett beansprucht und erzeugt nicht vorhersehbares Verhalten. Daher Updates nur manuell ausführen. | Automatische Updates abschalten. Die CPU wird sonst zu unvorhergesehen Zeiten komplett beansprucht und erzeugt nicht vorhersehbares Verhalten. Daher Updates nur manuell ausführen. | ||
getty für ttyTHS1 und ttyS0 maskieren "systemctl mask" | getty für ttyTHS1 und ttyS0 maskieren "systemctl mask" | ||
=== Helferskripte === | |||
*/home/jetbot/ROS/.sh <- iwas mit start_carto_rpl_komplett.sh oder so ähnlich | |||
*/home/jetbot/ROS/hotspot_start.sh | |||
*/home/jetbot/ROS/hotspot_stop.sh | |||
=== Serielle Verbindung === | |||
USARTs Verbindungen müssen RX/TX crossen - Nullmodemverbindung | USARTs Verbindungen müssen RX/TX crossen - Nullmodemverbindung | ||
=== Ansteuerung der Motoren === | |||
Ansteuerung der Motoren per PPM https://de.wikipedia.org/wiki/Pulsdauermodulation#Steuerungstechnik | Ansteuerung der Motoren per PPM https://de.wikipedia.org/wiki/Pulsdauermodulation#Steuerungstechnik | ||
=== Flashen des Motor Controllers === | |||
Bisher Flashen des Motor Controller Boards vom Jetson Nano, weder mit dem originalen ST-Link Adapter noch mit dem China Flasher möglich -> evtl funktioniert es mit dem st-flash Tool - gemeint ist nicht st-link-gui | Bisher Flashen des Motor Controller Boards vom Jetson Nano, weder mit dem originalen ST-Link Adapter noch mit dem China Flasher möglich -> evtl funktioniert es mit dem st-flash Tool - gemeint ist nicht st-link-gui | ||
"rosbag record -a" um alle Topics aufzunehmen. Pro Minute etwa 10 MByte für den RPLidar im Boost Modus/8K. | === Rosbag Dateien === | ||
"rosbag play --topics /scan /tf /tf_static /map" funktioniert erstmal. Evtl nicht optimal. | |||
Speichern der Scans | |||
<br>"rosbag record -a" um alle Topics aufzunehmen. Pro Minute etwa 10 MByte für den RPLidar im Boost Modus/8K. | |||
<br>"rosbag play --topics /scan /tf /tf_static /map" funktioniert erstmal. Evtl nicht optimal. | |||
<br> | |||
<br>Es sollte reichen nur die Lidar und IMU Topics zu speichern. | |||
<br> | |||
<br>Bei der Wiedergabe können Topics pausiert werden. Das ist sinnvoll, wenn mit "-a" alle Topics, die Cartographer Topics eingeschlossen, gespeichert wurden. Dann kann z.B. mit | |||
<br>"rosbag play -i *.bag --pause-topics /constraint_list /landmark_pose_list /rosout /scan_matched_points2 /submap_list /tf /trajectory_node_list" | |||
<br> die Rosbag Daten erneut durch den Cartographer verarbeitet werden. (z.B. beim Arbeiten mit mehreren Rosbag Files oder dem Tunen der Cartographer Parameter wichtig) | |||
<br>Einfacher ist es nur die relevanten Topics zu speichern. Das spart außerdem Speicherplatz. | |||
<br> | |||
<br>"cartographer_rosbag_validate -bag_filename 2020-08-29-02-18-05.bag" <- interessanter Befehl | |||
<br> | |||
<br>Es können auch nur Teile eines Topics wiedergegeben werden. Dazu können die ersten x Sekunden übersprüngen oder die letzten x Sekunden weggelassen werden. | |||
<br> | |||
<br>Arbeitet man mit mehreren Rosbag Files, probiert der Cartographer die Kartenausschnitte mit dem Loop Closure Algorithmus zu matchen. Gelingt das nicht, wird der gesamte Scan verworfen. | |||
<br> | |||
<br>Es gibt viele Parameter für den Cartographer. Einzutragen in der *.lua Datei. | |||
=== IMU === | |||
https://github.com/alex-makarov/adafruit_imu - Beim kalibrieren auf Topic achten - muss geremaped werden. | |||
=== Cartographer imu === | |||
Cartographer kann mit oder ohne IMU laufen. Ohne IMU in robaka.lua dafür use_imu_data=false und use_online_correlative_scan_matching=true. Ca. 50% CPU Last in MAXN Modus. | Cartographer kann mit oder ohne IMU laufen. Ohne IMU in robaka.lua dafür use_imu_data=false und use_online_correlative_scan_matching=true. Ca. 50% CPU Last in MAXN Modus. | ||
Mit IMU in robaka.lua dafür use_imu_data=true und use_online_correlative_scan_matching=false. Wichtig ist das remapping von /imu/data_raw nach /imu. Alles in ein Launchfile ist am einfachsten. !Anmerkung! Seperate Launchfiles, sowie die Startreihenfolge als auch die Zeilenreihenfolge in den Launchfiles sind relevant !Anmerkung! | Mit IMU in robaka.lua dafür use_imu_data=true und use_online_correlative_scan_matching=false. Wichtig ist das remapping von /imu/data_raw nach /imu. Alles in ein Launchfile ist am einfachsten. !Anmerkung! Seperate Launchfiles, sowie die Startreihenfolge als auch die Zeilenreihenfolge in den Launchfiles sind relevant !Anmerkung! | ||
=== Virtuelle Maschine mit ROS === | |||
Die Virtuelle Maschine kann für die entfernte Auswertung verwendet werden. Das schont die CPU Last auf dem Roboter. Es kann auf dem Roboter gänzlich auf eine grafische Oberfläche verzichtet. Lediglich die ROS Nodes werden über den Master veröffentlicht/abonniert. | |||
Als Basis werden Images von https://www.osboxes.org/ubuntu/ verwendet <s>(derzeit [https://sourceforge.net/projects/osboxes/files/v/vm/55-U--u/18.04/18.04.3/18.04.3VM-64bit.7z/download:Ubuntu 18.04.3 Bionic Beaver für VMware]). | |||
Für die Verwendung des Images muss der [https://www.vmware.com/products/workstation-player/workstation-player-evaluation.html VMware Workstation Player] installiert werden. Das Programm ist für den privaten und nichtkommerziellen Gebrauch kostenlos.</s> | |||
(derzeit [https://www.osboxes.org/ubuntu/#ubuntu-1804-vbox, Ubuntu 18.04.3 Bionic Beaver] | |||
Für die Verwendung des Images muss [https://www.virtualbox.org/ VirtualBox] installiert werden. Das Programm ist kostenlos und opensource. | |||
Außerdem muss das VirtualBox Extension Pack installiert werden. Ebenfalls auf der Downloadseite zu finden. Weitere Infos [https://docs.oracle.com/en/virtualization/virtualbox/6.1/user/intro-installing.html hier]. | |||
Aktuell haben sowohl VirtualBox, als auch der VMWare Player massive Probleme mit den 5.8er Kerneln - für Verwendung unter Linux daher LTS-Kernel ratsam. | |||
<br>Benutzer: osboxes | |||
<br>Passwort: osboxes.org | |||
=== robaka === | |||
"rosdep install robaka" installiert alle Abhängigkeiten für robaka-ros. Sehr praktisch! | |||
evtl. muss ros-melodic-rosserial-ros (Name korrekt?) ([https://wiki.ros.org/rosserial https://wiki.ros.org/rosserial]) nachinstalliert werden. Es fehlt teilweise an dem code für rosserial_arduino, welche in genanntem Paket enthalten ist. | |||
Die bipropellant Firmware muss in einer bestimmten Version verwendet werden, da die geforkten Projekte vom Makarov die Änderung von Upstream nicht enthalten. https://github.com/bipropellant/bipropellant-hoverboard-firmware/tree/da286fe3ea6eb97cf9538dc251740d10c3b683e7 | |||
Außerdem muss das submodule hbprotocol (https://github.com/bipropellant/bipropellant-protocol/commit/d5392666c1c746834acef3731476d95565256876) auf das commit d5392666c1c746834acef3731476d95565256876 reverted werden. | |||
=== PS4 DualShock Controller === | |||
https://github.com/naoki-mizuno/ds4_driver - siehe "Installation and Usage" für https://github.com/naoki-mizuno/ds4drv (spezieller Fork!) | |||
Außerdem müssen noch die Pakete ros-melodic-rosserial-arduino und ros-melodic-joy-teleop installiert werden. | |||
ros-melodic-safe-teleop-base - "This package provides automatic collision avoidance and is intended to be used for safer teleoperation of a robot base." - klingt interessant - weitere Stichwort "collision" | |||
<br><br><code><nowiki> | |||
<?xml version="1.0"?> | |||
<launch> | |||
<arg name="addr" default="" /> | |||
<!-- <node pkg="ds4_driver" type="demo.py" name="demo" /> //--> | |||
<include file="$(find ds4_driver)/launch/ds4_driver.launch" > | |||
<arg name="addr" value="$(arg addr)" /> | |||
<arg name="use_standard_msgs" value="true" /> | |||
</include> | |||
</launch> | |||
</nowiki></code> | |||
<br><br> | |||
joy2key für die Übersetzung der Joypad Eingaben in einzelne Tastatur-Tasten. In Kombination mit minicom eine einfache Lösung für die Steuerung im Testbetrieb. (ASCII Input) | |||
Zusammenhang Nodes | |||
ds4_driver | |||
ds4_twist | |||
hoverboard-driver (include biproppelant-api (include hbprotocol)) -> Seriell auf Motorboard | |||
controller_spawner | |||
Randbedingungen des Controllers - MAX Geschwindigkeiten usw. | |||
nano ../../hoverboard-driver/config/controllers.yaml | |||
Bei der Arbeit mit einer Ubuntu VM ist aufgefallen das die verwendeten Datentypen in den structs die mit dem Motor Controller Board ausgetauscht werden, unbedingt feste Größen haben müssen. Thema: 64Bit fixes | |||
https://github.com/bipropellant/bipropellant-protocol/blob/9459e90a7831ed41d2671b5b5363590741ff5dde/protocol.h | |||
<br><br><code> | |||
typedef struct tag_PROTOCOL_SPEED_DATA { | |||
// these get set | |||
int32_t wanted_speed_mm_per_sec[2]; | |||
// configurations/constants | |||
int32_t speed_max_power; // max speed in this mode | |||
int32_t speed_min_power; // minimum speed (to get wheels moving) | |||
int32_t speed_minimum_speed; // below this, we don't ask it to do anything | |||
// just so it can be read back | |||
int32_t speed_diff_mm_per_sec[2]; | |||
int32_t speed_power_demand[2]; | |||
} PROTOCOL_SPEED_DATA; | |||
</code><br><br> | |||
=== Tools === | |||
rosrun rqt_* | |||
Diverse Pakete mit dem Präfix "rqt_" beinhalten verschiedene nützliche Tools für die Laufzeitanalyse und mehr. Sollten wir uns mal öfter anschauen. | |||
=== Motor Controller Board + minicom === | |||
Für den Betrieb des ASCII Modus muss die serielle Schnittstelle den Hardware Handshake auf aus und den Software Handshake auf an gesetzt haben. Baudrate beträgt 115200. /dev/ttyS0 | |||
=== WLAN Konfiguration === | |||
==== Edimaxx USB WLAN Adapter ==== | |||
UDEV Rule angelegt damit der Adapter immer wlan1 benannt wird. | |||
<br><br> | |||
/etc/udev/rules.d/10-network-devices.rules | |||
SUBSYSTEM=="net", ACTION=="add", ATTR{vendor}=="Edimax*", NAME="wlan1" | |||
Auf dem Adapter wird ein Hotspot mit der SSID "r0d0" zur Verfügung gestellt. Nützlich für die Bereiche ohne WLAN Infrastruktur für den Fernzugriff. | |||
==== Jetson Nano interner WLAN Adapter ==== | |||
Der Adapter verbindet sich mit der vorhandenen Wifi Infrastruktur in der Zeche. | |||
=== GUI abschalten === | |||
sudo systemctl set-default multi-user.target | |||
<br>Zum Aktivieren ohne Neustart einfach "sudo systemctl isolate multi-user.target" aufrufen. | |||
=== Fernzugriff auf das ROS === | |||
Um direkt mit den Tools auf den ROS Master zugreifen zu können, muss man die Umgebungsvariablen $ROS_MASTER_URI und ggfs. $ROS_IP und $ROS_HOSTNAME exportieren. Für die Namensauflösung kann der Hostname des Masters direkt in die /etc/hosts Datei eingetragen werden. Hostname kann z.B. nach dem Setzen der Master URI mit einem rosnode list und info oder direkt auf dem Server ausgegeben werden. | |||
rosrun rqt_reconfigure rqt_reconfigure ist nützlich für das Ändern von Werten zur Laufzeit. z.B. Geschwindigkeit | |||
=== NOTIZEN === | |||
Master im Netzwerk entdecken | |||
https://wiki.ros.org/master_discovery_fkie | |||
Nodes beim Booten starten - Infos | |||
https://github.com/LucidOne/robot_systemd | |||
https://github.com/TurtleBot-Mfg/ros-system-daemon-groovy | |||
https://github.com/clearpathrobotics/robot_upstart/blob/noetic-devel/doc/instal> | |||
Grafische Tools.. | |||
https://wiki.ros.org/Tools | |||
$ROS_MASTER_URI kann auf den Clients verwendet werden um aus der Ferne auf den ROS Master zuzugreifen. Per Default zeigt der auf localhost:113311 | |||
xacro Datei anpassen. Hinweis berücksichtigen: wheel / wheel_joint (siehe https://github.com/alex-makarov/robaka-ros/commit/b1a2522a38ae25c301b36ae0841c73e871d0b77e#diff-3694f370234fcfc4e287995f6e0ce9f9) | |||
reboot geht nicht - aber shutdown -r now schon | |||
../devel/lib/robaka/odom_listener muss in das src/robaka-ros kopiert werden.. wird ansonsten nicht gefunden | |||
online_slam.launch hat einen Fehler - es muss wie folgt lauten. Das Attribut pkg darf kein $(find robaka) verwenden. | |||
<node name="odom_listener" pkg="robaka" type="odom_listener" /> | |||
- SSH Zugang / Portforward - Portrange? | |||
- in "screen" beim Booten ROS starten | |||
- USB Geräte fixe Gerätenamen 2x RPLidar /dev/ttyUSBX, ggfs konkurieren FTDI USB Adapter; USB Wifi Dongle und intern WLAN Adapter festzuweisen | |||
- Start HotSpot | |||
- Bluetooth DS4 Controller pairen und automatisch connecten | |||
- ... |
Aktuelle Version vom 12. Oktober 2020, 10:38 Uhr
SD Karten als Bootlaufwerk
ultra Sandisk-microSD Karte hat kein USB Boot aktiviert in boot config
extreme Sandisk-microSD Karte muss für USB Boot im Jetson Nano verbleiben. Bootloader lädt USB Treiber nach und bootet dann von /dev/sda1.
Kompilieren
- hoverboard-driver - wichtig ist den Makarov Fork des Submodules zu verwenden https://github.com/alex-makarov/bipropellant-hoverboard-api.git
- Ansonsten gibt es einen Linker-Error
git clone --recurse-submodules https://github.com/naoki-mizuno/ds4_driver
für einen spezifischen Commit nach dem clone: "git checkout HIER_DEN_HASH"
Helfer Skripte
(Jetbot)(Start/Select für Motor RPlidar Start/Stop Motor beim ersten mal 2x drücken. Erster Befehl wird verworfen. (TODO))
Zugriffsrechte USB und Bluetooth Peripherie
Anstatt eine UDEV Rule für /dev/ttyUSB* anzulegen den Benutzer in die Gruppe dialout (USB) und input (PS4 BT Controller) adden für RW-Zugriff.
Autostart beim Einschalten des Nano
In GNOME Startprogrammen ein Skript zum Starten der Roboter Software zum Starten für Headless Betrieb.
VNC Server
Wir verwenden den vino VNC Server. "xrandr --fb 1920x1080" damit headless die Auflösung passt - funktioniert sowohl mit x11vnc als auch mit Vino? "setxkbmap de" damit alle Tastatureingaben von Sonderzeichen über VNC funktionieren (|` usw.) Damit in jedem Fall auch ohne einem angeschlossenen Monitor der X11 Server gestartet wird, muss in der Datei /etc/X11/xorg.conf die Option AllowEmptyInitialConfiguration für das verwendete Device (z.B. "Device0") auf true gesetzt werden.
SSH Server
SSH Server ist standardmäßig aktiviert. Für den Login Benutzer/Passwort "jetbot" verwenden.
Powermodi
MAXN und 5W Modus - 4 vs 2 CPUs. Halbe Leistung. Bei MAXN passieren Spannungsfehler wenn nur mit dem USB Powerbar betrieben und der Nano schaltet sich komplett aus. Für Mobilbetrieb mit dem USB Powerbar anscheinend 5W Modus notwendig. Mit dem Akkupack alleine möglich im MAXN Betrieb, aber Kombination aus Akkupack und Powerbar ideal. Der separate Bleiakku hat keinen nennenswerten Mehrwert hinsichtlich der Akkulaufzeiten gebracht.
Stromverbrauch/Akkubetrieb Laufzeiten
!!Folgendes vermutlich NUR OHNE das Akkupack mit dem Display!! Der Dienst jetbot_stats zum Befüllen des Displays auf der Akkupack Erweiterung ist ressourcenhungrig. Im 5W Modus frisst er ca. 15% CPU pro Core. Das ist unverhältnismäßig hoch. Zyklisch wird mindestens ein python Skript aufgerufen das für die Last sorgt. Daher folgende Befehle angebracht zum dauerhaften deaktivieren: "systemctl stop jetbot_stats" und "systemctl disable jetbot_stats"
TF Laser
Static transform für Laser immer notwendig damit ein relativer Bezug im Raum zur Hardware errechnet werden kann - Frame "laser"
Jetbot Image Einrichtung
Automatische Updates abschalten. Die CPU wird sonst zu unvorhergesehen Zeiten komplett beansprucht und erzeugt nicht vorhersehbares Verhalten. Daher Updates nur manuell ausführen.
getty für ttyTHS1 und ttyS0 maskieren "systemctl mask"
Helferskripte
- /home/jetbot/ROS/.sh <- iwas mit start_carto_rpl_komplett.sh oder so ähnlich
- /home/jetbot/ROS/hotspot_start.sh
- /home/jetbot/ROS/hotspot_stop.sh
Serielle Verbindung
USARTs Verbindungen müssen RX/TX crossen - Nullmodemverbindung
Ansteuerung der Motoren
Ansteuerung der Motoren per PPM https://de.wikipedia.org/wiki/Pulsdauermodulation#Steuerungstechnik
Flashen des Motor Controllers
Bisher Flashen des Motor Controller Boards vom Jetson Nano, weder mit dem originalen ST-Link Adapter noch mit dem China Flasher möglich -> evtl funktioniert es mit dem st-flash Tool - gemeint ist nicht st-link-gui
Rosbag Dateien
Speichern der Scans
"rosbag record -a" um alle Topics aufzunehmen. Pro Minute etwa 10 MByte für den RPLidar im Boost Modus/8K.
"rosbag play --topics /scan /tf /tf_static /map" funktioniert erstmal. Evtl nicht optimal.
Es sollte reichen nur die Lidar und IMU Topics zu speichern.
Bei der Wiedergabe können Topics pausiert werden. Das ist sinnvoll, wenn mit "-a" alle Topics, die Cartographer Topics eingeschlossen, gespeichert wurden. Dann kann z.B. mit
"rosbag play -i *.bag --pause-topics /constraint_list /landmark_pose_list /rosout /scan_matched_points2 /submap_list /tf /trajectory_node_list"
die Rosbag Daten erneut durch den Cartographer verarbeitet werden. (z.B. beim Arbeiten mit mehreren Rosbag Files oder dem Tunen der Cartographer Parameter wichtig)
Einfacher ist es nur die relevanten Topics zu speichern. Das spart außerdem Speicherplatz.
"cartographer_rosbag_validate -bag_filename 2020-08-29-02-18-05.bag" <- interessanter Befehl
Es können auch nur Teile eines Topics wiedergegeben werden. Dazu können die ersten x Sekunden übersprüngen oder die letzten x Sekunden weggelassen werden.
Arbeitet man mit mehreren Rosbag Files, probiert der Cartographer die Kartenausschnitte mit dem Loop Closure Algorithmus zu matchen. Gelingt das nicht, wird der gesamte Scan verworfen.
Es gibt viele Parameter für den Cartographer. Einzutragen in der *.lua Datei.
IMU
https://github.com/alex-makarov/adafruit_imu - Beim kalibrieren auf Topic achten - muss geremaped werden.
Cartographer imu
Cartographer kann mit oder ohne IMU laufen. Ohne IMU in robaka.lua dafür use_imu_data=false und use_online_correlative_scan_matching=true. Ca. 50% CPU Last in MAXN Modus. Mit IMU in robaka.lua dafür use_imu_data=true und use_online_correlative_scan_matching=false. Wichtig ist das remapping von /imu/data_raw nach /imu. Alles in ein Launchfile ist am einfachsten. !Anmerkung! Seperate Launchfiles, sowie die Startreihenfolge als auch die Zeilenreihenfolge in den Launchfiles sind relevant !Anmerkung!
Virtuelle Maschine mit ROS
Die Virtuelle Maschine kann für die entfernte Auswertung verwendet werden. Das schont die CPU Last auf dem Roboter. Es kann auf dem Roboter gänzlich auf eine grafische Oberfläche verzichtet. Lediglich die ROS Nodes werden über den Master veröffentlicht/abonniert.
Als Basis werden Images von https://www.osboxes.org/ubuntu/ verwendet (derzeit 18.04.3 Bionic Beaver für VMware).
Für die Verwendung des Images muss der VMware Workstation Player installiert werden. Das Programm ist für den privaten und nichtkommerziellen Gebrauch kostenlos.
(derzeit Ubuntu 18.04.3 Bionic Beaver
Für die Verwendung des Images muss VirtualBox installiert werden. Das Programm ist kostenlos und opensource.
Außerdem muss das VirtualBox Extension Pack installiert werden. Ebenfalls auf der Downloadseite zu finden. Weitere Infos hier.
Aktuell haben sowohl VirtualBox, als auch der VMWare Player massive Probleme mit den 5.8er Kerneln - für Verwendung unter Linux daher LTS-Kernel ratsam.
Benutzer: osboxes
Passwort: osboxes.org
robaka
"rosdep install robaka" installiert alle Abhängigkeiten für robaka-ros. Sehr praktisch! evtl. muss ros-melodic-rosserial-ros (Name korrekt?) (https://wiki.ros.org/rosserial) nachinstalliert werden. Es fehlt teilweise an dem code für rosserial_arduino, welche in genanntem Paket enthalten ist. Die bipropellant Firmware muss in einer bestimmten Version verwendet werden, da die geforkten Projekte vom Makarov die Änderung von Upstream nicht enthalten. https://github.com/bipropellant/bipropellant-hoverboard-firmware/tree/da286fe3ea6eb97cf9538dc251740d10c3b683e7 Außerdem muss das submodule hbprotocol (https://github.com/bipropellant/bipropellant-protocol/commit/d5392666c1c746834acef3731476d95565256876) auf das commit d5392666c1c746834acef3731476d95565256876 reverted werden.
PS4 DualShock Controller
https://github.com/naoki-mizuno/ds4_driver - siehe "Installation and Usage" für https://github.com/naoki-mizuno/ds4drv (spezieller Fork!) Außerdem müssen noch die Pakete ros-melodic-rosserial-arduino und ros-melodic-joy-teleop installiert werden. ros-melodic-safe-teleop-base - "This package provides automatic collision avoidance and is intended to be used for safer teleoperation of a robot base." - klingt interessant - weitere Stichwort "collision"
<?xml version="1.0"?>
<launch>
<arg name="addr" default="" />
<!-- <node pkg="ds4_driver" type="demo.py" name="demo" /> //-->
<include file="$(find ds4_driver)/launch/ds4_driver.launch" >
<arg name="addr" value="$(arg addr)" />
<arg name="use_standard_msgs" value="true" />
</include>
</launch>
joy2key für die Übersetzung der Joypad Eingaben in einzelne Tastatur-Tasten. In Kombination mit minicom eine einfache Lösung für die Steuerung im Testbetrieb. (ASCII Input)
Zusammenhang Nodes
ds4_driver
ds4_twist
hoverboard-driver (include biproppelant-api (include hbprotocol)) -> Seriell auf Motorboard
controller_spawner
Randbedingungen des Controllers - MAX Geschwindigkeiten usw. nano ../../hoverboard-driver/config/controllers.yaml
Bei der Arbeit mit einer Ubuntu VM ist aufgefallen das die verwendeten Datentypen in den structs die mit dem Motor Controller Board ausgetauscht werden, unbedingt feste Größen haben müssen. Thema: 64Bit fixes
https://github.com/bipropellant/bipropellant-protocol/blob/9459e90a7831ed41d2671b5b5363590741ff5dde/protocol.h
typedef struct tag_PROTOCOL_SPEED_DATA {
// these get set
int32_t wanted_speed_mm_per_sec[2];
// configurations/constants
int32_t speed_max_power; // max speed in this mode
int32_t speed_min_power; // minimum speed (to get wheels moving)
int32_t speed_minimum_speed; // below this, we don't ask it to do anything
// just so it can be read back
int32_t speed_diff_mm_per_sec[2];
int32_t speed_power_demand[2];
} PROTOCOL_SPEED_DATA;
Tools
rosrun rqt_* Diverse Pakete mit dem Präfix "rqt_" beinhalten verschiedene nützliche Tools für die Laufzeitanalyse und mehr. Sollten wir uns mal öfter anschauen.
Motor Controller Board + minicom
Für den Betrieb des ASCII Modus muss die serielle Schnittstelle den Hardware Handshake auf aus und den Software Handshake auf an gesetzt haben. Baudrate beträgt 115200. /dev/ttyS0
WLAN Konfiguration
Edimaxx USB WLAN Adapter
UDEV Rule angelegt damit der Adapter immer wlan1 benannt wird.
/etc/udev/rules.d/10-network-devices.rules
SUBSYSTEM=="net", ACTION=="add", ATTR{vendor}=="Edimax*", NAME="wlan1"
Auf dem Adapter wird ein Hotspot mit der SSID "r0d0" zur Verfügung gestellt. Nützlich für die Bereiche ohne WLAN Infrastruktur für den Fernzugriff.
Jetson Nano interner WLAN Adapter
Der Adapter verbindet sich mit der vorhandenen Wifi Infrastruktur in der Zeche.
GUI abschalten
sudo systemctl set-default multi-user.target
Zum Aktivieren ohne Neustart einfach "sudo systemctl isolate multi-user.target" aufrufen.
Fernzugriff auf das ROS
Um direkt mit den Tools auf den ROS Master zugreifen zu können, muss man die Umgebungsvariablen $ROS_MASTER_URI und ggfs. $ROS_IP und $ROS_HOSTNAME exportieren. Für die Namensauflösung kann der Hostname des Masters direkt in die /etc/hosts Datei eingetragen werden. Hostname kann z.B. nach dem Setzen der Master URI mit einem rosnode list und info oder direkt auf dem Server ausgegeben werden.
rosrun rqt_reconfigure rqt_reconfigure ist nützlich für das Ändern von Werten zur Laufzeit. z.B. Geschwindigkeit
NOTIZEN
Master im Netzwerk entdecken https://wiki.ros.org/master_discovery_fkie
Nodes beim Booten starten - Infos https://github.com/LucidOne/robot_systemd https://github.com/TurtleBot-Mfg/ros-system-daemon-groovy https://github.com/clearpathrobotics/robot_upstart/blob/noetic-devel/doc/instal>
Grafische Tools.. https://wiki.ros.org/Tools
$ROS_MASTER_URI kann auf den Clients verwendet werden um aus der Ferne auf den ROS Master zuzugreifen. Per Default zeigt der auf localhost:113311
xacro Datei anpassen. Hinweis berücksichtigen: wheel / wheel_joint (siehe https://github.com/alex-makarov/robaka-ros/commit/b1a2522a38ae25c301b36ae0841c73e871d0b77e#diff-3694f370234fcfc4e287995f6e0ce9f9)
reboot geht nicht - aber shutdown -r now schon
../devel/lib/robaka/odom_listener muss in das src/robaka-ros kopiert werden.. wird ansonsten nicht gefunden
online_slam.launch hat einen Fehler - es muss wie folgt lauten. Das Attribut pkg darf kein $(find robaka) verwenden. <node name="odom_listener" pkg="robaka" type="odom_listener" />
- SSH Zugang / Portforward - Portrange?
- in "screen" beim Booten ROS starten
- USB Geräte fixe Gerätenamen 2x RPLidar /dev/ttyUSBX, ggfs konkurieren FTDI USB Adapter; USB Wifi Dongle und intern WLAN Adapter festzuweisen
- Start HotSpot
- Bluetooth DS4 Controller pairen und automatisch connecten
- ...