终于可以用高级编辑了,但是感觉还是比较难用
<code class="lang-cpp">#include "Map_all.h" #include "MathMap.h" #define PI 3.1415926525 #define FixConstant 1 //修正一米误差,左轮与右轮之比 #define Kp 1 //PID算法比例系数 #define Ki 1 #define Kd 1 bool TrunM; extern bool FinishM; //in STM32Jack.c double Fixvalue; bool WaitM; extern int MyA; extern int MyX; extern int MyY; bool ImpactCM; bool CrassM; double ComModel_1[]={2,1.5,1,0.5,0,0.5,1,1.5}; double ComModel_2[]={1.5,2,1.5,1,0.5,0,0.5,1}; double ComModel_3[]={1,1.5,2,1.5,1,0.5,0,0.5}; double ComModel_4[]={0.5,1,1.5,2,1.5,1,0.5,0}; double ComModel_5[]={0,0.5,1,1.5,2,1.5,1,0.5}; double ComModel_6[]={0.5,0,0.5,1,1.5,2,1.5,1}; double ComModel_7[]={1,0.5,0,0.5,1,1.5,2,1.5}; double ComModel_8[]={1.5,1,0.5,0,0.5,1,1.5,2}; double Model[8][10]; //PID算法用 double LE; double E; double IS; double RA; double Pv; double Cv; //移动模式: // 8 1 2 // 7 3 // 6 5 4 // 1为正北 //地图形式 // (0,0)(0,1)(0,2)(0,3)…… // (1,0)(1,1)(1,2)(1,2)…… // (2,0)(2,1)(2,2)(2,3)…… // …… //标准直行函数 //输入参数:Number(前进格数) //输出参数:无 void MoveTo(int Number){//no complete need a stop mark Moto_List New; New.DirectionLeft=1; New.DirectionRight=1; New.TimeLeft=(long)(1+Number)/(Wheellength*(0.9/32)); New.TimeRight=(long)(1+Number)/(Wheellength*(0.9/32))+Fixvalue; MotoSetting(&New); while(FinishM!=true) FinishM=false; } //碰撞检测函数 //输入参数:无 //输出参数:无 void CheckImpact(void){ int T_x; int T_y; if(FinishM==false){ if(TrunM==false){ if(MyA==1) {T_x=MyX-1;T_y=MyY;} else if(MyA==2) {T_x=MyX-1;T_y=MyY+1;} else if(MyA==3) {T_x=MyX;T_y=MyY+1;} else if(MyA==4) {T_x=MyX+1;T_y=MyY+1;} else if(MyA==5) {T_x=MyX+1;T_y=MyY;} else if(MyA==6) {T_x=MyX+1;T_y=MyY-1;} else if(MyA==7) {T_x=MyX;T_y=MyY-1;} else if(MyA==8) {T_x=MyX-1;T_y=MyY-1;} } if(CheckCrass(T_x,T_y)>2&&CrassM==false){ TIM_Cmd(TIM2,DISABLE);//关闭步进用定时器 CrassM=true;//写入交叉路口检测标志 ImpactCom(T_x,T_y);//调用防碰撞通讯函数 } else if(CheckCrass(T_x,T_y)>2&&CrassM==true){} else if(CheckCrass(T_x,T_y)<=2&&crassm==true){ crassm="false;//清除交叉路口检测标志" } } 机器人路沿计算函数 输入参数:l左侧距,r右侧距 输出参数:左比总 double getecc(double l,double r){ return l (r+l); 路径校准函数 输入参数:无 输出参数:修正值 左轮 右轮 未完成 checkway(void){ return fix value need each 1s used it mya; double r; l; r="0;" l="0;" if(mya="=1){" do{ l++; }while(checkmap(7)="=true);" r++; }while(checkmap(3)="=true);" } else if(mya="=2){" }while(checkmap(8)="=true);" }while(checkmap(4)="=true);" }while(checkmap(1)="=true);" }while(checkmap(5)="=true);" }while(checkmap(2)="=true);" }while(checkmap(6)="=true);" pv="getEcc(1,1);//其中1要改为左右超声测距值" le="E;" is="IS+E;" e="(l/(l+r))-Pv;" ra="E-LE;" cv="E*Kp+RA*Kd+Ki*IS;" (cv*(l+r)); 标准转弯函数 输入参数:tangle(目标角度) 输出参数:无 void turnto(double tangle){ moto_list new; if(tangle>0){ New.DirectionLeft=1; New.DirectionRight=0; } else if(Tangle<0){ new.directionleft="0;" new.directionright="1;" } new.timeleft="(long)(sqrt(Wheelbase)*PI*(Tangle/180))/(Wheellength*(0.9/32));" new.timeright="(long)(sqrt(Wheelbase)*PI*(Tangle/180))/(Wheellength*(0.9/32));" trunm="true;" motosetting(&new); while(finishm!="true);" finishm="false;" } 前往点函数 输入参数:new 位置指针 输出参数:无 important void movecoo(loadinglist* new){ loadinglist diff; recursion_cheak(new); int recursion_cheak(loadinglist* creatmodel(1,new); int i; double s="2;" c="0;" crassn[2]="{0,0};" while(1){ for(i="0;i<=7;i++){" if(model<i>[1]==S){ C++; CrassN[C-1]=i; } } if(C<=0){ if(c="=1){" if(checkmap(i)="=true)break;" } else if(new->X==MyX||New->Y==MyY||(New->X==MyX&&New->Y==MyY)){ } else{ Recursion_Cheak(New); } } } else{ S-=0.5; } } return i; } //充电校准函数 //输入参数:无 //输出参数:无 void ChargeMove(void){ } void CreatModel(int N,LoadingList* New){ int j; if(New->MapX==MapNumber(1)&&New->MapY ==MapNumber(2)){ if(New->X>MyX){ if(New->Y>MyY){ for(j=0;j<=7;j++){ model[j][n]="ComModel_4[j];" } if(new->Y==MyY){ for(j=0;j<=7;j++){ model[j][n]="ComModel_3[j]; " } if(new->Y<myy){ for(j="0;j<=7;j++){" model[j][n]="ComModel_2[j]; " } } if(new->X==MyX){ if(New->Y>MyY){ for(j=0;j<=7;j++){ model[j][n]="ComModel_5[j]; " } if(new->Y<myy){ for(j="0;j<=7;j++){" model[j][n]="ComModel_1[j]; " } } if(new->X<myx){ if(new->Y>MyY){ for(j=0;j<=7;j++){ model[j][n]="ComModel_6[j]; " } if(new->Y==MyY){ for(j=0;j<=7;j++){ model[j][n]="ComModel_7[j]; " } if(new->Y<myy){ for(j="0;j<=7;j++){" model[j][n]="ComModel_8[j]; " } } } else{ if(new->MapX>MapNumber(1)){ if(New->MapY>MapNumber(2)){ for(j=0;j<=7;j++){ model[j][n]="ComModel_4[j]; " } if(new->MapY==MapNumber(2)){ for(j=0;j<=7;j++){ model[j][n]="ComModel_3[j]; " } if(new->MapY<mapnumber(2)){ for(j="0;j<=7;j++){" model[j][n]="ComModel_2[j]; " } } if(new->MapX==MapNumber(1)){ if(New->MapY>MapNumber(2)){ for(j=0;j<=7;j++){ model[j][n]="ComModel_5[j]; " } if(new->MapY<mapnumber(2)){ for(j="0;j<=7;j++){" model[j][n]="ComModel_1[j]; " } } if(new->MapX<mapnumber(1)){ if(new->MapY>MapNumber(2)){ for(j=0;j<=7;j++){ model[j][n]="ComModel_6[j]; " } if(new->MapY==MapNumber(2)){ for(j=0;j<=7;j++){ model[j][n]="ComModel_7[j]; " } if(new->MapY<mapnumber(2)){ for(j="0;j<=7;j++){" model[j][n]="ComModel_8[j]; " } } } }< i></mapnumber(2)){></=7;j++){></=7;j++){></mapnumber(1)){></mapnumber(2)){></=7;j++){></mapnumber(2)){></=7;j++){></=7;j++){></myy){></=7;j++){></=7;j++){></myx){></myy){></=7;j++){></myy){></=7;j++){></=7;j++){></=0){></0){></=2&&crassm==true){></i></code>
<i><code class="lang-cpp"><i>#include "Map_all.h" #include "MathMap.h" struct LiLa{ double LA; double LI; }; struct Black{ struct LiLa My; int MoveType[8]; }; struct Coo{ int X; int Y; }; struct Black MAP[300][300];//X,Y int List[300]; struct Coo MapNumber; int MyX; int MyY; int MyA; bool StopM; int l; //移动模式: // 8 1 2 // 7 3 // 6 5 4 // 1为正北 //地图移动模式 // 1 // 4 2 // 3 //地图形式 // (0,0)(0,1)(0,2)(0,3)…… // (1,0)(1,1)(1,2)(1,2)…… // (2,0)(2,1)(2,2)(2,3)…… // …… //地图加载函数 //输入参数:T移动模式 //输出参数:无 void loadmap(int T){// 1:up,,2:down,3:left,;4;right,0:beginmap no complete long i; long j; switch(T){ case 1:{ LoadingList New; MapReport PMap; MapNumber.X=MapNumber.X; MapNumber.Y=MapNumber.Y-1; New.MapX=MapNumber.X; New.MapY=MapNumber.Y; for(i=0;i<=300;i++){ for(j="0;j<=300;j++){" new.x="i;" new.y="j;" pmap="SDGetMap(&New);" map<i>[j].My.LA=PMap.La; MAP<i>[j].My.LI=PMap.Li; for(l=0;l<=8;l++){ map<i>[j].MoveType[l]=PMap.MoveT[l]; } } } break; } case 2:{ LoadingList New; MapReport PMap; MapNumber.X=MapNumber.X+1; MapNumber.Y=MapNumber.Y; New.MapX=MapNumber.X; New.MapY=MapNumber.Y; for(i=0;i<=300;i++){ for(j="0;j<=300;j++){" new.x="i;" new.y="j;" pmap="SDGetMap(&New);" map<i>[j].My.LA=PMap.La; MAP<i>[j].My.LI=PMap.Li; for(l=0;l<=8;l++){ map<i>[j].MoveType[l]=PMap.MoveT[l]; } } } break; } case 3:{ LoadingList New; MapReport PMap; MapNumber.X=MapNumber.X; MapNumber.Y=MapNumber.Y+1; New.MapX=MapNumber.X; New.MapY=MapNumber.Y; for(i=0;i<=300;i++){ for(j="0;j<=300;j++){" new.x="i;" new.y="j;" pmap="SDGetMap(&New);" map<i>[j].My.LA=PMap.La; MAP<i>[j].My.LI=PMap.Li; for(l=0;l<=8;l++){ map<i>[j].MoveType[l]=PMap.MoveT[l]; } } } break; } case 4:{ LoadingList New; MapReport PMap; MapNumber.X=MapNumber.X-1; MapNumber.Y=MapNumber.Y; New.MapX=MapNumber.X; New.MapY=MapNumber.Y; for(i=0;i<=300;i++){ for(j="0;j<=300;j++){" new.x="i;" new.y="j;" pmap="SDGetMap(&New);" map<i>[j].My.LA=PMap.La; MAP<i>[j].My.LI=PMap.Li; for(l=0;l<=8;l++){ map<i>[j].MoveType[l]=PMap.MoveT[l]; } } } break; } case 0:{ LoadingList New; MapReport PMap; MyX=0; MyY=0; MapNumber.X=0; MapNumber.Y=0; New.MapX=MapNumber.X; New.MapY=MapNumber.Y; for(i=0;i<=300;i++){ for(j="0;j<=300;j++){" new.x="i;" new.y="j;" pmap="SDGetMap(&New);" map<i>[j].My.LA=PMap.La; MAP<i>[j].My.LI=PMap.Li; for(l=0;l<=8;l++){ map<i>[j].MoveType[l]=PMap.MoveT[l]; } } } break; } } } //主移动函数函数 //输入参数:T移动模式,1:预定路线,2:随机路线,3:控制室控制 //输出参数:无 void MainMove(int T){ loadmap(0); l=0;//error while(T==1){ int i; if(List[l]==List[l-1]){ while(List[l]==List[l+i]){i++;} MoveTo(i); //brack while l=l+i-1; if(StopM==true){break;} } else{ TurnTo(45*(List[l]-List[l-1])); MoveTo(1); if(StopM==true){break;} } if(l<=300){ break; } else{ l++; } while(t="=2){" int r; lastr; do{ r="radom(9,1,2);//black" ad io }while(checkmap(r)="=true); " if(r="=LastR){" moveto(1); turnto(45*(r-lastr)); moveto(1); if(stopm="=true){break;}" lastr="R;" * command from computer * if(stopm="=true){break;}" } 地图检测函数 输入参数:type移动模式 输出参数:bool true表示可行 bool checkmap(int type){ error if(map[myx][myy].movetype[type]="=1){" return true; false; 检测交叉路口函数 输入参数:x,y坐标 输出参数:通道数 int checkcrass(int x,int y){ int i; out="0;" for(i="0;I<=8;I++){" if(map[x][y].movetype<i>==true){ Out++; } } return Out; } void MapChan(int X,int Y){ MapNumber.X=MapNumber.X+X; MapNumber.Y=MapNumber.X+Y; } int MapNumberC(int C){ if(C==1){ return MapNumber.X; } else if(C==2){ return MapNumber.Y; } }</=300){></=8;l++){></i></=300;i++){></=8;l++){></i></=300;i++){></=8;l++){></i></=300;i++){></=8;l++){></i></=300;i++){></=8;l++){></i></=300;i++){></i></i></i></i></i></i></i></i></i></i></i></i></code></i>
[修改于 8年9个月前 - 2016/03/26 00:32:59]
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |
200字以内,仅用于支线交流,主线讨论请采用回复功能。