目前在做一个5自由度机械手的问题。机械手由五节臂组成,靠五个关节运动实现机械臂末端的运动。现在是要求机械臂末端实现一个轨迹运动,我的思路是采用工控机(IPC)+运动控制卡+步进电机(驱动器)来实现。在上位机完成轨迹规划与轨迹的离散化,以及在每个关节的运动学计算,以求得在每个末端轨迹点所对应的5个关节的运动量。然后每隔一个固定的周期(初步定20ms),向下位机(运动控制卡)发送一次数据,然后运动控制卡再经过运算,向5个关节的步进电机发送脉冲,控制步进电机的运动,最终实现机械臂末端轨迹。我现在遇到的问题是这样的:
1.由于之前没有使用过运动控制卡,因此,运动控制卡是怎么协调5个电机的运动的?看了几款运动控制卡的使用说明,没有发现如何使用其完成协调控制功能?难道是使用其单轴控制函数,分别实现5个关节的控制?
2.上位机向运动控制卡发送的数据包括5个电机的运动距离和运动速度,这个运动距离和速度指的是一个运动周期内的距离和速度,也就是20ms,运动距离根据末端轨迹点和运动学计算可以求得,运动速度我的思路是求得的运动距离除以运动时间来求,而这个运动时间我理解为一个运动周期,也就是20ms。也就是说,要完成每个周期内的运动距离,运动控制卡要以给定的脉冲频率连续发送20ms才可以。而事实上,在每个运动周期里面(从运动控制卡接到上位机开始),运动控制卡本身需要运行一段程序,然后才能开始向外发送脉冲给步进驱动器,我的问题是,运动控制卡本身运行程序的时间是否会短到可以忽略不计?如果不能忽略不计,我假设这个时间是1ms(有些夸张),那么在每个运动周期(20ms)运动控制卡都会拿出1个ms来进行程序的运行,也就是每个运动周期过后,脉冲输出完成的时间延时都要增加1个ms,这样的话20个周期以后,缓冲区里面就会同时有两条数据指令(上位机发过来的数据不能及时地被控制卡执行)。以此类推,经过比较多的周期以后,从理论上来说,不管缓冲区有多大,运动控制卡的缓冲区都有被填满(溢出)的可能性,而缓冲区被填满的话上位机发送过来的数据是不能被控制卡接收的,这样的话这个数据指令就会丢掉(这个不是步进电机的丢步,是因为步进控制卡没有空余的缓冲区,不能接收上位机发送过来的数据指令)。而对于步进电机这种进行增量控制的驱动机构来说,丢失一个周期的脉冲是不可原谅的。不知道这样的问题该怎么解决呀?
急盼有经验的大侠的热心帮助,谢谢了。
刘版主,如果说需要向控制卡发送各个关节的运动距离(也就是脉冲个数)和运动速度(也就是脉冲频率的话),那么各关节的运动脉冲是由脉冲个数除以运动时间计算得到的,脉冲个数通过轨迹点和机器人的运动学计算可以得到,运动时间怎么确定呢?理论上说,这个运动时间应该是上位PC向运动控制卡发送数据的时间间隔,也就是我问题中说的20ms。事实上,前后相邻两次数据发送间隔的20ms里,控制卡是要拿出一部分时间进行程序运行的,这就减少了运动控制卡发送脉冲给电机驱动器的有效时间,因此这个脉冲是不是需要设置的稍微大于PC机向控制卡发送数据的时间间隔(20ms)呢?
谢谢了。
"刘版主,如果说需要向控制卡发送各个关节的运动距离(也就是脉冲个数)和运动速度(也就是脉冲频率的话),”
首先,一般很少有人这么用卡的,大把的银子买来的卡,仅仅作为一个脉冲转发器来用,可惜可惜啊!
“那么各关节的运动脉冲是由脉冲个数除以运动时间计算得到的,脉冲个数通过轨迹点和机器人的运动学计算可以得到,运动时间怎么确定呢?"
你上位做的运动学解算,你在做解算时是如何考量各个轴(轨迹及时间)?
考量了各个轴的轨迹(解算后的),担心执行时各轴之间的联动,可以在卡上开发底层程序,上位给卡的只要是数组变量即可,各轴的协同、插补可由卡来完成
“首先,一般很少有人这么用卡的,大把的银子买来的卡,仅仅作为一个脉冲转发器来用,可惜可惜啊! ”
这样使用也不是仅仅作为一个脉冲转发器呀,还是使用了运动控制卡的多轴协调运动功能,也就是使用了他的多轴插补函数
“你上位做的运动学解算,你在做解算时是如何考量各个轴(轨迹及时间)?”
这个时间跟上位的运动学结算没有关系吧?根据末端轨迹点坐标就可以利用运动学计算得到各关节长度,与上个轨迹点对应的各关节长度只差就是本周期各关节的运动量。也就是说,本周期各关节的运动量只是取决于本周期进行运动学计算的离散轨迹点距上个周期进行运动学计算的轨迹离散点的相对距离,而这个相对距离就是这个周期的末端运动速度乘以时间,这里的时间也就是就是相邻两轨迹点之间的时间。而如果运动控制卡在收到本周期各个关节的运动量和运动速度(也就是脉冲个数和脉冲频率),也按照刚才说的时间去插补运算的话,那么在这个时间内是不能输出要求个数的脉冲的,因为运动控制卡需要拿出一部分时间用于运行卡上程序,即使这个时间非常小。
“如果我是PC机每隔固定的时间向运动控制卡发送一次数据,而在某个时刻,有数据发过来,而运动控制卡的缓冲区又满了,那这个数据不是丢失了吗?”
如果您的PC程序在发送数据中不包括检查缓冲区状态,这是您的编程问题。
“对于机械手这样的各个驱动轴不是正交的,相互在空间的位置关系比较复杂的多轴控制系统,也有多轴控制卡可以完成轨迹规划与控制么?可否推荐一款这样的产品?我一直没有找到有类似功能的控制卡。多谢 ”
这个,恐怕不好找,一般运动控制卡在计算插补的矢量速度时,都默认各轴速度正交。实际机械设备中,各轴的空间关系可以是千变万化的,任何控制卡不可能涵盖所有的机械结构。如果是多关节的机械手,您就认命吧,不要指望通用运动控制卡了。