• 大小: 40.8MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-07-10
  • 语言: 其他
  • 标签: 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-上位机程序\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\AbsoluteDirectionselectDlg.cpp
     文件         706  2012-05-27 07:12  MazeSmartCar-上位机程序\MazeSmartCar\AbsoluteDirectionselectDlg.h
     文件         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\linkSettingsDlg.cpp
     文件        1125  2012-05-10 15:45  MazeSmartCar-上位机程序\MazeSmartCar\linkSettingsDlg.h
............此处省略581个文件信息

评论

共有 条评论