日期:2014-05-16  浏览次数:20627 次

激光雷达学习笔记(六)ARM-Linux平台算法移植

在写第一篇激光雷达的日志我就说,激光雷达的算法开发的最终的目标是移植到嵌入式设备上,

因为在机器人定位时,不可能用一个很大很重的设备,因此最理想的还是ARM平台,(工控机也可以

考虑,几乎不存在移植的问题,在工控机上直接安装Windows,连开发都可以在上面完成),裸奔还

是跑操作系统呢?如果激光雷达的接口是串口,那么裸奔是一个好的选择,可以最大限度的利用CPU,

但是URG-04LX的接口是USB-Serial和串口,UTM-30LX的接口只有USB-Serial,所以为了提高开发

效率,最终还是准备移植到ARM-Linux平台。

一、移植面临的问题

1、驱动程序

ARM-Linux平台是否有激光雷达USB-Serial的驱动程序?

2、交叉编译

如何将上位机的程序编译到ARM-Linux平台上?

3、算法优化

ARM-Linux硬件的能力有限,PC端的程序如果要在ARM上运行必须进行优化,

减少内存消耗和时间消耗。

4、实时显示

在ARM上运行时为了向PC端一样能实时显示计算的效果,最好能够实时显示

计算的结果


下面就会围绕这几个问题逐步去解决,(目前只是解决了一部分,还需继续努力)


二、驱动程序

1、Linux下驱动测试

首先在的电脑上进行Linux驱动测试,系统是Ubuntu10.04,插上电脑。

查看设备: ls /dev

dev下多了ttyACM0的设备

安装串口调试助手或者minicom,进行串口通信,向激光雷达发送命令II,

此时成功返回数据,说明在PC-Linux下设备驱动是有的,开发起来没有太大的难度,显示控件选的是

OpenCV,刚好也是跨平台的,显示控件也不是问题。


2、ARM-Linux下驱动测试

ARM:mini2440

将激光雷达查到ARM上,识别为USB device而不是USB-Serial,说明ARM-Linux下没有设备需要

的驱动程序。

没有驱动的话,有两种解决方式,一种是找到对用的驱动文件,编译为.ko文件,拷贝到ARM并加

载驱动模块,另一种是重新定制Linux内核,定制Linux时勾选上需要的驱动,重新编译Linux Kernal。

我是直接选择的第二种方法,将ARM-Linux重新编译了一遍。

URG的官网上有提到Linux下驱动的事,URG-Series has CDC-ACM device 

controller. Thus ACM class driver is used for the device.

因此我猜测增加对cdc-acm的支持应该就可以识别激光雷达为USB-Serial,实际确实是如

此。

定制时勾选选项:
devices drivers-->USB Support -->USB Modem ( CDC ACM ) Support

关于编译Linux内核环境的配置以及该如何进行编译,可以参照mini2440的用户手册,感觉网
上很多人的博客也是从这上面抄的,或者说照着做一遍然后就出来献丑~~
内核编译之后,需要将Linux kernal下载到ARM上,需要用到串口助手和dnw两个软件,
配置方式如下:
minicom: http://blog.csdn.net/renshengrumenglibing/article/details/7049471