Gazebo | Ignition | Community
Ask Your Question

drcsim: how do we reset BDI sim_interface error after fall and resume stand?

asked 2013-05-22 13:21:07 -0500

dcconner gravatar image

If the robot falls, the behavior_feedback sets an error code and prevents the robot from entering anything other than USER mode.

Do we need to do anything other than return the robot to standing posture to resume BDI's MANIPULATION/STAND controls?

edit retag flag offensive close merge delete


I'm having this problem also. It seems that the code has a bug so that when the acceleration is to high it actually freezes all the joints.

astaranowicz gravatar imageastaranowicz ( 2013-05-22 17:04:07 -0500 )edit

The BDI interface locks the joints (FREEZE) if robot falls to prevent controller from going unstable. See user guide. Once the robot falls, the system continues to report falling status, and it's not clear how this is cleared, or how to "reset" the BDI interface to enter STAND mode again if you get off the ground

dcconner gravatar imagedcconner ( 2013-05-22 22:25:24 -0500 )edit

That makes sense, however, I would still consider this a bug because it doesn't clear the falling status.

astaranowicz gravatar imageastaranowicz ( 2013-05-23 11:40:24 -0500 )edit

1 Answer

Sort by ยป oldest newest most voted

answered 2013-05-25 14:01:49 -0500

hsu gravatar image

As mentioned in the DRCSim User Guide, Stand mode is the hub to all the behavioral modes, I've added a diagram to clarify this point. So to recover from a fall, you must first go back to User mode, then to Stand mode. Below is an example path to recovery:

  1. Put the robot under PID control, (i.e. set k_effort[0:28] to 255 for all joints), then
  2. Get the robot back on to its feet with your own controller. Drive Atlas into PID controlled Stand pose (for example, see VRCPlugin::SetPIDStand() for approximate target joint positions taken from a snapshot of joint states while standing).
  3. Once the robot stabilizes, you can then switch to BDI STAND mode mode and set all k_effort[0:28] to 0 simultaneously (for example, see SetBDIStand() for reference).
edit flag offensive delete link more

Question Tools


Asked: 2013-05-22 13:21:07 -0500

Seen: 229 times

Last updated: May 25 '13