Turtlebot+OpenManipulatorを対象とするサンプルアプリケーションを開発したので、その概要について解説します。Waffle PiにOpenManipultorを付けた、MobileManipulatorロボットにRealSenseを付加した構成です。
開発したコードは、GitHubのリポジトリにあります。そこでは、MobileManipulatorをGazebo上でシミュレーションする環境と、Pythonで書かれた、Nav2とMoveIt2の両方を制御するアプリケーションプログラムが保存されています。環境中のコーラ缶を探索し、ピッキングを行い、運搬してパレット上にプレースする動作を試すことができます。また、少しの改造で、ピッキングしたコーラ缶を棚にプレースするようにすることも可能です。
これらの動作の実装はかなり複雑になるので、構造的なアプローチを可能にするため、
- Behavior Treeの利用: pytwbライブラリによる
- ros_actorの利用 : ros_actorライブラリによる
を試みています。それぞれの詳細については、ライブラリのGitHubページを参照してください。
– コーラ缶の探索
ロボットが行動可能な全域からコーラ缶を探し出します。ランダムに動き回っていては埒が明かないので、地図を自動的に複数の領域に分割して、効率的な探索を可能にしています。分割の際、壁が内側に張り出して視界を遮る部分に注目して区切ることにより、見通しのよい領域ごとに分割されるようなアルゴリズムを作ってあります。
このようなアルゴリズムを動かすためには、SLAMが生成した点群地図を直接利用するのは効率がよくありません。地図表現を点群の集まりから幾何学的な直線の集まりに変換するvector_mapライブラリを開発し、使用しています。
– コーラ缶を移動しながらピッキング
ピッキングの実装はけっこう大変です。まず、Gazebo(classic)で、グリッパがコーラ缶を掴むようにするためには、モジュールの追加が必要です: メンバのQiita記事
また、位置をmm単位で正確に設定しないとピッキングが成功しません。移動しながらだとこれはかなり大変です。このため、移動を多段階に分割して、移動のたびに、RealSense情報を用いて移動方向やアーム角度の補正をするようにしています。
– コーラ缶のプレース
コーラ缶をパレットの上にプレースするためには、パレットに非常に接近する必要があります。残念ながら、ROSの通常のナビゲーション機能では、そこまでの位置制御はできません。RealSenseのdepth情報を用いたビジュアルフィードバック機構を実装し、パレットに対してプレースに必要な距離まで接近する機構を実現しました。
アームの角度を調節すると、棚に収納するようにもできます。(リポジトリには含まれません)