Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Solo12 jumping using ImpedanceController & CentroidalController (lower jumping-height) #22

Open
niedeado opened this issue Oct 22, 2021 · 2 comments

Comments

@niedeado
Copy link

Hi
I am currently doing a masters in the field of AI and Robotics and working at Idiap Research Institute in the robot learning interaction group. Our Institute ordered the solo 12 robot and we will do some research with it.

I tried starting from the file demo_robot_com_ctrl.py to jump with the solo 12 in Pybullet simulation environment.
To generate the commands for the jumping task, I used the planner from kino_dynamic_opt kino_dyn_planner.py by using the motion regarding cfg_solo12_jump.yaml.
As input for the controller I use then from the planner the following outputs of the variables:

  • x_coms: position of center of mass
  • x_des: desired leg position with respect to the base
  • cnt_array: array for indicating contact to the ground of a foot

Further I sampled all the control arrays up with a factor of 5 by linear interpolation, because the output of the planner is based on a time step of dt = 0.005 and for the controller dt = 0.001 is used.
Additionally the following values for the gains were used:

RobotCentroidalController:

mu = 0.2  
kc_v = 500  
kc = [kc_v]*3  
dc = [2.*np.sqrt(kc_v)*1]*3  
kb = [200, 200, 200]   
db = [1.0, 1.0, 1.0]  
qp_penalty_lin = 3 * [1e6]  
qp_penalty_ang = 3 * [1e6]`

RobotImpedanceController:

`# Impedance controller gains
val = 60
kp = robot.nb_ee * [val, val, val]  
kd = robot.nb_ee * [2*np.sqrt(val), 2*np.sqrt(val), 2*np.sqrt(val)]`

plot_com_z

By running the controller with this settings, the solo jumps with the desired dynamic, but it doesn't jump as high as expected (resp. desired). Compared to the planned trajectory, the solo jumps around 14 cm less and lands therefore earlier too. I have tried different gain settings and looked for other reasons, but I could not find out why it does not jump higher.
Interestingly, the dynamics up to the jump are almost identical to those generated by the planner, yet the robot does not reach the corresponding height.
I would be happy if you have a suggestion what could cause this result and what could be improved. I am gladly to share more details if desired.

@Neotriple
Copy link
Contributor

Hi,

A few things you may try;

  • rather than linear interpolation, try keeping the force constant for the duration of the time.
  • I've personally had better and more accurate results using RAIsim (www.raisim.com)
  • The dynamics used in the solver are explicit, however, this is not necessarily correct (and is just an approximation). You can try to set up the dynamics using an implicit euler scheme which may show improved tracking as well. From what I remember, this would be quite tough to do in the kino-dyn though...

We have noticed this issue before, and don't fully understand this phenomena.

@niedeado
Copy link
Author

Thank you for the quick reply.
I will try this out and get an update if we find out more.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants