Attention

You are viewing an older version of the documentation. The latest version is v3.3.

Robot Operating System Software

ROS 2 Overview

The Robot Operating System (ROS) is a flexible framework for writing robot software. It is a collection of tools, libraries, and conventions that aim to simplify the task of creating complex and robust robot behavior across a wide variety of robotic platforms.

../_images/ros_equation.png

ROS2 is the second generation (and the newest version) of ROS system, in which new technologies and implementations were adopted in order to better fit IoT and Industry scenarios.

For more information, access the official ROS documentation at: http://wiki.ros.org

ECI integrates many of the subsystems ROS2 provides, including:

  • ROS2 Core and DDS communication base

  • Moveit2 Motion Planning framework

  • Motion Control Gateway

  • Navigation Stack

  • Cartographer as SLAM (Simultaneous Localization And Mapping) implementation

../_images/ros2_arch.png

ROS 2 is built on top of DDS/RTPS as its middleware, which provides discovery, serialization and transportation. DDS is an end-to-end middleware that provides features which are relevant to ROS systems, such as distributed discovery (not centralized like in ROS 1) and control over different “Quality of Service” options for the transportation.

DDS is an industry standard which is implemented by a range of vendors, such as RTI’s implementation Connext, ADLINK’s implementation OpenSplice or Eclipse’s Cyclone DDS. RTPS (a.k.a. DDSI-RTPS) is the wire protocol used by DDS to communicate over the network. There are implementations of that which do not fulfill the full DDS API, but provide sufficient functionality for ROS 2, such as eProsima’s implementation Fast RTPS.

Robotics Applications

ROS 2 Navigation Stack

../_images/nav_comic.png

The navigation2 stack takes in information from odometry and sensor streams and outputs velocity commands to send to a mobile base. As a pre-requisite for navigation stack use, the robot must be running ROS, have a TF transform tree in place, and publish sensor data using the correct ROS Message types. Also, the Navigation Stack needs to be configured for the shape and dynamics of a robot to perform at a high level.

Simultaneous Localization and Mapping (SLAM)

SLAM (short for Simultaneous Localization And Mapping) is a method used for autonomous vehicles which enables map building and localization of a vehicle in that map at the same time. SLAM algorithms allow the vehicle to map out unknown environments. Engineers use the map information to carry out tasks such as path planning and obstacle avoidance, which features are covered in ROS/2 Navigation Stack.

../_images/cartographer.png

Cartographer is an implementation of SLAM, which has already been integrated into ROS 2 system.

Robot Motion Planning Framework - MoveIt2

MoveIt, an easy-to-use open source robotics manipulation platform for developing commercial applications, prototyping designs, and benchmarking algorithms, is the most widely used software for manipulation. It is released under the terms of the BSD license, and thus free for industrial, commercial, and research use.

../_images/moveit_features.png

By incorporating the latest advances in motion planning, manipulation, 3D perception, kinematics, control and navigation, MoveIt is state of the art software for mobile manipulation.

../_images/moveit_rviz.png

Moveit also supports visual features such as out-of-the-box visual demonstration in RVIZ, simulation combining with gazebo and ROS Control, native step-by-step configuration wizard, etc.

Motion Control Gateway

../_images/mc_gateway_arch.png

Motion Control Gateway is the communication bridge between ROS2 domain and Intel Motion Control implementation. It subscribes velocity commands (commonly from Navigation2 stack) and joint trajectories (commonly from Moveit2 stack), communicates RT Domain through Shared Ring Buffer, and gathers robot’s status (AMR’s odometry or industrial arm’s joint state) and publishes them to ROS domain.

Please see section PLCopen Motion Control for more information.

ROS2 Performance Benchmarking Tool

ROS2 Performance Benchmarking Tool Overview

The performance_test tool tests latency and other performance metrics of various middleware implementations that support a pub/sub pattern. It is used to simulate non-functional performance of your application.

../_images/perf_test_tool_arch.png

The performance_test tool allows a user to quickly set up a pub/sub configuration, e.g. number of publisher/subscribers, message size, QOS settings, middleware. The following metrics are automatically recorded when the application is running:

  • latency: corresponds to the time a message takes to travel from a publisher to subscriber. The latency is measured by timestamping the sample when it’s published and subtracting the timestamp (from the sample) from the measured time when the sample arrives at the subscriber.

  • CPU usage: percentage of the total system wide CPU usage

  • resident memory: heap allocations, shared memory segments, stack (used for system’s internal work).

  • sample statistics: number of samples received, sent, and lost per experiment run.

