亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? apfpathplan.h

?? InnovLabSimu在vc++下實現
?? H
字號:
// ApfPathPlan.h: interface for the ApfPathPlan class.
//
//////////////////////////////////////////////////////////////////////
/********************************************************************
	created:	2008/06/12
	created:	12:6:2008   9:27
	filename: 	c:\RoboCupSimu\RoboCupSimu2\RoboCupSimu\controllers\Robot2005_V2\PathPlan\ApfPathPlan.h
	file path:	c:\RoboCupSimu\RoboCupSimu2\RoboCupSimu\controllers\Robot2005_V2\PathPlan
	file base:	ApfPathPlan
	file ext:	h
	author:		GaoYang
	InputFunc:  GetList(通信內容)
	OutputVar:  m_pObstacleList障礙物鏈表的頭指針;
	m_daBallPoleCord[2]球或目標的極坐標
	Version:    2.0

	purpose:	單機器人避障程序,對外接口函數為FreeRoad。本版本要做的是按面向對象編成指導原則規范化
	            并且使其適用于激光雷達蔽障。
*********************************************************************/
#if !defined(AFX_APFPATHPLAN_H__B66BB6C3_2F1D_48FF_87F3_07A2D4BBF7AA__INCLUDED_)
#define AFX_APFPATHPLAN_H__B66BB6C3_2F1D_48FF_87F3_07A2D4BBF7AA__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "ShareObject.h"
#include "Fuzzy.h"

#include "ObjectAngleCheck.h"
#include "LocalMap.h"
#include "..\RobotMathMod\RobotMathmaticalModel.h"
//////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////
/********************************************************************
	created:	2007/02/08
	改進:	2007/8/05 21:02
	Classname: 	ApfPathPlan
	InputFunc:  GetList(通信內容)
	OutputVar:  m_pObstacleList障礙物鏈表的頭指針;
				m_daBallPoleCord[2]球或目標的極坐標
	author:		高揚
	
	purpose:	避障
*********************************************************************/

using namespace personal_ShareObject_pathPlanUsingSpace;
namespace PthPlSpa=personal_ShareObject_pathPlanUsingSpace;
class ApfPathPlan:virtual public ObjectAngleCheck,virtual public CLocalVisionMap,public CRobotMathmaticalModel   
{
public:
	

	ApfPathPlan();
	virtual ~ApfPathPlan();
	TargetStyle m_aPathTarget;	
	//double m_dLeftSpeed,m_dRightSpeed;
	/**
	* FreeRoad函數用來尋找當前機器人面前可以通過的安全方向
	*
	* FreeRoad函數包括如下兩部分:
	* 將傳入的障礙物信息經過有效性判斷后寫入矩陣m_nFreRoadMap中(成員變量),該矩陣361行2列:
	*      第180+i行存的是機器人坐標系中第i度方向的障礙物信息。
	*      0列存的是0或1,表示該方向是否有障礙物:0為無,1為有。
	*      1列存的是距離值,表示該方向的障礙物離自己的距離值。
	*  
	* @param pObstacleList   參數pObstacleList是一個障礙物鏈表的指針(ObjectPolePos型指針),鏈表中的每一個障礙物信息包括:
	*      該障礙物的極坐標,左右邊界角度。
	* @param nObstacleMaxNum 參數nObstacleMaxNum為障礙物個數。
	* @param Target         參數Target為一個指向目標信息的指針(ObjectPolePos型指針)必須包括目標點的極坐標
	* @param bControlBall    參數bControlBall表示自己是否控到球,true為控到.
	* @param uSpeedLevel123_High 參數uSpeedLevel123_High為無符整型,取值為:1,2,3.分別表示機器人質心移動線速度的檔位:
	*       1,為低速檔,2為中速,3為高速.
	* @param LeftForbidden 參數LeftForbidden表示是否禁止許機器人向左走,true為是
	* @param RightForbidden 參數RightForbidden表示是否禁止許機器人向右走,true為是
	* @parm ReverseMoveDirect 參數ReverseMoveDirect表示是否機器人倒著走,true為是
	* @return 傳回BOOL型返回值表示自己是否成功找到合適的方向供前進,無則返回false,此時結果成員變量m_dLeftSpeed,m_dRightSpeed
	*中放著上一次的規劃結果。
	*/ 
	bool FreeRoad(PthPlSpa::ObjectPolePos *ObstacleList,
					int ObstacleMaxNum,
					PthPlSpa::ObjectPolePos* Target,
					bool bControlBall,unsigned uSpeedLevel123_High,
					bool LeftForbidden,bool RightForbidden,bool  ReverseMoveDirect);
	/**
	*@brief 計算碰撞危險
	*/
	float CalCulateDanger(int IndexOfObstacle, float LineVMax);
	///**
	//*@brief 獲取兩個角度間的夾角
	//*/
	//inline int GetShortDistanceBetween2Angle(int Angle1,int Angle2);

protected://部分參數
	/** 
	*@brief CheckObstacleIsBehind函數用于檢測某障礙物是否橫跨0、360度分界線,
	*在-180~180坐標系中則檢測是否橫跨在+-180度分界線上
	*
	*輸入依次為該物體的左邊界角、中心角、右邊界角,當是橫跨時為真,否則為假。
	*@todo 在本方法中橫跨的情況所出問題最多,檢測的依據也至今仍非完善。
	*/
// 	inline bool CheckObstacleIsBehind(double dLBoundaryAngle,double dCenterAngle,double dRightBoundaryAngle);

