ROS2
From ElphelWiki
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
Docker
docker pull osrf/ros2:bouncy-desktop docker run -i -t osrf/ros2:bouncy-desktop ...no network, no colcon, no ament...
ROS2 on Zynq
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