Intel Optimization and BKMs

  • New benchmarking KPIs for Industrial Use

    1. Printed the summary benchmarking results to console output after testing done, which lets the end users quickly and easily know the performance result. It benefits much when the target image doesn’t enable graphics features, thus there is no chance to open the benchmarking files (say, .PDF files).

    2. Printed the worst cases which are unfit for the performance requirements (mainly for DDS communication latency). Comparing with the mean value of max-latency, industrial scenarios care much more about the worst cases of max-latency.

  • Optimization for Real-Time

    1. Created DDS profile to enable synchronous DDS communication mode and setup memory allocation policy.

    2. Enable CPU core affinity for ROS or DDS nodes.

    3. set higher priority for ROS or DDS nodes.

  • Optimization Results

In order to demonstrate the optimization status, a test scenario was set as below:

  • Message size is 1KB

  • The message is published with the frequency of 2000Hz, sending a message out every 0.5ms.

  • CPU runs under test load of 50%.

We tested the ROS2 performance on 3 different HW platforms, the below picture shows the performance comparison with/without Intel optimization.

../_images/perf_opti.png

Figure “Failure Counts” records the number of the message pub-sub cycles whose latency is >0.5ms. (In this case, latency>0.5ms means that 1 or more messages is missed for data receiving and further handling).

Launching ROS2 Performance Tool:

Following below steps to see the benchmarking tool’s arguments and options.

$ source ros_setup.bash
$ cd /usr/lib/performance_test/
$ ./perf_test --help
../_images/perf_test_tool_help.png

Using below command example to test ROS2 performance based on the default DDS (eProsima FastDDS) pub/sub execution.

$ source ros_setup.bash
$ cd /usr/lib/performance_test/
$ ./perf_test -c ROS2 -l log -r 2000 --msg Array1k --topic exp_topic --max_runtime 30
../_images/perf_test_tool_run1.png
../_images/perf_test_tool_run2.png

Sanity test for ROS2 Integration

This guide is used for integration sanity test for ECI ROS2 related components.

1. System Test Requirements:

../_images/test_env.png

1.1 Ubuntu Host PC:

Component

Description

HW platform

Any platform with Ubuntu 20.04 installed.

ROS2 Core

ROS2 Core packages, can be installed from ros2 sources.

RViz2

ROS2 visualization tool, can be installed from ros2 sources.

Gazebo

ROS2 Simulation tool, can be installed from ros2 sources.

teleop

ROS2 package controlling robot remotely via keyboard.

1.2 ECI Target System:

Component

Description

OS & MW

Filtered by ECI project’s requirements, currently tested under “base-poky”, “xenomai-poky” configurations.

ROS2 Core & DDS

ROS2 Core packages with DDS implementation, automatically built/installed by ECI code when DISTRO_FEATURE ros is enabled.

ROS2 Applications

ROS2 key applications providing mapping & localization(SLAM) planning & control (Navigation, Moveit), automatically built and installed by ECI code when DISTRO_FEATURE ros is enabled.

Motion Control Gateway

Communication gateway and data bridge between ROS2 system and Real-time motion control system, which is automatically built and installed by ECI code when DISTRO_FEATURE ros is enabled.

2. Environment setup:

2.1 ECI Target System

The following section is applicable to:

../_images/linux2.png
  1. Follow section Building ECI Targets to build an image with ROS features enabled. Creating an ECI image that contains the ROS features can be accomplished by selecting the Robot Operating System (ROS2) feature option during image setup. See section Building ECI Targets for more information.

    ../_images/option_ros.png
  2. Follow section Create Bootable USB to create a bootable USB flash drive with acrn image.

  3. Follow section Boot & Install Image to install ECI image to target system.

The following section is applicable to:

../_images/target1.png
  1. Login to the target system, navigate to directory /usr/share/ and verify that ros_core, navigation2, moveit, cartographer and turtlebot3_cartographer exist.

    $ cd /usr/share
    $ ls
    
  2. Perform the following command to verify ROS environment work status:

    $ source ros_setup.bash
    

    Note

    The ros_setup.bash file typically exists at /usr/bin