	double m_dHighLineSpeed,m_dMidLineSpeed,m_dSlowLineSpeed;//高、中、低速檔的速度值
	int m_iSelfOrientation;///<在機器人相對坐標系中機器人當前朝向所在角度
	const double m_const_Pi;//->3.1415926
	const double m_const_dTransDegree2arc;//->由角度轉化到弧度所乘的系數:180/3.1415926
	const double m_const_dTransarc2Degree;//->由弧度轉化到角度所乘的系數:180/3.1415926
	const double m_const_dRobotWidth2;//->機器人自身寬度
	int m_dParCostFun_Orient2Angle;///<代價函數中用的,當前朝向與該角度之差部分的權重
	int m_dParCostFun_PreTarAngle2Angle;///<代價函數中用的,上次所選目標角與該角度之差部分的權重
	int m_dParCostFun_Tar2Angle;///<代價函數中用的,目標的角度與該角度之差部分的權重

protected://建立地圖相關	

	
protected://搜索轉向中的最近距離
	/**
	* @ brief  SearchNearestDis()函數用來查找自己當前角到目標角之間的最近障礙物距離
	*
	*@output 返回的是當前角到目標角間最近障礙物在地圖中的標號,從1開始,若返回0 則表示根本沒有搜到最近障礙物
	*/	
	int SearchNearestDis();
	/**
	*@ brief SearchNearestDis()調用的,用來檢測當前角度是否最近距離,是的話記錄,并且指針指向到下一輪要檢測的角度,若中途發現不用繼續搜索了則返回true否則返回false
	*@parm AngTobeCheck 當前檢測角度
	*@parm NearestObstacleIndex 至今最近障礙物編號
	*@parm DisBetweenTarA2SelfA 目標角度與當前角度之差
	*@parm SearchInLeftOrRightPlaneFlag 加方向搜索還是減方向搜索的標志位,取值1或-1.1為加方向
	*/
	bool CheckCurAngFindNexAng(int& AngTobeCheck,int& NearestObstacleIndex,
		int& DisBetweenTarA2SelfA,int SearchInLeftOrRightPlaneFlag);
	/**
	*@ brief GetShortDistanceBetween2Angle函數用于計算輸入其中的兩個角度間的最小角度差
	*不管正負之分,僅在同一個極坐標系中計算兩個角度所在射線所成的最小角(無正負)。
	*/

