ServoJ
功能说明
ServoJoint
指的是通过带有内置控制系统的伺服电机精确控制机械臂关节运动的方式;该 servoJoint
接口表示在关节空间伺服位置(线性)。
1. ServoJ
接口相关说明
1.1 接口的参数说明
// ServoJ关节空间伺服
/**
* 参数说明:
* q: 目标值,指六个关节的弧度。
* a: 加速度,暂未实现。
* v: 速度,暂未实现。
* t: 期望命令控制机器臂的运动时间[s]
* lookahead_time: 指定机器人开始减速前要运动的时间长度,用这个提前时间来平滑轨迹[0.03, 0.2],当lookahead_time小于一个控制周期时,越小则超调量越大,该参数最优值为一个控制周期。暂未实现。
* gain: 跟踪目标位置的比例增益[100, 200],用于控制运动的顺滑性和精度,控制增益越大,到达目标位置的时间越长,超调量越小。暂未实现。
*/
int servoJoint(const std::vector<double> &q, double a, double v, double t,
double lookahead_time, double gain);
1.2 调参方法
- 设置
t
值(t>=0.005),t
值越大,机器臂运动的越慢,反之, 机器臂运动的越快; - 运行
servoJoint
示例,调整std::this_thread::sleep_for()
的参数来模拟网络延迟;
备注: 目前
servoJoint
接口的可用参数有q
和t
,q
表示下发给机器臂的目标轨迹点,t
表示期望上一个点到当前点的运行时间;当这个t值设置为连续调用servoJoint
接口的间隔时间时,效果理论上最好;
1.3 使用条件
为保证实时性,请使用Linux
系统,以及有线网络进行链接;
1.4 自动退出机制说明
ServoJ
功能有自动退出 servo
模式的机制,退出 servo
模式后,不能继续控制机器臂运动,只能重新进入 servo
模式;
自动退出机制包括:
- 通过
SDK
调用stopJoint/stopLine/abort
等接口,会自动退出servo
模式; - 当进入了拖动模式,会自动退出servo模式;
- 长时间没有收到
servoJoint
指令(期望的运动时间t
的 5 倍),会自动退出servo
模式;
当退出 servo
模式后,要想继续使用 ServoJ
功能,必须使用 SDK
调用 setServoMode(true)
重新进入 servo
模式;
1.3 典型应用场景
- 适合精确、稳定运动控制的应用,如装配、细胞分离、电子元器件组装等;
- 适合需要需要较大扭矩和精度的应用,如机械加工、汽车制造等;
- 适合需要适应多种固定及非固定形状工件的应用,如模具制造、物料搬运等;
1.4 问题处理
问题一:机器臂抖动
- 排查网络通信是否正常,使用有线网络链接;
- 为提升实时性,可使用带有实时内核的
Linux
系统; - 排查下发的轨迹点的时间间隔是否均匀连续,可适当调大
t
值;
问题二: 机器臂运动一段时间不动了
会出现以下日志:
- 由于客户自己写的程序调用
servoJoint
接口时间不均匀,某次调用的间隔时间过长(超过t*5s),触发了自动退出机制; 可适当调大t
值,重新运行程序;
2. 测试
考虑因素:系统的CPU处理能力、存储器大小、带宽、延迟等因素;
系统平台测试:
windwos
平台(无实时补丁)linux ubuntu16.04
平台(无实时补丁)linux ubuntu16.04
平台(有实时补丁)
性能测试:
采用基准测试方法:比较周期时间、最大负载测试、传输效率测试、实时性能测试;
注意: 运行 servoJ
示例时,要等程序执行完毕,不可中途中断,否则开启servo
模式后会没有关闭。
2.1 测试前准备工作
2.1.1 网络和防火墙设置
ARCS软件网络配置:
https://docs.aubo-robotics.cn/application_notes/26-arcs-networkconfig/
这里在 linux ubuntu16.04
平台(有实时补丁) 下使用有线静态网络配置
2.1.2 查看 linux ubuntu16.04
平台有无实时补丁
步骤:
打开终端。
运行命令:
uname -r #此命令将显示当前正在运行的内核版本号
如果内核版本号的末尾包含
-rt
(例如:4.14.195-rt94
),则表示该内核已经安装了实时补丁;如果没有-rt
标记,则当前机器上没有实时补丁。
2.2. 使用 SDK
中 ServoJ
的示例进行测试
2.2.1 测试流程
说明:
在各个系统平台中进行测试时,将要测试的例程绑定到孤立CPU
上,调用ServoJ
接口,调整参数,通过绘图分析采集的数据和触摸观察机器臂抖动现象来确定测试结果。
example_servoj2
的示例代码
执行结果:
2.2.1.1 windwos
平台(无实时补丁)
配置好网络,并测试网络连通性。
执行
example_servoj2
的测试示例。
记录结果。
采用实时系统,设置实时进程,将实时进程绑定到孤立
CPU
上,调用servoj
周期为5ms
,定性分析
用手感知机器臂,抖动十分明显,肉眼可见。
定量分析
从下面的图中,可以分析出机器臂明显振动。
2.2.1.2 linux ubuntu16.04
平台(无实时补丁)
配置好网络,并测试网络连通性。
执行
example_servoj2
的测试示例。
记录结果。
采用实时系统,设置实时进程,将实时进程绑定到孤立
CPU
上,调用servoj
周期为5ms
,定性分析
用手感知机器臂,中间运动过程有轻微抖动,跟在
linux ubuntu16.04
平台(有实时补丁)下相比,抖动较明显;但在上升和下降的过程中抖动不明显。定量分析
从下面的图中,可以分析出机器臂基本不振动。
2.2.1.3 linux ubuntu16.04
平台(有实时补丁)
步骤:
配置好网络,并测试网络连通性。
执行
example_servoj2
的测试示例。
记录结果。
采用实时系统,设置实时进程,将实时进程绑定到孤立
CPU
上,调用servoj
周期为5ms
,定性分析
用手感知机器臂,机器臂上升和下降的过程中会有点抖动,中间运动过程中没有抖动现象。
定量分析
真实机器臂(控制柜中运行
aubo_control
)从下面的图中,可以分析出机器臂基本不振动。
仿真机器臂(虚拟机中运行 aubo_control
)
从下面的图中,可以看到在 hw joint speed
图中,机器臂在上升和下降的过程中有点抖动。
<img src="pics/servoj-rt-f/servoj-rt-1.png" style="zoom: 67%;" />
2.2.2 测试结果
系统平台 | CPU | 测试结果 |
---|---|---|
windwos 平台(无实时补丁) |
11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz |
振动明显 |
linux ubuntu16.04 平台(无实时补丁) |
11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz |
稍微振动 |
linux ubuntu16.04 平台(有实时补丁) |
控制柜(真实机器臂):Intel(R) Celeron(R) CPU N3160 @ 1.60GHz 虚拟机(仿真机器臂): 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz |
基本不振动 |
2.2.3 测试结果对比分析
从上面的分析结果中可得,机器臂振动的程度:windwos
平台(无实时补丁) > linux ubuntu16.04
平台(无实时补丁) > linux ubuntu16.04
平台(有实时补丁)。其中 linux ubuntu16.04
平台(有实时补丁) 的效果最好,linux ubuntu16.04
平台(无实时补丁) 和 linux ubuntu16.04
平台(有实时补丁) 的效果差别不明显,windwos
平台(无实时补丁)的效果最差,振动明显。