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

📄 rankformation.java

📁 利用JAVA编写的群体机器人局部通讯完成一定得队形控制
💻 JAVA
字号:
/*
 * RankFormation.java
 */
 
package Domains.RankFormation;

import	EDU.gatech.cc.is.util.Vec2;
import	EDU.gatech.cc.is.abstractrobot.*;
import	EDU.gatech.cc.is.clay.*;

/**
 * Swarm robots RankFormation control(2007/05/28).
 * @author yxh
 * @version $Revision: 1.0 $
 */

public class RankFormation 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;
	int run_i;
	

	/**
	 * Configure the control system using Clay.
	 */
	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_(30.0,-5.0);
		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);
			
			
		NodeBoolean
		CHANGEFORMATION = new changeformation_test();


		//======
		// motor schemas
		//======
		// 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);
					
		// maintain rank_formation  0-5,6-11,12-17
		NodeVec2
		MS_RANK_FORMATION = new v_RankFormation_r(0,2.5,2.5,0,1,0,abstract_robot);
		
		NodeVec2
		MS_RANK_FORMATION_CHANGE = new v_RankFormation_r(0,3.0,3.0,0,1,0,abstract_robot);
		
		
		//======
		// AS_WANDER
		//======
		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;
	

		//======
		// AS_DELIVER0
		//======
		v_StaticWeightedSum_va
		AS_DELIVER0 = new v_StaticWeightedSum_va();

		AS_DELIVER0.weights[0]  = 1.2;
		AS_DELIVER0.embedded[0] = MS_AVOID_OBSTACLES;

		AS_DELIVER0.weights[1]  = 0.8;
		AS_DELIVER0.embedded[1] = MS_MOVE_TO_HOMEBASE0;

		AS_DELIVER0.weights[2]  = 1.2;
		AS_DELIVER0.embedded[2] = MS_SWIRL_OBSTACLES_HOMEBASE0;

		AS_DELIVER0.weights[3]  = 0.1;
		AS_DELIVER0.embedded[3] = MS_NOISE_VECTOR;
				
		AS_DELIVER0.weights[4]  = 1.2;
		AS_DELIVER0.embedded[4] = MS_RANK_FORMATION;
		
		
		//=====
		// AS_CHANGE
		//=====
		v_StaticWeightedSum_va
		AS_CHANGE = new v_StaticWeightedSum_va();

		AS_CHANGE.weights[0]  = 1.2;
		AS_CHANGE.embedded[0] = MS_AVOID_OBSTACLES;

		AS_CHANGE.weights[1]  = 0.5;
		AS_CHANGE.embedded[1] = MS_MOVE_TO_HOMEBASE0;

		AS_CHANGE.weights[2]  = 1.2;
		AS_CHANGE.embedded[2] = MS_SWIRL_OBSTACLES_HOMEBASE0;

		AS_CHANGE.weights[3]  = 0.2;
		AS_CHANGE.embedded[3] = MS_NOISE_VECTOR;
		
		AS_CHANGE.weights[4]  = 1.2;
		AS_CHANGE.embedded[4] = MS_RANK_FORMATION_CHANGE;
		


		//======
		// STATE_MACHINE
		//======
		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]  = CHANGEFORMATION;
		STATE_MACHINE.follow_on[1][0] = 2; // transition to CHANGE
		
		// STATE 2 SLOWDOWN
		/*STATE_MACHINE.triggers[2][0]  = PF_CLOSE_TO_HOMEBASE0;
		STATE_MACHINE.follow_on[2][0] = 0; // transition to WANDER*/

		state_monitor = STATE_MACHINE;


		//======
		// STEERING
		//======
		v_Select_vai
		STEERING = new v_Select_vai((NodeInt)STATE_MACHINE);

		STEERING.embedded[0] = AS_WANDER;	
		STEERING.embedded[1] = AS_DELIVER0;
		STEERING.embedded[2] = AS_CHANGE;

		//======
		// TURRET
		//======
		v_Select_vai
		TURRET = new v_Select_vai((NodeInt)STATE_MACHINE);

		TURRET.embedded[0] = AS_WANDER;	
		TURRET.embedded[1] = AS_DELIVER0;
		TURRET.embedded[2] = AS_CHANGE;

		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;
		//double [][]robot_v = new double[1500][18];
		//int robot_id = abstract_robot.getID(-1);


		// STEER
		result = steering_configuration.Value(curr_time);
		/*robot_v [run_i][robot_id] = result.r;
		run_i++;
		//System.out.println(abstract_robot.getID()+" "+result.r);
		//System.out.println(run_i);
		System.out.println("robot_v["+run_i+"]["+robot_id+"]="+result.r);*/
		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");	
		else if (state == 2)
			abstract_robot.setDisplayString("change");
				

		return(CSSTAT_OK);
		}
	}
	

⌨️ 快捷键说明

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