2.2 Ubuntu Host PC:

  1. Install Ubuntu 20.04 on host PC

  2. Install ROS2 foxy on Ubuntu-Debians Or you may directly run the below scripts:

    # Authorize gpg key with apt
    $ sudo apt-get update && sudo apt-get install -y git curl gnupg2 lsb-release &&\
      curl http://repo.ros2.org/repos.key | sudo apt-key add -
    # Add the repository to sources list
    $ sudo sh -c 'echo "deb [arch=amd64,arm64] http://packages.ros.org/ros2/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/ros2-latest.list'
    # Install development tools and ROS tools
    $ sudo apt-get update && sudo apt install -y \
      build-essential \
      cmake \
      git \
      libbullet-dev \
      python3-colcon-common-extensions \
      python3-flake8 \
      python3-pip \
      python3-pytest-cov \
      python3-rosdep \
      python3-setuptools \
      python3-vcstool \
      wget
    # Install ROS 2 packages
    $ sudo apt-get update && sudo apt-get install -y ros-foxy-desktop
    
  3. Install Gazebo11

    # if you set up a proxy
    $ curl -sSL http://get.gazebosim.org|sed 's/apt-key adv --keyserver keyserver.ubuntu.com --recv-keys D2486D2DD83DB69272AFE98867170598AF249743/apt-key adv --keyserver keyserver.ubuntu.com --keyserver-options http-proxy=$http_proxy --recv-keys D2486D2DD83DB69272AFE98867170598AF249743/g'|sh
    # else
    $ curl -sSL http://get.gazebosim.org | sh
    
    $ sudo apt-get update && sudo apt-get install -y ros-foxy-gazebo-dev \
      ros-foxy-gazebo-msgs \
      ros-foxy-gazebo-msgs-dbgsym \
      ros-foxy-gazebo-plugins \
      ros-foxy-gazebo-plugins-dbgsym \
      ros-foxy-gazebo-ros \
      ros-foxy-gazebo-ros-dbgsym \
      ros-foxy-gazebo-ros-pkgs
    
  4. Install ROS2 key packages:

    # Install dependencies
    $ sudo apt-get update && sudo apt-get install -y \
      google-mock \
      libceres-dev \
      liblua5.3-dev \
      libboost-dev \
      libboost-iostreams-dev \
      libprotobuf-dev \
      protobuf-compiler \
      libcairo2-dev \
      libpcl-dev \
      python3-sphinx
    #Install Cartographer
    $ sudo apt-get update && sudo apt-get install -y \
      ros-foxy-cartographer \
      ros-foxy-cartographer-ros \
      ros-foxy-cartographer-ros-dbgsym \
      ros-foxy-cartographer-ros-msgs
    # Install Navigation2
    $ sudo apt-get update && sudo apt-get install -y \
      ros-foxy-navigation2 \
      ros-foxy-nav2-bringup
    # Install TurtleBot3
    $ mkdir -p ~/turtlebot3_ws/src
    $ cd turtlebot3_ws/
    $ wget https://raw.githubusercontent.com/ROBOTIS-GIT/turtlebot3/ros2/turtlebot3.repos
    $ vim turtlebot3.repos ##replace all ros2 branch to foxy-devel
    $ vcs import src < turtlebot3.repos
    $ source /opt/ros/foxy/setup.bash
    $ colcon build --symlink-install
    
  5. Save bash command for setup

    $ echo 'source /opt/ros/foxy/setup.bash' >> ~/.bashrc
    $ echo 'source ~/turtlebot3_ws/install/setup.bash' >> ~/.bashrc
    $ echo 'export ROS_DOMAIN_ID=31' >> ~/.bashrc
    $ source ~/.bashrc
    

2.3 Network

Connect the Test PC and Host PC to the same network and ensure they can ping each other. Either LAN or WLAN may be used. Note: WLAN may require additional network configuration outside the scope of this documentation.

3. Sanity Check Cases

The following section is applicable to:

../_images/target1.png

Important

The expected results shown below are only samples for the expected result. It is possible for messages to be printed in variety of printing order, process/thread info, more or less info/warnings. The sanity check case can be considered a SUCCESS if no process exits.

3.1 Sanity_Check_1: ROS Running Environment Setup

  1. Perform the following commands:

    $ cd /usr/share
    $ source ros_setup.bash
    $ export ROS_DOMAIN_ID=30
    

    Note

    If “30” is already used by other ROS systems, change ROS_DOMAIN_ID to another number (<255).

    Expected Result: The script is correctly executed without any “Error” or “Warning” outputs printed on the terminal.

3.2 Sanity_Check_2: ROS2 Command Execution Check

  1. Make sure 3.1 Sanity_Check_1: ROS Running Environment Setup execute correctly.

  2. In the same terminal as Step 1, run script

    $ ros2 --help
    

    Expected Result: The command is correctly executed without any “Error” or “Warning” outputs printed. The command also prints information like below:

    Note

    Some differences in the output may be present due to differences in integrated ROS version.

    Command Outputs:

    sh-5.0# ros2 --help
    usage: ros2 [-h] Call `ros2 <command> -h` for more detailed usage. ...
    ros2 is an extensible command-line tool for ROS 2.
    optional arguments:
      -h, --help            show this help message and exit
    
    Commands:
      action     Various action related sub-commands
      component  Various component related sub-commands
      daemon     Various daemon related sub-commands
      doctor     Check ROS setup and other potential issues
      interface  Show information about ROS interfaces
      launch     Run a launch file
      lifecycle  Various lifecycle related sub-commands
      multicast  Various multicast related sub-commands
      node       Various node related sub-commands
      param      Various param related sub-commands
      pkg        Various package related sub-commands
      run        Run a package specific executable
      security   Various security related sub-commands
      service    Various service related sub-commands
    

