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

📄 control.cpp

📁 robocuo相关资料robocuo相关资料
💻 CPP
字号:
#include <math.h>#include <iostream>using namespace std;#include "control.h"#include "body.h"#include "world.h"#include "connection.h"#include "common.h"control::control(world*w, body *b, connection *c){	bd=b;	wm=w;	cn=c;	state_number = 0;	previous_action_name = "";	previous_action_size = 0;	previous_repeat_number = 0;	state_time = 0;	trajectory_it = 0;}void control::create_robot(){	cn->send("(scene rsg/agent/nao/nao.rsg)");}void control::init_robot(){	char s[100];	sprintf(s,"(init (unum %d)(teamname %s))", wm->uniform_number, wm->team_name.c_str());	cn->send(s);}void control::beam(double x, double y, double angle){	char s[100];	//to do: dar soorati ke samte raast boodim baayad x o y o angle taghir kone	sprintf(s,"(beam %.2lf %.2lf %.2lf )",x,y,angle);	cn->send(s);}bool control::go_to_state(state *st, command *cm)//agar reside bashe true bar migardoone{	bool flag=true;	for(int i=0;i<20;i++)		if(	st->imp[i] && !get_rate(st->angle[i],bd->j[i].angle,				st->gain[i],st->precision[i],cm->power[i]))			flag=false;	return st->max_time > 0 && wm->simulation_time - state_time > st->max_time		|| flag && (st->min_time < 0		|| wm->simulation_time - state_time > st->min_time);}void control::do_command(command *c){	char s[100];	for(int i=0;i<22;i++)	{		sprintf(s,"(%s %.2lf)",joint_number_to_name[i].c_str(),c->power[i]);		//cout<<"SENDCOMMAND--> "<<s<<endl;		cn->send(s);	}}//residan be zavie morede nazar         final_angle current_angle gain  precision   ratebool control::get_rate(double a,double b,double g,double p,double &r){	double d = a-b;	while(d>180)		d-=360;	while(d<-180)		d+=360;	r = d * g / 100;	return fabs(d)<p;}void control::reset(){	state_number = 0;	state_time = wm->simulation_time;}void control::do_action(action *act){	if(act->name == "_"||act->name == "")		;		//cerr<< "Action with no name" << endl;	previous_action_name = act->name;	previous_action_size = act->arr.size();	previous_repeat_number = act->repeat;	int t = state_number;//	act->save(cout);	while(state_number < act->arr.size() 			&& go_to_state(&act->arr[state_number],&cmd))	{		state_time = wm->simulation_time;		state_number++;		if(state_number >= act->arr.size())			state_number = act->repeat;		if(state_number == t)			break;	}}void control::follow_trajectory(trajectory *trj){	if(trj->name != trajectory_name)	{		trajectory_name = trj->name;		trajectory_it = 222;	}	if(trajectory_it == trj->arr.size())		trajectory_it = trj->repeat;	do_command(&(trj->arr[trajectory_it++]));}

⌨️ 快捷键说明

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