-
-
Notifications
You must be signed in to change notification settings - Fork 2
Arm IK
Neven edited this page Nov 7, 2024
·
2 revisions
Context: Last year, we implemented IK for controlling the arm in the simulator, but were never able to fully test and deploy it on the rover. This year, we'd like to fully integrate IK to both enable the operator to more easily control the arm and use it for the new autonomous typing challenge.
Problem: The current IK implementation has not been fully tested on the rover, so it is not yet ready for competition use. We will also need Cartesian velocity control of the end effector for the autonomous typing task.
Solution: We will update and iterate upon the existing ArmController
class to implement arm IK. Some tasks/challenges are outlined below:
- The end effector has a limited range of motion, particularly in terms of pitch. This means that it is not always possible to make the end effector parallel to the ground (as we would like to, especially for typing) for all arm positions. Thus it is necessary to determine the bubble of positions that are reachable with the end effector level, so that we can optimally position the rover for typing. More details on finding this "bubble" can be found here.
- After preliminary arm testing, it was determined that the motor controller timeouts were not accounted for in the sim. Thus, IK doesn't work correctly on the real arm because it only sends one position command, expecting the motor controllers to move to the desired position after one command. Instead, the motor controllers must continually receive the position command to avoid timing out. This will require modification of the existing position control code.
- For autonomous typing, it seems necessary to implement velocity control for the end effector—this allows the arm to be controlled by providing it with a vector along which to move at a particular speed. To implement this, one approach would be to use a "carrot on a stick" method. This means that we would set the arm's position target to be the current position plus some vector in the direction of the desired velocity, scaled appropriately to adjust the speed of the arm. More details on this project can be found here.