ROS2

From ElphelWiki
Revision as of 15:43, 7 December 2018 by Oleg (talk | contribs) (Workflow)
Jump to: navigation, search

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

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
  • Test talker-listener cpp demo:
# 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

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

ROS2 General Notes

Notes

  • SROS is Secure ROS or something

Useful links

Docker

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

ROS2 on Zynq

Cross-compiled and installed in Yocto

Other links

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

Work

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:
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