一 概述
近几年,随着各类总线控制技术的成熟,机器人上用的伺服驱动器已经逐步过渡到总线类型,尤其是EtherCAT和CANopen。针对以上两种总线,都有相应的控制器解决方案。为了进一步方便用户定制自己的控制器,下面介绍一种半开源的平台,方便用户结合自己的应用逻辑来开发独具特色的机器人控制器,主要特性有:
- 适配多种常见构型,Delta,SCARA,直角坐标,码垛机器人,6轴机械臂等;
- 全功能仿真模式,只需要一块板卡就能完成所有指令的测试与仿真计算;
- 支持客户特殊构型,需要定制相关正逆解;
- 支持多种总线伺服,EtherCAT,CANopen等;
- 包含1个用户设置流程和5个周期性用户任务,开放给用户使用;
- 支持空间直线,圆弧,样条曲线插补轨迹;
- 多运动曲线之间轨迹平滑与前瞻;
- 支持定制其它客户需求;
二 机器人控制架构
一个完整的机器人控制器,软件上包含了诸多模块,从简化的角度看,主要有以下模块,如图1所示。
图1 机器人控制器组成
图1中的模块,是组成一个机器人控制系统的最少模块,其余一些辅助模块,就不一一列举了。在开放型控制器中,通信模块的介质,是可以根据用户需求来更改的。例如使用以太网,485,232都可以。其余模块,例如伺服驱动模块,对应了不同品牌的伺服电机。正逆解模块中,已经标配了几种常见的构型,例如Delta,SCARA,UR,ARM6关节机械臂,三坐标加工,码垛机器人等。同时支持用户来定制。剩余模块,功能基本固定。例如插补模块,具备三维直线,圆弧,样条曲线功能。
三 使用方法
开放型控制卡采用工业款EtherCAT主站卡为载体,提供基础功能库,方便客户进行二次开发,具体方法如下:
对于用户开放的模块是user.c和main.c
其中main.c中,定义了整个程序的主体框架,如图2所示。
图2 开放控制卡主函数
在初始化设置部分,提供控制卡本身的初始化函数Bant_setup,以及开放给用户使用的设置函数Task_user_setup,这个函数本身在user.c中定义。main函数的其余部分不需要变化。对于用户来说,所有的工作都在user.c中完成,目前控制器的框架中已经预留了5个周期任务和1个设置任务用于客户定制,分别如图3所示。
图3 客户定制函数
截止目前,开放了5个固定周期的任务,里面以一个心跳灯为例,给出了使用方式,注意,用户任务中不能出现死循环的情况。
四 通信协议
默认采用自己的控制器协议,也支持客户定制。
图4 班特机械臂通信协议
指令详解
下面逐条解释和举例说明指令的使用,建议第一次使用的时候,从仿真模式开始
4.1 M01
多轴关节指令,这个指令用于多轴同步运行到一个指定位置,指令带多个参数,一个轴一个参数,为了表达所需要的精度,采用0.01度的形式。例如
M01 2000 3000 -2500 1200 0 0
就是让前面四个轴从当前位置,运动到20度,30度,-25度和12度的位置,位置可以是负数,表达方向。
4.2 M02
笛卡尔空间直线插补指令,该指令用于将机器人末端TCP点以直线插补的形式运行另外的指定位置,例如
M02 2000 1500 0 0 0 0
坐标的单位以0.01mm表达,上面的指令让TCP运行到x=10mm,y=20mm的位置
4.3 M03
急停,该指令用于紧急停止当前的机器人动作,不带参数
4.4 M04
清错,用于恢复机器人状态,需要用M04恢复。
4.5 M05
归零,用于一键回零位
4.6 M06
单轴运动,用于控制单个轴运动,参数是轴号和角度,角度的含义参考M01
M06 2 3000 0 0 0 0
用于把第2号轴运行到30度的位置,轴号从0开始
4.7 Q01
获取固件版本,回复为当前固件的版本号
4.8 Q02
获取内部调试变量,例如
robot_state = RO_STAND_STILL
sim_mode = 1
tick = 1768
path=-341.147,196.962,-3000.000,140.000
joint=-2000.000,-20.000,-3000.000,0.000
上面数据表明机器人的状态,仿真模式,以及关节位置和笛卡尔位置
4.9 S01-3
用于设置TCP的加速度,减速度和速度
S01 1000 0 0 0 0 0
设置加速度为10mm/s2
4.10 S04
启动CSP模式
4.11 S07
设置仿真模式,1为仿真,0为带电机模式
4.12 S09
切换运动缓冲模式,默认不缓冲,不能多条指令连续运行
4.13 P01
数字量输出,P01 4 1用于第四个端口设置为高
4.14 I01
获取数字量输入
4.15 E01
清空指令队列
4.16 E02
执行队列指令
下面,采用一个完整的例子来说明指令的使用流程。
指令使用案例
启动控制卡以后,串口打印欢迎信息,如下
welcome to Bant Robot control: ver=15,bdtime=20240419
please select the mode S07 1 for simulation,S07 0 for run with motor
首先要求用户选择仿真模式或者实际模式,在电机和设备没有就绪前,可以运行仿真模式;或者不清楚目标位置是否可行的情况下,也可以先仿真运行。
1. 输入S07 1指令后,出现
exec_S07 init ecat sim_mode=1
Bant_hardware init start
you choose sim mode
2. 使用S04指令进入CSP模式,打印信息
exec_S04 enter CSP mode
接下来,就可以输入运动指令了。
3. 例如使用单轴运动指令M06,发送完成后,串口回传
exec_M06 cmd_buff_mode = 0
用来表明已经接受并且执行M06指令,当前指令缓冲模式为0,也就是立即执行
此时,可以用Q02指令来查询当前位置信息
robot_state = RO_STAND_STILL
sim_mode = 1
tick = 90
path=346.410,-200.000,0.000,-30.000
joint=-30.000,0.000,0.000,0.000
当前已经运行到指令的目标位置
4. 再测试一个直线插补指令,M02
M02 1000 -3000 0 0 0 0 0
robot_state = RO_MOVE
sim_mode = 1
tick = 314
path=95.515,-73.214,0.000,-7.626
joint=-109.961,144.981,0.000,-42.646
robot_state = RO_STAND_STILL
sim_mode = 1
tick = 440
path=10.000,-30.000,0.000,-0.000
joint=-157.031,170.931,0.000,-13.901
单个指令就介绍到这里
控制卡允许采用指令缓冲的形式,可以一次下发多条指令,从而实现连续运动,例如:
S09
E01
M01 3000 5000 6000 8000 2000 1000
M02 4500 3200 0 0 0 0
E02
这样上面两条运动指令会连续执行。
记住,每次运行前,需要使用E01来复位,才能开启新一次运动。如果要启动缓存模式的运动,要先使用S09指令切换模式。
exec_S09 cmd_buff_mode = 1
exec_S09 cmd_buff_mode = 0
多次执行S09可以从0和1之间切换
五 使用效果
图5 平面直线
图6 平面圆弧
图7 空间直线,圆弧,样条曲线组合
好了,开放型控制器的介绍到此为止。后面会陆续更新关于这个控制器的一些应用和使用上的细节。希望能帮助到大家快速开发自己的机器人控制器。大家有什么疑问,可以在评论区提出来,谢谢。