Install from source How to build just one package using catkin_make? Best way to add new package to ROS that was installed from source (rosinstall_generator) Adding or Updating packages Installing Packages How to run roscore or roslaunch when i boot Building ROS Melodic with Python3 support ROS melodic does it support Turtlebot2 ? Building a Movable Robot Model with URDF TurtleBot3Blockly TurtleBot3 Programming
Sweep installieren und betreiben
Die ROS-Installation über den Paket-Manager liegt unter /ros/opt/kinetic bzw /ros/opt/indigo.
Der Pfad dahin wird über eine Umgebungsvariable gesetzt
Eigene Paket bzw solche die über Source-Code nachinstalliert werden/wurden liegen bei mir unter ~/catkin_ws.
Die Struktur ist wie folgt:
Ziel: Wenn die Spannung des LiPo-Akkus unter einen bestimmten Wert sinkt, soll der Roboter eine Warnung aussprechen.
Das folgende Skript liest den Wert des AD-Wandlers 0 am Odroid XU4:
#!/usr/bin/env python
import wiringpi2 as wpi
import rospy
from std_msgs.msg import Int32
rospy.init_node('topic_publisher')
pub = rospy.Publisher('extbatterie', Int32)
rate = rospy.Rate(1)
wpi.wiringPiSetupSys()
while not rospy.is_shutdown():
adcValue = wpi.analogRead(0)
print adcValue
pub.publish(adcValue)
rate.sleep()
Wichtig ist der Befehl wpi.wiringPiSetupSys()
, der die Ports für WiringPi unter dem Odroid richtig konfiguriert.
Der Node wird gestartet mit: rosrun battnode battnode.py
#!/usr/bin/env python
import wiringpi2 as wpi
import rospy
import pygame
from std_msgs.msg import Int32
samplebefore = None
def callback(msg):
global samplebefore
print msg.data
if msg.data < 2600 and samplebefore < 2600:
pygame.mixer.music.play()
samplebefore=msg.data
pygame.mixer.init(44100,-16,2,2048)
pygame.mixer.music.load("batterie.mp3")
rospy.init_node ('topic_subscriber')
sub = rospy.Subscriber('extbatterie', Int32, callback)
rospy.spin()
rosrun battnode warnlow.py
Publisher Encoders, Voltage
roscore
$:rosrun rosserial_python serial_node.py /dev/ttyACM0
[INFO] [1511208083.022703]: ROS Serial Python Node
[INFO] [1511208083.030162]: Connecting to /dev/ttyACM0 at 57600 baud
[INFO] [1511208085.203695]: Note: publish buffer size is 512 bytes
[INFO] [1511208085.204471]: Setup publisher on rosso_md25_encoder1 [std_msgs/Int32]
[INFO] [1511208085.208554]: Setup publisher on rosso_md25_encoder2 [std_msgs/Int32]
[INFO] [1511208085.212869]: Setup publisher on rosso_md25_encoders [std_msgs/Float32MultiArray]
[INFO] [1511208085.217673]: Setup publisher on rosso_md25_voltage [std_msgs/UInt8]
[INFO] [1511208085.223492]: Note: subscribe buffer size is 512 bytes
[INFO] [1511208085.224190]: Setup subscriber on rosso_md25_encoder_reset [std_msgs/Bool]
[INFO] [1511208085.229413]: Setup subscriber on rosso_md25_motor1_speed [std_msgs/Int8]
[INFO] [1511208085.236738]: Setup subscriber on rosso_md25_motor2_speed [std_msgs/Int8]
[INFO] [1511208085.243059]: Setup subscriber on rosso_md25_motors_speed [std_msgs/Int8]
[INFO] [1511208085.255203]: Setup subscriber on cmd_vel [geometry_msgs/Twist]
rostopic echo /rosso_md25_encoders
sudo apt-get install ros-kinetic-razor-imu-9dof python-visual wxtools
roslaunch razor_imu_9dof razor-pub-and-display.launch
... logging to /home/dab/.ros/log/5036a962-c258-11e7-b164-485d60d3a251/roslaunch-P6630-19225.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
error loading <rosparam> tag:
file does not exist [/opt/ros/kinetic/share/razor_imu_9dof/config/my_razor.yaml]
XML is <rosparam command="load" file="$(arg razor_config_file)"/>
The traceback for the exception was written to the log file
dab@P6630:~/Downloads$ sudo cp /opt/ros/kinetic/share/razor_imu_9dof/config/razor.yaml /opt/ros/kinetic/share/razor_imu_9dof/config/my_razor.yaml
basierend auf der Anleitung http://wiki.ros.org/ROSberryPi/Installing%20ROS%20Kinetic%20on%20the%20Raspberry%20Pi
393 sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
394 sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
395 sudo apt-get install dirmngr
396 sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
397 sudo apt-get update
398 sudo apt-get install -y python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential cmake
399 sudo rosdep init
400 rosdep update
401 mkdir -p ~/ros_catkin_ws
402 cd ros_catkin_ws/
403 ls
404 rosinstall_generator ros_comm --rosdistro kinetic --deps --wet-only --tar > kinetic-ros_comm-wet.rosinstall
405 rosinstall_generator desktop --rosdistro kinetic --deps --wet-only --tar > kinetic-desktop-wet.rosinstall
406 wstool init src kinetic-desktop-wet.rosinstall
407 rosdep install -y --from-paths src --ignore-src --rosdistro kinetic -r --os=debian:stretch
408 sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/kinetic -j2
409 dmesg
410 sudo mkswap /dev/sda1
411 sudo vi /etc/fstab
412 sudo nano /etc/fstab
413 swapon /dev/sda1
414 sudo swapon /dev/sda1
415 sudo swapon
416 sudo ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release --install-space /opt/ros/kinetic -j2
419 $ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
422 sudo apt-get install tmux
431 cd src/
432 ls
433 git clone https://github.com/ros/urdf_tutorial.git
434 ls urdf_tutorial/
435 cd ..
436 ls
437 roslaunch urdf_tutorial display.launch model:=urdf/01-myfirst.urdf
438 mc
439 less /opt/ros/kinetic/setup.bash
440 less /opt/ros/kinetic/setup.sh
441 less ros_catkin_ws/devel_isolated/setup.bash
442 source ros_catkin_ws/devel_isolated/setup.bash
443 pwd
444 cd ros_catkin_ws/
445 catkin_make
446 cd ..
447 mkdir catkin_ws
448 cd catkin_ws/
449 catkin_make
450 mkdir src
451 catkin_make
452 ls
453 mc
454 source devel/setup.bash
455 roslaunch urdf_tutorial display.launch model:=urdf/01-myfirst.urdf
456 roslaunch urdf_tutorial display.launch model:='$(find urdf_tutorial)/urdf/01-myfirst.urdf'
<robot name="dabot">
<!-- * * * Link Definitions * * * -->
<link name="base_link">
<visual>
<origin xyz="0 0 0.1" rpy="0 0 0"/>
<geometry>
<box size="0.20 0.30 0.10"/>
</geometry>
<material name="Cyan1">
<color rgba="0 0.9 0.9 1.0"/>
</material>
</visual>
</link>
<link name="lwheel">
<visual>
<geometry>
<cylinder length="0.01" radius="0.05"/>
</geometry>
<origin rpy="1.57 1.57 0" xyz="0.12 0 0.05"/>
<material name="black">
<color rgba="0 0 0 1"/>
</material>
</visual>
</link>
<link name="rwheel">
<visual>
<geometry>
<cylinder length="0.01" radius="0.05"/>
</geometry>
<origin rpy="1.57 1.57 0" xyz="-0.12 0 0.05"/>
<material name="black">
<color rgba="0 0 0 1"/>
</material>
</visual>
</link>
<link name="fwheel">
<visual>
<geometry>
<cylinder length="0.01" radius="0.02"/>
</geometry>
<origin rpy="1.57 1.57 0" xyz="0 0.12 0.02"/>
<material name="black">
<color rgba="0 0 0 1"/>
</material>
</visual>
</link>
<link name="bwheel">
<visual>
<geometry>
<!-- * * * <cylinder length="0.01" radius="0.02"/> -->
<sphere radius="0.02"/>
</geometry>
<origin rpy="1.57 1.57 0" xyz="0 -0.12 0.02"/>
<material name="black">
<color rgba="0 0 0 1"/>
</material>
</visual>
</link>
<joint name="base_to_lwheel" type="fixed">
<parent link="base_link"/>
<child link="lwheel"/>
<origin xyz="0.0 0 0.0" rpy="0 0 0"/>
</joint>
</robot>
http://meetjanez.splet.arnes.si/2015/08/22/neato-xv-11-to-ros-slam/ http://wiki.ros.org/hector_mapping http://www.ros.org/reps/rep-0105.html http://wiki.ros.org/hector_slam/Tutorials/SettingUpForYourRobot
Nach Installation von ros-kinetic-ros-base und der Installation von Turtlebot: n/a
Mit dieser Anleitung gelang unter Ubuntu 16.04 die Inbetriebname einer R200 https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages
Allerdings funktioniert der realsense-viewer nicht. Er steigt mit folgender Fehlermeldung aus:
22/07 20:41:20,400 WARNING [139941765056256] (types.cpp:57) set_pu(id=3) failed! Last Error: Input/output error
22/07 20:41:20,402 WARNING [139941765056256] (sensor.cpp:717) Exception was thrown when inspecting properties of a sensor
Immerhin lief der ROS-Node
Mit
roslaunch realsense_camera r200_nodelet_default.launch
ließ sich der Node starten. Zur Anzeige des Farbbildes und des Tiefenbildes
rosrun rqt_image_view rqt_image_view
starten.
Für den Odroid XU 4 mit Ubuntu 16.04 könnte diese Anleitung funktionieren:
https://alessiomorale.com/wordpress/2017/11/01/setting-realsense-r200-odroid-xu4-ros/
Der in Xiaomis Saugrobotern verwendete Lidar ist XV11-kompatibel. Deshalb kann man leicht die bereits vorhandenen Bibliotheken für Arduino, Pi und ROS verwenden. Zuvor muss man allerdings den Sensor richtig verkabeln, also mit Spannung versorgen und die seriellen Daten per USB2Serial-Wandler an den PC/SBC weiterreichen
Man kann für erste Tests in die Headerleiste Jumperkabel zu Kontaktierung stecken, im zweiten Schritt habe ich die Kabel an die Lötpunkte der Headerleiste gelötet.
Die Belegung
gemäß oberen Bild
Header | Pin |
---|---|
1 | ncc |
2 | Vcc |
3 | Tx |
4 | MOT-/GND |
5 | GND |
6 | MOT+/Vcc |
Written with StackEdit.
sudo apt-get install ros-kinetic-rosserial-arduino
sudo apt-get install ros-kinetic-rosserial
cd ~/Arduino/libraries/ # oder wo auch immer die Libs abgelegt sind
rosrun rosserial_arduino make_libraries.py .
Danach liegt in dem Ordner das Verzeichnis ros_lib
Anschließend muss in der Arduino IDE unter Datei/Beispiele der Punkt ros_lib auftauchen.
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
sudo apt update
sudo apt install ros-melodic-desktop-full
sudo rosdep init
rosdep update
reading in sources list data from /etc/ros/rosdep/sources.list.d
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml
Query rosdistro index https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml
Add distro "groovy"
Add distro "hydro"
Add distro "indigo"
Add distro "jade"
Add distro "kinetic"
Add distro "lunar"
Add distro "melodic"
updated cache in /home/dab/.ros/rosdep/sources.cache
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
für spätere Instalation eigener oder fremder Pakete in eigenem Workspace catkin_ws
sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential
mkdir -p ~/catkin_ws/src
cd catkin_ws/src
catkin_make
echo "source /home/dab/catkin_ws/devel/setup.bash" >> ~/.bashrc
Jetzt sollten je ein Pfad zu den per apt-get installierten Paketen und der manuell übersetzten Paketen zeigen:
dab@dab-Alpha:~$ echo $ROS_PACKAGE_PATH
/home/dab/catkin_ws/src:/opt/ros/melodic/share
Warum hier catkin_make und nicht catkin init?
running http://wiki.ros.org/xv_11_laser_driver/Tutorials/Running%20the%20XV-11%20Node http://www.tobias-weis.de/neato-xv-laser-scanner-lidar/
http://zdome.net/wiki/index.php/ROS
das damalige Problem https://stackoverflow.com/questions/45896414/boost-asio-serial-port-end-of-file gelöst mit
stty -F /dev/ttyUSB0 raw
reverse engineering der Datenstruktur https://forum.processing.org/two/discussion/26201/neato-lidar-sensor-and-reading-the-serial-data-and-making-sense-of-it
http://meetjanez.splet.arnes.si/2015/08/22/neato-xv-11-to-ros-slam/
http://www.theconstructsim.com/ros-qa-122-how-to-show-laser-data-on-rviz/
Kennen Sie das? Eigentlich wollte man nur mal eben etwas in Betrieb nehmen, das geht etwas trotz genauer Anleitung nicht und schon artet das kleine Experiment in einen Ausflug in die Untiefen von Hardware und Sofware aus.
Neulich wollte ich einen Lasersensor testen, der als Ersatzteil für Staubsaugerroboter von Xiaomi auf Aliexpress für knapp 120 Euro zu haben ist. Der Sensor schickt Laserstrahlen in die Umgebung und misst per Laufzeit, wie weit Objekte entfernt sind. Da sich der Sensor kontinuierlich dreht, hat er quasi eine Rundumsicht. Anhang 360 Punkte (zu jedem Winkel) kann man sogar eine Karte eines Raumes erstellen und abspeichern. Die Saugroboter nutzen die Kartierungsfunktion um systematisch Räume zu reinigen.
Da liegt es nahe, diesen Lasersensor (LIDAR oder LDS) auch für eigene Experimente einzusetzen. Alternative Sensoren wie der Sweep kosten bei der gleichen Genauigkeit mehr als 300 Euro. Und die auf vielen Forschungsrobotern eingesetzten Sensoren von Sick und Hokuyo kosten jenseits von 1000 Euro.
Der Xiaomi isz kompatibel zum Neato XV11, dessen Lidar bereits recht gut dokumentiert ist. Wie man ihn anschließt, ist unter anderem hier zu sehen.
http://wiki.ros.org/xv_11_laser_driver/Tutorials/Connecting%20the%20XV-11%20Laser%20to%20USB
Die ROS-Anleitung zum Start des XV11-Nodes ist recht kompakt, Paket installieren und dann mit rosrun starten
sudo apt-get install ros-kinetic-xv-11-laser-driver
roscore
rosrun xv_11_laser_driver neato_laser_publisher
leider wirft der Node den Fehler “end of file” aus und stoppt. Der erste Verdacht fällt natürlich auf eine fehlerhafte Verbindung des Sensors zum USB2Serial-Adapter. Doch das Oszibild zeigt, dass sehr wohl Daten zum Adapter gehen.
Es bleibt aber offen, welche Daten zum PC wirklich rübergehen und ob sie den erwarteten Daten entsprechen. Hier kommt das Terminalprogramm hterm ins Spiel, mit dem sich unter Linux die serielle Überträgung hervoragend debuggen lässt. Das Tool habe ich auch schon zum Analysieren der Daten von einer Sick-Sensor PLS200 verwendet.
Download hier: http://www.der-hammer.info/terminal/
Auspacken und starten, wirft allerdings einen Fehler, der sich durch Installation von 2 Libs beseitigen lässt hterm
sudo apt-get install libgtk2.0-0:i386
sudo apt-get install libsm6:i386
Anschließend kann man sich die Daten mit
./hterm
anzeigen lassen (Connect /dev/ttyUSB0)
Mit folgender Analyse versteht man die übertragenen Daten: https://xv11hacking.wikispaces.com/LIDAR+Sensor
Während einer vollen Umdrehung überträgt der Sensor 360 Werte für eine Entfernung. Die Werte werden in 90 Datenpaketen verpackt und über die serielle Schnittstelle bei 115200 Baud gesendet. In jedem Datenpaket sind vier Arrays mit jeweils 2 Bytes für die gemessene Entfernungs sowie Bytes für die Signalstärke und mögliche Fehler. 90 Pakete mal 4 Entfernungen macht 360 Werte Die Pakete beginnen immer mit der Präambel 0xFA worauf ein Index-Byte folgt - beginnend mit 0xA0 und hochzählend bis 0xF9.
Die vom PC empfangenen Daten sind also im richtigen Format und wenn man die Pakete durchlaufen lääst, sieht man auch, dass die richtige Menge übertragen wird. Die Meldung “end of file” kann also nicht dvon zu wenig oder fehlerhaft übertragenen Daten herrühren.
http://www.tobias-weis.de/neato-xv-laser-scanner-lidar/
unter Display/Global Options den Fixed Frame von “map” auf “neato_laser” umstellen
dann “add” unter “Fixed Frame” und zwar LaserScan Unter LaserScan das Topic “/scan” eintragen
reading serial data https://forum.processing.org/two/discussion/26201/neato-lidar-sensor-and-reading-the-serial-data-and-making-sense-of-it
install hterm
hier sourcen https://github.com/rohbotics/xv_11_laser_driver/blob/kinetic-devel/src/xv11_laser.cpp
zeile 113 problem boost::asio::read(serial_, boost::asio::buffer(&raw_bytes[start_count],1));
cwu-Paket? http://library.isr.ist.utl.pt/docs/roswiki/xv_11_laser_driver(2f)Tutorials(2f)Running(20)the(20)XV(2d)11(20)Node.html
ROS_ERROR
Boost asio serial port “end of file” stty -F /dev/ttyUSB0 raw
https://hackaday.com/2016/01/22/how-to-use-lidar-with-the-raspberry-pi/
Apriltags http://wiki.ros.org/apriltags2_ros https://pypi.org/project/apriltag/ https://github.com/swatbotics/apriltag
Written with StackEdit.
http://kookye.com/2017/08/30/tank_robot_car_lesson7/
http://johntrimble.com/blog/2013/07/11/building-an-incremental-rotary-encoder/
https://www.sparkfun.com/products/9453
http://heliosoph.mit-links.info/make-your-own-quadrature-rotary-encoder/
https://github.com/linorobot/linorobot
Written with StackEdit.