yuka_tks

Dependencies:   mbed HCSR04

Committer:
tks1
Date:
Mon Dec 20 15:49:55 2021 +0000
Revision:
6:dd35cc3b5ca0
Parent:
5:f21e1a75f98b
yuka_tks

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Tomo1213 4:1bd08c9d92a9 1 //2021/12/20更新
tks1 6:dd35cc3b5ca0 2 //aoki
tks1 6:dd35cc3b5ca0 3 #include "yuka.h"
tks1 6:dd35cc3b5ca0 4 Timer t_obj;
tks1 6:dd35cc3b5ca0 5 double auto_time = 0;
tks1 6:dd35cc3b5ca0 6 int main()
tks1 6:dd35cc3b5ca0 7 {
ngokystk 0:b4b94eb28093 8 pc.attach(SerialRX);
ngokystk 0:b4b94eb28093 9 //pc.baud(115200);
ngokystk 0:b4b94eb28093 10 //CAN
ngokystk 0:b4b94eb28093 11 canPort.frequency(1000000); //Bit Rate:1MHz
ngokystk 0:b4b94eb28093 12 canPort.attach(CANdataRX,CAN::RxIrq);
tks1 6:dd35cc3b5ca0 13 //CAN node Setting
tks1 6:dd35cc3b5ca0 14 int node1 = 1;
ngokystk 0:b4b94eb28093 15 int node2 = 2;
ngokystk 0:b4b94eb28093 16 int node3 = 3;
ngokystk 0:b4b94eb28093 17 int node4 = 4;
tks1 6:dd35cc3b5ca0 18
ngokystk 0:b4b94eb28093 19 //エンコーダ関係
tks1 6:dd35cc3b5ca0 20 int ActPos1 = 0;
tks1 6:dd35cc3b5ca0 21 int ActPos2 = 0;
ngokystk 0:b4b94eb28093 22
tks1 6:dd35cc3b5ca0 23 int Init_Pos = 0;
tks1 6:dd35cc3b5ca0 24 //超音波センサ関係パラメータ
tks1 6:dd35cc3b5ca0 25 int dist1;
tks1 6:dd35cc3b5ca0 26 int dist2;
tks1 6:dd35cc3b5ca0 27 int dist3;
Tomo1213 4:1bd08c9d92a9 28
ngokystk 0:b4b94eb28093 29 pc.printf("YUKA PROGRAM START\r\n");
ngokystk 0:b4b94eb28093 30 wait(0.1);
ngokystk 0:b4b94eb28093 31 //-------------起動時に必ず送信---------------
ngokystk 0:b4b94eb28093 32 //オペレーティングモードを送信
Tomo1213 3:c39c14cfc811 33 sendOPModeT(node1);
Tomo1213 3:c39c14cfc811 34 sendOPModeT(node2);
Tomo1213 3:c39c14cfc811 35 sendOPModeT(node3);
Tomo1213 3:c39c14cfc811 36 sendOPModeT(node4);
ngokystk 0:b4b94eb28093 37 //Shutdown,Enableコマンド送信|リセット
ngokystk 0:b4b94eb28093 38 sendCtrlSD(node1);
ngokystk 0:b4b94eb28093 39 sendCtrlSD(node2);
ngokystk 0:b4b94eb28093 40 sendCtrlSD(node3);
ngokystk 0:b4b94eb28093 41 sendCtrlSD(node4);
tks1 6:dd35cc3b5ca0 42
ngokystk 0:b4b94eb28093 43 sendCtrlEN(node1);
ngokystk 0:b4b94eb28093 44 sendCtrlEN(node2);
ngokystk 0:b4b94eb28093 45 sendCtrlEN(node3);
ngokystk 0:b4b94eb28093 46 sendCtrlEN(node4);
tks1 6:dd35cc3b5ca0 47
ngokystk 0:b4b94eb28093 48 //初期加減速度
Tomo1213 3:c39c14cfc811 49 int Acc = 2000;
Tomo1213 3:c39c14cfc811 50 int Dec = 2000;
Tomo1213 3:c39c14cfc811 51 sendProAcc(1,Acc);
Tomo1213 3:c39c14cfc811 52 sendProAcc(2,Acc);
Tomo1213 3:c39c14cfc811 53 sendProAcc(3,Acc);
Tomo1213 3:c39c14cfc811 54 sendProAcc(4,Acc);
tks1 6:dd35cc3b5ca0 55
Tomo1213 3:c39c14cfc811 56 sendProDec(1,Dec);
Tomo1213 3:c39c14cfc811 57 sendProDec(2,Dec);
Tomo1213 3:c39c14cfc811 58 sendProDec(3,Dec);
tks1 6:dd35cc3b5ca0 59 sendProDec(4,Dec);
ngokystk 0:b4b94eb28093 60 //トルク設定
ngokystk 0:b4b94eb28093 61 int trq = 100; //torque Setting[mA]
tks1 6:dd35cc3b5ca0 62
ngokystk 0:b4b94eb28093 63 sendTgtTrq(1,trq);
ngokystk 0:b4b94eb28093 64 sendTgtTrq(2,trq);
ngokystk 0:b4b94eb28093 65 sendTgtTrq(3,trq);
ngokystk 0:b4b94eb28093 66 sendTgtTrq(4,trq);
tks1 6:dd35cc3b5ca0 67
Tomo1213 4:1bd08c9d92a9 68 int state_1 = 0;
tks1 6:dd35cc3b5ca0 69 int state_2 = 0;
Tomo1213 4:1bd08c9d92a9 70 int ride_count = 0;
Tomo1213 4:1bd08c9d92a9 71
Tomo1213 4:1bd08c9d92a9 72 int X_POS_TMP = 0;
Tomo1213 4:1bd08c9d92a9 73 int dist1_ori = 0;
Tomo1213 4:1bd08c9d92a9 74 int dist2_ori = 0;
Tomo1213 4:1bd08c9d92a9 75
Tomo1213 4:1bd08c9d92a9 76 readActPos(1);
Tomo1213 4:1bd08c9d92a9 77 ActPos=canmsgRx.data[4]+canmsgRx.data[5]*256+canmsgRx.data[6]*65536;
tks1 6:dd35cc3b5ca0 78 if(ActPos > 8388608) {
Tomo1213 4:1bd08c9d92a9 79 ActPos -= 0x1000000;//16進数でのマイナス処理 16^7 = 16,777,216 = 0x1000000
Tomo1213 4:1bd08c9d92a9 80 }
Tomo1213 4:1bd08c9d92a9 81 Init_Pos = ActPos;//起動時の角度を保存
tks1 6:dd35cc3b5ca0 82 t_obj.reset();
tks1 6:dd35cc3b5ca0 83 t_obj.start();
Tomo1213 4:1bd08c9d92a9 84 //set_MODE_T();
Tomo1213 4:1bd08c9d92a9 85 printf("\nstart\r\n");
tks1 6:dd35cc3b5ca0 86 while(1) {
tks1 6:dd35cc3b5ca0 87 auto_time = t_obj.read();
Tomo1213 4:1bd08c9d92a9 88 pc.printf("state_1:%d state_2:%d\r\n",state_1,state_2);
tks1 6:dd35cc3b5ca0 89 LED.printf("%d",state_1);
Tomo1213 1:b2bd1511307e 90 readActPos(1);
Tomo1213 1:b2bd1511307e 91 ActPos=canmsgRx.data[4]+canmsgRx.data[5]*256+canmsgRx.data[6]*65536;
tks1 6:dd35cc3b5ca0 92 if(ActPos > 8388608) {
Tomo1213 1:b2bd1511307e 93 ActPos -= 0x1000000;//16進数でのマイナス処理 16^7 = 16,777,216 = 0x1000000
Tomo1213 4:1bd08c9d92a9 94 //printf("check\r\n");
ngokystk 0:b4b94eb28093 95 }
tks1 6:dd35cc3b5ca0 96 dist1 = get_cm_n(u1, 3);
tks1 6:dd35cc3b5ca0 97 dist2 = get_cm_n(u2, 3);
tks1 6:dd35cc3b5ca0 98 dist3 = get_cm_n(u3, 3);
Tomo1213 4:1bd08c9d92a9 99 /*--------------------------*/
tks1 6:dd35cc3b5ca0 100 if(state_1 == 0) { //入力判断フェーズ
Tomo1213 4:1bd08c9d92a9 101 state_2 = 0;
tks1 6:dd35cc3b5ca0 102 if(ride_count >= 2 && auto_time > Standby_Time) {
tks1 6:dd35cc3b5ca0 103 state_1 = 20;
tks1 6:dd35cc3b5ca0 104 } else {
tks1 6:dd35cc3b5ca0 105 if(ActPos < (Init_Pos - KICK)) { //前入力検出
tks1 6:dd35cc3b5ca0 106 ride_count++;
Tomo1213 4:1bd08c9d92a9 107 state_1 = 1;
tks1 6:dd35cc3b5ca0 108 } else if(ActPos > (Init_Pos + KICK)) { //右入力検出
Tomo1213 4:1bd08c9d92a9 109 ride_count++;
Tomo1213 4:1bd08c9d92a9 110 state_1 = 11;
tks1 6:dd35cc3b5ca0 111 } else {
Tomo1213 4:1bd08c9d92a9 112 set_MODE_T();
Tomo1213 1:b2bd1511307e 113 }
Tomo1213 4:1bd08c9d92a9 114 }
tks1 6:dd35cc3b5ca0 115
tks1 6:dd35cc3b5ca0 116 } else if(state_1 == 1) { //前進→壁検出フェーズ
tks1 6:dd35cc3b5ca0 117 if(dist1 < WALL && dist1 >= WALL_MIN) {
Tomo1213 4:1bd08c9d92a9 118 vel_stop();
Tomo1213 4:1bd08c9d92a9 119 wait(GETOFF_TIME);
Tomo1213 4:1bd08c9d92a9 120 state_1 = 2;
tks1 6:dd35cc3b5ca0 121 } else {
Tomo1213 4:1bd08c9d92a9 122 set_ACC(ACC_RIDE);//加速度設定
Tomo1213 4:1bd08c9d92a9 123 set_DEC(DEC_CLEAN);//減速度設定
Tomo1213 4:1bd08c9d92a9 124 set_MODE_V();//速度制御モード送信
Tomo1213 4:1bd08c9d92a9 125 vel_forward_con(RPM_RIDE);//前進速度指令
Tomo1213 4:1bd08c9d92a9 126 }
tks1 6:dd35cc3b5ca0 127 } else if(state_1 == 2) { //前進からの帰還フェーズ
tks1 6:dd35cc3b5ca0 128 if(ActPos > -3000) {
Tomo1213 4:1bd08c9d92a9 129 vel_stop();
tks1 6:dd35cc3b5ca0 130 t_obj.reset();
tks1 6:dd35cc3b5ca0 131 t_obj.start();
Tomo1213 4:1bd08c9d92a9 132 state_1 = 0;
Tomo1213 4:1bd08c9d92a9 133 wait(1.0);
tks1 6:dd35cc3b5ca0 134 } else {
Tomo1213 4:1bd08c9d92a9 135 vel_backward_con(RPM_RIDE);
Tomo1213 4:1bd08c9d92a9 136 }
tks1 6:dd35cc3b5ca0 137 } else if(state_1 == 11) { //右進→壁検出フェーズ
tks1 6:dd35cc3b5ca0 138 if(dist3 < WALL && dist3 >= WALL_MIN) {
Tomo1213 4:1bd08c9d92a9 139 vel_stop();
Tomo1213 4:1bd08c9d92a9 140 wait(GETOFF_TIME);
Tomo1213 4:1bd08c9d92a9 141 state_1 = 12;
tks1 6:dd35cc3b5ca0 142 } else {
Tomo1213 4:1bd08c9d92a9 143 set_ACC(ACC_RIDE);//加速度設定
Tomo1213 4:1bd08c9d92a9 144 set_DEC(DEC_RIDE);//減速度設定
Tomo1213 4:1bd08c9d92a9 145 set_MODE_V();//速度制御モード送信
Tomo1213 4:1bd08c9d92a9 146 vel_right(RPM_RIDE);//R進速度指令
Tomo1213 4:1bd08c9d92a9 147 }
tks1 6:dd35cc3b5ca0 148 } else if(state_1 == 12) { //右進からの帰還フェーズ
tks1 6:dd35cc3b5ca0 149 if(ActPos < 3000) {
Tomo1213 4:1bd08c9d92a9 150 vel_stop();
tks1 6:dd35cc3b5ca0 151 t_obj.reset();
tks1 6:dd35cc3b5ca0 152 t_obj.start();
Tomo1213 4:1bd08c9d92a9 153 state_1 = 0;
Tomo1213 4:1bd08c9d92a9 154 wait(1.0);
tks1 6:dd35cc3b5ca0 155 } else {
Tomo1213 4:1bd08c9d92a9 156 vel_left(RPM_RIDE);
tks1 6:dd35cc3b5ca0 157 }
tks1 6:dd35cc3b5ca0 158 } else if(state_1 == 20) { //消毒モード
tks1 6:dd35cc3b5ca0 159 if(state_2 == 0) {
tks1 6:dd35cc3b5ca0 160 if(dist1 < WALL && dist1 >= WALL_MIN) {
Tomo1213 4:1bd08c9d92a9 161 X_POS_TMP = ActPos;
Tomo1213 4:1bd08c9d92a9 162 state_2 = 1;
tks1 6:dd35cc3b5ca0 163 } else {
Tomo1213 4:1bd08c9d92a9 164 set_ACC(ACC_CLEAN);//加速度設定
Tomo1213 4:1bd08c9d92a9 165 set_DEC(DEC_CLEAN);//減速度設定
Tomo1213 4:1bd08c9d92a9 166 set_MODE_V();//速度制御モード送信
Tomo1213 4:1bd08c9d92a9 167 vel_forward_con(RPM_CLEAN);//前進速度指令
tks1 6:dd35cc3b5ca0 168 }
tks1 6:dd35cc3b5ca0 169 } else if(state_2 == 1) {
tks1 6:dd35cc3b5ca0 170 if(abs(ActPos - X_POS_TMP) > CLEAN_OFFSET) {
Tomo1213 4:1bd08c9d92a9 171 state_2 == 2;
tks1 6:dd35cc3b5ca0 172 } else {
tks1 6:dd35cc3b5ca0 173 if(dist3 < WALL && dist3 >= WALL_MIN) {
Tomo1213 4:1bd08c9d92a9 174 state_2 = 4;
tks1 6:dd35cc3b5ca0 175 } else {
Tomo1213 4:1bd08c9d92a9 176 set_ACC(ACC_CLEAN);//加速度設定
Tomo1213 4:1bd08c9d92a9 177 set_DEC(DEC_CLEAN);//減速度設定
Tomo1213 4:1bd08c9d92a9 178 set_MODE_V();//速度制御モード送信
Tomo1213 4:1bd08c9d92a9 179 vel_right(RPM_CLEAN);//右進速度指令
Tomo1213 1:b2bd1511307e 180 }
Tomo1213 4:1bd08c9d92a9 181 }
tks1 6:dd35cc3b5ca0 182 } else if(state_2 == 2) {
tks1 6:dd35cc3b5ca0 183 if(ActPos > -3000) {
Tomo1213 4:1bd08c9d92a9 184 state_2 = 3;
tks1 6:dd35cc3b5ca0 185 } else {
Tomo1213 4:1bd08c9d92a9 186 set_ACC(ACC_CLEAN);//加速度設定
Tomo1213 4:1bd08c9d92a9 187 set_DEC(DEC_CLEAN);//減速度設定
Tomo1213 4:1bd08c9d92a9 188 set_MODE_V();//速度制御モード送信
Tomo1213 4:1bd08c9d92a9 189 vel_backward_con(RPM_CLEAN);//後進速度指令
Tomo1213 4:1bd08c9d92a9 190 }
tks1 6:dd35cc3b5ca0 191 } else if(state_2 == 3) {
tks1 6:dd35cc3b5ca0 192 if(abs(ActPos - X_POS_TMP ) > CLEAN_OFFSET) {
Tomo1213 4:1bd08c9d92a9 193 state_2 == 0;
tks1 6:dd35cc3b5ca0 194 } else {
tks1 6:dd35cc3b5ca0 195 if(dist3 < WALL && dist3 >= WALL_MIN) {
Tomo1213 4:1bd08c9d92a9 196 state_2 = 4;
tks1 6:dd35cc3b5ca0 197 } else {
tks1 6:dd35cc3b5ca0 198 set_ACC(ACC_CLEAN);//加速度設定
tks1 6:dd35cc3b5ca0 199 set_DEC(DEC_CLEAN);//減速度設定
tks1 6:dd35cc3b5ca0 200 set_MODE_V();//速度制御モード送信
tks1 6:dd35cc3b5ca0 201 vel_right(RPM_CLEAN);//右進速度指令
Tomo1213 1:b2bd1511307e 202 }
tks1 6:dd35cc3b5ca0 203 }
tks1 6:dd35cc3b5ca0 204 } else if(state_2 == 4) {
tks1 6:dd35cc3b5ca0 205 if(ActPos < 3000) {
Tomo1213 4:1bd08c9d92a9 206 state_2 = 5;
tks1 6:dd35cc3b5ca0 207 } else {
Tomo1213 4:1bd08c9d92a9 208 vel_left(RPM_CLEAN);
tks1 6:dd35cc3b5ca0 209 }
tks1 6:dd35cc3b5ca0 210 } else if(state_2 == 5) {
tks1 6:dd35cc3b5ca0 211 if(ActPos > -3000) {
tks1 6:dd35cc3b5ca0 212 t_obj.reset();
tks1 6:dd35cc3b5ca0 213 t_obj.start();
Tomo1213 4:1bd08c9d92a9 214 state_1 = 0;
Tomo1213 4:1bd08c9d92a9 215 state_2 = 0;
tks1 6:dd35cc3b5ca0 216 } else {
Tomo1213 4:1bd08c9d92a9 217 vel_backward_con(RPM_CLEAN);
Tomo1213 1:b2bd1511307e 218 }
Tomo1213 4:1bd08c9d92a9 219 }
tks1 6:dd35cc3b5ca0 220 }
Tomo1213 4:1bd08c9d92a9 221 }
Tomo1213 4:1bd08c9d92a9 222 }