Canadarm2 Simulation

Overview: The goal of this project was to simulate the Canadarm2 robotic arm system that is currently deployed on the International Space Station. Specifically, our team aimed to simulate using the Canadarm2 to dock a space capsule randomly spawned above the robotic arm. Our team accomplished this task by using computer-aided design to create the robotic arm, gripper, and docking mechanism. We then made a ROS2 workspace where the CAD was transformed into a URDF and controlled via MoveIt2, created a service to spawn a spacecraft at a random location, and created a motion planning script to instruct the robot to dock the spacecraft to the station safely. To demonstrate success, the workspace was simulated in a zero-gravity Gazebo simulation.
Our team consisted of 4 Duke University robotics students:
- Jaden Coward
- Shaan Narayan (me!)
- Stephen Xiong
- Zach Chen
Our team was guided under the advisement of Dr. Siobhan Oca and Ziyao Lin
Wenfu Xu, Jintao Zhang, Huihuan Qian, Yongquan Chen, & Yangsheng Xu. (2013). Identifying the singularity conditions of Canadarm2 based on elementary jacobian transformation. 2013 IEEE/RSJ International Conference on Intelligent Robots and Systems, 795–800. https://doi.org/10.1109/iros.2013.6696442
My Contributions: My contributions to this project were:
-
Designing the Canadarm2 Robotic Arm in OnShape
-
Creating and debugging a launch file to control and simulate the robot in Gazebo, MoveIt!2, and RViz
-
Creating a motion planning script to control the robots movements
Specifically, I created the CAD assembly for the 7-revolute joint Canadarm2 in OnShape for another member of my team to convert into a URDF for the robot. This entailed researching the publicly available information on the Canadarm2 and using engineering judgement to fill in knowledge gaps. I also created a python launch file to launch Gazebo, configure robot controllers for integration with MoveIt2, and launch RViz. This involved working extensively with my teammates to debug issues in URDF and control files to ensure everything integrated properly. Lastly, I created a python script that utilized the MoveIt2 controllers to create robot instructions to allow the robot to complete the task. This involved writing a ROS2 node to subscribe to a spawning service that another member of my team wrote and writing another ROS2 node to send joint and operation space commands to the robot.
Simulation: To the left, you can see a simulation of the final project. In this video the robot arm has been simulated in a zero gravity environment. When the spacecraft_motion.py motion planning script runs, it calls the service to spawn the space capsule at a random location, and controls the Canadarm2 arm to retrieve the space capsule and lock it into the gripper.
Code: The code for this project can be found here: https://gitlab.oit.duke.edu/skn13/me442_canadarm2_project