The Parol6 project is a complete ROS 2 workspace for simulation, motion planning, and GUI-based control of a 6-DOF robotic arm. It integrates Gazebo, MoveIt 2, ros2_control, MoveIt Servo, perception nodes, conveyor belt simulation, and a custom Qt GUI.
- Robot Model & Description
- URDF/Xacro model (
parol6_description) - Meshes and visuals for RViz & Gazebo
- Integrated gripper and optional camera
- URDF/Xacro model (
- Simulation (Gazebo)
- Physics-based simulation with ros2_control
- Conveyor belt simulation (velocity + distance services)
- Object spawning and attach/detach services
- Motion Planning (MoveIt 2)
- Move group for joint & Cartesian planning
- Collision-aware path planning
- KDL kinematics plugin support
- MoveIt Servo (Jogging)
- Real-time jog control (X, Y, Z, Roll, Pitch, Yaw)
- Adjustable speed scaling
- Servo On/Off services
- Perception Pipeline
- Box detection node (vision)
- Publishes detected box pose as
PoseStamped - Triggerable pick-and-place pipeline
- Custom GUI (
parol6_gui)- Control Tab: Jog buttons, Servo On/Off toggle, Speed slider, Real-time joint values
- Targets Tab: Save/load joint or pose targets, Execute stored targets
parol6_description→ URDF, meshes, robot_state_publisherparol6_moveit2_config→ MoveIt 2 configuration & bringup launch filesparol6_gazebo→ Gazebo worlds, conveyor belt simulationparol6_gui→ Qt C++ GUI for jogging & monitoringparol6_pipeline→ Perception + pick-and-place pipelinemsg_gazebo→ Custom attach/detach service definitions
Gazebo requires the model path to be set to find the robot's URDF and meshes. Run this before launching Gazebo:
- Temporary Export (Current Terminal):
(Note: Replace
export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:$(ros2 pkg prefix parol6_description)/share
$(ros2 pkg prefix parol6_description)/sharewith the hardcoded path/home/azif/projetcs/parol6/install/parol6_description/shareif you prefer.)
This brings up the full simulation environment with controllers and planning:
ros2 launch parol6_moveit2_config bringup.launch.pyIn a new terminal (after setting GAZEBO_MODEL_PATH):
ros2 run parol6_gui parol6_guiDemonstration of the custom Qt GUI for real-time jogging and servo control.
Illustrates the use of the Gazebo service to spawn a box object into the simulated environment.
The complete pick-and-place sequence, from object detection to motion planning and gripper action.
-
Start/Stop Servo:
ros2 service call /servo_node/start_servo std_srvs/srv/Trigger ros2 service call /servo_node/stop_servo std_srvs/srv/Trigger
-
Control Conveyor:
ros2 service call /CONVEYORPOWER conveyorbelt_msgs/srv/ConveyorBeltControl "{power: 5.0}" ros2 service call /conveyor2/MoveDistance conveyorbelt_msgs/srv/MoveDistance "{distance: 0.35}"
-
Spawn & Attach Objects:
ros2 service call /spawn_box std_srvs/srv/Trigger ros2 service call /AttachDetach msg_gazebo/srv/AttachDetach "{model1: 'parol6', link1: 'L6', model2: 'Red_1', link2: 'link', attach: true}" -
Run Pipeline & Detection:
ros2 run parol6_pipeline pipeline_node ros2 service call /start_detection std_srvs/srv/Trigger "{}" ros2 service call /start_picking std_srvs/srv/Trigger "{}"
- ROS 2 Humble
- Gazebo 11
- MoveIt 2
- ros2_control + ros2_controllers
- Qt 5 / Qt 6
Install common dependencies:
sudo apt install ros-humble-moveit ros-humble-gazebo-ros-pkgs ros-humble-ros2-control ros-humble-ros2-controllers qtbase5-devparol6/
├── gif/ # Animated demonstration GIFs (Requires box_spawning.gif, gui_operations.gif, pipeline-execution.gif)
├── parol6_description/ # URDF, xacro, meshes
├── parol6_moveit2_config/ # MoveIt 2 config + bringup.launch.py
├── parol6_gazebo/ # Gazebo worlds, conveyor
├── parol6_gui/ # Qt C++ GUI
├── parol6_pipeline/ # Vision & pick-place pipeline
└── msg_gazebo/ # Custom Gazebo services


