ShuoYangRobotics / A1-QP-MPC-Controller

An open source implementation of MIT Cheetah 3 controllers
GNU Affero General Public License v3.0
581 stars 126 forks source link

相关问题 #1

Closed zhangshuomo closed 2 years ago

zhangshuomo commented 2 years ago

1.摆动腿的的力矩控制在原始论文中有前馈项,似乎代码里面没有体现;A1RobotControl.cpp中第310行的注释// jac * tau = F是什么意思?jac似乎不是对称阵,这个是否满足?

  1. GazeboA1ROS.cpp中第150-161行,从手柄获取的速度与位置指令(包括root_ang_vel_d、root_euler_d、root_pos_d)分别是表示在世界坐标系还是在基座坐标系中的呢?而相应的速度与位置状态量(不加'_d')又表示在哪个坐标系中呢?代码中a1_ctrl_states.root_ang_vel_d[0] = joy_cmd_roll_rate; 及后续赋值语句中,角速度与横滚rate、俯仰rate、偏航rate并不相等,为什么直接赋值呢?似乎后来对root_ang_vel_d在状态中也是当作角速度项处理的。
  2. A1RobotControl.cpp第501-504行,论文中的MPC预测时域中的B_mat_c是随着未来的偏航角与四个落足位置变化的,代码中的B_mat_c是否有变化?
ShuoYangRobotics commented 2 years ago
  1. 当机器人腿质量比较小且运动速度较低(小于2m/s)的时候,不用加前馈项控制效果也可以很好;jac*tau=F是推导出来的公式用来描述摆动腿力矩和末端力的关系。jac不对称所以我们用的是.lu().solve()函数求近似逆解
  2. 这些量都是机器人基座坐标系下的;相应的速度与位置状态量都是世界坐标系下的;root_ang_vel_d是角速度,欧拉角的rate和角速度不对等,我们作为手柄输入把他们近似是一回事,是有点简化处理了,不影响控制表现
  3. B_mat_c的计算在这里,我们没有加对未来偏航角与落足位置的考虑,是因为我们的MPC求解远远比MIT原始的论文里的实现要快(我们400Hz左右,他们30Hz左右),因此在这么短的间隔里不考虑太远的轨迹变化也是可以的