机器人仿真
想借助 matlab robotics toolbox 来仿真机器人,但是直接输入自己的 DH table 显示出来的 robot 和实际不情况不符。
DH table 建立 robot
Build Manipulator Robot Using Kinematic DH Parameters
主要使用 setFixedTransform
,DH table 中都是数值,不带变量
robot = rigidBodyTree;bodies = cell(6,1);
joints = cell(6,1);
for i = 1:6bodies{i} = rigidBody(['body' num2str(i)]);joints{i} = rigidBodyJoint(['jnt' num2str(i)],"revolute");setFixedTransform(joints{i},dhparams(i,:),"dh");bodies{i}.Joint = joints{i};if i == 1 % Add first body to baseaddBody(robot,bodies{i},"base")else % Add current body to previous body by nameaddBody(robot,bodies{i},bodies{i-1}.Name)end
end
原因一 theta 角度中的 固定偏置 默认被忽略
setFixedTransform
会默认忽略 旋转关节 theta 角度中的固定偏置,看帮助文档
The theta input is ignored when specifying the fixed transformation between joints because that angle is dependent on the joint configuration.
感谢 matlab 论坛 的资源
由于固定忽略偏置,需要手动设置 home position,并在后续计算中,对 theta 角度手动加上这个偏置
robot.Bodies{2}.Joint.HomePosition=-pi/2;
robot.Bodies{4}.Joint.HomePosition=pi/2;
原因二 参数错了
检查 DH table 中的 角度 与 长度 是不是错了,尤其是长度部分的数值。
原因二 DH table 建立方式不符合matlab标准
检查 DH table 建立方法,常见有两种,参考下面两个作者的书
- John J. Craig ----- Introduction to Robotics Mechanics and Control
- Bruno Siciliano ----- Robotics, Modeling, Planning and Control
Matlab setFixedTransform
采用 Siciliano方法,帮助手册有写
- A — Length of the common normal line between the two z-axes, which is perpendicular to both axes
- α — Angle of rotation for the common normal
- d — Offset along the z-axis in the normal direction, from parent to child
- θ — Angle of rotation for the x-axis along the previous z-axis
Craig
Siciliano