skywoodsz / qm_control

Quadruped manipulator controller using model predictive control and whole body control based on OCS2
228 stars 36 forks source link

Modifying controller for Z1 arm gripper #15

Closed Hotsburp closed 3 months ago

Hotsburp commented 3 months ago

Hi @skywoodsz, sorry for another question.

I would like to use Unitree Z1 arm, which has a gripper, for interacting with objects either by grasping or simply moving the closed gripper to a target point.

Instead of considering the gripper as an "extra" 7th joint to the current controller, which you mentioned in #14 would be complicated to adapt the controller to add new joints / DOF, you suggested in #12 that i would be easier to use the MPC-only version to control the gripper independently.

Could i clarify with you on the following question:

  1. It was mentioned that effort_controller/JointPositionController can be used for independent gripper control while still being integrated with MPC for the other 6 joints. How do we do this as i am quite confused?

I have adapted the position_control.yaml to be the following for the Z1 arm shown below and also the other launch files but am not sure if this is the correct approach.

`# Publish all joint states ----------------------------------- joint_state_controller: type: joint_state_controller/JointStateController publish_rate: 1000

joint_1_position_controller: joint: joint1 pid: d: 5 i: 0.1 p: 1000 type: effort_controllers/JointPositionController

joint_2_position_controller: joint: joint2 pid: d: 5 i: 0.1 p: 1000 type: effort_controllers/JointPositionController

joint_3_position_controller: joint: joint3 pid: d: 5 i: 0.1 p: 1000 type: effort_controllers/JointPositionController

joint_4_position_controller: joint: joint4 pid: d: 5 i: 0.1 p: 1000 type: effort_controllers/JointPositionController

joint_5_position_controller: joint: joint5 pid: d: 5 # 5.0 i: 0.1 p: 1000 # 500 type: effort_controllers/JointPositionController

joint_6_position_controller: joint: joint6 pid: d: 5 i: 0.1 p: 1000 type: effort_controllers/JointPositionController

joint_7_position_controller: joint: jointGripper pid: d: 0.01 i: 0 p: 100 type: effort_controllers/JointPositionController`

  1. If we want to control the gripper independently and integrate well with the control of the other parts, do we also need to modify the task.info, qm_interface, publishJointTransforms, setHybridJointHardware etc?

Thank you once again!

skywoodsz commented 3 months ago

@Hotsburp Yeah, it is convenient for ros_control to use different controllers to control different parts of the robot. You just need to edit the position._control.yaml and load the gripper controller. If you use effort_controllers/JointPositionController, you do not need to modify anything.