嵌入式实验智能小车避障上位机手柄控制

上传人:xiao****1972 文档编号:84937765 上传时间:2019-03-06 格式:DOCX 页数:12 大小:387.15KB
返回 下载 相关 举报
嵌入式实验智能小车避障上位机手柄控制_第1页
第1页 / 共12页
嵌入式实验智能小车避障上位机手柄控制_第2页
第2页 / 共12页
嵌入式实验智能小车避障上位机手柄控制_第3页
第3页 / 共12页
嵌入式实验智能小车避障上位机手柄控制_第4页
第4页 / 共12页
嵌入式实验智能小车避障上位机手柄控制_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《嵌入式实验智能小车避障上位机手柄控制》由会员分享,可在线阅读,更多相关《嵌入式实验智能小车避障上位机手柄控制(12页珍藏版)》请在金锄头文库上搜索。

1、嵌入式实验报告小车避障+上位机李晨,颜文杰2012/6/7一、 小车的功能及部件小车能够实现的主要功能有自动避障和上位机两个方面。避障主要是依靠传感器检测小车与前方的距离,然后根据算法的程序,自动选择最近的方式避障。上位机则是依靠电脑与小车通过无线串口相连,利用游戏手柄控制上位机的指令对小车进行前进、后退、左转、右转、加速等控制,从而实现用手柄对小车的无线遥控。传感器的分布直接的影响到了小车的自动避障功能,因此,为达到最优的效果,将传感器如下图的分布:前面两个用来判断小车与障碍物所成的角度,左右两边用来使小车与边界有一定的距离。为实现上位机的无线遥控功能,将小车加上无线模块与游戏手柄。二、 小

2、车功能的实现小车的功能已经在上部分说明了,但是为实现两者功能的转化,我们采用了使用上位机发送指令从而改变小车工作模式的方法。下图为上位机工作界面:由上图可知,小车与电脑通过无线模块相连时,通过点选按钮“控制”和“自动避障”,可以使小车实现两种功能的切换。具体实现如下:通过串口中断,在计算机发送指令时改变flag_mode_choice的值,改变主程序中运行的不同模块,从而改变功能。while (1) while (flag_mode_choice=0) ADC_Ch0_Res = ADC_RegularConvertedValueTab0 - ADC_Calibration_DR; ADC_C

3、h1_Res = ADC_RegularConvertedValueTab1 - ADC_Calibration_DR; ADC_Ch2_Res = ADC_RegularConvertedValueTab2 - ADC_Calibration_DR; ADC_Ch3_Res = ADC_RegularConvertedValueTab3 - ADC_Calibration_DR; if (RxBuffer1=0xCC) now_speed=100; Forward_Cmd(); if(ADC_Ch3_Res0x520)Turn_Right(); else if(ADC_Ch0_Res0x52

4、0)Turn_Left(); if(ADC_Ch2_Res0x520|ADC_Ch1_Res0x520) if(ADC_Ch2_ResADC_Ch1_Res) Turn_Left(); if(ADC_Ch2_Res0xAA&ADC_Ch1_Res0xAA) Backward_Cmd(); Delay(0XAFFFF); while (flag_mode_choice=1) if(RxBuffer1=0x11) Forward_Cmd(); else if (RxBuffer1=0xCC) now_speed=100;Forward_Cmd(); else if (RxBuffer1=0x22)

5、 Backward_Cmd(); else if (RxBuffer1=0x1A) Forward_Accelerate_Cmd(); else if (RxBuffer1=0x1B) Forwar_non_Accelerate_Cmd(); else if (RxBuffer1=0x33) Turn_Right(); else if (RxBuffer1=0x44) Turn_Left(); else Break_Cmd(); 利用以下的串口中断实现功能转换:extern u8 RxBuffer6;extern int flag_mode_choice;void USART1_IRQHand

