- UID
- 1029342
- 性别
- 男
|
3 系统软件设计
软件部分是移动机器人的智能化的体现,它控制移动机器人所有的运行状态。
操作系统采用了OpenWrt操作系统,该系统简化了Linux内核的定制过程,而且允许开发者使用软件包的概念来定制嵌入式设备,从而简化了嵌入软件开发的流程。
程序在Kubuntu CodeBlock IDE集成开发环境中进行编写,用Openwrt编译出来的ARM eabi交叉编译工具编译,再经过终端SercurtCRT通过串行口向移动终端烧入交叉编译后的程序以及系统。
应用软件控制小车的避障、摄像、发送视频等行为。通信方面通过在主机端用vsftp软件架设FTP 服务器,并通过IEEE 802.11g(RTL8187)无线网卡建立无线局域网。这样,移动终端就可以接收上位机的控制命令到达指定地点拍照并发送图片,而PC机终端就可以接 收通过Wi-Fi传送过来的图片。
系统软件结构如图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操作系统,该系统适合移动机器人的设计要求,系统提供的软件包简化了系统开发流程,提高了开发效率。经过实际调试运行,系统完全可以达到设计要求,可以用于探测险情、图像采集、目标定位、无线通信等领域。 |
|