資源簡介
華南理工的比賽的作品。基于正點原子的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
評論
共有 條評論