The manipulation node is used to control the UR3e robotics arm to carry the luggage by moving to pose that the Object detection node has sent and putting the luggage down when the CACAO robot reaches to destination. In the video, we are showing how UR3e robot moves to goal pose and grabs the luggage.
In the Manipulator node, we have two ability behavior.
Grab Object: is ability behavior for grab object of manipulator
Workflow of Grab Object behavior
Receive pose
Receive goal position in XYZ axis from Object Detection node. In this version of the manipulation node, we fixed the orientation of UR3e for grabbing the luggage only.
Waiting for Software Integration call service /enable_mani_grab to start grab object ability behavior.
Check limit workspace
Checking position from Object Detection is over the workspace of UR3e and check position is damaged to the CACAO robot. Suppose the position from Object Detection is over workspace or can collide CACAO robot. In that case, Manipulator node will call function ‘Pose to Navigation’ for requiring Navigation node to navigate CACAO robot to position that manipulator can garb object in workspace.
Set TCP pose
Set the end effector offset and end effector frame of UR3e using the function from ur_rtde.
Move to goal pose
If manipulation can control in workspace, the node will send scripts to control the UR3e pose using ur_rtde. In this version, we use only moveJ (joint space path) to control UR3e for avoiding singularity and make UR3e have more workspace for move.
Pose to Navigation
If position is over workspace, the node will calculate position and send it to Navigation node for required Navigation node to navigate the robot to position that manipulator can grab an object in workspace.
Gripper Control
Control gripper using UR-scripts. After gripper grab, object manipulation will move while holding the object to home pose and send ‘success’ status to System Integration.
Release Object: is ability behavior for release object of manipulator
Ur_rtde is a C++ interface for controlling and receiving data from an UR robot using the Real-Time Data Exchange (RTDE). (More information here https://sdurobotics.gitlab.io/ur_rtde/)
git clone https://gitlab.com/sdurobotics/ur_rtde.git
cd ur_rtde
git submodule update --init --recursive
mkdir build
cd build
cmake ..
make
sudo make install
Verify ur_rtde package
There is a simple example using the RTDE Control Interface to move the robot to a pose with the moveJ command.
Socket is the package for creating the connection between the computer and the Universal robot. We will use socket packet to send UR-scripts for control 2F-140 Gripper.
Used to calculate position send to Navigation node for require Navigation node navigate the robot to position that manipulator can grab an object in workspace.
Control gripper using UR-scripts. After the gripper grab, object manipulation will move while holding the object to home pose and send ‘success’ status to Software Integration.
Try to limit workspace to avoid singularity of UR3e. We will set UR3e start pose in case of receiving pose in the z-axis is more than 0 meters and less than 0 meters.
Started to pose in case z-axis is more than 0 meters
Figure 6: Started to pose in case z-axis is more than 0 meters¶
Start to pose in case z-axis is less than 0 meters
Figure 7: Started to pose in case z-axis is less than 0 meters¶
So, we will find the position of UR3e that make UR3e doesn’t in singularity.