基于OpenWrt的移动机器人系统设计
bi交叉编译工具编译,再经过终端SercurtCRT通过串行口向移动终端烧入交叉编译后的程序以及系统。
应用软件控制小车的避障、摄像、发送视频等行为。通信方面通过在主机端用vsftp软件架设FTP服务器,并通过IEEE 802.11g(RTL8187)无线网卡建立无线局域网。这样,移动终端就可以接收上位机的控制命令到达指定地点拍照并发送图片,而PC机终端就可以接收通过WiFi传送过来的图片。
系统软件结构如图4所示。
图4 系统软件结构
系统驱动程序利用MINI2440开发板提供的例程进行改写,并编译进内核。
摄像头控制软件mjpgstreamer由Openwrt以软件包形式提供,通过端口8080输出为MJPEG格式的图像。无线通信部分内容为Linux下socket编程,为客户端提供远程控制支持。无线通信的部分代码如下:
int sendstring(char *addr,int port,char *sendchar){
struct sockaddr_in s_addr;//定义sockaddr_in结构体类型保存socket信息
int sock;
int addr_len;
int len,i;
if ((sock=socket(AF_INET, SOCK_DGRAM, 0))==-1) {//创建socket
perror("no socket");
exit(errno);
}
else
printf("create socket.\\n\\r");
s_addr.sin_family=AF_INET;//TCP/IP地址族
if (port)
s_addr.sin_port=htons(port);//设置端口号
else
s_addr.sin_port=htons(10001);
if (*addr)
s_addr.sin_addr.s_addr=inet_addr(addr);//设置IP
else {
printf("Send a message must have a receiver!\\n");
exit(0);
}
addr_len=sizeof(s_addr);//IP地址长度
len=-1;//判是否发送成功标志
for (i=0;i<4;i++) {//发送
if(len<0)len=sendto(sock,sendchar, strlen(sendchar), 0,(struct sockaddr *) &s_addr, addr_len);
else {printf("send success!");return 0;}
}
printf("send error!");
return 0;
}
系统通过MINI2440驱动并控制摄像头,通过串口控制底层的单片机,驱动无线网卡并连接,运行服务端,提供UI界面。编译完成后的Openwrt效果图如图5所示。
图5 编译完成的OpenWrt效果图
结语
本系统选用的OpenWrt操作系统,该系统适合移动机器人的设计要求,系统提供的软件包简化了系统开发流程,提高了开发效率。经过实际调试运行,系统完全可以达到设计要求,可以用于探测险情、图像采集、目标定位、无线通信等领域。
- 基于OPenWrt开源系统的无线视频监控智能车设计(10-29)
- 基于路由器的开源嵌入式操作系统学习平台(04-23)
- OpenWrt嵌入式Linux开发环境(05-12)
- 基于DSP的自动避障小车(04-05)
- 基于DSP的移动机器人的设计与实现(09-25)
- 基于嵌入式Linux的移动机器人控制系统(09-09)