What Is Flexiv RDK?
Flexiv RDK is a software development kit (SDK) that enables the users to create their own C++ or Python programs to integrate Flexiv robots with external software and hardware modules, such as additional sensors, industrial control systems, vision and perception units, digital I/O devices, other software libraries, etc.
![_images/rdk_overview.png](_images/rdk_overview.png)
Example workflow of a complex user application
A complex and highly customized user application usually requires a series of different operations from one or more robots and a user-defined state machine to manage the operations. This process can be achieved through the combination of various RDK APIs.
Using information obtained from sources like external sensors, digital inputs, robot states, etc. of one or more robots, check conditions can be created to trigger transitions in the user state machine, which will then put the robot(s) into suitable modes and issue commands accordingly. Below is an example workflow:
In one user program, two RDK library instances are initialized to establish connection with robot A and B respectively via two network cards, and both robots are enabled and operational.
Robot A task 1: go home. This is a unit skill (primitive) that the robot already knows, then Primitive execution mode (Mode::NRT_PRIMITIVE_EXECUTION) can be used here. When the termination condition is met for this task, the user state machine commands robot A to stop and wait for further instruction.
Robot B task 1: when robot A is stopped, compliantly follow the output from a user-defined real-time trajectory generator with user-specified stiffness. A tray is mounted on the end effector, and a cube with an april tag on it is in the tray. For this task, it’s best to use the RT Cartesian motion-force control mode (Mode::RT_CARTESIAN_MOTION_FORCE). Thus the user state machine will first set robot B into this mode, then continuously command target pose to it.
Robot A task 2: assuming a camera is mounted on robot A and the user has implemented an april tag tracker program that can provide RDK with the grasping pose based on the estimated tag pose, when the camera on robot A sees the cube with april tag from robot B, the user state machine commands robot B to stop, then commands robot A to grasp that cube. In this case, the
MoveL
primitive can be used to command robot A to smoothly move to the grasping pose, then use methods from theflexiv::Gripper
API to control a gripper to finish the grasping.Robot B task 2: …