名称 | MIRS2403 第1回ソフト開発報告書 |
---|---|
番号 | MIRS2403-SOFT-0002 |
版数 | 最終更新日 | 作成 | 承認 | 改訂記事 |
---|---|---|---|---|
A01 | 2025.2.13 | 中村 介 | 第1版 |
本ドキュメントはMIRS2403 華蟻のソフトウェア開発報告書である。
ROS2を中心に据えた制御系統を新規に作成した。
最終的なノード図は以下のようになった。
一からの構成であったが、まとまったシステムを構成することができた。一部パラメーターの更新に関する部分が余計な処理を挟んでいるので手直しが出来る早期に改修しておくべきだったかもしれない。
Navigation2を中心としてLiDARとエンコーダーを利用した自律走行システムを実装した。
目的地への自律移動や人を自動で避けるなど最低限必要な機能は実装することができた。
位置精度、角度制度を上げようとすると足回りの構造上細かな位置調整が難しいためか目的地への到達判定が出ず、挙動がおかしくなりやすかった。
精度に関しては誤差23cm、角度は0.1rad程度が限界のように感じられる。(機体0.5台分くらいが目安)
BehaviorTreeと連動させることで自律行動を記述しやすくすることもできた。詳細な実装方法や構造についてはMIRS2403-REPT-0002に記述している。
処理の流れは以下の通り
椅子の足が細すぎるとLiDARに映らなくなるため、体育館の椅子に関しては脚を太くするカバーを取り付けた
椅子の足が認識さえできれば高精度で椅子の位置検出が出来ていた。ただし向きがランダムになってしまうので、決まった位置からしか椅子の下に入れない場合に不都合が多かった。
点群処理っぽいものを実装出来て楽しかった
ArucoMarkerを椅子の下に貼り付け、前方カメラで椅子を認識する。
座標系の変換が必要だったが、それさえできればある程度の精度は出すことが出来た。
カメラの取り付け位置の登録は大雑把に計測したもので、カメラの固定も不十分だったため精度の向上をするならこの辺りを機械班と協力して値を決定していく必要があるように感じた。
カメラの処理が重く、二台をjetsonで同時処理するのは不可能で、当初は前方の椅子発見用のカメラと上部の椅子下での位置調整用のカメラで二台使用する予定だったが最終的には前方の1台だけを動かしていた。
出来れば小型PCなど高性能なマシンを機体に積んで処理すべき。
ジャッキの昇降動作を制御する。
リミットスイッチが押されるまでモーターを回転させるプログラムをESP32側にserviceとして実装している。
全体制御をしているBehaviorTreeから呼び出して使用する。呼び出すだけのclientプログラムも実装しているのでコマンドラインからの呼び出しも可能。
呼び出しに関しては問題なく行えていた。
ジャッキの停止が時々動作しなくなり、ジャッキを破壊することがあった。もう一度動かすと正常動作をする。不具合を起こす確率は体感5~10%
原因は不明。ESP32の内部でこの処理はスレッドを分けて実装するようにしているので、これが悪さをしている可能性はあるが検証はできていない。
本来はROS2のserver機能ではなくaction機能で実装すべきであるが、micro-ROSでのactionの実相の情報が不足しており、実装することができなかった。
終了の検出がservice単体では出来ないので、一定時間動作を停止してジャッキの動作終了を待つという動作しか全体の流れで実装できなくなってしまった。
action自体ROS2の内部では独自のシステムではなく、2つのserviceと1つのtopicの合成として定義されているため、自作するのも手だったかもしれない。
BehaviorTreeからserverをたて、webアプリ側がこれに対してアクションを起こすまで動作待機をするように実装している。
問題なく動作していた。パラメーターの取得もでき、これによる全体制御の分岐も実装出来ていた。
python3 のhttp.serverを使ってローカルWebサーバを作成し、Webアプリをローカルネットワーク内に公開した。
実際のWebアプリ画面を以下に示す。ユーザは画面の人数、配置場所、配置パターン、選択し、formを送信することで手配を行う。
fig2. Webアプリケーション画面
デモ用のアプリを示す。デモアプリは以下に示す。
fig3. Webデモ版アプリケーション画面
直感的に操作できるようなUIにできた。cssではサイズ指定をremで行い、スマホからでも操作できるようにした。
オーダー情報はcsvファイルを用いて管理するようにした。
rosbridge_serverを経由したWebSocket通信を行い、ブラウザとROSを連携するようにした。ブラウザ側ではroslibjsを使ってサービス通信でやり取りをしている。
情報が未入力の箇所がある場合は送信を制限し、アラートで通知を送るようにした。
数値を入力する際にエンターを押すとページが更新されてしまう動作をしたため、エンターを押すと入力フォームが閉じるように設定した。
分担した作業をそれぞれが十分こなすことが出来ていたと思う。ROS2の導入に伴い全体的な開発が遅れてしまったが、機械の開発終了までに最低限動かせる状況までもって行けていたのは良かった。椅子を運ぶ機能で手一杯になってしまい、ユーザー側の使いやすさの調査までたどり着くことは出来なかったのが悔やまれる。
GitHubのリンクは以下
MIRS24 共有GitHub