经历了近一个月的安装和接线调试,俺们手上的这个铁玩意总算快进入到整机调试阶段了,这周控制器厂家的工程师来指导我们调试,在此记录一下本周的工作进展和调试心得:
1.成功连接驱动器并调试
在这周之前,经过十几天倒腾,已经基本把各个模块都独立调试完了,剩下一个电机驱动器始终拿不下来,究其原因,就是我确实没用过CANOPEN协议的设备,CAN总线在学校的时候玩单片机倒是有接触过,但是仅仅是收发数据,并没有上升到应用层协议的数据传输,经过厂家工程师指导和自学,现在好歹是懂了一点,其实CANOPEN的使用就两种方法:
- 导入厂家提供的EDS文件,直接读写设备数据词典的对应地址(刚开始一头雾水,现在用完才发现也太方便了)
- 发送由四位功能码+7位ID组成的报文来读写数据词典(许多控制器如BECKHOFF,并不提供导入EDS文件的操作,那就得对CIA301和CIA302的设备子协议足够熟悉,才能直接编写报文,现在还是一知半解,学习ING,等到弄清楚了后续再更新)
多亏了我们用的这台控制器能够直接通过EDS文件操作,还能让我们在云里雾里的时候还勉强能操作驱动器,简单来说,操作驱动器就两步:
- 向控制字(control word)里写入相应数值
- 向对应的数据词典地址里写入数据(如转速、角度等)
剩下的无非就是下发角度、速度与实际角度、速度等的换算关系了。
2.完成整车的标定流程
从本周二开始标定整车的各项数据,厂家工程师在我们旁边一顿操作,手速飞快,动作行云流水,奈何我们看的头晕目眩,没办法只能晚上留下来慢慢消化,折腾了三四天,对整个标定流程总算是大概有了点概念,在基于与驱动器和激光导航头成功建立通讯后,依次按以下步骤进行标定:
-
分别测试测量前进、后退、左转、右转是否正确(可以用下发对应线速度、角速度的方法或直接使用控制器器编程软件的底盘测试工具)
-
原地旋转偏移测试
先将舵轮调整到90度位置,再让小车原地旋转360度,观察小车旋转后与初始点的偏移量,并调整舵轮90度的位置值(因为最初设定的舵轮90度可能并不那么准确 -
车辆行驶直线度测试
-
轮子里程精度测试
在地面上记下当前小车实际位置和里程值d1,使小车前进2m左右,在地面上记下小车当前位置,记下当前小车里程值d2,测量两次位置前进距离dr,误差值=(绝对值(d2-d1)-dr)/dr,(说白了就是如果实际中行走了1m,而编码器的里程反馈为10m,那就需要将编码器的值乘/除一个系数,使编码器反馈的里程值与实际相符),误差值需小于0.02。
在以上参数标定完成之后,就可以进行激光地图制作,并设立如图所示的导航点和路径进行接下来的标定
- L3路径点的方向为X轴正方向
- 所有路径点y坐标值相等,角度值0度(其实就是三点需在同一直线上)
- 停车距离
各路径行驶方向为1->2正走,2->1倒走,2->3正走,3->2倒走。
- 自动导航到1号点。
- 自动导航到2号点,在地面上记下当前小车的位置A。
- 自动导航到3号点。
- 再自动导航回到2号点,在地面上记下当前小车的位置
- 测量两次位置x方向的偏差,调整小车停车距离
若X轴上的A>B,则停车距离=原值+(XA-XB)/2;
若X轴上的A<B,则停车距离=原值-(XB-XA)/2
- 激光安装theta角度
路径及导航方式同5
- 测量两次位置y方向的偏差。调整激光偏转角,要求偏差在10mm以内。
若Y轴上的A>B,则theta=原值-m
若Y轴上的A<B,则theta=原值+m
(m为弧度值,最小步进值0.001)
以上就完成了小车纯直线行驶时的精度标定,接下来进行带旋转行驶后的精度标定
- 激光安装X坐标
各路径行驶方向为1->2正走,2->1正走,2->3正走,3->2正走。(其实就是到1点和3点后掉头,接着继续向前行驶)
导航方式同5。
若X轴上的A>B,则X=原值-(XA-XB)/2
若X轴上的A<B,则X=原值+(XB-XA)/2 - 激光安装Y坐标
各路径行驶方向同7,导航方式同5.
若Y轴上的A>B,则Y=原值-(YA-YB)/2
若Y轴上的A<B,则Y=原值+(YB-YA)/2
目前还剩下一个待解决的问题,就是转弯时的避障问题,需要下周再折腾了。
困死我了,睡觉