3.3 Sanity_Check_3: ROS2 Communication Check

  1. Make sure 3.1 Sanity_Check_1: ROS Running Environment Setup execute correctly.

  2. In the same terminal as Step 1, run below command if Step 1 execute correctly.

    $ ros2 topic pub /chatter std_msgs/String "data: Hello Yocto"
    

    Expected Result: The command is correctly executed without any “Error” or “Warning” outputs printed. The command also prints information like below:

    sh-5.0# source ros_setup.bash
    sh-5.0# ros2 topic pub /chatter std_msgs/String "data: Hello Yocto"
    publisher: beginning loop
    publishing #1: std_msgs.msg.String(data='Hello Yocto')
    publishing #2: std_msgs.msg.String(data='Hello Yocto')
    publishing #3: std_msgs.msg.String(data='Hello Yocto')
    publishing #4: std_msgs.msg.String(data='Hello Yocto')
    publishing #5: std_msgs.msg.String(data='Hello Yocto')
    publishing #6: std_msgs.msg.String(data='Hello Yocto')
    
  3. Open a new terminal, execute 3.1 Sanity_Check_1: ROS Running Environment Setup.

  4. In the second terminal (the same as Step3), run below command if the previous step execute correctly:

    $ ros2 topic echo /chatter
    

    Tip

    If you receive a message WARNING: topic [/chatter] does not appear to be published yet, ensure that the environment variable ROS_DOMAIN_ID has been properly set to match in both terminal environments.

    Expected Result: The command is correctly executed without any “Error” or “Warning” outputs printed. Wait a while, the command will print information like below:

    sh-5.0# ros2 topic echo /chatter
    data: Hello Yocto
    ---
    data: Hello Yocto
    ---
    data: Hello Yocto
    ---
    

3.4 Sanity_Check_4: Navigation2 Launch Check

  1. Make sure 3.1 Sanity_Check_1: ROS Running Environment Setup execute correctly.

  2. In the same terminal as Step 1, run below command if Step 1 execute correctly.

    $ ros2 launch nav2_bringup bringup_launch.py use_sim_time:=True autostart:=True map:=/usr/share/nav2_bringup/map/map.yaml
    

    Expected Result: Navigation stack correctly starts, without exiting.

    Note

    Since Navigation is currently in Idle status, it is normal there are some warnings/errors printed, such as Waiting for xxxx [service|server] or Time out ... or ...tf error: ....

    [bt_navigator-7] [INFO] [1607067383.422534950] [bt_navigator_rclcpp_node]: Waiting for "global_costmap/clear_entirely_global_costmap" service
    [bt_navigator-7] [INFO] [1607067383.422589829] [bt_navigator_rclcpp_node]: "ClearGlobalCostmap-Subtree" BtServiceNode initialized
    [bt_navigator-7] [INFO] [1607067383.427102038] [bt_navigator_rclcpp_node]: Waiting for "spin" action server
    [bt_navigator-7] [INFO] [1607067383.427317616] [bt_navigator_rclcpp_node]: "Spin" BtActionNode initialized
    [bt_navigator-7] [INFO] [1607067383.433162780] [bt_navigator_rclcpp_node]: Waiting for "wait" action server
    [bt_navigator-7] [INFO] [1607067383.433352841] [bt_navigator_rclcpp_node]: "Wait" BtActionNode initialized
    [lifecycle_manager-9] [INFO] [1607067383.433790244] [lifecycle_manager_navigation]: Configuring waypoint_follower
    [waypoint_follower-8] [INFO] [1607067383.433976703] [waypoint_follower]: Configuring
    [lifecycle_manager-9] [INFO] [1607067383.449495492] [lifecycle_manager_navigation]: Activating controller_server
    [controller_server-4] [INFO] [1607067383.449637024] [controller_server]: Activating
    [controller_server-4] [INFO] [1607067383.449659646] [local_costmap.local_costmap]: Activating
    [controller_server-4] [INFO] [1607067383.449669836] [local_costmap.local_costmap]: Checking transform
    [controller_server-4] [INFO] [1607067383.449680783] [local_costmap.local_costmap]: Timed out waiting for transform from base_link to odom to become available, tf error: Invalid frame ID "odom" passed to canTransform argument target_frame - frame does not exist
    [controller_server-4] [INFO] [1607067383.949742206] [local_costmap.local_costmap]: Timed out waiting for transform from base_link to odom to become available, tf error: Invalid frame ID "odom" passed to canTransform argument target_frame - frame does not exist
    

