机器人仿真
想借助 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:6
bodies{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 base
addBody(robot,bodies{i},"base")
else % Add current body to previous body by name
addBody(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
文章来源:https://www.toymoban.com/news/detail-794224.html
Siciliano
文章来源地址https://www.toymoban.com/news/detail-794224.html
到了这里,关于Matlab 使用 DH table 建立的 robot 和实际不符的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!