ROS 2 (Jazzy) workspace for the percussion Module of the PERI UP Genio mobile platform system.
-
The percussion module detects a wedgelock position based on ArUco markers via an Intel RealSense camera and moves to them with the ur10e robot arm via RTDE.
-
robot arm moves towards the ledger in 1D until contact, Move tool upwards of ledger, repeat move until contact downwards. Move over ledger pin. Then move until contact in 3rd dimension. Wedgelock position is now known.
-
Once positioned over wedgelock, Hammer action is initiated through arduino_bridge node.
-
Robotarm moves back to home position.
System libraries (install via apt):
sudo apt install librealsense2-dev librealsense2-utilsROS 2 packages (install via apt):
sudo apt install ros-jazzy-ur ros-jazzy-ur-robot-driver ros-jazzy-tf2-rosPython packages (install via pip):
pip install ur_rtde pyrealsense2 opencv-python pyserial numpy --break-system-packagesros2 launch percussion_task_manager task_system.launch.pyros2 service call /percussion/task_manager/start_task percussion_interfaces/srv/StartTask "mode: FIXING"or
ros2 service call /percussion/task_manager/start_task percussion_interfaces/srv/StartTask "mode: LOOSENING"The following diagram shows the architectural layout of the ROS project. The task manager node is a main orchestrator which decides the system state and what to do. The underlying nodes are called upon as needed;
The following diagram gives an overview of the general workflow of the program. When a task is requested this is the sequence in which things are executed. (not yet fully implemented)
Four nodes are started by the launch file, along with two static TF publishers (world -> base_link and tool0 -> camera_frame).
| Node | Package | Role |
|---|---|---|
perception_node |
percussion_perception |
Opens RealSense, detects ArUco markers, returns poses in gripper frame |
task_manager_node |
percussion_task_manager |
Orchestrator state machine: calls perception then sends motion goal |
motion_node |
percussion_motion |
Executes motion primitives on the UR10e via RTDE |
arduino_bridge_node |
percussion_arduino_bridge |
Interfaces with arduino through serial communication and interacts with ROS through actions. |
Custom interfaces (percussion_interfaces): msg/Pose6D, msg/MarkerDetection, msg/SystemState, srv/TriggerCapture, srv/StartTask, srv/Reconnect, action/ExecuteMotion, action/ArduinoCommand.
State machine (task_manager_node):
IDLE -> TASK_REQUESTED -> AT_HOME -> CAPTURING -> POSE_ACQUIRED -> AT_MARKER -> HAMMERING -> DONE -> RETURNING -> IDLE
(ERROR is reachable from any state on failure, and is handled by the error handler.)