Robotic Arm Module
An arm code module that is responsible for receiving and sending commands to move the robotic arm.
Timeline
August 2023 – December 2023
Implementation Details
Programming Language: Python.
Framework: Robot Operating System (ROS2).
Libraries: Ikpy and NumPy.
Associated with: TrickFire Robotics
Link to GitHub repository: Arm Code Branch
Overview
The arm code is responsible for moving the arm given a specific control command (from a controller). This code is integrated with code from other modules within the same TrickFire URC rover codebase, specifically RobotInfo, RobotInterface, and Mission Control.
The TrickFire Software repository can be found here: Trickfire Robotics University Rover Challenge Software.
Goals
- Write code that integrates with different modules within the same codebase.
- Perform accurate and precise calculations to control the arm’s motors’ positions and orientations given a certain controller input.
Planning
Part of the code for moving the arm was written by a previous team member who already graduated. However, the former program is a standalone program, independent of the TrickFire codebase. Therefore, I need to rewrite the code into a program that uses ROS2 publishers and subscribers model, so that it can interact with the other parts of TrickFire code modules.
Tasks Checklist:
- Understand the code written by the previous member.
- Map the controller’s joysticks and buttons to specific controlling topics (move, rotate, enable, etc.).
- Design logic for calculating the end effector position given the input from a control.
- Test with the current arm URDF file.
- Code Documentation
Research:
Select libraries:
- Ikpy - Compute forward and inverse kinematics algorithms.
- ROS2 - Several built-in libraries were used to create a node, publishers, subscribers, and message types.
Class Design
Below is the overall diagram (rough sketch) of how the arm should interact with the other parts of the code base.
Rough Diagram of the Arm Node Class
Since the arm is a ROS node, it will subscribe to the control topic published by the Mission Control class. The arm will then use the current position and orientation of the motors and the target to compute the new position and orientation.
The output will be a form of the matrix. So, the class methods will then process that information to send commands to each individual motor.
Input Mapping:
The next part is to map each controller input with a specific topic.
Controller Input Mapping
Outcomes
Currently, the arm code is finished. However, I am unable to test the code and show the result of the arm moving because other teams have not completed the section of their code yet.
Note:
When we have the video of the arm moving, it will be updated on this website.