⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 formation.java

📁 利用JAVA编写的群体机器人局部通讯完成一定得队形控制
💻 JAVA
字号:
/* * formation.java */ package Domains.Formation;import	EDU.gatech.cc.is.util.Vec2;import	EDU.gatech.cc.is.abstractrobot.*;import	EDU.gatech.cc.is.clay.*;/** * Swarm robots formation control(2007/01/28). * @author Yongming Yang * @version $Revision: 1.0 $ */public class formation extends ControlSystemMFN150	{	public final static boolean DEBUG = true;	private NodeVec2	turret_configuration;	private NodeVec2	steering_configuration;	private NodeInt 	state_monitor;	private i_FSA_ba 	STATE_MACHINE;	/**	 * Configure the control system using Clay.niantu	 */	public void configure()		{		//======		// Set some initial hardware configurations.		//======		abstract_robot.setObstacleMaxRange(3.0); // don't consider things further away	 	abstract_robot.setBaseSpeed(0.8*abstract_robot.MAX_TRANSLATION);					//======		// perceptual schemas		//======		//--- robot's global position		NodeVec2		PS_GLOBAL_POS = new v_GlobalPosition_r(abstract_robot);		//--- obstacles		NodeVec2Array // the sonar readings		PS_OBS = new va_Obstacles_r(abstract_robot);		//--- homebase 		NodeVec2      // the place to deliver		PS_HOMEBASE0_GLOBAL = new v_FixedPoint_(25.0,abstract_robot.getPosition(-1).y);//0.0 ADD BY WEN 080412		NodeVec2      // make it egocentric		PS_HOMEBASE0 = new v_GlobalToEgo_rv(abstract_robot,				PS_HOMEBASE0_GLOBAL);		//======		// Perceptual Features		//======		// close to homebase 		NodeBoolean		PF_CLOSE_TO_HOMEBASE0 = new b_Close_vv(0.4, PS_GLOBAL_POS,			PS_HOMEBASE0_GLOBAL);		//======		// motor schemas  (DIAN JI MO SHI)		//======		// avoid obstacles		NodeVec2		MS_AVOID_OBSTACLES = new v_Avoid_va(1.5,			abstract_robot.RADIUS + 0.1,			PS_OBS);		// swirl obstacles wrt homebase0		NodeVec2		MS_SWIRL_OBSTACLES_HOMEBASE0 = new v_Swirl_vav(2.0,			abstract_robot.RADIUS + 0.22,			PS_OBS,			PS_HOMEBASE0);		// go home 0		NodeVec2		MS_MOVE_TO_HOMEBASE0 = new v_LinearAttraction_v(0.4,0.0,PS_HOMEBASE0);			// noise vector		NodeVec2		MS_NOISE_VECTOR = new v_Noise_(5,seed);		// swirl obstacles wrt noise		NodeVec2		MS_SWIRL_OBSTACLES_NOISE = new v_Swirl_vav(2.0,			abstract_robot.RADIUS + 0.1,			PS_OBS,			MS_NOISE_VECTOR);			//======		// AS_DELIVER0  (JIAO FU )		//======		v_StaticWeightedSum_va		AS_DELIVER0 = new v_StaticWeightedSum_va();		AS_DELIVER0.weights[0]  = 1.0;		AS_DELIVER0.embedded[0] = MS_AVOID_OBSTACLES;		AS_DELIVER0.weights[1]  = 1.0;		AS_DELIVER0.embedded[1] = MS_MOVE_TO_HOMEBASE0;		AS_DELIVER0.weights[2]  = 1.0;		AS_DELIVER0.embedded[2] = MS_SWIRL_OBSTACLES_HOMEBASE0;		AS_DELIVER0.weights[3]  = 0.2;		AS_DELIVER0.embedded[3] = MS_NOISE_VECTOR;	//======		// AS_WANDER  (MAN YOU)		//======		v_StaticWeightedSum_va 		AS_WANDER = new v_StaticWeightedSum_va();		AS_WANDER.weights[0]  = 1.0;		AS_WANDER.embedded[0] = MS_AVOID_OBSTACLES;		AS_WANDER.weights[1]  = 1.0;		AS_WANDER.embedded[1] = MS_NOISE_VECTOR;		AS_WANDER.weights[2]  = 1.0;		AS_WANDER.embedded[2] = MS_SWIRL_OBSTACLES_NOISE;			//======		// STATE_MACHINE  (ZHUANG TAI JI)		//======		STATE_MACHINE = new i_FSA_ba();		STATE_MACHINE.state = 1;				// STATE 0 WANDER		//STATE_MACHINE.triggers[0][0]  = PF_TARGET0_VISIBLE;		//STATE_MACHINE.follow_on[0][0] = 1; // transition to ACQUIRE0			// STATE 1 DELIVER0		STATE_MACHINE.triggers[1][0]  = PF_CLOSE_TO_HOMEBASE0;		STATE_MACHINE.follow_on[1][0] = 0; // transition to WANDER		state_monitor = STATE_MACHINE;		//======		// STEERING  (DU DAO)		//======		v_Select_vai		STEERING = new v_Select_vai((NodeInt)STATE_MACHINE);		STEERING.embedded[0] = AS_WANDER;			STEERING.embedded[1] = AS_DELIVER0;		//======		// TURRET  (DUO JI ?)		//======		v_Select_vai		TURRET = new v_Select_vai((NodeInt)STATE_MACHINE);		TURRET.embedded[0] = AS_WANDER;			TURRET.embedded[1] = AS_DELIVER0;		turret_configuration = TURRET;		steering_configuration = STEERING;			}			/**	 * Called every timestep to allow the control system to	 * run.	 */	public int takeStep()		{		Vec2	result;		double	dresult;		long	curr_time = abstract_robot.getTime();		Vec2	p;		// STEER		result = steering_configuration.Value(curr_time);		abstract_robot.setSteerHeading(curr_time, result.t);		abstract_robot.setSpeed(curr_time, result.r);		// TURRET		result = turret_configuration.Value(curr_time);		abstract_robot.setTurretHeading(curr_time, result.t);			// STATE DISPLAY		int state = STATE_MACHINE.Value(curr_time);		if (state == 0)			abstract_robot.setDisplayString("wander");		else if (state == 1)			abstract_robot.setDisplayString("deliver");				return(CSSTAT_OK);		}	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -