Difference between revisions of "ROS2"
From ElphelWiki
(→ROS2 General Notes) |
(→Embedded workflow) |
||
Line 31: | Line 31: | ||
* Use meta-ros in yocto | * Use meta-ros in yocto | ||
* Go for ROS2 recipes. Use as examples. | * Go for ROS2 recipes. Use as examples. | ||
− | * The build system is '''ament''' - which is one | + | * The build system in Yocto is '''ament''' - which is one generation older then '''colcon''' |
* Here there's no workspace - packages do get installed somewhere | * Here there's no workspace - packages do get installed somewhere | ||
− | * Need to | + | * Need to |
+ | export AMENT_PREFIX_PATH=/usr | ||
* Python scripts can live anywhere - because ROS2 populates /usr/lib/... | * Python scripts can live anywhere - because ROS2 populates /usr/lib/... | ||
* Service formats are too few - for a simple "Request string - Response string" server need to add new srv. | * Service formats are too few - for a simple "Request string - Response string" server need to add new srv. |
Revision as of 17:50, 6 December 2018
Contents
GitHub
https://github.com/bmwcarit/meta-ros.git
https://github.com/erlerobot/meta-ros2 ?
ROS2 General Notes
Useful links
PC workflow
- Install ROS2 - will get installed to /opt/ros/<name>
- 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
Embedded workflow
- Use meta-ros in yocto
- Go for ROS2 recipes. Use as examples.
- The build system in Yocto is ament - which is one generation older then colcon
- Here there's no workspace - packages do get installed somewhere
- Need to
export AMENT_PREFIX_PATH=/usr
- Python scripts can live anywhere - because ROS2 populates /usr/lib/...
- Service formats are too few - for a simple "Request string - Response string" server need to add new srv.
Docker
docker pull osrf/ros2:bouncy-desktop
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. ...
Build
- Add path to bblayers.conf
- Add to "IMAGE_INSTALL_append" of core-image-elphel393.bb:
packagegroup-ros2-world \
Notes:
- -
Work
Available packages
- SSH session:
root@elphel393:~# export AMENT_PREFIX_PATH=/usr root@elphel393:~# ros2 pkg list builtin_interfaces demo_nodes_cpp example_interfaces geometry_msgs rcl rcl_interfaces rclcpp rclpy rcutils rmw rmw_fastrtps_cpp rosidl_cmake rosidl_generator_c rosidl_generator_cpp rosidl_parser rosidl_typesupport_interface rosidl_typesupport_introspection_c rosidl_typesupport_introspection_cpp sensor_msgs
Test Talker and Listener
- SSH session 1:
root@elphel393:~# export AMENT_PREFIX_PATH=/usr root@elphel393:~# ros2 run demo_nodes_cpp talker
- SSH session 2:
root@elphel393:~# export AMENT_PREFIX_PATH=/usr root@elphel393:~# ros2 run demo_nodes_cpp listener
Notes:
- It populates /usr/lib/python3.5/site-packages/ so python scripts can be pretty much standalone
- If AMENT_PREFIX_PATH is not set (only for command line apps) then:
Traceback (most recent call last): File "/usr/bin/ros2", line 11, in <module> load_entry_point('ros2cli==0.4.0', 'console_scripts', 'ros2')() File "/usr/lib/python3.5/site-packages/ros2cli/cli.py", line 64, in main rc = extension.main(parser=parser, args=args) File "/usr/lib/python3.5/site-packages/ros2run/command/run.py", line 59, in main executable_name=args.executable_name) File "/usr/lib/python3.5/site-packages/ros2run/api/__init__.py", line 30, in get_executable_path paths = get_executable_paths(package_name=package_name) File "/usr/lib/python3.5/site-packages/ros2pkg/api/__init__.py", line 41, in get_executable_paths prefix_path = get_prefix_path(package_name) File "/usr/lib/python3.5/site-packages/ros2pkg/api/__init__.py", line 34, in get_prefix_path prefix_path = get_package_prefix(package_name) File "/usr/lib/python3.5/site-packages/ament_index_python/packages.py", line 49, in get_package_prefix content, package_prefix = get_resource('packages', package_name) File "/usr/lib/python3.5/site-packages/ament_index_python/resources.py", line 37, in get_resource for path in get_search_paths(): File "/usr/lib/python3.5/site-packages/ament_index_python/search_paths.py", line 30, in get_search_paths "Environment variable '{}' is not set or empty".format(AMENT_PREFIX_PATH_ENV_VAR)) OSError: Environment variable 'AMENT_PREFIX_PATH' is not set or empty
ROS2 on PC
Notes:
- apt install ros-bouncy-desktop available in 18.04, n/a in 16.04
- apt install ros-ardent-desktop available in 16.04
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