开放型机器人控制器-1(介绍)

本文介绍了近年来机器人控制器的发展趋势,重点介绍了一种半开源平台,它支持多种机器人构型,全功能仿真,可适应用户定制,包括适配EtherCAT和CANopen总线,详细讲解了控制器的结构、使用方法、通信协议及示例指令。
摘要由CSDN通过智能技术生成

 概述

        近几年,随着各类总线控制技术的成熟,机器人上用的伺服驱动器已经逐步过渡到总线类型,尤其是EtherCAT和CANopen。针对以上两种总线,都有相应的控制器解决方案。为了进一步方便用户定制自己的控制器,下面介绍一种半开源的平台,方便用户结合自己的应用逻辑来开发独具特色的机器人控制器,主要特性有:

  1. 适配多种常见构型,Delta,SCARA,直角坐标,码垛机器人,6轴机械臂等;
  2. 全功能仿真模式,只需要一块板卡就能完成所有指令的测试与仿真计算;
  3. 支持客户特殊构型,需要定制相关正逆解;
  4. 支持多种总线伺服,EtherCAT,CANopen等;
  5. 包含1个用户设置流程和5个周期性用户任务,开放给用户使用;
  6. 支持空间直线,圆弧,样条曲线插补轨迹;
  7. 多运动曲线之间轨迹平滑与前瞻;
  8. 支持定制其它客户需求;

二 机器人控制架构

一个完整的机器人控制器,软件上包含了诸多模块,从简化的角度看,主要有以下模块,如图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 空间直线,圆弧,样条曲线组合

好了,开放型控制器的介绍到此为止。后面会陆续更新关于这个控制器的一些应用和使用上的细节。希望能帮助到大家快速开发自己的机器人控制器。大家有什么疑问,可以在评论区提出来,谢谢。

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值