资源简介
华南理工的比赛的作品。基于正点原子的Mini STM32板子写的迷宫小车,可以参考一下。(版权:桂林马)
代码片段和文件信息
#include “type.h“
#include “gridmaze.h“
namespace grid_maze{
static u8 hArr[(GRID_HEIGHT+1)][GRID_LENGTH];
static u8 vArr[GRID_HEIGHT][GRID_LENGTH+1];
static Point p[(GRID_LENGTH+1)*(GRID_HEIGHT+1)]={};
static Grid g((u8*)hArr(u8*)vArrGRID_LENGTHGRID_HEIGHT);
GridMazeSoluiton maze(gp);
}
namespace grid_maze {
/** @brief 得到小车在 MAP_BUILDING 状态下的行进的指令
* @param r: 小车需要报告当前的状态,这个函数主要是需要行进的方向。
* @param ins: 函数返回的指令保存在这个结构体中。
* @note 小车必须按照这个函数生成的指令行进。
*/
void GridMazeSoluiton::MapBuildingGetInstruction(const ReportStruct& rInstructionStruct& ins) {
size_t curPosIndex = m_index-1; // 得到上一次报告后,小车所在的点在数组中的索引
ins.action = MOVE;
u8 count = 0; // 记录周围三个方向通畅且走过的路
// 扫描周围三个方向,如果有可以走且没走过的,就填写指令并返回
ins.absoluteDirection = r.absoluteDirection;
for(RelativeDirection relDir=BACKWARD+RIGHT; relDir!=BACKWARD;relDir=relDir+RIGHT) {
u8* pLine = m_grid.GetLine(r.absoluteDirection+relDir m_points[curPosIndex]);
if((pLine!=NULL) &&((*pLine & ACCESSIBLE)!=0)) {
if((*pLine&PASSED)==0) {
ins.absoluteDirection += relDir;
ins.relativeDirection = relDir;
m_forwardSearching=true;
return;
}
else {
count++;
}
}
}
// 如果周围没有 通畅并且没走过的线路,就只能往回搜索了
if(m_forwardSearching){
ins.absoluteDirection += BACKWARD;
ins.relativeDirection = BACKWARD;
m_forwardSearching = false;
// 检查一下地图有没有搜索完
if(m_index<=1) { // 如果是在出发点,NND,原来在入口也没有路。。。
ins.action = STANDBY;
m_state = MAP_COMPLETED;
return;
}
else { // 周围有两条以上走过的路径,考虑到小车转弯的精度,尽量不要倒退
size_t backIndex = m_index-1; // 初始点
// 计算要返回到的点的索引号,并使 backIndex-1 == 该索引号
while(backIndex>0) {
AbsoluteDirection absDir = m_grid.ToAbsDirection(m_points[backIndex-1]-m_points[backIndex]);
for(RelativeDirection relDir=BACKWARD+RIGHT; relDir!=BACKWARD;relDir=relDir+RIGHT) {
u8* pLine = m_grid.GetLine(absDir+relDir m_points[backIndex-1]);
if((pLine!=NULL)
&&((*pLine & ACCESSIBLE)!=0)
&&((*pLine&PASSED)==0) ) // 如果找到那个索引号了
goto COMPUTE_COMPLETE;
}
backIndex--;
}COMPUTE_COMPLETE:
if(backIndex==0){ // 这个时候意味着地图搜索完了
ins.action = STANDBY; // 地图搜索完事儿了就完了嘛 ^_^
m_state = MAP_COMPLETED;
return;
}
}
}
else {
if(m_index<=1) // 如果现在已经回到出发点了,搜索完毕 ^_^
{
ins.action = STANDBY; // 让小车待机吧
m_state = MAP_COMPLETED; // 置位标志
}
else
{
size_t index = m_index - 1;
ins.absoluteDirection = m_grid.ToAbsDirection(m_points[index-1]-m_points[index]);
ins.relativeDirection = ins.absoluteDirection - r.absoluteDirection;
}
}
return ;
}
/** @brief 记录之前走过的一段无拐弯的直路,以及现在这个网点周围的路线是通 or 不通。
* @note 这个函数在 state == MAP_BUILDING 的情况下才会被调用。
* @param r: 记录着小车需要报告的内容。
*/
void GridMazeSoluiton::MapBuildingRecord(const ReportStruct& r) {
// 注意如果是往回搜索,那么这些路径是已经搜索过的,不需要处理
if ( m_forwardSearching )
{
Point temp=m_points[m_index-1
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1364535 2012-05-27 19:56 97-桂林马-网格迷宫小车.pdf
目录 0 2012-05-27 07:53 MazeSmartCar-上位机程序\
目录 0 2012-05-27 07:53 MazeSmartCar-上位机程序\CarProtocol\
文件 5227 2012-05-26 05:24 MazeSmartCar-上位机程序\CarProtocol\CarProtocol.h
目录 0 2012-05-27 07:53 MazeSmartCar-上位机程序\Debug\
文件 33129448 2012-05-26 06:20 MazeSmartCar-上位机程序\Debug\backstreet boys - we will rock you - 后街男孩.wav
文件 244736 2012-05-27 07:13 MazeSmartCar-上位机程序\Debug\MazeSmartCar.exe
文件 1762892 2012-05-27 07:13 MazeSmartCar-上位机程序\Debug\MazeSmartCar.ilk
文件 6294528 2012-05-27 07:13 MazeSmartCar-上位机程序\Debug\MazeSmartCar.pdb
文件 41610 2012-05-26 06:32 MazeSmartCar-上位机程序\Debug\T字路口.wav
目录 0 2012-05-26 06:36 MazeSmartCar-上位机程序\Debug\wav\
文件 33546 2012-05-26 06:32 MazeSmartCar-上位机程序\Debug\倒转.wav
文件 43914 2012-05-26 06:36 MazeSmartCar-上位机程序\Debug\到达出口.wav
文件 33546 2012-05-26 06:32 MazeSmartCar-上位机程序\Debug\前进.wav
文件 42762 2012-05-26 06:32 MazeSmartCar-上位机程序\Debug\十字路口.wav
文件 31242 2012-05-26 06:32 MazeSmartCar-上位机程序\Debug\右转.wav
文件 32394 2012-05-26 06:32 MazeSmartCar-上位机程序\Debug\左转.wav
文件 76170 2012-05-26 06:32 MazeSmartCar-上位机程序\Debug\死胡同.wav
目录 0 2012-05-27 07:53 MazeSmartCar-上位机程序\GridMaze\
文件 9300 2012-05-24 23:14 MazeSmartCar-上位机程序\GridMaze\GridMaze.cpp
文件 12280 2012-05-26 00:20 MazeSmartCar-上位机程序\GridMaze\gridmaze.h
目录 0 2012-05-27 07:51 MazeSmartCar-上位机程序\ipch\
目录 0 2012-05-27 07:53 MazeSmartCar-上位机程序\MazeSmartCar\
文件 903 2012-05-10 00:17 MazeSmartCar-上位机程序\MazeSmartCar.sln
文件 46592 2012-05-27 07:13 MazeSmartCar-上位机程序\MazeSmartCar.suo
文件 1550 2012-05-26 02:21 MazeSmartCar-上位机程序\MazeSmartCar\AbsoluteDirection
文件 706 2012-05-27 07:12 MazeSmartCar-上位机程序\MazeSmartCar\AbsoluteDirection
文件 229 2012-05-10 12:42 MazeSmartCar-上位机程序\MazeSmartCar\CommConfigStruct.h
目录 0 2012-05-27 07:51 MazeSmartCar-上位机程序\MazeSmartCar\Debug\
文件 2334 2012-05-10 16:19 MazeSmartCar-上位机程序\MazeSmartCar\li
文件 1125 2012-05-10 15:45 MazeSmartCar-上位机程序\MazeSmartCar\li
............此处省略581个文件信息
- 上一篇:风控建模教程
- 下一篇:Learning_OpenCV_3.pdf
相关资源
- 嵌入式实时操作系统uCOS-II经典——基
- STM32F4开发指南-库函数版本
- STM32 HAL 库开发实战指南—基于 F7
- stm32f4摄像头数据转bmp上传onenet.zip
- STM32 摄像头和上位机
- 迷宫寻宝源码
- stm32+Ucos2+UI最简模板
- STM32F407中文手册(完全版) 高清完整
- labview实验例程(STM32 USB)
- STM32的si4463程序
- STM32+FreeRtos+Lwip+ENC28J60
- stm32 hid双向通信例程源码-包括上位机
- STM32L151C8T6 UCSOII 代码 串口中断接收
- STM32G071低功耗模式进入退出RTC和按键
- STM32L15X的低功耗模式及RTC唤醒测试
- STM32摄像头程序实现
- 基于STM32的甲醛测试仪源代码,包含了
- STM32+LWIP+WEB_SSI_CGI
- U盘升级stm32程序,使用CH376芯片电路
- STM32自学笔记代码
- STM32F10X参考手册_Rev10.pdf
- 基于STM32F103测试代码_支持IIC和SPI li
- stm32+uCOS-II+uCGUI3.98+FatFS完整开源程序
- 平衡小车pcb与原理图,源码,蓝牙,
- stm32的bootloader及移植的rtthread
- STM32F4 HAL库函数手册(英文版)
- 嵌入式实时操作系统μCOS-Ⅱ经典——
- STM32 F407 虚拟串口原子开发板可用
- STM32F373 DAC生成三角波 源码
- stm32伺服电机驱动
评论
共有 条评论