自作自動走行ロボット No.1
なぜブログにしたか
得た知識を忘れずにアウトプットと設計思想を振り返る為にブログにしました。
機能
- GPSによるナビ走行
- SLAM(LiDAR)
- 加速度センサーでのナビ走行
- カメラで物体認識と歩行者信号機の色判別
派生プロジェクト?
カメラで歩行者信号機の色判別
https://yato-neco.github.io/tmp/tflite/index.html
LiDARをRustで使えるように作った成果物
https://github.com/yato-Neco/ydlidarx2-rs
LiDARをプロットするソフトウェア
https://github.com/yato-Neco/LPlot
ロボットをプログラミングする為のなんか
https://github.com/yato-Neco/EvetDvn
1. GPSによるナビ走行の設計思想
何度か書き直しをした部分で、設計もだいぶ悩んだ部分です。
waypointを設定し、そこに着いたら次のwaypointに向かって進む感じです。
設計ミスポイントは緯度経度でwaypointを設定したことで、これによりGPSを受信せず加速度センサーだけで走行するモードを実装困難になりました。(方法はある)
これは、ロボット起動時の緯度経度から相対的な座標を別で生成することにより実装を簡単にすることができました。
2. SLAM(LiDAR)
SLAMとは言い難い物です。ロボットの相対な座標をKeyに障害物をValueに入れているだけです。
SLAMの定義に反しているので私自身はSLAMとは読んでません。
自己位置推定の実装はしてない(個人的には実装することは微妙)です。
3. 加速度センサーでのナビ走行
GPSセンサの緯度経度の取得が遅い(1s) & 受信が安定しないことにより追加した機能です。 最初は二次元配列を作成していたのですが私の浅はかな実装ではメモリをかなり食うので実装を取りやめました。以降は二次元配列を生成せず実装をしました。
4. カメラで物体認識と歩行者信号機の色判別
モデルはEfficientDetを使用し転移学習で歩行者信号機の色判別を実装しました。
途中で別のタスクをしないといけなかったので精度の良い物は作れませんでした。
デモが以下のURLから試せます。
https://yato-neco.github.io/tmp/tflite/index.html
5. EvetDvn(ロボットをプログラミングする為のなんか)
主に自由な書き方にしないためのライブラリです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
pub struct AutoEvents {
pub is_core_stop: bool,
pub is_debug: bool,
pub is_break: bool,
pub is_move: bool,
pub is_trune: bool,
pub is_first_time: bool,
pub is_continue: bool,
pub is_flash:bool,
pub azimuth: f64,
pub maneuver: &'static str,
}
struct AutoModule {
pub nav: Nav,
pub scheduler: Scheduler,
pub moter_controler: Moter,
}
~~~~~~
let mut flacn = FlaCon::new(module, event);
この様に、事前に使うフラグとモジュールを事前に縛ることによって、何のモジュールやフラグが使うことが出来るかを簡単に確認できるようになっています。
内容としては以上です、ご精読ありがとうございました。