3.5 Sanity_Check_5: SLAM Launch Check

  1. Make sure 3.1 Sanity_Check_1: ROS Running Environment Setup execute correctly.

  2. In the same terminal as Step 1, run below command if Step 1 execute correctly.

    $ ros2 launch turtlebot3_cartographer cartographer-only.launch.py use_sim_time:=True
    

    Expected Result: Cartographer correctly starts.

    Note

    Since Cartographer is currently in Idle status, it is normal that there are some warnings/errors printed. See below as an example for Expected Result:

    [INFO] [launch]: All log files can be found below /home/root/.ros/log/2020-09-25-04-56-52-691691-intel-rt-corei7-64-14812
    [INFO] [launch]: Default logging verbosity is set to INFO
    [INFO] [cartographer_node-1]: process started with pid [14821]
    [INFO] [occupancy_grid_node-2]: process started with pid [14822]
    [cartographer_node-1] [WARN] [rcl.logging_rosout]: Publisher already registered for provided node name. If this is due to multiple nodes with the same name then all logs for that logger name will go out over the existing publisher. As soon as any node with that name is destructed it will unregister the publisher, preventing any further logs for that name from being published on the rosout topic.
    [occupancy_grid_node-2] [WARN] [occupancy_grid_node]: submap_slices and last_frame_id is empty
    [occupancy_grid_node-2] [WARN] [occupancy_grid_node]: submap_slices and last_frame_id is empty
    

3.6 Sanity_Check_6: Moveit2 Fake Controller Demo Check

  1. Make sure 3.1 Sanity_Check_1: ROS Running Environment Setup execute correctly.

  2. In the same terminal as Step 1, run below command if Step 1 execute correctly.

    $ ros2 launch run_moveit_cpp run_moveit_cpp_fake_controller_no_rviz.launch.py
    

    Expected Result: Demo applications correctly start, without exiting.

    Note

    The command is correctly executed without any “Error” outputs printed. See below as an example for expected result:

    [INFO] [launch]: All log files can be found below /home/root/.ros/log/2020-11-11-07-40-37-838912-ecs-intel-5747-2706
    [INFO] [launch]: Default logging verbosity is set to INFO
    [INFO] [static_transform_publisher-1]: process started with pid [2708]
    [INFO] [robot_state_publisher-2]: process started with pid [2710]
    [INFO] [joint_state_publisher-3]: process started with pid [2712]
    [INFO] [run_moveit_cpp-4]: process started with pid [2714]
    [static_transform_publisher-1] [INFO] [1605080438.162594743] [static_transform_publisher]: Spinning until killed publishing transform from 'world' to 'panda_link0'
    ……
    [run_moveit_cpp-4] [INFO] [1605080451.178286649] [moveit_ros.trajectory_execution_manager]: Completed trajectory execution with status SUCCEEDED ...
    [run_moveit_cpp-4] [INFO] [1605080451.178391964] [moveit.ros_planning_interface.planning_component]: Deleting PlanningComponent 'panda_arm'
    

3.7 Sanity_Check_7: Moveit2 run_moveit_cpp Demo Check

  1. Make sure 3.1 Sanity_Check_1: ROS Running Environment Setup execute correctly.

  2. In the same terminal as Step 1, run below command if Step 1 execute correctly.

    $ ros2 launch run_moveit_cpp run_moveit_cpp_no_rviz.launch.py
    

    Expected Result: Demo applications correctly start, without exiting.

    Note

    The command is correctly executed without any “Error” outputs printed. See below as an example for expected result:

    [INFO] [launch]: All log files can be found below /home/root/.ros/log/2020-11-11-07-38-07-843415-ecs-intel-5747-2584
    [INFO] [launch]: Default logging verbosity is set to INFO
    [INFO] [static_transform_publisher-1]: process started with pid [2586]
    [INFO] [robot_state_publisher-2]: process started with pid [2588]
    [INFO] [run_moveit_cpp-3]: process started with pid [2590]
    [INFO] [fake_joint_driver_node-4]: process started with pid [2592]
    [static_transform_publisher-1] [INFO] [1605080288.216241769] [static_transform_publisher]: Spinning until killed publishing transform from 'world' to 'panda_link0'
    ……
    [fake_joint_driver_node-4] [INFO] [1607067912.379485543] [panda_arm_controller]: Goal reached, success!
    [run_moveit_cpp-3] [INFO] [1607067912.399846304] [moveit.simple_controller_manager.follow_joint_trajectory_controller_handle]: Controller panda_arm_controller successfully finished
    

