Robot module¶
The robot control module is based on vendor-provided franka_ros[1], which integrates the robot’s API libfranka[2] into the ROS ecosystem.
Robot state publisher¶
The franka_control_node acts as a robot state publisher, providing the current joint state and estimated external wrench to topics using standard ROS messages.
Robot states specific to the Franka Emika Panda robot arm are published using franka_msgs. These states include, among others, the current robot mode (kinesthetic guidance, robot motion using an external program, robot motion using internal controller, reflex, error recovery), contact level activation, collision threshold status, and compensated external load.
The ROS node franka_control_node also provides the following ROS services:
SetJointImpedanceandSetCartesianImpedancespecify joint or Cartesian stiffness for the robot’s internal controller (damping is automatically derived from the stiffness).SetEEFramespecifies the transformation from the Panda’s flange frame to the tool center point (TCP).SetForceTorqueCollisionBehaviorandSetFullCollisionBehaviorset thresholds for external forces in Cartesian and joint space to configure the collision reflex and contact detection.SetLoadsets an external load (e.g., caused by a grasped object) that the robot controller should compensate.
Most common gripper actions (Grasp, Move, Open) for the Panda hand gripper are also implemented in the franka_control_node.
Figure 1: Integration of ros_control controllers into the ReconCycle architecture.
ros_control and action servers¶
Controllers are implemented using ros_control on a dedicated computer running real-time Linux (Franka ROS Controller in Figure 1). The ros_control framework provides a hardware abstraction layer (RobotHW) that enables standardized access to actuators and comes with a common interface (ControllerBase) to write robot-agnostic controllers[3].
The robot middleware is represented by the robot’s hardware interface. For the Franka Emika Panda robot, this interface is implemented by the franka_hw ROS package using the libfranka library.
This scheme allows the usage of standard ROS controllers and tools (such as MoveIt!, Play Motion, or RQT joint trajectory controller GUI). In addition, custom implementations of joint and Cartesian space impedance controllers expose an action server interface for different robot motion modes.
Figure 2: Clients can send action goals (motion parameters) or cancel them. The action server periodically sends status updates and feedback information. When the execution is finished or interrupted, it reports the end result.
The benefit of using ROS-provided action servers to trigger robot motion is the ability to cancel the request during execution and to get periodic feedback on how the request is progressing. Upon acceptance, the action goal’s status is set to active if there are no other action goals (e.g., motions) waiting for execution. If an action goal is preempted, the robot does not enter an emergency state and does not require any restart procedure. The client receives appropriate result messages to handle the preemption in its scheme and continue with another action if desired. This enables integration with the state machine framework presented in Section 3.4.
Motion generation¶
To achieve the desired robot motion, new desired joints must be calculated at every sample time. We implemented various trajectory generation strategies to meet the most common robot motion needs in the context of automated disassembly:
Joint space point-to-point trajectory with trapezoidal velocity profile[4] (
JointTrapVelaction server in Figure 1)Cartesian space straight line point-to-point motion & quaternion SLERP trajectory[5] with minimum jerk time evolution (
CartLinTaskaction server in Figure 1)Joint space point-to-point trajectory with trapezoidal velocity profile, with the initial and final pose provided in Cartesian space and transformed into joint space using inverse kinematics (
JointTrapVelCartTargetaction server in Figure 1)Dynamic movement primitive (DMP) in joint space[6] (
JointDMPaction server in Figure 1)Cartesian space DMP[7] (
CartDMPaction server in Figure 1)Direct joint angle control (e.g., using MoveIt! in Figure 1)
To generate a motion according to the selected strategy, a new action goal (motion parameters) has to be sent to an appropriate action server.
JointTrapVel, JointTrapVelCartTarget, and JointDMP action servers calculate the joint configuration at each sample time. The underlying joint_impedance_controller calculates appropriate joint torques and sends them to the robot’s low-level controller using franka_hw and libfranka as shown in Figure 1.
CartLinTask and CartDMP action servers calculate task-space positions and orientations at each sample time. The underlying Cartesian impedance controller calculates appropriate joint torques and sends them to the robot’s low-level controller using franka_hw and libfranka as shown in Figure 1.
Using third-party motion generators or tools for direct joint angle control is also possible through the standard ROS interfaces.