YUTO WATANABE / OmniMove
Committer:
DarkFlame
Date:
Fri Mar 26 01:55:13 2021 +0000
Revision:
4:4d94b6148a0a
Parent:
3:e08a0ee65f69
Child:
5:333ed75dd3f1
a little fix;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DarkFlame 1:e515f6a4da2e 1 #ifndef OmniMove_H
DarkFlame 1:e515f6a4da2e 2 #define OmniMove_H
DarkFlame 0:44476ac6ab91 3
DarkFlame 0:44476ac6ab91 4 #include "mbed.h"
DarkFlame 0:44476ac6ab91 5
DarkFlame 0:44476ac6ab91 6 /*
DarkFlame 0:44476ac6ab91 7 OmniMove.h
DarkFlame 0:44476ac6ab91 8 オムニ・メカナム等の全方位移動ベクトル演算ライブラリ
DarkFlame 0:44476ac6ab91 9 Designer: Watanabe Yuuto
DarkFlame 0:44476ac6ab91 10
DarkFlame 0:44476ac6ab91 11 このライブラリは極座標で表したマシンの走行速度、進行方向から
DarkFlame 0:44476ac6ab91 12 各車輪の回転速度を演算するライブラリです。
DarkFlame 0:44476ac6ab91 13 3~8輪までの車輪数や車輪の位置などを指定できます。
DarkFlame 0:44476ac6ab91 14
DarkFlame 0:44476ac6ab91 15 ・ホイールの位置関係(4つの場合)
DarkFlame 0:44476ac6ab91 16 注.4つの場合は0,1,2,3とナンバリングする
DarkFlame 0:44476ac6ab91 17 front
DarkFlame 0:44476ac6ab91 18 ┌───────────────┐
DarkFlame 0:44476ac6ab91 19 │ w1← │
DarkFlame 0:44476ac6ab91 20 l│ y │r
DarkFlame 0:44476ac6ab91 21 e│ ↑ w0│i
DarkFlame 0:44476ac6ab91 22 f│↓ . →x ↑│g
DarkFlame 0:44476ac6ab91 23 t│w2 │h
DarkFlame 0:44476ac6ab91 24 │ │t
DarkFlame 0:44476ac6ab91 25 │ →w3 │
DarkFlame 0:44476ac6ab91 26 └───────────────┘
DarkFlame 0:44476ac6ab91 27 back
DarkFlame 0:44476ac6ab91 28 この場合の配置では0番目の車輪軸の角度fstWheelAngは0度となる
DarkFlame 0:44476ac6ab91 29
DarkFlame 0:44476ac6ab91 30 ・マシンの進行方向thetaについて
DarkFlame 0:44476ac6ab91 31 例)theta=0の場合→right方向に進む
DarkFlame 0:44476ac6ab91 32 theta=90の場合→front方向に進む
DarkFlame 0:44476ac6ab91 33 theta=-90の場合→back方向に進む
DarkFlame 0:44476ac6ab91 34 theta=180(or theta=-180)の場合→left方向に進む
DarkFlame 0:44476ac6ab91 35
DarkFlame 0:44476ac6ab91 36 ・マシンの回転速度Vrollについて
DarkFlame 0:44476ac6ab91 37  値が正(>0)であれば反時計回り、値が負(<0)であれば時計回りにマシンが回転する
DarkFlame 0:44476ac6ab91 38
DarkFlame 0:44476ac6ab91 39 ・回転速度の重みroll_ratioについて
DarkFlame 0:44476ac6ab91 40 例)roll_ratio=0.5の場合→マシンの直進成分が5割、回転成分が5割になる
DarkFlame 0:44476ac6ab91 41   roll_ratio=0.8の場合→マシンの直進成分が2割、回転成分が8割になる
DarkFlame 0:44476ac6ab91 42 */
DarkFlame 0:44476ac6ab91 43
DarkFlame 1:e515f6a4da2e 44 class OmniMove
DarkFlame 0:44476ac6ab91 45 {
DarkFlame 0:44476ac6ab91 46 public:
DarkFlame 0:44476ac6ab91 47 /*
DarkFlame 0:44476ac6ab91 48 セットアップ関数
DarkFlame 3:e08a0ee65f69 49 nWheel:車輪の個数(3~8),fstWheelAng:0番目のx軸と車輪軸のなす角度(deg) */
DarkFlame 0:44476ac6ab91 50 void setup(int nWheel,float fstWheelAng);
DarkFlame 0:44476ac6ab91 51
DarkFlame 0:44476ac6ab91 52 /*
DarkFlame 0:44476ac6ab91 53 全方位移動入力関数(極座標)
DarkFlame 3:e08a0ee65f69 54 r:マシンの速度(0~1),theta:マシンの進行方向(角度deg ex.90,-45)
DarkFlame 0:44476ac6ab91 55 Vroll:マシンの回転速度(-1~1),roll_ratio:回転速度の重み(0~1) */
DarkFlame 0:44476ac6ab91 56 void input_polar(float r,float theta,float Vroll,float roll_ratio);
DarkFlame 0:44476ac6ab91 57
DarkFlame 0:44476ac6ab91 58 /*
DarkFlame 0:44476ac6ab91 59 マシンの傾き角度を考慮した全方位移動入力関数(極座標)
DarkFlame 0:44476ac6ab91 60 MachineAng:マシンの現在角度(角度deg ex.90,-45) */
DarkFlame 0:44476ac6ab91 61 void input_polar(float r,float theta,float Vroll,float roll_ratio,float MachineAng);
DarkFlame 0:44476ac6ab91 62
DarkFlame 0:44476ac6ab91 63 /*
DarkFlame 3:e08a0ee65f69 64 全方位移動入力関数(直交座標)
DarkFlame 3:e08a0ee65f69 65 x:マシンのx方向速度(-1~1),y:マシンのy方向速度(-1~1)
DarkFlame 3:e08a0ee65f69 66 Vroll:マシンの回転速度(-1~1),roll_ratio:回転速度の重み(0~1) */
DarkFlame 3:e08a0ee65f69 67 void input_cartesian(float x,float y,float Vroll,float roll_ratio);
DarkFlame 3:e08a0ee65f69 68
DarkFlame 3:e08a0ee65f69 69 /*
DarkFlame 3:e08a0ee65f69 70 マシンの傾き角度を考慮した全方位移動入力関数(直交座標)
DarkFlame 3:e08a0ee65f69 71 MachineAng:マシンの現在角度(角度deg ex.90,-45) */
DarkFlame 3:e08a0ee65f69 72 void input_cartesian(float x,float y,float Vroll,float roll_ratio,float MachineAng);
DarkFlame 3:e08a0ee65f69 73
DarkFlame 3:e08a0ee65f69 74 /*
DarkFlame 0:44476ac6ab91 75 全方位移動出力関数(アドレスよくわからん人用)
DarkFlame 4:4d94b6148a0a 76 引数:n番目の車輪の回転速度 */
DarkFlame 4:4d94b6148a0a 77 float output_(int n);
DarkFlame 0:44476ac6ab91 78
DarkFlame 0:44476ac6ab91 79 /*
DarkFlame 0:44476ac6ab91 80 全方位移動出力関数
DarkFlame 0:44476ac6ab91 81 *v:車輪回転速度の配列の先頭アドレス */
DarkFlame 0:44476ac6ab91 82 void output(float *V);
DarkFlame 0:44476ac6ab91 83
DarkFlame 0:44476ac6ab91 84 private:
DarkFlame 0:44476ac6ab91 85 int i,nWheel;
DarkFlame 3:e08a0ee65f69 86 float Vx_wheel[8],Vy_wheel[8],Vx,Vy,Vroll,r,theta;
DarkFlame 3:e08a0ee65f69 87
DarkFlame 3:e08a0ee65f69 88 float limit(float min,float max,float _value);
DarkFlame 0:44476ac6ab91 89 float conv_deg(float _rad);
DarkFlame 0:44476ac6ab91 90 float conv_rad(float _deg);
DarkFlame 0:44476ac6ab91 91 };
DarkFlame 0:44476ac6ab91 92
DarkFlame 0:44476ac6ab91 93 #endif