Difference between revisions of "ROS2"

From ElphelWiki
Jump to: navigation, search
(ROS2 on Zynq)
(ROS2 on PC)
Line 78: Line 78:
* '''apt install ros-bouncy-desktop''' available in 18.04, <font color='red'>n/a in 16.04</font>
* Switched to installing from a ''fat'' archive
* '''apt install ros-ardent-desktop''' available in 16.04
* ROS2 will get installed to '''/opt/ros/<name>''', <name>s are ''ardent'', ''bouncy'', ''crystal'', etc.
* Terminal setup:
* Terminal setup:
  <font size='2'>''source /opt/ros/bouncy/setup.bash''</font>
  <font size='2'>''source /path/setup.bash''</font>
Line 89: Line 87:
* Install [https://colcon.readthedocs.io/en/released/user/quick-start.html colcon]
* Install [https://colcon.readthedocs.io/en/released/user/quick-start.html colcon]
* Then build with colcon
* Then build with colcon
* New packages will not get installed to '''/opt/ros/<name>'''. They will live in their folders.
* New packages will not get installed anywhere. They live in their folders.
* To use a package:
* To use a package:
  <font size='2'>source ~/ros2_ws/some-package/install/setup.bash
  <font size='2'>source ~/ros2_ws/some-package/install/setup.bash

Revision as of 15:53, 3 January 2019


Use ROS2 in Elphel single or multi-camera systems. The cameras are 10393 system boards based on Xilinx Zynq, ARM.



  • 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.




ROS2 nodes communicate over:

  • 1 GigE LAN or (possibly) wifi (camera1-camera2..N, pc-camera1..N, pc1-pc2..M)
  • within a single device


  • 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


TODO: Include meta-ros.git in elphel393 build system.

DONE: included a forked version okdzhimiev/meta-ros

Include meta-ros to elphel393

  • Add path to bblayers.conf
  • Add to "IMAGE_INSTALL_append" of core-image-elphel393.bb:
packagegroup-ros2-world \


  • Cross-compilation for ARM
  • 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 commands (command line):
ros2 pkg list
ros2 node list
ros2 srv list
ros2 srv show std_srvs/Trigger
ros2 msg list
ros2 msg show std_msgs/String


talker-listener cpp

# terminal 1:
ros2 run demo_nodes_cpp talker

# terminal 2:
ros2 run demo_nodes_cpp listener


  • Use example recipes from meta-ros.git
  • bitbake package-name, check output and logs in the poky build tree
  • List package in core-image-elphel393.bb's IMAGE_INSTALL_append


  • Add target-scp and an example empty recipe

ROS2 on PC



  • Switched to installing from a fat archive
  • Terminal setup:
source /path/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
  • New packages will not get installed anywhere. They live in their folders.
  • To use a package:
source ~/ros2_ws/some-package/install/setup.bash
ros2 pkg list
then run anything in this terminal
  • Python scripts can live anywhere - just run them from that sourced terminal

ROS2 in Docker

docker pull osrf/ros2:bouncy-desktop
docker run -i -t osrf/ros2:bouncy-desktop 
No network, no colcon, no ament...

ROS2 General Notes


  • SROS is Secure ROS or something

Useful links

  • Ament tutorial - build system for new packages
    • works and supported in meta-ros
    • will not work for PC because repo hashes moved on?
  • Colcon tutorial - newest build system for new packages
    • works for PC, even in 16.04
    • not supported in meta-ros (as of 2018/12/07)
    • colcon docs


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.

ROS2 Services:

Reference ROS repos


Won't build. More info.