【RoboDK-01】关于RoboDK.cs这个接口的Q&A
问题1:
一直以为RoboDK.cs里的一些函数是这么用的:
public static RoboDK.Item ROBOT;
...
Mat toDoubles = ROBOT.ToDoubles(xxx);
或者是
using RoboDK;
.....
解决1:
应该是
public static RoboDK.Item ROBOT;
Mat pose_ref = ROBOT.Pose();
Mat fromUR = pose_ref.FromUR(double[]);
ps:该笔记只是为了记录bug修复过程 不具有参考价值
问题2:
在之前的代码中一直无法解决机器人转角的问题,如图红色框内部分一直不能变换。
查看原始代码:
target_pose.setPos(x, y, z);
...
ROBOT.MoveL(target_pose);
从这两行可以看出,target_pose
负责接收x y z
坐标信息,而ROBOT.MoveL
负责发送信息,因此本人就一直在RoboDK.cs这个开源api中找关于target_pose.setPos()
相关是否有target_pose.setRotation()
之类的可以控制机器人旋转角的函数。
结果找了两周,一直没找见直到发现RoboDK.setJoints()
这个函数可以控制每个关节的转动角度,我就发现事情也许没那么简单,然后我就寻觅着找到setPose()
这个函数!
解决2:
ROBOT.setPose(target_pose*rx*ry*rz);
就是这个函数,是可以控制机器人旋转角,并且由于target_pose
和rx ry rz
这四个函数已经在前面的转换中变成了4X4矩阵的形式,而且各自独立,因此是可以直接相乘的,至此我们可以得知RoboDK在写这个api时一直强调要把所有的坐标变换以及角度转换都转化为4X4Mat的原始初衷就是为了后面可以方便相乘。
ps: 这个灵感来自于 RoboDk python api
这里要狠狠的吐槽一下RoboDK没有把C#api做详细介绍书,只给了python的介绍,就导致很难受啊我要从python翻译到C#
问题3:
在以前的代码中,由于RoboDK的频率和Unity3D的刷新频率不一致,使用LateUpdate()会导致RoboDK出现卡顿抖动的现象。
改为FixedUpdate()则很丝滑。
查阅网上的原因归结为,FixedUpdate()使用的是固定的频率50Hz,而LateUpdate()是慢于Update()。