スキップしてメイン コンテンツに移動

Reading: プログラミングROS

ROS2を使用したソフトを扱うことになった。基礎から全く知らないのでひとまず日本語の著書を探してたところ見かけたので読むことにした。
この書籍自体はROS2ではなく、ROSを扱っているので、いくつかの違いがあるけれど、それでも十分に役立つ内容だった。

以下は読書メモ。

ROSグラフというかたちでつながりを表現
- ノードとエッジ(≒まさにグラフに出てくるやつ)
- roscoreがdiscoveryの機能を持つ(ノード登録、ノードからの問い合わせで別のノードの情報を提供)
- ROSグラフが星形に見えたら、中央のノードにデータを送っているかうけとっているだけになるため、データの流れを見直すなどした方が良い

tf(transform)によって座標系を取り扱う
topicを公開、pub/sub形式での実装
- ラッチトピックは、最後に配信されたメッセージを自動で受け取り可能
- メッセージの型定義は msg ディレクトリ内にて実施する

サービスは同期型のデータ受渡方法
- 入出力定義はメッセージ定義と似たようなサービス定義のファイルを用いる
- たまに実行する必要のある処理や同期してリプライする必要のある処理に使う

アクションは非同期型のデータ受渡方法
- 要求に応えるまでに時間を要する場合に使う

移動プラットフォーム
- 静的に安定 = アクチュエーターなどが動いていなくても倒れない
- 動的に安定 = アクチュエーターなどが動いていないと倒れる
- スキッドステアリングプラットフォーム=全部の車輪がアクティブに動く、横移動不可
- アッカーマンプラットフォーム=後輪は常にまっすぐ、前輪の向きが左右一緒、横移動不可
- 横移動は幌のミックプラットフォームでないと実現できない
- ROSではこれら移動プラットフォームとのやり取りにTwistという3次元の線形と回転の速度の表現方法を使う

マニピュレーターアーム
- 基本的な特性は自由度(degrees of freedom: DOF)
- 作業空間内で自由な方向に向ける空間のことをデクストラウス作業空間という

センサー
- バイナリーセンサーは「オン」か「オフ」か、例えば光線の遮られ状況からオンオフを見たり、単体のスイッチを機械的な圧力でオンオフすることで見たりなど
- スカラー値を返すものもある、この場合には各種センサーによって最小認識単位などがあるのでその特性を理解することが必要
- カメラ:ステレオカメラや深度カメラなど、深度カメラは事前登録したパターンなどからシーンの3次元構造を推定する
- レーザースキャナー、車両用レーザースキャナーは空気抵抗や振動、温度に耐えて且つ長距離の範囲を感知できなければならない

シャフトエンコーダー
- 車輪の正確な回転数を数えるのに使われる
- 車両の位置を直接測定するものではない
- タイヤの空気圧や、カーペットの毛足の向きなどちょっとしたことで生じるズレが蓄積する

シミュレーター
- Stage=2次元シミュレーターの良例、ROSの統合パッケージでラップされている
- Gazebo=3次元にも対応しているシミュレーター
- スピードや正確性、グラフィックスの品質、次元、サポートしているセンサーの種類、ユーザービリティ、サポートしているプラットフォームなど、トレードオフによってシミュレーターを選ばなければならない

デバッグや開発で役立つもの
- rostopicツールは相棒となる、デバッグの場面でデータが期待通りに流れていることを確認するなど、何らかの形で使うことになるはず
- Twistメッセージを100ミリごと(10Hz周期)で出すことと、whileループの中でsleep(0.1)とすることは同じではない、Sleepの場合はループが10Hzより早くならないことを保証してくれるだけ
- ROSはrqt_plotというコマンドラインツールを提供しており、メッセージストリームをリアルタイムでグラフィカルにプロットする
- rvizではたとえばオドメトリーを追跡して肩越しにカメラを追うなどなどが実現可能になりうる、他にもプラグインなど多数ある
- rosbagでは必要な(あるいは全ての)トピックのメッセージを記録することができるので、生センサーデータの代わりにrosbagを使うなどという手立てによりデバッグ効率をあげることができる

地図の扱い
- 地図は画像で保存されていて、どれだけの値だと通れる・通れないなどをYAMLで定義している
- 黒(255)に近いほど占有されている、白(0)に近いほど非占有となっていることを示している
- そのため、生成された地図に手修正で黒線を加えることで、侵入を禁止することができる
- 作るときはセンサーデータを一度bagファイルに保存し、保存したデータをパラメーター調整しながらslam_gmappingで地図作成する方法が良い

自己位置推定
- ROSのamclパッケージは適応型モンテカルロ位置推定法(Adaptive Monte Carlo Localization)を実装している
- ナビゲーションスタックはROSの中でも最もよく使われる機能の一つで、物にぶつからずに指定したゴールに辿り着くための機能

知覚と制御
- オープンループ=フィードバックループを持たない、時間と共に蓄積する誤差を修正できない
- クローズドループ=フィードバックループを持つ、誤差を計算して制御システムにフィードバックできる
- RGBの値でフィルターして使うのはかなり扱いが難しい、それよりはRGB画像をHSV画像(色相、彩度、明度)に変換して、色相の閾値を見ることでバイナリー画像にする方が適切
- ALVARマーカーはQRコードのようなものだが機械による認識がよりしやすい上、距離などを適切に把握して振る舞いやすい(レーザーなどだけでの対応に比べて)

ロボットのモデリング
- URDF(Unified Robot Description Format)と呼ばれるXML形式で表現する
- モデリングされた内容はrvizで可視化ができる
- 関節が固定なのかあらゆる方向に曲げられるのかなども定義する
- モーターによる制御なども記載しないとモデルが重力に引っ張られてぐにゃぐにゃになったりする