UdonLibrary の使い方
UdonLibrary は部のライブラリです。
https://github.com/udonrobo/UdonLibrary
ロボコンの度に毎回一から書いていると大変なので、よく書くコードを UdonLibrary 内で実装し、呼び出すだけでプログラムが書けるようになっています。
開発経緯・歴史
追える範囲だと部のライブラリは 2016 年から存在しています。当時はヘッダーファイルが集まった zip ファイルを回す形で利用していました。
CAN 通信への移行に伴って、ライブラリを整理し、GitHub で管理する形になりました。UdonLibrary は 2022/09 から存在します。
主な機能
通信系
- CAN
- I2C
- USB シリアル
- 無線
- PS5 コントローラー
アルゴリズム系
- ループ周期制御
- フィードバック制御
- 移動平均
デバイスドライバ系
- モーター
- ロボマスモーター
- サーボモーター
- エンコーダー
- ジャイロ
- 7 セグメント LED
ユーザー定義型系
- 二次元ベクトル
- 色空間
- オイラー角
- クォータニオン
インストール方法
UdonLibrary のリポジトリをクローンします。Arduino のライブラリフォルダにクローンします。
インストール方法はライブラリのドキュメントに記載されています。
https://github.com/udonrobo/UdonLibrary/blob/master/docs/Install/ArduinoIDE.md
使い方
🌟 ライブラリのインクルード
Udon.hpp
をインクルードすると全ての機能が使えるようになります。
🌟 プログラムを書く
基本的にドキュメントを参照すると使い方が書いてあります。
#include <Udon.hpp>
static Udon::Motor3 motor{ 0, 1, 2 };
void setup()
{
motor.begin();
}
void loop()
{
motor.move(200);
}
static について
static
(静的) な変数にすることで、他のソースファイルからアクセスできなくなります。
static な変数はそのファイル内でのみ使われることが確約されるため、他のファイルから使われているか考慮する必要がなくなり安心できます。
🌟 中身の見方
実装を見たい場合、src
フォルダにソースコードがあります。GitHub や VSCode で見ることができます。
クラスの紹介
🌟 Udon::MovingAverage
移動平均クラスです。簡単に言うと変化を滑らかにしてくれるクラスで、モーターの出力値を滑らかにするのに使います。
内部には配列があり、そのサイズをテンプレート引数で指定します。配列のサイズが大きいほど滑らかになりますが、遅れが生じます。
モーターを動かすマイコンで使い、メインマイコンでは使いません。
#include <Udon.hpp>
static Udon::MovingAverage<50> ma;
void setup()
{
}
void loop()
{
int power = 100;
int smooth_power = ma(power); // これだけ!
motor.move(smooth_power);
delay(10);
}
移動平均をかける前と後のグラフです。
呼び出す度に図のように配列が更新されていき、平均値が返されます。そのため、配列の個数回呼び出すと、指定の値に到達します。
🌟 Udon::LoopCycleController
https://github.com/udonrobo/UdonLibrary/blob/master/docs/Algorithm/LoopCycleController.md
🌟 Udon::BNO055
https://github.com/udonrobo/UdonLibrary/blob/master/docs/Driver/BNO055.md
🌟 Udon::Motor3, Motor2
Udon::Motor3
クラスは、前回作ったモータークラスと移動平均クラスを組み合わせたクラスです。
Udon::Motor2
クラスは制御信号線が 2 本のモータードライバを制御するクラスです。
🌟 Udon::Vec2
x, y を持つ構造体 + 便利なメンバ関数モリモリなユーザー定義型です。次のように定義されています。
ベクトルの長さを求める
ベクトルを回転させる
ベクトル同士の演算
角度を求める
🌟 Udon::Optional
有効な値を持つか、もしくは無効かを表す型です。通信の受信エラーの判別に使います。
https://github.com/udonrobo/UdonLibrary/blob/master/docs/Types/Optional.md