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.