四足机器人站立姿态解算-几何方法
四足机器人控制与仿真入门笔记
古月居课程四足机器人控制与仿真入门笔记,视频链接:link
参数定义
定义机器人足端在长度方向的距离为l,在宽度方向的距离为w,两前足基座原点之间的距离为b。
O为地面坐标系原点,位于足端位置的对角线交点;
O’为身体部分几何中心。
姿态解算
提示:未作特殊说明情况下,以下向量均表示在世界坐标系下的向量,即O为坐标原点
对于1号腿,由几何关系易得:
O B 1 → + B 1 A 1 → = O O ′ → + O ′ A 1 → \overrightarrow{OB_1}+\overrightarrow{B_1A_1} = \overrightarrow{OO'}+\overrightarrow{O'A_1} OB1+B1A1=OO′+O′A1
由于 O ′ A 1 → \overrightarrow{O'A_1} O′A1为世界坐标系下的向量,可以根据机体坐标系下的向量乘以旋转矩阵得到,即
O ′ A 1 → = R ⋅ O ′ A 1 → 机体 \overrightarrow{O'A_1}=R \cdot \overrightarrow{O'A_1}_{机体} O′A1=R⋅O′A1机体
则
A 1 B 1 → = − O O ′ → − R ⋅ O ′ A 1 → 机体 + O B 1 → \overrightarrow{A_1B_1} = -\overrightarrow{OO'}-R \cdot \overrightarrow{O'A_1}_{机体}+\overrightarrow{OB_1} A1B1=−OO′−R⋅O′A1机体+OB1
由于在一条腿上,坐标原点位于关节位置,即A点,因此向量AB即代表B点在该坐标系下的坐标(x,y,z),原因可见上一篇文章四足机器人单腿逆运动学解-几何方法
同理可得四条腿足端坐标公式:
A n B n → = − O O ′ → − R ⋅ O ′ A n → 机体 + O B n → ( n = 1 , 2 , 3 , 4 ) \overrightarrow{A_nB_n} = -\overrightarrow{OO'}-R \cdot \overrightarrow{O'A_n}_{机体}+\overrightarrow{OB_n}\ \ (n=1,2,3,4) AnBn=−OO′−R⋅O′An机体+OBn (n=1,2,3,4)
matlab程序
输入为机器狗期望的位置和姿态,输出为四个脚的位置坐标。
function [rb_x,rb_y,rb_z,rf_x,rf_y,rf_z,lb_x,lb_y,lb_z,lf_x,lf_y,lf_z] = pose_control(row,pitch,yaw,pos_x,pos_y,pos_z)
b=0.4;
l=0.8;
w=0.7;
h=0.732;
R=row*pi/180 ;
P=pitch*pi/180 ;
Y=yaw*pi/180 ;
pos=[pos_x,pos_y,pos_z]';
rotx=([[ 1, 0, 0 ]
[ 0, cos(R), -sin(R) ]
[ 0, sin(R), cos(R) ]]);
roty=([[ cos(P), 0, -sin(P) ]
[ 0, 1, 0 ]
[ sin(P), 0, cos(P) ]]);
rotz=([[ cos(Y), -sin(Y), 0 ]
[ sin(Y), cos(Y), 0 ]
[ 0, 0, 1 ]]);
rot_mat = rotx * roty * rotz;
%结构参数
body_struct = ([[ l / 2, -b / 2, h]
[ l / 2, b / 2, h]
[ -l / 2, b / 2, h]
[ -l / 2, -b / 2, h]])';
footpoint_struct = ([[ l/2, -w/2, 0]
[ l/2, w/2, 0]
[ -l/2, w/2, 0]
[ -l/2, -w/2, 0]])';
leg_pose = zeros(3, 4);
for i= 1:4
leg_pose(:,i) = pos + rot_mat * body_struct(:, i) - footpoint_struct(:, i);
end
rb_x = (leg_pose(1, 1));
rb_y = -(leg_pose(2, 1));
rb_z = -(leg_pose(3, 1));
rf_x = (leg_pose(1, 2));
rf_y = (leg_pose(2, 2));
rf_z = -(leg_pose(3, 2));
lb_x = (leg_pose(1, 3));
lb_y = (leg_pose(2, 3));
lb_z = -(leg_pose(3, 3));
lf_x = (leg_pose(1, 4));
lf_y = -(leg_pose(2, 4));
lf_z = -(leg_pose(3, 4));
end
参考文献:
四足机器人的站立姿态控制原理

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)