基于TCP/IP协议激光测距仪数据读取及在Labview的实现
2010-08-02谭福生申纯太
谭福生, 杨 军, 申纯太
(上海电气集团股份有限公司中央研究院,上海200070)
近年来随着传感器等领域的技术进步,移动机器人的外形和智能行为变得更为拟人,其定位导航功能的实现大多依靠激光测距雷达,其性价比也越来越高,拟人化也对激光测距传感器外形要求小型化。
激光测距仪根据扫描机构的不同可分为2D和3D两种,分别进行二维和三维环境的测距。3D激光测距仪除了提供障碍物的距离信息,还提供激光的反射强度信息,可以利用激光强度图进行障碍物的检测。但3D激光测距仪价格昂贵、笨重,且成像速度较慢,限制了它的进一步应用。相比而言,2D激光测距仪只在二维平面内扫描,结构简单,扫描速度快且数据点密集精确,在室内移动机器人导航的研究中得到了广泛的应用,很多的研究如环境地图构建、自主定位、避障、轨迹跟踪和导航等都是基于激光测距仪的[1-3]。
国内外激光测距雷达产品在室内导航应用方面,可以用于自主移动机器人上。主要厂商有日本的URG-04LX是北洋电机(Hokuyo)扫描探测传感器较新的产品,具有质量轻(仅160 g),耗能小,外观尺寸为50mm×50 mm×70 mm,但其性能还主要处于实验室应用方面,没有展开大规模的工业应用。
而另外一家公司德国SICK公司生产的激光测距雷达,无论在工业上的应用,还是在实验室研究方面都有很高的声誉,作为主要环境感知传感器,在小型化方面也进行了大量的技术攻关,于2008年推出型号为LMS100的激光测距雷达,如图1所示。此LMS100的尺寸(W×H×D)为102 mm×152mm×105mm,扫描角度为270°,角度分辨率为0.5°/0.25°,扫描周期为 20m s/40m s。根据技术手册,在最大测距18m的情况下,LMS100测距的系统误差为±30mm,统计误差12mm,角度分辨率为0.5°/0.25°。
图1 LMS100激光测距仪
LMS100除了提供RS232/485串口以外,还提供了RJ45接口,其传输相对于RS232优势是,通过网关设定只要设定同一网段的IP地址,即可对传感器设备进行访问,连接方便,且传输数据速度可达到10/100MBit。
Labview (Laboratory Virtual Instrument Engineering Workbench)语言是美国 NI(National Instruments)公司推出的面向虚拟仪器开发的一种图形化的编程语言,它广泛地被工业界、学术界和研究实验室所接受,视为一个标准的数据采集和仪器控制软件[4]。Labview集成了与满足 GPIB、VXI、RS-232和RS-485协议的硬件及数据采集卡通讯的全部功能。它还内置了便于应用TCP/IP、ActiveX等软件标准的库函数。这是一个功能强大且灵活的软件,利用它可以方便地建立自己的vi模块,实现对硬件的读取和控制。近年来其推出的Com pactRIO平台在嵌入式控制和采集平台获得广泛应用。
1 基于TCP/IP协议激光测距仪数据读取
LMS100防护等级为IP65,适用于室内环境,直流24 V供电需要手动连接(而 LMS111防护IP67用于室外环境),需要打开后盖,把24 V外接直流外接电源端子引入,其中+24 V接入19口,地线接入18口。接入电源后,指示灯亮就可以对数据进行读取了,如图2所示。
图2 LMS100激光测距仪电源接线
上电后,可通过LMS100自带工具SOPAS ET对硬件进行配置,默认的IP地址为192.168.0.1,端口为2111。根据实验用计算机的子网段,通过配置工具可以将IP地址修改为192.168.168.7,修改角度分辨率为0.5°。
激光数据的读取有2种方式,分别是单次测量值输出和连续测量值输出:对于单次测量值输出输入一次请求指令便得到一次当前值的返回值,对数据的读取可以进行周期性干预;而对于连续测量值的输出,只需输入一次,数据实时的返回,无法进行干预。
下面是单次测量值输出时的请求指令:
其中STX为数据帧起始字符,对应十六进制表示为(02H),而ETX为数据帧结束字符,对应十六进制表示为(03H)。中间字符用ASCII码十六进制表示,字符间空格表示,最后映射的十六进制请求指令为:
02 73 52 4E 20 4C 4D 44 73 63 61 6E 64 61 74 61 03
借助于调试软件 HerculesSetup,打开 TCP Client配置功能界面,输入IP地址和端口号,Send输入栏填写十六进制请求指令,点击Send按钮得到返回值如图3所示,其详细数据如下:
sRA LMDscandata 1 1 7EF40D 0 0 9C87 5F8 41191 4135D 0 0 5 0 0 1388 168 0 1 DIST1 3F800000 00000000 FFF92230 1388 21D 2B8 2C5 2BD 2BD…1ED6 C90 C6E C7C 0 0 0 0 0 0
对于当前设置,LMS100的扫描角度为270°,角度分辨率为0.5°,因此得到541(21D)组数据,2B8 2C5 2BD…C90 C6E C7C为逆时针排列的541个数据,数据单位为mm,十六进制表示,为使用这组值,需要通过进制转换算法把十六进制转换为十进制。
所得到数据按照逆时针排列对应的角度分别为-45,-44.5,-44,…,224,224.5,225,将数据变换为十进制为 686,709,709,…,3216,3182,3196,对应的一共有541个数据值。
2 基于TCP/IP协议激光测距仪数据读取在Labview上的实现
Labview 8.6包含了基于TCP/IP协议的读取范例,具体路径为浏览/任务方式,范例列表中打开网络/TCP&UDP,其中可以在 TCP Communicator-Active.vi基础上进行修改,其流程图如图4所示,其对应的前面板如图5所示。按照图5的前面板的输入,执行这个程序,在 Their Response中就能得到当前时刻激光测距仪的数据,其表示为十六进制,如图3。
图3 基于TCP/IP协议的LMS100激光测距仪数据读取
但上述方法的数据采集只能单次运行,在机器人导航中需要对激光测距仪进行连续的读取,因此对上述Labview程序进行改进,改进的要点如下:
(1)可实时读取激光测距仪;
(2)通过加权平均的方法,考虑到周期因素,取3次加权取平均的方法;
(3)对十六进制转十进制进行优化,提供转换效率。
经过对以上3点的改进,得到新的程序流程图如图6所示。其中数据输入对应的是十六进制请求指令,而数据输出为1帧激光测距仪的数据,其表示十六进制需转换成十进制,通过对图7的2个控件进行配置,可以较高效率的转换成十进制数。其中前面控件把十进制字符串提取为数组,后控件把十六进制数值转换为十进制数值。通过外面While循环,对3次数值进行了加权取平均,对激光测距仪的数据漂移问题进行了改进。
图6 改进的激光测距仪程序的程序流程图
图7 十六进制转换十进制控件
通过上述的改进,经过测算,激光测距仪1个周期数据读取只需要20m s,而串口读取需要100 ms左右。在编程效率上,通过 Labview实现只需要1 d时间。
3 结 语
本文对基于TCP/IP接口的激光测距仪数据读取原理和方法进行了介绍,并在Labview平台上进行了实现,并就实时性传输进行了改进,实践表明通过Labview平台,提高了编程效率,节省了开发的时间。
[1] 董再励,王光辉,田彦涛,等.自主移动机器人激光全局定位系统研究[J].机器人,2000,22(5):207-210.
[2] 郑 宏,王景川,陈卫东.基于地图的移动机器人自定位与导航系统[J].机器人,2007,29(4):397-402.
[3] 慕延华,尹怡欣,涂序彦,等.新的室内移动机器人的实时定位和运动规划方法[J].计算机应用研究,2007,24(8):106-108.
[4] 杨乐平,李海涛,杨 磊.Labview程序设计与应用[M].第 2版.北京:电子工业出版社,2005.