System Overview

The following diagram gives a very simplified overview of the current state of our robot system:

        ---
  config:
    class:
        hideEmptyMembersBox: true
---

classDiagram

%% Franka:

namespace franka {
    class franka.moveit_manager:::moveit_manager

    class franka.moveit_servo:::external_node

    class franka.moveit_ros_move_group:::external_node

    class franka.controller:::vendor
}

franka.moveit_manager --> franka.moveit_ros_move_group
franka.moveit_servo --> franka.controller
franka.moveit_ros_move_group --> franka.controller

%% Panther:

namespace panther{
    class panther.nav2:::nav2

    class panther.controller:::vendor
}

panther.nav2 --> panther.controller


%% Sensors:

namespace realsense{
    class realsense.depth_image:::vendor
}

namespace zed{
    class zed.depth_image:::vendor
}

namespace velodyne{
    class velodyne.pointcloud:::vendor
}

namespace teltonika{
    class teltonika.gps:::vendor
}

velodyne.pointcloud --> panther.nav2
teltonika.gps --> panther.nav2

%% Joystick:

class joystick

joystick --> franka.moveit_servo
joystick --> panther.controller


classDef external_node stroke: #0000ff
classDef moveit_manager stroke: #ff0000
classDef nav2 stroke: #00ff00
classDef vendor stroke: #ff00ff
    

You can see two robots (franka and panther) and four sensors (realsense, zed, teltonika and velodyne). Note that the output of the teltonika (gps) and the output of the velodyne (pointcloud) are used in nav2 to navigate the panther. Output of the depth camera’s are not used at the moment. There are three ways to control the robot:

        classDiagram

class joystick{
    mapping parameters

    joy_topic_manager()
    joy_to_twist(franka)
    joy_to_twist(panther)
}

class moveit_manager:::moveit_manager{
    arm parameters

    move_to_configuration()
    move_hand_to_pose()
    add_object()
    clear_objects()
}

class nav2:::nav2{
    vehicle parameters

    navigate_to_pose()
    follow_waypoints()
}

classDef moveit_manager stroke: #ff0000
classDef nav2 stroke: #00ff00
    

joystick:
This joystick contains a joystick_topic_manager to switch the control between franka and panther. A joy_to_twist node converts the joy message to a twist message. For panther, this twist message can be directly send to the drive controller. For franka, moveit_servo is used to calculate the required joint command that results in the desired twist command of the end effector.

moveit_manager:
For robot arms, we created a moveit_manager node as a layer above the moveit_ros_move_group node. This manager provides functionality like moving to a default configuration or moving the end effector to a given pose.

nav2
For robot vehicles, we use nav2, a set of nodes that provide functionality like navigating to a pose or following waypoints.

At the moment, we can use the joystick, or functionality of the moveit_manager or nav2 to control the robots.

vendor elements
Note that the elements in purple are provided by the vendor of the robot or sensor. We expect some basic functionality, like a controller for a robot and the data output of sensor, provided by the vendor of the product. We only make small adjustments or support for simulation when required.

default ROS elements
Note that the elements in blue are default in ROS and not created by us.

namespaces
Note that each robot and sensor lives in it’s own namespace. This enables us to add as many robots and sensors to our system as we like, even when they are the same. For example: if we would have a second Franka arm, we can define the namespaces franka1 and franka2.

modularity
With this setup we focus on the modularity of the system. We can add sensors and robots if we like and reuse nodes that we already developed. If we add another robot arm, we expect the vendor to provide the correct controller nodes. We only need to define the related parameters and should be able to use it again with our Moveit Manager and the default Moveit nodes provided in ROS. And if we add another robot vehicle, we can still use our current Nav2 setup, only requiring the correct definition of the related parameters.

central controller
At the moment, a human is still the central controller in our system. A human can control both the robots using the joystick or via service/action calls to the Moveit Manager or Nav2. Our goal is to get the human out of the loop.