6、ler(void) if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) USART_ITConfig(USART1,USART_IT_RXNE,DISABLE); /* Read one byte from the receive data register */ while(!USART_GetFlagStatus(USART1,USART_FLAG_RXNE) ; RxBuffer0 = USART_ReceiveData(USART1); while(!USART_GetFlagStatus(USART1,USART_FLAG_RX

7、NE) ; RxBuffer1 = USART_ReceiveData(USART1); if (RxBuffer0 = 0xEA) flag_mode_choice=0; if( RxBuffer0 = 0xEB) flag_mode_choice=1; /* Clear the USART1 Receive interrupt */ USART_ClearITPendingBit(USART1, USART_IT_RXNE); USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); 1. 避障功能的实现为实现小车的避障功能,使小车前面两个传感器的值相比较,

8、若其中一个大于另一个,则向偏大的方向转弯,反之亦然。程序实现如下:ADC_Ch0_Res = ADC_RegularConvertedValueTab0 - ADC_Calibration_DR; ADC_Ch1_Res = ADC_RegularConvertedValueTab1 - ADC_Calibration_DR; ADC_Ch2_Res = ADC_RegularConvertedValueTab2 - ADC_Calibration_DR; ADC_Ch3_Res = ADC_RegularConvertedValueTab3 - ADC_Calibration_DR; if

9、(RxBuffer1=0xCC) now_speed=100; Forward_Cmd(); if(ADC_Ch3_Res0x520)Turn_Right(); else if(ADC_Ch0_Res0x520)Turn_Left(); if(ADC_Ch2_Res0x520|ADC_Ch1_Res0x520) if(ADC_Ch2_ResADC_Ch1_Res) Turn_Left(); if(ADC_Ch2_Res0xAA&ADC_Ch1_Res0xAA) Backward_Cmd();2. 上位机功能实现上位机的界面是由Visual C+ 6.0中的MFC编写的。其中有打开串口,发送显示

10、,接受显示等功能,也可实现小车的功能切换,可以直接支持游戏手柄的控制。使用无线的控制时,波特率为9600,按钮的代码段如下所示:/避障模式void CSerialPortTestDlg:OnButtonSend() Buf0=0xEA;Buf1=0xAA;/Buf2=0xAA;/ TODO: Add your control notification handler code hereif(!m_bSerialPortOpened)return;/检查串口是否打开/UpdateData(TRUE);/读入编辑框中的数据m_strEditSendMsg = (CString)Buf;m_Seri

11、alPort.WriteToPort(LPCTSTR)m_strEditSendMsg);/发送数据void CSerialPortTestDlg:OnChangeEditSendmsg() / TODO: If this is a RICHEDIT control, the control will not/ send this notification unless you override the CDialog:OnInitDialog()/ function and call CRichEditCtrl().SetEventMask()/ with the ENM_CHANGE fl

12、ag ORed into the mask./ TODO: Add your control notification handler code here/上位机控制模式void CSerialPortTestDlg:OnButtonSend2() Buf0=0xEB;Buf1=0xAA;/Buf2=0xAA;/Buf3=0xAA;/ TODO: Add your control notification handler code hereif(!m_bSerialPortOpened)return;/检查串口是否打开/UpdateData(TRUE);/读入编辑框中的数据m_strEditS

13、endMsg = (CString)Buf;m_SerialPort.WriteToPort(LPCTSTR)m_strEditSendMsg);/前进/void CSerialPortTestDlg:OnButtonSend6() Buf0=0xEB;Buf1=0x11;/Buf2=0xAA;Buf3=0xAA;/ TODO: Add your control notification handler code hereif(!m_bSerialPortOpened)return;/检查串口是否打开/UpdateData(TRUE);/读入编辑框中的数据m_strEditSendMsg = (CString)Buf;m_SerialPort.WriteToPort(LPCTSTR)m_strEditSendMsg);/后退void CSerialPortTestDlg:OnButtonSend4() Buf0=0xEB;Buf1=0x22;/Buf2=0xAA;Buf

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号