Chassis v2.1.1
Chassisはロボコンでの足回り制御を行うためのC++ライブラリである。
Loading...
Searching...
No Matches
Chassisの使用方法

Chassisを用いて手動制御、自己位置推定、自動制御を行う方法を示す。 下記の例ではMotor.hを使用している。

手動制御

frameモジュールを用いる。 例はOmniを制御するものである。

インスタンスの生成

Omni<3> omni{[](std::array<float, 3> pwm) {
for(int i = 0; i < 3; ++i) {
motors[i] = pwm[i];
}
}};

移動速度を渡してモータ出力を計算しモータにセットする。

Velocity vel = {0, 0.5, 0};
omni.move(vel);

自己位置推定

localizationモジュールを用いる。

1
3#include <../snippets/Motor.h>
4#include <Odom.h>
5#include <mbed.h>
6
7#include <array>
8#include <functional>
9
10using namespace rct;
11
12Timer timer;
13Odom<3> odom{};
14
15int main() {
16 timer.start();
17 while(1) {
18 // エンコーダ角変位の変化量を引数に渡す
19 odom.integrate({0, 0, 0});
20
21 // 現在座標の取得
22 Coordinate pos = odom.get();
23
24 // 前回からの経過時間を取得
25 auto now = timer.elapsed_time();
26 static decltype(now) pre = {};
27 auto delta = pre - now;
28 pre = now;
29
30 // 速度の取得
31 static Coordinate pre_pos = {};
33 pre_pos = pos;
34
35 printf("pos{x:%d,y:%d:,ang:%d}", (int)pos.x_milli, (int)pos.y_milli, (int)(pos.ang_rad * 180 / M_PI));
36 printf("vel{x:%d,y:%d:,ang:%d}", (int)vel.x_milli, (int)vel.y_milli, (int)(vel.ang_rad * 180 / M_PI));
37 }
38}
オドメトリを行う Odom クラスを提供する。
robot control library
Definition Chassis.h:16
N輪オムニの制御を行うクラス。
Definition Omni.h:25

自動制御

chassisモジュールを用いる。

1
3#include <../snippets/Motor.h>
4#include <ChassisAuto.h>
5#include <Odom.h>
6#include <Omni.h>
7#include <PollingTimer.h>
8#include <mbed.h>
9
10#include <array>
11#include <functional>
12
13using namespace rct;
14
15Timer timer;
16Odom<3> odom{};
17Motor motors[3] = {{D10, D11}, {D12, D13}, {D12, D13}};
18ChassisAuto<Omni<3>> chassis{[](std::array<float,3> pwm) {
19 for(int i = 0; i < 3; ++i) {
20 motors[i] = pwm[i];
21 }
22 },
23 PidGain{0.1}};
24
25bool check_reached(const Coordinate& dst, const Coordinate& pos);
26
27int main() {
28 timer.start();
29 while(1) {
30 // エンコーダ角変位の変化量を引数に渡す
31 odom.integrate({0, 0, 0});
32 auto now = timer.elapsed_time();
33 static auto pre = now;
34 auto delta = pre - now;
35
36 Coordinate dst = {0, 1000, 0.0};
37 Coordinate pos = odom.get();
38 chassis.auto_move(dst, pos, delta);
40
41 pre = now;
42 }
43}
44
49bool check_reached(const Coordinate& dst, const Coordinate& pos) {
50 if(static PollingTimer wait; wait(1s)) {
51 return true;
52 } else {
53 if(distance(dst, pos) > 100) wait.reset();
54 return false;
55 }
56}
bool check_reached(const Coordinate &dst, const Coordinate &pos)
hoge
Definition main.cpp:49
足回りの位置のPID制御を行うChassisAutoを提供する。
オムニの制御を行う Omni クラスを提供する。
constexpr float distance(const Coordinate &p1, const Coordinate &p2)
2つの座標間の距離を計算する。
PID制御のゲイン
Definition Pid.h:21

4輪独立ステアリング

インスタンスの生成

SteerDrive<4> steer{[](std::array<std::complex<float>, 4> cmp) {
for(int i = 0; i < 4; ++i) {
motors[i] = abs(cmp[i]);
servo[i] = arg(cmp[i]);
}
}};
SteerDrive< 4 > steer
[construct]
Definition main.cpp:14

出力

Velocity vel = {0, 0.5, 0};
void move(const Velocity &vel, const float offset_rad=0.0)
モータへのPWM出力を計算する。その後callback関数にPWM出力を渡す。
Definition Omni.h:43

utilityモジュール