基于STM32的迷宫小车


华南理工的比赛的作品。基于正点原子的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-上位机程序CarProtocolCarProtocol.h
     目录           0  2012-05-27 07:53  MazeSmartCar-上位机程序Debug
     文件    33129448  2012-05-26 06:20  MazeSmartCar-上位机程序Debugackstreet boys - we will rock you - 后街男孩.wav
     文件      244736  2012-05-27 07:13  MazeSmartCar-上位机程序DebugMazeSmartCar.exe
     文件     1762892  2012-05-27 07:13  MazeSmartCar-上位机程序DebugMazeSmartCar.ilk
     文件     6294528  2012-05-27 07:13  MazeSmartCar-上位机程序DebugMazeSmartCar.pdb
     文件       41610  2012-05-26 06:32  MazeSmartCar-上位机程序DebugT字路口.wav
     目录           0  2012-05-26 06:36  MazeSmartCar-上位机程序Debugwav
     文件       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-上位机程序GridMazeGridMaze.cpp
     文件       12280  2012-05-26 00:20  MazeSmartCar-上位机程序GridMazegridmaze.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-上位机程序MazeSmartCarAbsoluteDirectionselectDlg.cpp
     文件         706  2012-05-27 07:12  MazeSmartCar-上位机程序MazeSmartCarAbsoluteDirectionselectDlg.h
     文件         229  2012-05-10 12:42  MazeSmartCar-上位机程序MazeSmartCarCommConfigStruct.h
     目录           0  2012-05-27 07:51  MazeSmartCar-上位机程序MazeSmartCarDebug
     文件        2334  2012-05-10 16:19  MazeSmartCar-上位机程序MazeSmartCarlinkSettingsDlg.cpp
     文件        1125  2012-05-10 15:45  MazeSmartCar-上位机程序MazeSmartCarlinkSettingsDlg.h
............此处省略581个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)