Difference between revisions of "PR2 Arm Control"
From Healthcare Robotics Wiki
(→Low-level Controllers) |
(→Low-level Controllers) |
||
| (22 intermediate revisions by 3 users not shown) | |||
| Line 12: | Line 12: | ||
| Stuart Glaser || Stuart Glaser || Adam Leeper || Stuart Glaser || MIT | | Stuart Glaser || Stuart Glaser || Adam Leeper || Stuart Glaser || MIT | ||
|- | |- | ||
| − | ! scope="row" | Control | + | ! scope="row" | Control Space |
| Joint space || Cartesian Space || Cartesian Space || Cartesian Space || Cartesian Space | | Joint space || Cartesian Space || Cartesian Space || Cartesian Space || Cartesian Space | ||
| + | |- | ||
| + | ! scope="row" | Control Type | ||
| + | | Joint position, velocity, acceleration control with PID || Controls force at the end effector with PD on the Cartesian error || Same as JTranspose, shaped stiffness matrix in end effector's frame || Position or Velocity Cartesian control with PD control on joint velocities || Force-stiffness hybrid control, JTranspose on some DOF, force control on others | ||
| + | |- | ||
| + | ! scope="row" | Relevant Equations | ||
| + | || | ||
| + | T = PID(spline(t, trajectory) - q_cur) | ||
| + | || | ||
| + | T = J^T * PD(x_err) + Kff * J_null * (q_posture - q) | ||
| + | || | ||
| + | Same but: PD(x_err) = R * Kp * R^T * x_err + R * Kd * R^T * x_dot | ||
| + | || | ||
| + | T = Kp * (q_proxy - q) + Kd * (q_dot_des - q_dot) | ||
| + | |||
| + | q_dot_des = J_pinv * x_dot + J_null * (q_posture - q) | ||
| + | || | ||
| + | T = J^T * F | ||
| + | |||
| + | F = PD(x_err) or F_des | ||
| + | |- | ||
| + | ! scope="row" | Control reference (the goal the controller is trying to achieve) | ||
| + | | joint angles || Cartesian pose of rigid transformation from end effector frame || Cartesian pose of rigid transformation from end effector frame || Cartesian pose of rigid transformation from end effector frame || Cartesian frame attached to end effector with origin at wrist | ||
| + | |- | ||
| + | ! scope="row" | Requires IK solutions? | ||
| + | | {{no}} || {{no}} || {{no}} || {{no}} || {{no}} | ||
|- | |- | ||
| − | ! scope="row" | | + | ! scope="row" | ROS Interface |
| | | | ||
* Actionlib | * Actionlib | ||
| Line 27: | Line 52: | ||
|| | || | ||
* Actionlib | * Actionlib | ||
| + | * Command topic | ||
|- | |- | ||
| − | ! scope="row" | | + | ! scope="row" | Demonstrated Tasks |
| | | | ||
| − | {{yes}} | + | * Planning and manipulation stack |
| + | * Scratch approach ver. 1 | ||
| + | * Trajectory playback | ||
| + | * Overhead grasping | ||
| + | * Current THEP low-level control | ||
| + | || | ||
| + | * Lightswitch | ||
| + | * Interactive grasping | ||
| + | * Door opening | ||
| + | * Old THEP low-level control | ||
| + | || | ||
| + | * Invisible surface | ||
| + | || | ||
| + | || | ||
| + | * Sweeping with broom | ||
| + | * Brushing on table | ||
| + | * Writing with pencil | ||
| + | * Flipping pages in a book | ||
| + | * Cutting a cake | ||
| + | * Door opening (not smoothly) | ||
| + | |- | ||
| + | ! scope="row" | Can provide trajectory as sequence of reference points, velocities, and durations, which it then uses to generate way points (rather than only a single reference) | ||
| + | | {{yes}} || {{no}} || {{no}} || {{no}} || {{maybe}} | ||
| + | |- | ||
| + | ! scope="row" | Change Gains while the controller is running (through topic) | ||
| + | | {{no}} || {{yes}} || {{yes}} || {{no}} || {{yes}}, if using impedance control | ||
| + | |- | ||
| + | ! scope="row" | Integral Control | ||
| + | | {{yes}} || {{no}} || {{no}} || {{no}} || {{no}} | ||
| + | |- | ||
| + | ! scope="row" | Monitors Cartesian velocity and softly scales it (saturation) | ||
| + | | {{no}} || {{yes}} || {{yes}} || {{no}}, not implemented yet || {{no}} | ||
| + | |- | ||
| + | ! scope="row" | Monitors torque at each joint and softly scales the entire torque vector (saturation) | ||
| + | | {{no}} || {{yes}} || {{yes}} || {{no}} || {{no}} | ||
| + | |- | ||
| + | ! scope="row" | Supports collision detection? | ||
| + | | {{no}} || {{no}} || {{no}} || {{no}} || {{no}} | ||
| + | |- | ||
| + | ! scope="row" | Performance with low stiffness | ||
| + | | || || || || | ||
| + | |- | ||
| + | ! scope="row" | Pros | ||
| + | || | ||
| + | * Repeatable | ||
| + | * Control of extra DOF stronger | ||
| + | * Detecting collisions easy and equally constrained | ||
| + | || | ||
| + | * Easier to control extra DOF in general | ||
| + | * Cartesian impedance control | ||
| + | || | ||
| + | * Impedance control makes more sense in tool's frame | ||
| + | || | ||
| + | || | ||
| + | * Has several videos with different applications | ||
| + | |- | ||
| + | ! scope="row" | Cons | ||
| + | || | ||
| + | * Difficult to control elbow in general | ||
| + | * Joint space impedance control doesn't make sense | ||
| + | * Working with IK has been difficult (solved by KDL?) | ||
| + | || | ||
| + | * Competing forces (pose and posture) | ||
| + | * Elbow drifts over time if posture gain too low | ||
| + | * "Bouncing" in elbow when arm stops moving | ||
| + | * Difficult to detect collision using joint errors | ||
| + | * Singularity issues | ||
| + | || | ||
| + | || | ||
| + | || | ||
| + | * Seems like a volatile controller | ||
| + | * Still in development (not all interfaces implemented) | ||
| + | * No saturation limits | ||
| + | |- | ||
| + | ! scope="row" | Issues/Bugs | ||
| + | || | ||
| + | || | ||
| + | * Can sometimes demonstrate unexpected behavior when in kinematically constrained situations | ||
| + | * Sometimes one of the arms doesn't respond to commands (reported by Marc) | ||
| + | || | ||
| + | || | ||
| + | || | ||
| + | |- | ||
| + | ! scope="row" | Notes | ||
| + | || | ||
| + | * Waypoints are smoothly interpolated between using splines. | ||
| + | * Commands can be sent to the controller to be executed in the future. | ||
| + | || | ||
| + | || | ||
| + | * Don't set derivative gains to 0 (division by zero error) | ||
|| | || | ||
| − | |||
|| | || | ||
| − | + | * Each point in the trajectory is alternatively an impedance vector or a force. | |
| + | * The derivative term is not implemented. | ||
|} | |} | ||
Latest revision as of 14:31, 13 July 2011
[edit] Low-level Controllers
| Controller | Joint Spline Trajectory Controller | JTranspose Controller | JTranspose Task Controller | JInverse Controller | End Effector Cartesian Impedance Control |
|---|---|---|---|---|---|
| Designer | Stuart Glaser | Stuart Glaser | Adam Leeper | Stuart Glaser | MIT |
| Control Space | Joint space | Cartesian Space | Cartesian Space | Cartesian Space | Cartesian Space |
| Control Type | Joint position, velocity, acceleration control with PID | Controls force at the end effector with PD on the Cartesian error | Same as JTranspose, shaped stiffness matrix in end effector's frame | Position or Velocity Cartesian control with PD control on joint velocities | Force-stiffness hybrid control, JTranspose on some DOF, force control on others |
| Relevant Equations |
T = PID(spline(t, trajectory) - q_cur) |
T = J^T * PD(x_err) + Kff * J_null * (q_posture - q) |
Same but: PD(x_err) = R * Kp * R^T * x_err + R * Kd * R^T * x_dot |
T = Kp * (q_proxy - q) + Kd * (q_dot_des - q_dot) q_dot_des = J_pinv * x_dot + J_null * (q_posture - q) |
T = J^T * F F = PD(x_err) or F_des |
| Control reference (the goal the controller is trying to achieve) | joint angles | Cartesian pose of rigid transformation from end effector frame | Cartesian pose of rigid transformation from end effector frame | Cartesian pose of rigid transformation from end effector frame | Cartesian frame attached to end effector with origin at wrist |
| Requires IK solutions? | No | No | No | No | No |
| ROS Interface |
|
|
|
|
|
| Demonstrated Tasks |
|
|
|
| |
| Can provide trajectory as sequence of reference points, velocities, and durations, which it then uses to generate way points (rather than only a single reference) | Yes | No | No | No | Template:Maybe |
| Change Gains while the controller is running (through topic) | No | Yes | Yes | No | Yes, if using impedance control |
| Integral Control | Yes | No | No | No | No |
| Monitors Cartesian velocity and softly scales it (saturation) | No | Yes | Yes | No, not implemented yet | No |
| Monitors torque at each joint and softly scales the entire torque vector (saturation) | No | Yes | Yes | No | No |
| Supports collision detection? | No | No | No | No | No |
| Performance with low stiffness | |||||
| Pros |
|
|
|
| |
| Cons |
|
|
| ||
| Issues/Bugs |
|
||||
| Notes |
|
|
|