Palletizing exercise: add SKU-based UR10 palletizing exercise - #791
Open
Ashwani1330 wants to merge 18 commits into
Open
Palletizing exercise: add SKU-based UR10 palletizing exercise#791Ashwani1330 wants to merge 18 commits into
Ashwani1330 wants to merge 18 commits into
Conversation
- Exercise templates (Python + C++ HAL, WebGUI) copied from pick_place - DB: exercise 27 with tools (console, simulator, rviz) linked to universe 71
…xercise - New CustomRobots/palletizing/ subsystem with TrackController belt model, palletizing_box model, box_spawner.py node, and ros_gz_bridge YAML config - Remove static conveyor and hardcoded brown boxes from world file; include conveyor_belt model via model:// URI - Wire conveyor speed bridge and box spawner into palletizing.launch.py (delayed 5s after gz sim starts) - Box lifecycle: spawn at belt feed end → ride to centre → belt stops → teleport to pallet table → restart cycle
…onfig - Add ur5_suction.urdf.xacro, ur5_suction.srdf, ur5_suction_controllers.yaml, and moveit_controllers_suction.yaml for the suction gripper variant of UR5 - Add ur5_suction.launch.py that loads the suction URDF, starts MoveIt with the suction SRDF, and spawns the robot in Gazebo - Add palletizing_harmonic.launch.py (Launchers/rviz) so RViz loads the suction URDF instead of the Robotiq finger gripper - Register robot 25 (Ur5 Suction) in the DB and point universe 71 to it - Wire gz_link_attacher in the palletizing world with robot_model_name and gripper_link_name params for the suction cup contact attach
- Parameterize MOVE_GROUP in move/robmove/robpose (default "ur5_manipulator", P&P unaffected); add MOVE_GROUP=ur10_arm to UR10 launcher - Rename ur5_suction.* → ur10_suction.*, move URDF to models/ur10/ - Update SRDF group → ur10_arm, ur_type/ROB_PARAM → ur10, gz entity/world name - Fix visual_parameters.yaml: phantom pkg ur5_gripper_description → ros2srrc_robots
- /clock bridge: use bidirectional @gz.msgs.Clock (the [ ] form fails on ros_gzharmonic, starving move_group of sim time) - add ur10_arm OMPL planner config + time-parameterization adapters (fixes wild paths and rejected execution) - isolate UR10 MoveIt config (kinematics/ompl/controllers) into custom_robots so Pick & Place is untouched
…ate spawner and urdf
…llision scene Address motion-quality review feedback on the UR10 suction arm: - Constrain wrist freedom: narrow wrist_3 to +-120 deg (kills the box "swirl" about the suction-cup axis); keep wrist_1/2 at +-180 for the far-row descent reach. (joints 4/5/6) - Make pick->place deterministic: asymmetric shoulder_pan [-150, +30] and elbow [0, 180] force a single consistent (clockwise) swing instead of the planner choosing either direction run to run. - Add a planning-scene publisher (palletizing_scene.py) that injects the conveyor and pallet as collision objects so MoveIt routes around them natively, instead of hand-tuned via-waypoints in the exercise code. - Model the target as a wooden pallet on a low stand (world file) for a more realistic workcell than a plain table. Also folds in a config/comment tidy-up: - Consolidate UR10-suction MoveIt configs under config/ur10_suction/ (drop redundant ur10_suction_ prefix), matching the ur10/ layout. - Point palletizing_harmonic.launch.py at the dedicated ur10_suction rviz; drop the unused ur5_gripper_moveit_config dependency.
Sync 279 upstream commits (Worlds→Scenes rename, DB restructure, UR3, etc.) into the palletizing exercise. Conflict resolutions: - ros2srrc_execution move/robmove/robpose.cpp: adopt upstream's ROB_GROUP parameterization wholesale (we had independently added an equivalent MOVE_GROUP param; converging on upstream's name avoids future re-conflicts). - ur10_suction.launch.py: pass ROB_GROUP=ur10_arm to the 3 execution nodes to match the adopted C++ param name. - palletizing world relocated Worlds/ → Scenes/ (upstream dir rename); palletizing.launch.py world dir updated to /opt/jderobot/Scenes. - database: universes.sql → worlds.sql under the new schema (universes→worlds, worlds→scenes; worlds.scene_id column). Upstream claimed our old IDs, so palletizing rows renumbered: world 71→73, scene 71→73, robot 25→31, cross-references updated accordingly.
13 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR adds the RoboticsInfrastructure side of a new SKU-based Palletizing exercise for RoboticsAcademy.
The exercise uses:
Runtime architecture
Runtime ownership is intentionally separated:
Main changes
Palletizing workcell
81773458SKU feeder
SMALL,MEDIUM, andLONGbox SKUs./box_ready/box_info/pallet_info/box_doneto advance the feeder.UR10 suction robot
ur10_arm.ros2_controlsystem.Suction attachment
gz_link_attacherwith configurable:Planning-scene reliability
Static conveyor and pallet collision objects are applied using MoveIt's acknowledged
/apply_planning_sceneservice.The scene node:
conveyorandpallet;response.success;Clock ownership
The Palletizing scene launcher is the single owner of the Gazebo-to-ROS
/clockbridge.Database integration note
This PR updates
database/worlds.sqlon the feature branch.The official RoboticsAcademy application image uses Infrastructure
humble-devel, while the official database image currently uses the separate RoboticsInfrastructuredatabasebranch.Before release, the Palletizing world/scene/robot rows must also be synchronized into the
databasebranch:Please advise on the preferred database-branch update workflow.
Validation performed
Build and configuration
custom_robotsbuilds successfully withcolcon.<ros2_control>element.rclpymoveit_msgsshape_msgsNative runtime
MoveIt planning scene
/apply_planning_scenereports success./get_planning_scenecontains:conveyorpalletRoboticsAcademy browser integration
Using matching custom Academy/Infrastructure/database images:
gzscene.gzrobot.world_ready.tools_ready.gz_link_attacherchanges.Follow-up work
Media