Performed Pick and place operation using a differential drive Mobile Robot with a mounted robotic arm in Gazebo. Application - cleaning in compact and cluttered environments
Authors: Rishikesh Jadhav(UID:119256534) and Nishant Awdeshkumar Pandey(UID:119247556).
- Introduction
- Process
- Robot Description
- Forward Kinematics Validation
- Inverse Kinematics Validation
- Workspace Study
- Assumptions
- Control Method
- Gazebo and RViz Visualization
- Problems Faced
- Conclusion
- Steps to Run the Package
- References
Modeling a mobile robot (differential drive) with a robotic arm named CR-7. The goal is to create a versatile robot capable of cleaning spaces efficiently.
The project involved a series of analyses and processes, including the study of robot kinematics (inverse and forward), validation, and simulation in Gazebo and RViz. The derived equations were intended for practical applications such as goal navigation, object manipulation, and space cleaning.
Robot Type: MOBILE MANIPULATOR Total DOF (9) = Robotic arm DoF (6) + Mobile robot DoF (3)
- Chassis property(units): Length: 0.19, Width: 0.19, Height: 0.070
- Wheel property: Radius(units):0.055, width: 0.022, Mass=0.2
- Shoulder roll link(units): Length: 0.09, Width: 0.047, Height: 0.035
- Shoulder pan link(units): Length: 0.09, Width: 0.047, Height: 0.035
- Elbow pan Link(units): Length: 0.09, Width: 0.047, Height: 0.035
- Elbow pitch Link(units): Length: 0.09, Width: 0.047, Height: 0.035
- Gripper(units): Length: 0.05, Width: 0.010
- Gripper type: 2 Finger gripper
To validate forward kinematics, a video of the robot's movement in Gazebo and RViz is available Below
To validate inverse kinematics, a video of the robot's movement in Gazebo and RViz is available below
Maximum workspace of the arm is as follows: The above figure is obtained by selecting the angle limits as follows:
- Theta 1= 0:2*pi
- Theta 2= -pi/2:pi/2
- Theta 3=0:pi/2
- Theta 4= -pi/2:pi/2
- All the joints and objects are considered to be rigid.
- The friction and other external disturbances are not taken into account.
- Robot self-collision is considered along with the external obstacles and is taken into account for this scope of the project.
- The path of the arm or the robot is just one solution among all the other solutions it can have, this may or may not be the optimal solution.
The differential drive mobile robot operates through a closed-loop mechanism, as outlined below:
-
Predefined Goal: The robot's destination is specified in the code.
-
Fixed Starting Position: The initial position of the robot is predetermined.
-
Control Inputs: Wheel control inputs are provided, and the robot's current status is monitored using the Gazebo odometer.
-
Distance Calculation: The current distance to the goal is computed, and control adjustments are made based on linear and angular velocity.
-
Precise Stopping: The robot halts 0.25 units before reaching the target location for efficient pick-up.
-
Return Capability: The robot can also autonomously return to its original or home position.
For robot movement validation, the following videos are available:
Robot Spawning Issues: The robot was spawning with dislocated parts, leading to incorrect simulations. Debugging and adjusting the URDF file resolved this issue.
DH Parameter Determination: Finding the Denavit-Hartenberg (DH) parameters for the robot was a task that required precision. As the robot used in our project is not universal, identifying the correct parameters was crucial for accurate kinematic analysis.
Simulation Realism: Achieving a realistic simulation proved challenging, especially in terms of adding sensors. Due to constraints, we used a Gazebo odometer instead of sensors for the closed-loop controller.
In conclusion, the project successfully modeled a cleaning robot, CR-7, integrating a differential drive mobile robot with a robotic arm. The robot's URDF file was accurately spawned in Gazebo and RViz, and kinematic analyses were performed for both forward and inverse kinematics.
The implementation of control methods, such as closed-loop control for the differential drive, showcased the robot's ability to navigate and stop accurately. Despite the challenges faced, the project achieved its objectives and laid the foundation for future advancements.
The package includes the following folders:
-
CAD files: Contains part files (.sldprt), assembly files (.sldasm) of the robot model.
-
Package: Contains another folder named "robot" that can be copied into catkin_ws/src.
The "robot" folder contains subfolders:
-
config: .yaml files for controllers.
-
launch: .launch files to spawn the bot in Gazebo and RViz.
-
meshes: .dae files for various parts of the bot.
-
scripts: .py files for moving the bot (publisher, subscriber nodes).
-
urdf: .xacro file of the bot.
-
worlds: .world file where the bot is spawned in Gazebo.
Various scripts include:
-
teleop.py: Controls the bot's movement using teleop.
-
fk_validation.py: Validates forward kinematics.
-
ik_val.py: Validates inverse kinematics.
-
diff_control.py: Controls the differential drive, stopping just before the goal using a closed-loop controller.
-
go_home.py: Returns the bot to the home position (origin) after pick and place operation.
-
grasp.py: Grasps an object using the gripper.
-
arm_control.py: Moves the arm above the box and opens the gripper. (Note: The size of the object and friction between the gripper and the object are not right; pick and place operation was done manually in the video. Please use that as a reference for grading).
-
End_eff_trajectory.py: Obtains the graph of the end effector trajectory for inverse kinematics validation.
-
To spawn the bot in Gazebo and RViz in the designed world, use the following command (with rqt_steering) after navigating to the launch folder in the terminal:
roslaunch 04-diff_drive_robot_arm.launch
To spawn the bot in RViz with a slider to control the various joints of the robot, use the following command after navigating to the launch folder in the terminal:
roslaunch view_demo.launch
To run these codes, open the scripts folder in the terminal and run the following commands for each script:
python3 <name of the script to run>
Ensure that roscore is running in the background.
The following sequence of scripts should be run to obtain the pick and place of an object:
roslaunch 04-diff_drive_robot_arm.launch --> python3 diff_control.py --> python3 arm_control.py --> python3 grasp.py --> go_home.py
- Robot Modeling and Control, Mark W. Spong, Seth Hutchinson, and M. Vidyasagar
- HW3 or HW4 of ENPM-662
- Gazebo.sim
- Ros.org
- https://moveit.ros.org/
- https://www.solidworks.com/