嵌入式小车开发一记

本博客采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本博客文章必须也遵循署名-非商业用途-保持一致的创作共用协议.

本科时候就潦潦草草的学了嵌入式Linux,现在还记得那个瘦高的老师,口吃不清的讲课,不知所云,非常不喜欢他的情况下,居然教了单片机和汇编和嵌入式Linux等多门课。。真的心累,这学期选了个嵌入式开发的课程,课程设计是用mini2440做智能小车,也算是重补一下嵌入式开发,重新再熟悉一下流程。

电子科班出身的学生都有一颗搞开发的心,,虽然本科的课余时候买了一套Arduino UNO小车固件摆弄玩,但现在看来在Linux下做小车会学到更多,最起码熟悉了一般的Linux嵌入式,和那帮搞板子开发的同学一起吃瓜时候也能更多一些聊资。

先上图,这几天才想起来记录一下小车开发过程,因为2440开发板是借学校实验室来用的,设计完成后就被我拆掉了,这几张图是我录得小视频里截下来的,分辨率也就是这样子了,但依然阻挡不住我小车身上散发的那股淳朴的感觉。

小车运行中侧面:
小车运行中
小车正面:

视频回传和控制台:

再简要介绍一下小车完成方案:

小车方案简介

本小车采用友善之臂的MINI2440芯片作为主板的控制核心,在嵌入式linux环境下,编写GPIO 口的驱动,并编写智能小车的应用程序。小车主板采用wifi无线方式与PC机相连,由装载Linux系统的PC机程序用方向键控制小车的上下左右运行,空格键停止。配有外置摄像头与主板cam接口相连可实现抓拍图像并识别,并将拍摄到的图像通过wifi方式发送给PC机。
通过视频回传能够实现小车的手动避障,远程遥控,利用编写电机驱动程序控制直流电机的开启和上下左右控制。

嵌入式小车功能的实现

程序在ubuntu12.04环境下采用vi编辑器进行编写,用arm-linux-gcc交叉编译工具编译,在经过终端超级终端通过串行口向小车烧入交叉编译后的程序。应用软件控制小车的视频回传、转向等行为。此外,在主机端用wifi发射软件架设wifi热点,并建立无线局域网。这样,小车就可以控制并到达指定地点并始终回传图像,而PC机端就可以接收通过wifi传送过来的视频实时操控小车行动。

无线通讯模块

使用USB WiFi kits软件,USB WiFi kits 由广州友善之臂计算机科技有限公司(简称“友善之臂”)整理开发和维护,它是专门针对嵌入式Linux 平台下,简单快捷地使用USB 无线网卡一套命令行工具程序,它基于友善之臂出品的mini2440 开发平台验证测试,支持一些旧USB 无线网卡,有一个新USBap却用不了,无奈还是老老实实的按照手册上买的某宝二手已停产的TL-WN422G+,到手后真的很破,加邮费30块钱,赖哭。

Usb‐wifi‐kits‐mini2440‐linux‐2.6.32.2‐20100729.tar.gz

在目标板根目录下执行:

#tar xvzf usb‐wifi‐kits‐mini2440‐linux‐2..6.32.2‐20100729.tar.gz

该工具集包含了无线网卡驱动程序,和下面将要使用的三个实用命令行程序:

scan‐wifi – 用来扫描附近的无线网络

start‐wifi – 用来开启连接无线网络

stop‐wifi – 停止使用无线网络

这三个程序被安装在开发板的/usr/sbin 目录下,直接调用使用。

4.2无线视频采集及传输系统

使用Mjpeg‐stream软件系统,实现wifi下视频回传,以C/S模式工作,以适应不同操作系统的要求。服务器工作于局域网中,系统启动后只需要设置相关网络参数就可以使用。而局域网中的其他主机可以随时观看被监控设备的实时视频,共享此设备,视频备份等。

mini2440 上安装 mjpeg‐stream

Step1: 获取要安装的文件 mjpeg‐stream

文件名:mjpg‐streamer‐mini2440‐bin‐r6.tar.gz

Step2:在 mini2440 上安装 mjpeg‐stream

把 mjpeg‐stream 复制到开发板,在此复制到了/home/plg 目录

进入/home/plg目录

在控制台终端执行如下命令:

#mkdir mjpg‐streamer ;创建一个独立目录用于测试

并拷贝mjpeg-stream到前面创建的目录

#cd mjpg‐streamer ;进入该测试目录

#tar xvzf mjpg‐streamer‐mini2440‐bin‐r6.tar.gz ;解压安装

通过网页浏览USB摄像头

Step1: 连接好硬件

把摄像头插装到开发板上,可以先使用开发板自带的“usb摄像头”程序测试该摄像头可用,然后重启开发板。

Step2: 启动 mjpeg‐stream

在命令行终端执行以下命令:

#cd /mjpg‐streamer ;进入测试目录

[root@FriendlyARM mjpg-streamer]#

然后再执行./mjpg_streamer

会出现如下信息

[root@FriendlyARM mjpg-streamer]# ./mjpg_streamer

MJPG Streamer Version.: 2.0

i: Using V4L2 device.: /dev/video0

i: Desired Resolution: 640 x 480

i: Frames Per Second.: 5

i: Format…………: MJPEG

o: www-folder-path…: disabled

o: HTTP TCP port…..: 8080

o: username:password.: disabled

o: commands……….: enabled

此时可以在终端看到如图输出信息,这说明已经成功启动 mjpeg‐stream 程序,这样就可以通过网页浏览视频了。

我的arm板的IP是192.168.100.230

在浏览器上输入:

http://192.168.100.230:8080/stream_simple.html

小车程序的编写

功能分为三部分,motor.c为小车电机驱动程序,server.c 为监听程序,运行在2440上监听本地udp 3333端口 client.c 运行在主机,向2440的udp 3333端口发送控制数据。
程序参考了opencpu的双电机程序,修改成我的单电机,对于GPIO上的高低电平怎么分配根据自己的实际情况,代码调用了linux/gpio.h库,比开发板手册上提供的方法要简单的多,也更易理解。

最后

本次设计的基于mini2440的嵌入式小车,完成了wifi通信,视频回传,远程遥控等功能,基本完成了一个视频wifi小车的设计,但还不是十分完善。如可以利用图像算法结合摄像头进行黑线寻迹导航功能等。。

坚持原创技术分享,您的支持将鼓励我继续创作!