3.8 Sanity_Check_8: Moveit2 servo_cpp_interface Demo Check

  1. Make sure 3.1 Sanity_Check_1: ROS Running Environment Setup execute correctly.

  2. In the same terminal as Step 1, run below command if Step 1 execute correctly.

    $ ros2 launch moveit_servo servo_cpp_interface_demo_no_rviz.launch.py
    

    Expected Result: Demo applications correctly start, without exiting.

    Note

    The command is correctly executed without any “Error” outputs printed (but probably there are some Warnings printed due to data missing. See below as an example for expected result:

    [INFO] [launch]: All log files can be found below /home/root/.ros/log/2020-11-11-07-41-33-348291-ecs-intel-5747-2795
    [INFO] [launch]: Default logging verbosity is set to INFO
    [INFO] [static_transform_publisher-1]: process started with pid [2797]
    [INFO] [servo_demo-2]: process started with pid [2799]
    [INFO] [fake_joint_driver_node-3]: process started with pid [2801]
    [INFO] [robot_state_publisher-4]: process started with pid [2803]
    [static_transform_publisher-1] [INFO] [1605080493.647488344] [static_transform_publisher]: Spinning until killed publishing transform from 'world' to 'panda_link0'
    ……
    [fake_joint_driver_node-3] [INFO] [1605080493.664875941] [controller_manager]: Loading controller 'fake_joint_trajectory_controller'
    [fake_joint_driver_node-3]
    [fake_joint_driver_node-3] [INFO] [1605080493.672922847] [fake_joint_trajectory_controller]: Controller state will be published at 50Hz.
    [fake_joint_driver_node-3] [INFO] [1605080493.673289687] [fake_joint_trajectory_controller]: Goals with partial set of joints are allowed
    [fake_joint_driver_node-3] [INFO] [1605080493.673313675] [fake_joint_trajectory_controller]: Action status changes will be monitored at 20Hz.
    [fake_joint_driver_node-3] [INFO] [1605080493.674837355] [fake_joint_driver]: Successfully configured all controllers
    [fake_joint_driver_node-3] [INFO] [1605080493.674872721] [fake_joint_driver]: Successfully activated all controllers
    [servo_demo-2] Parsing robot urdf xml string.
    [servo_demo-2] [INFO] [1605080497.931728204] [moveit_rdf_loader.rdf_loader]: Loaded robot model in 0.000990598 seconds
    [servo_demo-2] [INFO] [1605080497.931836689] [moveit_robot_model.robot_model]: Loading robot model 'panda'...
    [servo_demo-2] [WARN] [1605080497.937559084] [moveit_ros.robot_model_loader]: No kinematics plugins defined. Fill and load kinematics.yaml!
    

3.9 Sanity_Check_9: Moveit2 servo_server Demo Check

  1. Make sure 3.1 Sanity_Check_1: ROS Running Environment Setup execute correctly.

  2. In the same terminal as Step 1, run below command if Step 1 execute correctly.

    $ ros2 launch moveit_servo servo_server_demo_no_rviz.launch.py
    

    Expected Result: Demo applications correctly start, without exiting.

    Note

    The command is correctly executed without any “Error” outputs printed (but probably there are some Warnings printed due to data missing. See below as an example for expected result:

    [INFO] [launch]: All log files can be found below /home/root/.ros/log/2020-11-11-07-44-12-358081-ecs-intel-5747-3033
    [INFO] [launch]: Default logging verbosity is set to INFO
    [INFO] [fake_joint_driver_node-1]: process started with pid [3035]
    [INFO] [component_container-2]: process started with pid [3037]
    [fake_joint_driver_node-1] Parsing robot urdf xml string.
    [fake_joint_driver_node-1] [INFO] [1605080652.553628866] [controller_manager]: Loading controller 'fake_joint_state_controller'
    [fake_joint_driver_node-1]
    [fake_joint_driver_node-1] [INFO] [1605080652.562379778] [controller_manager]: Loading controller 'fake_joint_trajectory_controller'
    [fake_joint_driver_node-1]
    [fake_joint_driver_node-1] [INFO] [1605080652.572271665] [fake_joint_trajectory_controller]: Controller state will be published at 50Hz.
    
  3. Create a new terminal, and run Step 1, then run below command if Step 1 execute correctly.

    $ ros2 run moveit_servo fake_command_publisher
    

    Expected Result: Commands are published on the ROS message bus, which cause messages to be printed in the first terminal.

    Note

    The command is correctly executed without any “Error” outputs printed (but probably there are some Warnings printed due to data missing. See below as an example for expected result:

    [component_container-2] Parsing robot urdf xml string.
    [component_container-2] [INFO] [1616260663.394310800] [moveit_rdf_loader.rdf_loader]: Loaded robot model in 0.00251962 seconds
    [component_container-2] [INFO] [1616260663.394457254] [moveit_robot_model.robot_model]: Loading robot model 'panda'...
    [component_container-2] [WARN] [1616260663.405157115] [moveit_ros.robot_model_loader]: No kinematics plugins defined. Fill and load kinematics.yaml!
    [component_container-2] [INFO] [1616260663.443573796] [moveit_ros.current_state_monitor]: Listening to joint states on topic 'joint_states'
    [component_container-2] [INFO] [1616260663.446925032] [moveit_ros.planning_scene_monitor.planning_scene_monitor]: Listening to '/attached_collision_object' for attached collision objects
    [component_container-2] [INFO] [1616260663.448460185] [moveit_ros.planning_scene_monitor.planning_scene_monitor]: Publishing maintained planning scene on '/moveit_servo/publish_planning_scene'
    [component_container-2] [INFO] [1616260663.449274934] [moveit_ros.planning_scene_monitor.planning_scene_monitor]: Starting planning scene monitor
    [component_container-2] [INFO] [1616260663.451074441] [moveit_ros.planning_scene_monitor.planning_scene_monitor]: Listening to '/planning_scene'
    [component_container-2] [WARN] [1616260664.463412791] [moveit_ros.planning_scene_monitor.planning_scene_monitor]: The complete state of the robot is not yet known.  Missing virtual_joint
    

    Tip

    If no messages are occurring on the first terminal, ensure that the environment variable ROS_DOMAIN_ID has been properly set to match in both terminal environments.

3.10 Sanity_Check_10: Moveit2 servo_teleop Demo Check

  1. Make sure 3.1 Sanity_Check_1: ROS Running Environment Setup execute correctly.

  2. In the same terminal as Step 1, run below command if Step 1 execute correctly.

    $ ros2 launch moveit_servo servo_teleop_no_rviz.launch.py
    

    Expected Result: Demo applications correctly start, without exiting.

    Note

    The command is correctly executed without any “Error” outputs printed (but probably there are some Warnings printed due to data missing. See below as an example for expected result:

    [INFO] [launch]: All log files can be found below /home/root/.ros/log/2020-11-11-07-45-15-905824-ecs-intel-5747-3136
    [INFO] [launch]: Default logging verbosity is set to INFO
    [INFO] [fake_joint_driver_node-1]: process started with pid [3138]
    [INFO] [component_container-2]: process started with pid [3140]
    [fake_joint_driver_node-1] Parsing robot urdf xml string.
    [fake_joint_driver_node-1] [INFO] [1605080716.096652900] [controller_manager]: Loading controller 'fake_joint_state_controller'
    [fake_joint_driver_node-1]
    [fake_joint_driver_node-1] [INFO] [1605080716.102725856] [controller_manager]: Loading controller 'fake_joint_trajectory_controller'
    [fake_joint_driver_node-1]
    [fake_joint_driver_node-1] [INFO] [1605080716.112419712] [fake_joint_trajectory_controller]: Controller state will be published at 50Hz.
    [fake_joint_driver_node-1] [INFO] [1605080716.112732891] [fake_joint_trajectory_controller]: Goals with partial set of joints are allowed
    [fake_joint_driver_node-1] [INFO] [1605080716.112755661] [fake_joint_trajectory_controller]: Action status changes will be monitored at 20Hz.
    ……
    [component_container-2] [INFO] [1605080716.511855345] [moveit_servo_demo_container]: Load Library: /usr/lib/libjoy.so
    [component_container-2] [INFO] [1605080716.512646940] [moveit_servo_demo_container]: Found class: rclcpp_components::NodeFactoryTemplate<joy::Joy>
    [component_container-2] [INFO] [1605080716.512665597] [moveit_servo_demo_container]: Instantiate class: rclcpp_components::NodeFactoryTemplate<joy::Joy>
    

3.11 Sanity_Check_11: Motion Control Gateway Launch Check

  1. Make sure 3.1 Sanity_Check_1: ROS Running Environment Setup execute correctly.

  2. In the same terminal as Step 1, run below command if Step 1 execute correctly.

    $ ros2 launch agvm_plcshm test_node.launch.py
    
  3. Create a new terminal, and run Step 1, then run below command if Step 1 execute correctly.

    $ ros2 launch agvm_plcshm agvm_plcshm_node.launch.py
    

    Expected Result: Applications are correctly boot up, without process crashing.

    Note

    The command is correctly executed without any “Error” outputs printed (but probably there are some Warnings printed due to data missing. See below as an example for expected result:

    [INFO] [launch]: All log files can be found below /home/root/.ros/log/2020-11-11-07-47-09-986493-ecs-intel-5747-3280
    [INFO] [launch]: Default logging verbosity is set to INFO
    /usr/share/agvm_plcshm/launch/agvm_plcshm_node.launch.py:7: UserWarning: The parameter 'node_executable' is deprecated, use 'executable' instead
      launch_ros.actions.Node(
    /usr/share/agvm_plcshm/launch/agvm_plcshm_node.launch.py:7: UserWarning: The parameter 'node_name' is deprecated, use 'name' instead
      launch_ros.actions.Node(
    [INFO] [agvm_plcshm_node-1]: process started with pid [3282]
    [agvm_plcshm_node-1] [INFO] [1605080830.055160571] [agvm_plcshm_node]: AgvmPlcShmNode initial complete.
    [agvm_plcshm_node-1] [INFO] [1605080830.065236791] [agvm_plcshm_node]: AGV cmd: 0.000000 0.000000 0.000000
    [agvm_plcshm_node-1] [INFO] [1605080830.065283083] [agvm_plcshm_node]: AGV pose: 0.000000 0.000000 0.000000
    [agvm_plcshm_node-1] [INFO] [1605080830.065291729] [agvm_plcshm_node]: AGV vel: 0.000000 0.000000 0.000000
    [agvm_plcshm_node-1] [INFO] [1605080830.065299397] [agvm_plcshm_node]: AGV mOdom: 0.000000 0.000000 0.000000
    

3.12 Sanity_Check_12: Motion Control Gateway Launch Check

  1. Make sure 3.1 Sanity_Check_1: ROS Running Environment Setup execute correctly.

  2. In the same terminal (terminal A) as Step 1, run below command if Step 1 execute correctly.

    $ taskset -c X /opt/plcopen/plc_rt_robot_arm_rtmotion
    

    Note

    X is the number of CPU core that is isolated in the cmdline of grub.

  3. In another terminal (terminal B), run Step 1, then run below command.

    $ ros2 run run_hiwin_plc run_hiwin_plc
    
  4. In the third terminal (terminal C), run Step 1, then run below command.

    $ ros2 launch run_hiwin_plc run_hiwin_plc_no_rviz.launch.py
    

    Expected Result: Moveit2 and other ROS2 nodes correctly start, without exiting.

    Tip

    If no messages are occurring on the first terminal, ensure that the environment variable ROS_DOMAIN_ID has been properly set to match in both terminal environments.

    Note

    The commands are correctly executed without any “Error” outputs printed (but probably there are some Warnings printed due to data missing. See below as an example for expected result:

    [INFO] [launch]: All log files can be found below /home/root/.ros/log/2020-12-01-06-23-24-352240-ecs-intel-4273-3533
    [INFO] [launch]: Default logging verbosity is set to INFO
    /usr/share/hiwin_robot_moveit_config/xacros/hiwin_robot_and_gripper.urdf
    /usr/share/hiwin_robot_moveit_config/srdf/hiwin_robot.srdf
    /usr/share/hiwin_robot_moveit_config/config/kinematics.yaml
    /usr/share/run_hiwin_plc/launch/run_hiwin_plc.launch.py:25: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
      return yaml.load(file)
    /usr/share/run_hiwin_moveit/config/controllers.yaml
    /usr/share/hiwin_robot_moveit_config/config/ompl_planning.yaml
    [INFO] [robot_state_publisher-1]: process started with pid [3535]
    [INFO] [static_transform_publisher-2]: process started with pid [3537]
    [INFO] [run_hiwin_moveit-3]: process started with pid [3539]
    ……
    [run_hiwin_moveit-3] [INFO] [1606803829.707921557] [moveit_cpp_demo]: Trajectory status: 1
    [run_hiwin_moveit-3] [INFO] [1606803831.708016640] [moveit_cpp_demo]: Set goal 2
    [run_hiwin_moveit-3] [INFO] [1606803831.708051094] [moveit_cpp_demo]: Plan to goal
    [run_hiwin_moveit-3] [INFO] [1606803831.708563914] [moveit.ompl_planning.model_based_planning_context]: Planner configuration 'manipulator' will use planner 'geometric::RRTConnect'. Additional configuration parameters will be set when the planner is constructed.
     [run_hiwin_moveit-3] [INFO] [1606803831.723452924] [ompl]: /usr/src/debug/ompl/1.5.0-1-r0/git/src/ompl/geometric/planners/rrt/src/RRTConnect.cpp:354 - manipulator/manipulator: Created 5 states (2 start + 3 goal)
    [run_hiwin_moveit-3] [INFO] [1606803831.723565262] [ompl]: /usr/src/debug/ompl/1.5.0-1-r0/git/src/ompl/tools/multiplan/src/ParallelPlan.cpp:135 - ParallelPlan::solve(): Solution found by one or more threads in 0.000756 seconds
    [run_hiwin_moveit-3] [INFO] [1606803831.726168559] [ompl]: /usr/src/debug/ompl/1.5.0-1-r0/git/src/ompl/geometric/src/SimpleSetup.cpp:179 - SimpleSetup: Path simplification took 0.002559 seconds and changed from 3 to 2 states
    [run_hiwin_moveit-3] [INFO] [1606803831.728662079] [moveit_cpp_demo]: Sending the trajectory for execution