Project 6
Disclaimer
Please DO NOT distribute project material or solutions online (e.g. public GitHub repositories). We take violations of the honor code very seriously.
Overview
For this assignment, you will implement mobile manipulation using concepts you have learned and implemented in the previous sections: finite state machine, inverse kinematics, and rrt connect.
- Mobile manipulation in
kineval/kineval_mobile_manipulation.js
Instructions
- Start with your solutions to project 5
- Solutions to project 5 will be released on 3/24/2024 (Sun). You can also start from here.
- You must download 4 updated files to add support for mobile manipulation:
home.html
,kineval/kineval.js
,kineval/kineval_mobile_manipulate.js
, andworlds/world_mobile_manipulate.js
Download - You should see the red cube and blue goal bubble at
http://localhost:8000/home.html?world=worlds/world_mobile_manipulate.js
.
Finite State Machine Controller
kineval.robotMobileManipulateIterate()
inkineval/kineval_mobile_manipulate.js
is the only function you need to implement for this project.- This function is called every iteration of the simulation.
- This function contains boilerplate code for recommended state definitions.
- You should implement the contents of each state branch and transitions.
- Whenever the configuration of the robot changes, this function should return the configuration as an array.
- These configurations along with the state of the object will be used in the autograder.
- The entire process is as follows:
- Move near the cube using RRT connect in
kineval/kineval_rrt_connect.js
. - Move end effector onto the cube using inverse kinematics
kineval/kineval_inverse_kinematics.js
. - Grasp the cube using
kineval.graspObject()
inkineval/kineval.js
. - Move near the goal bubble using RRT connect.
- Move end effector onto the goal bubble using inverse kinematics.
- Release the cube using
kineval.releaseObject()
inkineval/kineval.js
.
- Move near the cube using RRT connect in
RRT Connect
You will use RRT connect to move the robot to a configuration where it can pick up/release the object.
Initialize, iterate, and traverse RRT connect in the corresponding states in
kineval.robotMobileManipulateIterate()
.- To initialize, copy and modify from
kineval.robotRRTPlannerInit()
. - To iterate, call
robot_rrt_planner_iterate()
. - To traverse, copy and modify from
kineval.planMotionRRTConnect()
- Make sure you remove your trees and motion plans after you are done traversing the motion plan.
- Determine the goal configuration using any heuristic you want (for example, on the object).
- To initialize, copy and modify from
Inverse Kinematics
- You will use inverse kinematics to move the end effector to the object and the goal bubble.
- Look at
kineval.randomizeIKtrial()
for setting and checking the goal pose. - Call
kineval.iterateIK
to move .
- Look at
- You will use inverse kinematics to move the end effector to the object and the goal bubble.
Tips
Autograder checks your
kineval.robotMobileManipulateIterate()
on 5 different scenarios.Whenever the configuration of the robot changes, this
kineval.robotMobileManipulateIterate()
should return the configuration as a 1d array (as used in RRT). When it finishes, it should return “complete”. Otherwise, it should not return anything.worlds/world_mobile_manipulate.js
contains a dictionaryobjs
, which has origin, size, and color defined inobjs['red_cube']
andobjs['blue_bubble']
If your implementation is getting stuck at IK stages, it’s likely you are not traversing the motion plan correctly (hence, the robot just stays in the original location where it’s impossible to reach the IK goal). Similarly to how you manually initialized RRT and called
robot_rrt_planner_iterate()
, you have to manually move the robot to the configurations defined inkineval.motion_plan
instead of relying onkineval.planMotionRRTConnect()
in kineval_rrt_connect.js. The autograder avoids callingkineval.planMotionRRTConnect()
for clarity’s sake to avoid duplicate calls to rrt methods, but I realize that this behavior is different from the GUI and apologize for the inconvenience.Removing markers from the world: Each vertex in the trees has a
.geom
property that can be removed from the scene (e.g.scene.remove(vertex.geom)
)
- Submit your
kineval/kineval_mobile_manipulate.js
andkineval/kineval_rrt_connect
- The autograder is available at https://cse-ag-csci5551.cse.umn.edu/
Deadline
This project is due on Wednesday, March 27th at 11:59pm CT.
Grading
The project is worth a total of 10 points.