	double m_dMinObstalceDis;///<自己從當前位置切入目標角度前可能碰到的障礙物最近距離
protected://計算左右輪速
	/**
	* @ brief 確認當前線速度檔位
	*/
	float DecideCurrentLinearVParm(unsigned uSpeedLevel123_High)
	{
		if (uSpeedLevel123_High==3)//根據輸入確定速度的檔位,高中低三檔。
		{
			return m_dMidLineSpeed;
		} 
		else if (uSpeedLevel123_High==2)
		{
			return m_dMidLineSpeed;
		}
		else
		{
			return m_dSlowLineSpeed;
		}
	}
	float DecideRealAngularV(float nCornerSpeedCoefficient,bool bControlBall,int DisBetweenTarA2SelfA);
	/**
	* @ brief SetLRSpeedFreeRoad函數用來計算左右輪速建議速度
	* @ parm  bControlBall 用來表示是否控球的bool型成員變量
	* @ parm  nlineSpeedCoefficient  線速度設置參數 用來控制線速度的大小
	* @ parm  nCornerSpeedCoefficient角速度設置參數 用來控制線速度的大小
	*/
	void SetLRSpeedFreeRoad(bool bControlBall,double nlineSpeedCoefficient,
							double nCornerSpeedCoefficient,
							unsigned uSpeedLevel123_High);
	double m_dMaxAngleSpeedWithBall,m_dMaxAngleSpeedNoBall;
	FuzzyControl m_cFuzzyControlMod;
	double m_dSpeedCalcuPar;//計算左右輪速時用的參數;構造函數中初始化0.85*RobotWidth,其中0.85可調
	///////////風險函數用的變量///////////////////////////////////////////////////////////////
	double m_dLineVPre;///<上一幀的線速度
	double m_dDangerDegree;///<風險值,其值越大,風險越小
	//////////////////////////////////////////////////////////////////////////

protected://搜索目標角	
	/**
	*@brief OutputCandidateAngleFinded函數調用的保存當前找到的侯選目標路徑角,SaveCandidateArray,FoundCandAngleNum都是輸出
	*
	*/
	void SaveFoundCandidateAngle(int* pSaveCandidateArray,int& FoundCandAngleNum,int freeNum,int GapBeginAngle,int CurrentAngle,int AddPos_DecNeg);
	
	/**
	* 本函數用于發現+-目標角,將他輸出
	* 返回為該函數發現的目標角個數0~2
	*/
	inline void OutputCandidateAngleFinded(int freeNumAdd,int GapBeginAngle,int CurrentAngle,int AddPos_DecNeg);
	///**
	//* 本函數用于求出給定角在坐標系移動后在當前新坐標系中的角度值
	//* @ parm index index為給定角度,單位度
	//*/	
	//double GetOldAngleInNewCoord(int index);
	///**
	//*@brief 搜索動態障礙物,是一個簡單估計物體角速度的主要函數,是CheckAllDynamicObstacle的前一版本
	//*/
	//void AddFreeRoadForDynamic();

	//double GetTargetAngleInDynamicEnvir(double TargetAngle,int Ball0Add1Dec2);
	double m_daUpdatedAngle[3];///<存放位置更新后的三個角度,分別為直奔球去角、+方向搜索角、-方向搜索角
/**
* @ brief  SearchFreeTargetAngle()函數用來查找自己最近安全路徑的角度方向
*
* @ parm LeftForbidden LeftForbidden是控制是否不向左走
*/
	bool SearchFreeTargetAngle(bool LeftForbidden,bool RightForbidden);
	/**
	*@ brief 從備選路徑角中搜索出最終目標路徑角
	*
	*/
	bool FindTargetAngleInCandidate(int NumCountAdd,int NumCountDec,bool LeftForbidden,bool RightForbidden);
	/**
	* @ brief  SelectTargetAngleFromAddAndDec()函數用來從加方向、減方向搜索的結果中選取一個作為最終目標角。
	*
	* @ parm TargetAngleAdd是加方向結果
	* @ parm TargetAngleDec是減方向結果
	*/
	inline double SelectTargetAngleFromAddAndDec(bool AngleInAdd,bool AngleInDec);
	int m_iPreTargetAngle;///<上次搜索出來的目標角度結果
public:
	int m_iTargetAngle;///<本次搜索出來的目標角度結果
	//float m_fFinaFreRoad[361];
	int TargetAngleAdd[2];//->加方向搜索出來的推薦目標角,每個方向最多兩個
	int TargetAngleDec[2];//->減方向搜索出來的推薦目標角每個方向最多兩個
	int m_iNumOfTargetAngleAdd;///<本次搜索出幾個
	int m_iNumOfTargetAngleDec;///<
	bool m_bNeedToSpeedUpInAdd;///<加方向搜到的目標角含動態的成分,需加速
	bool m_bNeedToSpeedUpInDec;///<減方向搜到的目標角含動態的成分,需加速
	//int m_nPrem_fFinalFreRoad[360];
	int m_iPreObstacleNumAfterCheck;

private:
/*
*@brief 沿+或-方向搜索自由路徑,搜到合適路徑或完成搜索
*@parm freeNum該方向截至目前已經找到的空白角度數
*@parm NumCount該方向截至目前已經經過的角度數
*@parm FindGap截至目前是否發現了空隙,或者說此前角度是否在空隙中
*@parm AngIndOfCurr當前角度
*@parm GapBeginAngle空隙開始的角度
*@parm PassBound 越界標志
*@parm AddDecFlag 加方向搜索還是減方向搜索的標志位,取值1或-1.1為加方向
*/
	void SearchFreeAngleInHalfPlane(int& freeNum,int& NumCount,
		bool& FindGap,int& AngIndOfCurr,int& GapBeginAngle,bool& PassBound,int AddDecFlag);
	/*
	*@brief 檢查當前角度,看到現在是否搜到合適路徑或完成搜索,需要跳出則返回真,否則返回假
	*@parm freeNum該方向截至目前已經找到的空白角度數
	*@parm NumCount該方向截至目前已經經過的角度數
	*@parm FindGap截至目前是否發現了空隙,或者說此前角度是否在空隙中
	*@parm AngIndOfCurr當前角度
	*@parm GapBeginAngle空隙開始的角度
	*@parm AddDecFlag 加方向搜索還是減方向搜索的標志位,取值1或-1.1為加方向
	*/
	bool CheckCurrentAngleInHalfPlane(int& freeNum,int& NumCount,
		bool& FindGap,int& AngIndOfCurr,int& GapBeginAngle,int AddDecFlag);
	/**
	*@brief 發現一個空白角度后的動作函數
	*/
	void FindAFreeAngle(int&freeNum,int&NumCount,
		bool&FindGap,int& AngIndOfCurr,int&GapBeginAngle,int AddDecFlag)
	{
		if (FindGap==false)//發現的是間隙的頭
		{
			GapBeginAngle=AngIndOfCurr;
			FindGap=true;
			freeNum=0;
		}
		freeNum++;
		NumCount++;
		AngIndOfCurr=AngIndOfCurr+AddDecFlag;						
	}
	
