在完成robotics fundamental week3作业的时候,我发现要求求正向动力学矩阵,但是在绘制workspace的代码中并没有体现,而是使用了常规的没有难度的几何法,我想肯定是有联系的。
这样的联系应该就是:Forward kinematics homogeneous matrix表示了rotation和translation的关系(如图),利用此矩阵和最后一个frame中end-effector的相对坐标齐次矩阵相乘的结果是绝对坐标,也就是几何法求出来的坐标。
老师只讲了理论知识,没有进行case studies,所以我在理解这个的时候因为各种小错误还开始怀疑起理论。通过本文,我补充没有完成过的case studies,以此夯实基础。
思考
鉴于计算结果不一致,思考以下问题:
- DH frame应怎么构建,尤其是X轴方向
- DH参数如何取值
- End-effector相对坐标如何表示
这些都是DH convention中我暂时不确定的地方,确定之后,应该可以计算出一致的结果。
Case Studies
RR serial manipulator
下面来看一个分析方法案例,思考这样分析有什么问题?
可以看出,我已经在纸上写出来了,问题就是出在Z轴选取方向以及X轴方向(emmm都错了很惭愧,说明case studies的重要性了)。我们对于旋转角的正负是有默认的规定的。那就是:
俯视旋转轴,或者规定旋转轴为垂直纸面向外,其余两个坐标轴的平面绕旋转轴逆时针旋转时,规定旋转角为正。
上面的分析案例,就是把Z轴规定到反向了。我们回归到文章开头说的思考问题。第二个问题中,DH参数的选择因此必须加上负号,这是错误的,必须为正号。然后由于X轴方向不正确,会导致end-effector的相对坐标写错。至于为什么,接着看正确案例。
这才是正确的DH convention解决过程。
重新看两个重要的DH frame构建原则(也是容易犯错的两个原则):
$Z_0$最好是和$Z_1$一致,避免分析混乱
The base frame {0} is arbitrary. For simplicity chose $Z_0$ along $Z_1$ axis when the first joint variable is zero.
$X_0$沿着$Z_i$和$Z_{i+1}$之间的公共法线,而不是看$\theta$是不是0哦!
Assign $X_i$ axis pointing along the common normal ($a_i$) in the direction from $Z_i$ axis to $Z_{i+1}$ axis. In the case of $a_i=0$, $x_i$ is normal to the plane of $Z_i$ and $Z_{i+1}$ axes.
解决了规范性问题,然后我把DH 矩阵的MATLAB代码写错了……
这两个应该是正号,现在想来应该是这里写错了,Z/X轴和相对坐标我的表示只要能自圆其说就可以了吧。不过还是按照上述正确标准来做。
RRRR serial manipulator
回到4R manipulator分析(下图是不正规的建模,现在开始就算做是不正确的):
正确建模为:
算不出正确结果???是这里代码错了
90/pi*180
,我写的啥代码啊。。。以后还不如90/180*pi
这样好看懂。
现在都一样了。
Case studies conclusion
总结一下,出现的什么错误才是致命错误:
- 代码写错了(角度表示,方向和角度制转换)
- DH convention的Z/X轴及角度和Geometry未统一
那以后写代码要注意什么?
- 首先建模一定要正确,图形要画好,大方,规整,色彩分明
对于代码的格式,我已经做得很不错了。改进一点:
- 矩阵数据要利用tab排成矩阵型
MATLAB 代码 (RRRR)
|
|
函数代码详见: