The “Cosmo Logistic” theme of eYRC 2023-24 is set in a warehouse used for inter-planet logistics from a space station. A robotic arm and mobile robot collaborate to sort and prepare packages to be transported to different planets. In this theme, teams will develop an algorithm for sorting packages autonomously with the help of a robotic arm and mobile robot shown in the figure. Teams will learn to navigate this mobile robot with the help of SLAM (simultaneous localization and mapping) method in a warehouse, detect and localise the packages placed on racks, and manipulate the robotic arm to pick them.
Locating Aruco in the world with respect to arm
Subtasks::
- Detecting and Locating Aruco markers using OpenCV. Calculating the Yaw angle to be published using Rotational Vector
- Publishing Transform using TF2 library between 'camera_link' and 'cam_<marker_id>'
- Looking for transform between 'base_link' and 'cam_<marker_id>' (as 'camera_link' and 'base_link' are connected in TF tree)
- Publishing a tranform of 'obj_<marker_id>' with respect to 'base_link'
$ ros2 launch ur_description ur5_gazebo_launch.py
$ ros2 launch ur_description spawn_ur5_launch.py
$ ros2 run ur_description task1a.py
Manipulating Robotic Arm using Moveit framework
Subtasks::
- Using joint goals to achieve particular position
- Using moveit_servo to achieve the box's position in a feedback loop
- Using TF Listener to estimate the pose of end effector (i.e. gripper ) and calculating the unit vector to provide to moveit servo linear velocities
- Repeat the task multiple hard coded positions
$ ros2 launch ur_description ur5_gazebo_launch.py
$ ros2 launch ur5_moveit spawn_ur5_launch_moveit.launch.py
$ ros2 service call /servo_node/start_servo std_srvs/srv/Trigger {} # Enables Servoing
$ ros2 run pymoveit2 task1b.py
Navigation with ROS2 Navigation Stack (Nav2)
Subtasks::
- Mapping the warehouse using teleop twist and saving the generated map using slam_toolbox
- Using Simple Commander API to various positions
- Tuning the parameters in nav2_param.yaml to set the tolerance in position and orientation
- Marking a Avoiding Zone in a map
$ ros2 launch ebot_description ebot_gazebo_launch.py
$ ros2 launch ebot_nav2 ebot_bringup_launch.py
$ ros2 run ebot_nav2 task1c.py
Motion planning of robotic arm with vision
Subtasks::
- Getting the transform generated in Task1A to get the Transform of randomly spawned Aruco boxes
- Determining the pre pose of ur5 arm based on the position of box
- Using joint goals to achieve pre position for picking the box
- Using moveit_servo to achieve the box's position in a feedback loop
- Activating the magnetic gripper using ros2 service call
- Going to drop position adding offset to drop position so that boxes dont collide
- Deactivate the gripper and drop the box on the table
$ ros2 launch ur_description ur5_gazebo_launch.py
$ ros2 launch ur5_moveit spawn_ur5_launch_moveit.launch.py
$ ros2 run ur_description task1a.py
$ ros2 service call /servo_node/start_servo std_srvs/srv/Trigger {} # Enables Servoing
$ ros2 run pymoveit2 task2a.py
eBot Navigation with Docking and Placing the Rack
Subtasks::
- Going to Rack1 pose using Simple Commander API of Nav2 stack
- Creating a Docking Server to Align the bot angularly first then in Linear distance
- Using a P controller docking the eBot to the Rack
- Using Attach_Link service to attach the Rack to the eBot
- Going to Arm Pose 1 (AP1) and use the Docking service to achieve certain angle and place the Rack
- Using Detach_Link service to detach the Rack from the eBot
- Go to Home Position Again
$ ros2 launch ebot_description ebot_gazebo_launch.py
$ ros2 launch ebot_nav2 ebot_bringup_launch.py
$ ros2 run ebot_docking ebot_docking_service.py # Starts the Docking service server
$ ros2 run ebot_docking task2b.py
3A Aruco and TF on Hardware
Subtasks::
- Implementation of Task 1A on hardware
- Parameters tuning of Aruco Detection Algorithm for real world scenarios
- Using and applying filters on input image for detection of Aruco in different lighting conditions
eBot Navigation with Docking and Placing the Rack and Picking Aruco Boxes
Subtasks::
- Going to specified rack pose in config.yaml file
- Using Simple Commander API of Nav2 stack to navigate to specified rack
- Using a P controller docking the eBot to the Rack
- Navigating to Arm Pose 1 (AP1) and use the Docking service to achieve certain angle and place the Rack
- Looking for boxes in proximity of the arm
- Picking the Aruco boxes from the Rack and placing it on the table
$ ros2 launch eyantra_warehouse task3a.launch.py
$ ros2 launch ebot_nav2 ebot_bringup_launch.py
$ ros2 launch ur5_moveit spawn_ur5_launch_moveit.launch.py
$ ros2 run ebot_docking ebot_docking_service.py # Starts the Docking service server
$ ros2 run ur_description task1a.py
$ ros2 service call /servo_node/start_servo std_srvs/srv/Trigger {} # Enables Servoing
$ ros2 run pymoveit2 task3b.py