【发布时间】:2012-05-02 20:14:51
【问题描述】:
我正在进行一个涉及显微镜(将摄像头连接到观察端口;视频馈送流式传输到我们正在开发的应用程序)和机械臂的研究项目。显微镜和机械臂都由 Luigs & Neumann 控制盒控制(非常陈旧 - 计算机通过串行电缆与其连接,响应时间很慢www。)显微镜可以在 3 个维度上移动; X、Y 和 Z,它们的轴彼此成直角。查询该框时,它将返回每个设备每个轴的位置的十进制值。可以向每个设备发送命令以移动到特定位置,精度为亚微米。
但是,机械臂可在所有 3 个维度上进行调整,因此无法保证其任何轴都以直角对齐。我们需要能够查看来自摄像头的视频流,然后单击屏幕上我们希望机械臂尖端移动到的点。因此,必须校准两个坐标系。
目前,我们通过将显微镜/摄像头的位置移动到机械臂的尖端,将其设置为两个坐标系之间的同步点,并在X方向移动机械臂+250um,来实现校准,移动将显微镜移动到这个新位置的机械臂尖端,然后使用这些值之间的差异来定义一个 3d 矢量,该矢量对应于机械臂移动的距离和方向,在显微镜坐标系中的每单位。对机械臂的每个轴重复此操作。
获得此数据后,为了将机械臂移动到显微镜坐标系中的特定位置,程序可以求解方程组,该程序确定将机械臂在每个轴上移动到将其移动到屏幕的中心点。到目前为止,这非常可靠。
我们在这里遇到的问题是,由于设备的响应时间较慢,可能需要 5-10 分钟才能完成校准过程,由于机械臂的尖端必须在实验期间偶尔更改,需要重复校准过程。我们的研究对时间相当敏感,这在该过程中造成了重大瓶颈。
我的线性代数有点不完整,但如果我们测量显微镜坐标系中每个单位的机械臂尖端行进的单位,并将其硬编码到程序中(目前),它似乎可能可以一次将机械手的所有 3 个轴移动特定的量,然后从该信息中导出每个轴的向量。我不太确定如何去做(或者是否可以这样做),任何建议都将不胜感激。如果您需要任何其他信息,或者您需要澄清任何事情,请告诉我。
【问题讨论】:
-
你确定机械臂是在x、y、z方向控制的吗?通常机器人手臂由每个关节的绝对或相对角度控制。还是控制框已经将 (x,y,z) 转换为关节角度?
-
嗯,电机通过某种螺钉运行,使它们沿轴直线移动。它们非常简单 - 只需将 3 根轴用螺栓固定在一起。
-
我明白了。除非轴承和结构有太多的间隙,否则人们会期望机械手轴和显微镜轴之间的对准偏差相当恒定。如果是这种情况,您应该能够使用坐标变换来纠正偏差。例如。在您的草图中,手臂的 x 轴不垂直于 y 轴。因此,在 x 中的移动将同时改变笛卡尔坐标系中的 x 和 y 值。所以你必须将位移向量 (x,0,0) 与一个 3x3 矩阵相乘才能得到笛卡尔位移 (x,y,z)。
标签: python linear-algebra robotics calibration