Difference between revisions of "ROS2"
From ElphelWiki
(→Goals) |
|||
(24 intermediate revisions by the same user not shown) | |||
Line 33: | Line 33: | ||
* For Embedded Linux (but not Ubuntu Distro) use [https://github.com/bmwcarit/meta-ros.git meta-ros.git]. What about <font color='red'>[https://github.com/erlerobot/meta-ros2 meta-ros2]</font>? | * For Embedded Linux (but not Ubuntu Distro) use [https://github.com/bmwcarit/meta-ros.git meta-ros.git]. What about <font color='red'>[https://github.com/erlerobot/meta-ros2 meta-ros2]</font>? | ||
<font color='green'>'''TODO:''' Include [https://github.com/bmwcarit/meta-ros.git meta-ros.git] in [https://git.elphel.com/Elphel/elphel393 elphel393] build system.</font> | <font color='green'>'''TODO:''' Include [https://github.com/bmwcarit/meta-ros.git meta-ros.git] in [https://git.elphel.com/Elphel/elphel393 elphel393] build system.</font> | ||
+ | ====Include meta-ros to elphel393==== | ||
+ | * Add path to bblayers.conf | ||
+ | * Add to "IMAGE_INSTALL_append" of core-image-elphel393.bb: | ||
+ | <font size='2'>packagegroup-ros2-world \</font> | ||
===Workflow=== | ===Workflow=== | ||
+ | '''Notes:''' | ||
+ | * ROS2 for python populates '''/usr/lib/python3.5/site-packages/''' so python scripts can live anywhere. | ||
+ | * For command line apps, like ''ros2 ...'', if AMENT_PREFIX_PATH is not set then: | ||
+ | <font size='1' color='red'>'''OSError: Environment variable 'AMENT_PREFIX_PATH' is not set or empty'''</font> | ||
+ | * Useful examples (command line): | ||
+ | <font size='2'>export AMENT_PREFIX_PATH=/usr</font> | ||
+ | |||
+ | <font size='2'>ros2 pkg list | ||
+ | ros2 node list | ||
+ | ros2 srv list | ||
+ | ros2 srv show std_srvs/Trigger | ||
+ | ros2 msg list | ||
+ | ros2 msg show std_msgs/String</font> | ||
+ | ===Demos=== | ||
+ | ====talker-listener cpp==== | ||
+ | <font size='2'>''# terminal 1:'' | ||
+ | export AMENT_PREFIX_PATH=/usr | ||
+ | ros2 run demo_nodes_cpp talker | ||
+ | |||
+ | ''# terminal 2:'' | ||
+ | export AMENT_PREFIX_PATH=/usr | ||
+ | ros2 run demo_nodes_cpp listener</font> | ||
==<font color='blue'>ROS2 on PC</font>== | ==<font color='blue'>ROS2 on PC</font>== | ||
Line 47: | Line 73: | ||
* ROS2 will get installed to '''/opt/ros/<name>''', <name> = ardent, bouncy. | * ROS2 will get installed to '''/opt/ros/<name>''', <name> = ardent, bouncy. | ||
* Terminal setup: | * Terminal setup: | ||
− | source /opt/ros/bouncy/setup.bash | + | <font size='2'>''source /opt/ros/bouncy/setup.bash'' |
or | or | ||
− | source /opt/ros/bouncy/local_setup.bash | + | ''source /opt/ros/bouncy/local_setup.bash''</font> |
* Create a workspace | * Create a workspace | ||
Line 74: | Line 100: | ||
* [https://discourse.ros.org/t/suggestions-for-std-srvs/1079/16 STD-SRVS '''discussion'''] & [https://github.com/ros2/examples/issues/4 ROS2 examples(?)] | * [https://discourse.ros.org/t/suggestions-for-std-srvs/1079/16 STD-SRVS '''discussion'''] & [https://github.com/ros2/examples/issues/4 ROS2 examples(?)] | ||
* [https://discourse.ros.org/search?q=meta-ros%20order%3Alatest About meta-ros] | * [https://discourse.ros.org/search?q=meta-ros%20order%3Alatest About meta-ros] | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
* [http://design.ros2.org/articles/ros_on_dds.html ROS on DDS] | * [http://design.ros2.org/articles/ros_on_dds.html ROS on DDS] | ||
<font size='2'>... | <font size='2'>... | ||
Line 94: | Line 110: | ||
* [https://wiki.ros.org/Services Request-Response is done with '''service''']. Format [https://wiki.ros.org/srv srv] | * [https://wiki.ros.org/Services Request-Response is done with '''service''']. Format [https://wiki.ros.org/srv srv] | ||
− | === | + | ===Docker=== |
− | + | docker pull osrf/ros2:bouncy-desktop | |
− | + | docker run -i -t osrf/ros2:bouncy-desktop | |
− | + | ...no network, no colcon, no ament... | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==<font color='blue'>ROS1</font>== | ==<font color='blue'>ROS1</font>== | ||
− | |||
===Build=== | ===Build=== | ||
<font color='red'>'''Won't build'''</font> | <font color='red'>'''Won't build'''</font> |
Revision as of 15:50, 7 December 2018
Contents
About
Use ROS2 in Elphel single or multi-camera systems. The cameras are 10393 system boards based on Xilinx Zynq, ARM.
Goals
Notes:
- Controlling and initializing of multi-camera systems is already implemented using PHP API (autocampars.php), Python and lighttpd.
- Using ROS2 is intended to simplify/standardize the above.
- Using ROS2 is intended to make cameras compatible with other hardware supported by ROS1/2.
Having ROS2 cross-compiled and installed on each camera:
- Initialize cameras in a pre-defined multi-camera system - sync and sequence critical init
- Control multiple cameras from any camera of the system - parameters, recording
- Control multiple cameras from a PC (with ROS2 for PC installed).
- Control multiple cameras from a network device (w/o ROS2 installed, but with a browser) - by accessing a web server running on a camera interfaced with ROS2 of the camera. Can use nodejs or just lighttpd+php.
Status
Development
Interfaces
ROS2 nodes communicate over:
- 1 GigE LAN or (possibly) wifi (camera1-camera2..N, pc-camera1..N, pc1-pc2..M)
- within a single device
Notes:
- image sensors, IMS (or GPS & IMU), any other sensors are attached to cameras via a custom interface or USB, with appropriate driver support.
- normally cameras in the system are synced with a custom trigger cable - this is setup over network
- any device attached to PC?
ROS2 on Zynq
Installation
- For Embedded Linux (but not Ubuntu Distro) use meta-ros.git. What about meta-ros2?
TODO: Include meta-ros.git in elphel393 build system.
Include meta-ros to elphel393
- Add path to bblayers.conf
- Add to "IMAGE_INSTALL_append" of core-image-elphel393.bb:
packagegroup-ros2-world \
Workflow
Notes:
- ROS2 for python populates /usr/lib/python3.5/site-packages/ so python scripts can live anywhere.
- For command line apps, like ros2 ..., if AMENT_PREFIX_PATH is not set then:
OSError: Environment variable 'AMENT_PREFIX_PATH' is not set or empty
- Useful examples (command line):
export AMENT_PREFIX_PATH=/usr
ros2 pkg list ros2 node list ros2 srv list ros2 srv show std_srvs/Trigger ros2 msg list ros2 msg show std_msgs/String
Demos
talker-listener cpp
# terminal 1: export AMENT_PREFIX_PATH=/usr ros2 run demo_nodes_cpp talker # terminal 2: export AMENT_PREFIX_PATH=/usr ros2 run demo_nodes_cpp listener
ROS2 on PC
Installation
- Google and follow the general instructions.
Notes:
- apt install ros-bouncy-desktop available in 18.04, n/a in 16.04
- apt install ros-ardent-desktop available in 16.04
Workflow
- ROS2 will get installed to /opt/ros/<name>, <name> = ardent, bouncy.
- Terminal setup:
source /opt/ros/bouncy/setup.bash or source /opt/ros/bouncy/local_setup.bash
- Create a workspace
- Create some packages inside or clone - they have a vcs tool to clone all repos from a text file.
- Install colcon
- Then build with colcon
- Packages will not get installed to /opt/ros/bouncy/... Instead they will stay in their folders.
- To use a package:
source /opt/ros/bouncy/setup.bash source ~/ros2_ws/some-package/install/local_setup.bash ros2 pkg list then run anything in this terminal
- Python scripts can live anywhere - just run them from that sourced terminal
- Good book about UDP?
ROS2 General Notes
Notes
- SROS is Secure ROS or something
Useful links
- Tutorials ErleRobotics
- Intel RealSense
- Ament tutorial - will not work for PC because it's outdated, will work in Yocto
- Colcon tutorial - this one worked for PC
- STD-SRVS discussion & ROS2 examples(?)
- About meta-ros
- ROS on DDS
... if you are concerned about latency, like for soft real-time, you can basically tune DDS to be just a UDP blaster. In another scenario you might need something that behaves like TCP, but needs to be more tolerant to long dropouts, and with DDS all of these things can be controlled by changing the QoS parameters. ...
Docker
docker pull osrf/ros2:bouncy-desktop docker run -i -t osrf/ros2:bouncy-desktop ...no network, no colcon, no ament...
ROS1
Build
Won't build
Build Configuration: BB_VERSION = "1.37.0" BUILD_SYS = "x86_64-linux" NATIVELSBSTRING = "universal" TARGET_SYS = "arm-poky-linux-gnueabi" MACHINE = "elphel393" DISTRO = "poky" DISTRO_VERSION = "2.4+snapshot-20181204" TUNE_FEATURES = "arm armv7a vfp neon cortexa9" TARGET_FPU = "softfp" meta meta-poky meta-yocto-bsp = "HEAD:72867393fe2004ab9f0ee23eb09a975c82938b9e" meta-ezynq = "rocko:046de13c06cc248b725cb7b9928f35d4a369b50f" meta-elphel393 = "rocko:0cea9b9b8776f0fe725316f1be1501396c95feb4" meta-ros = "HEAD:72068b17e4192b51e09c8dc633805a35edac8701" meta-xilinx-bsp = "HEAD:a18947c20dba2c0c38db8bde1ad4684995df4bbd" meta-oe meta-python meta-networking meta-webserver = "HEAD:34aa4c3202b427f59f843dc43a4e1afda4f81d13"
- Error 1:
- ROS_USE_PYTHON3 = "yes"
- IMAGE_INSTALL += "roslaunch"
NOTE: Resolving any missing task queue dependencies ERROR: Nothing RPROVIDES 'python3-pycrypto' (but /home/oleg/GIT/elphel393_rocko_clean_install/meta/meta-ros/recipes-devtools/python/python3-paramiko_1.16.0.bb RDEPENDS on or otherwise requires it) NOTE: Runtime target 'python3-pycrypto' is unbuildable, removing... Missing or unbuildable dependency chain was: ['python3-pycrypto'] NOTE: Runtime target 'python3-paramiko' is unbuildable, removing... Missing or unbuildable dependency chain was: ['python3-paramiko', 'python3-pycrypto'] NOTE: Runtime target 'roslaunch' is unbuildable, removing... Missing or unbuildable dependency chain was: ['roslaunch', 'python3-paramiko', 'python3-pycrypto'] ERROR: Required build target 'core-image-elphel393' has no buildable providers. Missing or unbuildable dependency chain was: ['core-image-elphel393', 'roslaunch', 'python3-paramiko', 'python3-pycrypto']
- Successful build:
- IMAGE_INSTALL += "roslaunch"
NOTE: Resolving any missing task queue dependencies ERROR: Nothing RPROVIDES 'python3-pycrypto' (but /home/oleg/GIT/elphel393_rocko_clean_install/meta/meta-ros/recipes-devtools/python/python3-paramiko_1.16.0.bb RDEPENDS on or otherwise requires it) NOTE: Runtime target 'python3-pycrypto' is unbuildable, removing... Missing or unbuildable dependency chain was: ['python3-pycrypto'] NOTE: Runtime target 'python3-paramiko' is unbuildable, removing... Missing or unbuildable dependency chain was: ['python3-paramiko', 'python3-pycrypto'] NOTE: Runtime target 'roslaunch' is unbuildable, removing... Missing or unbuildable dependency chain was: ['roslaunch', 'python3-paramiko', 'python3-pycrypto'] ERROR: Required build target 'core-image-elphel393' has no buildable providers. Missing or unbuildable dependency chain was: ['core-image-elphel393', 'roslaunch', 'python3-paramiko', 'python3-pycrypto']
- Error 2:
- Seems like rostopic causes:
ERROR: python-imaging-1.1.7-r5 do_package_qa: QA Issue: python-imaging: The compile log indicates that host include and/or library paths were used. Please check the log '/home/oleg/GIT/elphel393_rocko_clean_install/poky/build/tmp/work/cortexa9-neon-poky-linux-gnueabi/python-imaging/1.1.7-r5/temp/log.do_compile' for more information. [compile- host-path] ERROR: python-imaging-1.1.7-r5 do_package_qa: QA run found fatal errors. Please consider fixing them. ERROR: python-imaging-1.1.7-r5 do_package_qa: Function failed: do_package_qa ERROR: Logfile of failure stored in: /home/oleg/GIT/elphel393_rocko_clean_install/poky/build/tmp/work/cortexa9-neon-poky-linux-gnueabi/python-imaging/1.1.7-r5/temp/log.do_package_qa.19425 ERROR: Task (/home/oleg/GIT/elphel393_rocko_clean_install/meta/meta-openembedded/meta-python/recipes-devtools/python/python-imaging_1.1.7.bb:do_package_qa) failed with exit code '1' potential links: https://github.com/intel-aero/meta-intel-aero/issues/81 https://github.com/bmwcarit/meta-ros/issues/395
removed python3-imaging from rosbag - everything builds but then not really working.
with ROS_USE_PYTHON3 = "yes" stopped at finding an appropriate python-pycrypto lib
Work
- Won't work
- There's no rosrun (does not exist?)
- SSH session 1:
- Add to /etc/hosts:
- SSH session 1:
127.0.0.1 elphel393.localdomain elphel393
- Export vars:
export ROS_ROOT=/opt/ros export ROS_DISTRO=indigo export ROS_PACKAGE_PATH=/opt/ros/indigo/share export PATH=$PATH:/opt/ros/indigo/bin export LD_LIBRARY_PATH=/opt/ros/indigo/lib export PYTHONPATH=/opt/ros/indigo/lib/python2.7/site-packages export ROS_MASTER_URI=http://localhost:11311 export CMAKE_PREFIX_PATH=/opt/ros/indigo touch /opt/ros/indigo/.catkin
- Roscore
roscore
- SSH session 2:
root@elphel393:~# rosnode list /rosout root@elphel393:~# rospack list cpp_common /opt/ros/indigo/share/cpp_common genmsg /opt/ros/indigo/share/genmsg genpy /opt/ros/indigo/share/genpy rosbag /opt/ros/indigo/share/rosbag rosbag_storage /opt/ros/indigo/share/rosbag_storage rosclean /opt/ros/indigo/share/rosclean rosconsole /opt/ros/indigo/share/rosconsole roscpp /opt/ros/indigo/share/roscpp roscpp_serialization /opt/ros/indigo/share/roscpp_serialization roscpp_tutorials /opt/ros/indigo/share/roscpp_tutorials rosgraph /opt/ros/indigo/share/rosgraph rosgraph_msgs /opt/ros/indigo/share/rosgraph_msgs roslaunch /opt/ros/indigo/share/roslaunch roslib /opt/ros/indigo/share/roslib roslz4 /opt/ros/indigo/share/roslz4 rosmaster /opt/ros/indigo/share/rosmaster rosnode /opt/ros/indigo/share/rosnode rosout /opt/ros/indigo/share/rosout rospack /opt/ros/indigo/share/rospack rosparam /opt/ros/indigo/share/rosparam rospy /opt/ros/indigo/share/rospy rospy_tutorials /opt/ros/indigo/share/rospy_tutorials rostime /opt/ros/indigo/share/rostime rostopic /opt/ros/indigo/share/rostopic std_msgs /opt/ros/indigo/share/std_msgs topic_tools /opt/ros/indigo/share/topic_tools xmlrpcpp /opt/ros/indigo/share/xmlrpcpp