ROS2

From ElphelWiki
Revision as of 16:49, 7 December 2018 by Oleg (talk | contribs) (Other links)
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

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

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

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