关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > 20kg级自主水下机器人控制软件设计与实现

20kg级自主水下机器人控制软件设计与实现

作者:时间:2012-03-16来源:网络收藏

3
3.1 多线程
一个进程可有多个线程,使用多线程可提高的执行效率。该共有3个线程组成,包括一个主线程、一个导航线程和在成功打开串口后利用API函数CreateThread创建的一个串口操作线程(如图3所示)。

c.JPG
串口操作线程读取串口数据,并提取有效数据,接着利用函数PostMessage将有效数据分别传送到主线程和导航线程。主线程将有效数据根据协议进行解包并把数据包中包含的AHRS、数字罗盘、GPS等传感器和推进器、前舱环境参数等数据显示到界面上。当使用摇杆AUV的运行时主线程每隔0.5 s从USB接口接收数据,并转换成推进器转速以及方向舵的方向角信息,且将这些信息发送到串口操作线程写入串口。
在主线程中创建串口操作线程的代码如下:
hThread=CreateThread(NULL,0,ThreadProc,(LPVOID)this,0,NULL);
在串口操作线程中将有效数据发送到主线程的代码如下:
PostMessage(*pDlg,WM_MYMSGl,
(WPARAM)buf,(LPARAM)Length);
3.2 关键算法
由于惯性导航系统提供的位置估计精度会随时间而漂移,所以导航线程采用基于GPS/INS的组合导航算法,用GPS辅助导航,即用GPS信息辅助修正惯导系统的输出,包括航向角和速度。对AUV的航向角信息修正是通过经典的PID算法来的,如图4所示。

e.JPG
设Ji-1,Ji为AUV的2个节点,AUV即A点从Ji-1到Ji点运行。设正北方向矢量为,根据图5按照下式可计算出角度θ。角度θ计算公式为:f.jpg



评论


相关推荐

技术专区

关闭