	/**
	*@brief 發現一個存在障礙物的角度后的動作函數
	*/
	bool FindABlockedAng(int&freeNum,int&NumCount,bool&FindGap,int& AngIndOfCurr,int&GapBeginAngle,int AddDecFlag);
	/**
	*@brief 當前檢測到一個跨越了0,360分界線的障礙物時,此函數計算各種情況下的累計檢查角度NumCountAdd,由FindABlockedAng調用
	*/
	int CountingABehindObject(int NumCount,int& AngIndOfCurr,int AddDecFlag);

};


#endif // !defined(AFX_APFPATHPLAN_H__B66BB6C3_2F1D_48FF_87F3_07A2D4BBF7AA__INCLUDED_)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线不卡的av| 九九**精品视频免费播放| 99久久久久久| 中文字幕高清一区| 成人中文字幕合集| 亚洲人成小说网站色在线| 欧美亚洲动漫制服丝袜| 日韩精品视频网站| 欧美成人a视频| 成人18精品视频| 亚洲高清免费视频| 久久综合狠狠综合| 日韩欧美国产电影| 国产一区二区视频在线播放| 欧美国产1区2区| 欧美午夜精品一区二区三区| 免费成人美女在线观看| 日本一区二区高清| 欧美日韩视频一区二区| 国产精品伊人色| 亚洲激情图片一区| 精品国产91乱码一区二区三区| 高清不卡在线观看| 亚洲第一激情av| 国产婷婷精品av在线| 91国产视频在线观看| 蜜桃视频在线观看一区二区| 中文字幕av不卡| 日韩一区二区视频| 91视视频在线直接观看在线看网页在线看| 正在播放一区二区| 视频一区二区不卡| 亚洲国产成人私人影院tom| 欧美午夜电影网| 国产成人在线网站| 婷婷国产在线综合| 欧美国产综合一区二区| 7777精品伊人久久久大香线蕉最新版| 国产高清精品在线| 蜜桃av一区二区在线观看| 亚洲人成在线观看一区二区| 精品成人在线观看| 欧美无砖专区一中文字| 成人性生交大合| 麻豆精品一区二区综合av| 亚洲精品国久久99热| 精品盗摄一区二区三区| 欧美男生操女生| 色婷婷亚洲综合| 国产黑丝在线一区二区三区| 日一区二区三区| 久草在线在线精品观看| 亚洲综合免费观看高清在线观看| 久久精品在这里| 欧美大片一区二区| 欧美欧美午夜aⅴ在线观看| www.激情成人| 不卡免费追剧大全电视剧网站| 久久国产剧场电影| 蜜桃传媒麻豆第一区在线观看| 香蕉影视欧美成人| 亚洲一区在线看| 亚洲女厕所小便bbb| 日韩毛片在线免费观看| 国产欧美一区二区精品性色 | 风间由美一区二区av101| 美女视频黄a大片欧美| 香蕉加勒比综合久久| 亚洲一区二区不卡免费| 一卡二卡三卡日韩欧美| 亚洲三级在线看| 亚洲精品国产成人久久av盗摄| 中文字幕在线播放不卡一区| 亚洲国产精品t66y| 国产精品欧美一级免费| 国产精品毛片久久久久久| 国产欧美日韩在线| 国产欧美日韩三区| 国产精品色在线观看| 亚洲天堂成人网| 一区二区三区精品视频| 亚洲永久精品国产| 视频精品一区二区| 男男成人高潮片免费网站| 久久精品免费看| 国产综合久久久久影院| 风间由美一区二区av101| 99re视频这里只有精品| 色噜噜狠狠色综合中国| 欧美日韩综合在线| 日韩一区国产二区欧美三区| 精品精品国产高清一毛片一天堂| 精品久久久久久久一区二区蜜臀| 久久精品一区二区三区不卡| 国产精品色哟哟网站| 一区二区三区在线播| 偷拍日韩校园综合在线| 麻豆免费看一区二区三区| 久久99精品国产91久久来源| 国产精品一区二区不卡| 91在线云播放| 欧美精品三级在线观看| 精品电影一区二区三区| 自拍偷拍欧美激情| 日韩综合一区二区| 国产一二精品视频| 色婷婷久久一区二区三区麻豆| 欧美老肥妇做.爰bbww视频| 久久午夜羞羞影院免费观看| 国产精品久久久久aaaa| 天天影视涩香欲综合网| 成人一区二区视频| 欧美日韩在线精品一区二区三区激情| 欧美xxxxxxxxx| 亚洲色图在线看| 蜜乳av一区二区| jvid福利写真一区二区三区| 在线不卡的av| 综合久久久久综合| 激情综合网激情| 欧美亚洲国产一卡| 欧美韩日一区二区三区四区| 视频一区在线播放| 99re热视频这里只精品| 精品国产制服丝袜高跟| 亚洲精品免费在线播放| 国内精品伊人久久久久av影院| 日本高清视频一区二区| 久久亚洲综合色一区二区三区 | 欧美视频一区二区| 久久精品人人做人人综合| 视频一区中文字幕国产| 91视频免费观看| 国产欧美在线观看一区| 麻豆一区二区三区| 欧美最猛性xxxxx直播| 欧美国产一区视频在线观看| 日韩电影在线观看电影| 日本精品视频一区二区| 国产欧美一区二区三区鸳鸯浴 | 亚洲色图色小说| 国产精一区二区三区| 91精品国产综合久久福利软件| 成人免费小视频| 国产福利一区二区三区在线视频| 7777精品伊人久久久大香线蕉最新版 | 国产亚洲欧美日韩俺去了| 亚洲444eee在线观看| 色婷婷香蕉在线一区二区| 中文字幕免费不卡在线| 国产福利91精品一区| 欧美精品一区二区在线观看| 蜜桃av一区二区| 欧美电影免费观看高清完整版| 日本va欧美va精品发布| 欧美剧在线免费观看网站| 亚洲午夜日本在线观看| 一本到高清视频免费精品| 中文字幕一区av| 成人高清av在线| 国产亚洲欧美中文| 国产中文字幕精品| 精品精品国产高清a毛片牛牛 | 欧美精品一区二区三区一线天视频| 午夜久久久久久电影| 欧美日韩国产中文| 午夜影院在线观看欧美| 欧美在线观看你懂的| 亚洲123区在线观看| 欧美久久久久久蜜桃| 亚洲一级二级三级在线免费观看| 欧美中文字幕一二三区视频| 亚洲国产一区二区三区青草影视| 日本道免费精品一区二区三区| 亚洲综合色成人| 欧美乱妇15p| 激情偷乱视频一区二区三区| 2019国产精品| av成人免费在线观看| 一区二区三区国产精华| 欧美日韩一本到| 蜜臀a∨国产成人精品| 精品久久久久久久久久久院品网 | 亚洲人成人一区二区在线观看| 91丝袜美腿高跟国产极品老师| 夜夜嗨av一区二区三区中文字幕| 91国内精品野花午夜精品| 亚洲超碰精品一区二区| 日韩女优av电影| 成人av集中营| 午夜日韩在线观看| 欧美tickling挠脚心丨vk| 丰满少妇在线播放bd日韩电影| 日韩久久一区二区| 欧美精品视频www在线观看 | 精品国产一区二区三区忘忧草 | 国产亚洲一区字幕| 色婷婷激情一区二区三区| 日韩精品视频网| 国产精品美日韩|