LinuxCNC的分支,MachineKit的使用文档

LinuxCNC的分支,MachineKit的使用文档翻译
代码提示
阅读对象:
这个文档一个关于MachineKit内部的知识集合。主要针对的是开发者,但是系统集成者或者其他想知道MachineKit是怎么工作的人也可以从这里获得很多知识。本文档中的许多信息可能已经过时,没有被准确的评估过。

组织
本文将在每个章节介绍MachineKit的主要组件,以及各个组件是如何联合工作的。

术语和定义
“AXIS” —— 一个轴是九个自由度的之一。 这九个自由度定义了在三维笛卡尔坐标系中定义的工件坐标(焊枪,割枪,机械手顶部)。这九个轴分别是X,Y,Z,A,B,C.U.V和W。其中,线性直角坐标X,Y,Z决定了工件的尖尖一点的位置。球坐标系A,B,C决定了工件的方向。第二组指教坐标系U,V, W,用于工件的预置的摆动和旋转轴的运功 (个人理解,以人的右手食指为代表, X,Y, Z 代表的是 指尖的位置,A B C代表的是手指的方向。 U V W 可能是指尖上又安装了一个可以动的针 ,(猜测))

不幸的是,“轴“有时候也用来定义一个机械本身的一个自由度,例如具有马鞍、平板和滚轴型的布里奇波特的铣床。在布里奇波特里这样描述没有问题,因为操作台运动的方向与X轴一致。但是,类似人的手臂的机器人手臂和六足机器人不能以笛卡尔坐标系进行移动,事实上区分笛卡尔坐标系和机器自由度是十分重要的。在这篇文章中,我们称自由度为“关节”,而不是“轴”。(在图形界面上和其他一部分代码不是按照这个区别,只是控制器内部这么定义的)

“JOINT” 表示机器的一个可移动部件,即关节。关节区别于轴,虽然有时代表的同一个东西。在MahineKit里,一个关节就是一个可以移动的物理装置,不是在坐标系上。例如:滚轴,升降台,纵向,横向操作台都是关节轴。机器人手臂的肩膀,肘部,手腕都是关节以及六足爬行器的角。每一个关节都有一个电机。虽然在运动学上机械的关节和轴有可能对应,但是关节没有必要和X,Y,Z轴对应。在有的机器上,关节位置和轴的位置也许不是同一个东西。在本文中,术语“joint”和“axis”代表不同东西,要加以区分。但是不幸的是,有的地方没有加以区分。事实上,机器的GUI的部分可能隐藏了关节和轴的区分。此外,ini文件的术语“axis”的数据实际上有可能是关节轴的数据,例如输入输出计算脉冲。
“POSE” 一个三维的笛卡尔坐标系的完全位置。在MachineKit中,指的是X,Y,Z和A,B,C。
架构概述
MachineKit架构包含了四个组件:运动控制器(EMCMOT)、离散型IO控制器(EMCIO)、任务执行器(EMCTASK,是运动控制器和IO控制器的纽带和协调者,相当于进程管理器负责进程调度,这里是负责调度运动和IO输入输出的顺序)、文本呢模式和图形模式的用户接口。
这些将会从设计者和二次开发者的角度会介绍这些组件。

补充:
1. 位置运动学仅考虑运动中的几何学问题,即不考虑运动与时间的关系。已知关节空间的关节变量,计算操作机在操作空间的手部姿势,称之为运动学正问题。反之,已知操作机在操作空间的手部位姿,求各关节变量的反变换,称之为运动学逆问题,也叫作求手臂解。

MachineKit软件架构。

MachineKit架构图

MachineKit的软件结构。在最底层,MachineKit是一个有层次结构的控制器:任务层的命令执行器和程序解释器,一个运动控制器,和一个离散的IO控制器。离散的I/O控制器被实现成一个控制器层,包含了 主轴,冷却,辅助(平衡、润滑油)等子系统。任务控制器协调运动控制器和离散的I/O控制器层。他们的动作被数值化为G和M指令的程序。这种程序被任务控制器解释成NML消息,并在适当的时间发送到每个运动控制器和离散的I/O控制器。

运动控制器介绍

运动控制器通过用户模块的的共享内存的缓存数据,并实时执行这些指令。用户模块也通过共享内存获得控制器的状态。运动控制器使用HAL和电机或其他硬件设备通信。此文档针对的是对HAL有一定了解,不需要再解释例如使用HAL pins 、HAL signals 组件等等。

这里写图片描述

框图和数据流
下图是一个关节控制器的联合光库。这里一个关节控制器控制一个关节。关节控制器在比运动学低的层级运行。这个层级所有的关节都是完全独立的。每个关节的所有数据都在一个结构体里。在结构体中的有些成员在本框图中可见,例如coars_pos, pos_cmd还有motor_pos_fb等等。
这里写图片描述

关节控制器框图
上图展示了来自运动控制器的主要数据流的七个位置信息中的五个。七个位置信息的形式如下所示:

  1. “emcmotStatus->carte_pos_cmd” ,这是笛卡尔坐标系中的一个期望坐标。在路径规划周期更新,而不是在伺服周期更新。在坐标模式下(coord mode), 轨迹规划器负责更新这个值;这操作模式下(teleop mode),也是由轨迹规划器负责;在自由模式下(free mode),从actualPos拷贝到这个值中,或者是由(2)或者(3)正向运动学解方程得到。
  2. “emcmotStatus->joints[n].coarse_pos”,这也是笛卡尔坐标系中的一个插补之前的期望坐标。也是在路径规划周期更新。在坐标模式下(coor mode)和操作模式下(teleop mode)由cart_pos_cmd运动学反解得到,在自由模式下(free mode)通过拷贝”emcmotStatus->joints[n].pos_cmd”的值得到。
  3. ”emcmotStatus->joints[n].pos_cmd“,这是一个关节坐标系中插补之后的期望坐标。在伺服周期内生产这些坐标。在坐标模式(coord mode)和操作模式(teleop mode)由插补器(interpolator)根据”emcmotStatus->joints[n].coarse_pos“产生这些值;在自由模式下(free mode),有路径规划器产生。
  4. ”emcmotStatus->joints[n].motor_pos_cmd’“ 这一个电机坐标系中的期望坐标。 电机坐标通过加上螺距补偿、间隙补偿和零点偏置。忽略模式区别。并将值输出到PID 循环或者其他位置循环。
  5. ‘emcmotStatus->joints[n].motor_pos_fb’ 这是电机的实际坐标,通过采集编码器或者其他硬件的反馈(在开环系统中,读取的是虚拟编码器)。
  6. ‘emcmotStatus->joints[n].pos_fb’ , 这是关节的实际位置。通过减去相对于”emcmotStatus->joints[n].motor_pos_fb”的零点偏置、螺距补偿、间隙补偿。忽略模式。
  7. ‘emcmotStatus->carte_pos_fb’ ,这是笛卡尔坐标系的实际位置。在规划周期内更新,实际坐标(actualPos)总是通过由”emcmotStatus->joints[n].pos_fb“运动学正解计算得到。但是正解有时无效或者不可用,比如有关节没有回零。这种情况下,有如下几种选择:A)做一个假的实际坐标(从emcmotStatus->carte_pos_cmd拷贝得到)。B)我们不知道笛卡尔坐标系坐标,不能简单的更新实际坐标(actualPos)。不管哪种方法,都是忽略模式。我给出以下建议:如果是运动学正解,使用它们,除非由于没有回零或者其他原因不工作。在这种情况下使用B。如果没有运动学正解,使用A。否则实际坐标(actualPos)将不会更新。
阅读更多

没有更多推荐了,返回首页