グラフ探索による自由歩容生成 

グラフ探索による自由歩容生成

概要

大学4年生の時に行った,多脚ロボット[1] の自由歩容[2] を生成するための手法についての研究です. ロボットの状態をノード,動作をエッジとしてグラフを構築し,グラフ探索を行うことで,自由歩容を生成する手法を提案しています. ロボットの動作をグラフに落とし込むためには,適切な離散化が必要です. 本研究では,自作したシミュレータを用いた動作シミュレーションを行い,その結果から離散化を行いました.

実機による歩行実験

実機による歩行実験の様子

詳細な説明はこちら

多脚ロボットとは

多脚ロボットは脚を用いて移動するロボットの一種であり,他の移動形態[3] と比較して不整地での移動に適しています[4] . 多脚ロボットの歴史は古く,これまでに多くの研究が行われてきましたが,いまだに実用化されているものは少ないといえます. 多脚ロボットが実用化されない原因は大きく分けて2つあります.1つは脚の機構を実装するために多くのアクチュエータを必要とするため,重量が増加したり,エネルギー消費が増加したりする問題点があることです. もう1つは,機構の複雑性から,制御が困難であることです. このような課題をもつ多脚ロボットですが,独自の利点を持っています. 1つは,脚を用いて障害物を乗り越えたり,穴をまたいだりすることができるため,タイヤやクローラで移動することが困難な不整地での移動に適していることです. もう1つは,地面に与える影響が少ないため,砂利や砂などを巻き上げることなく移動することができることです. また,ホロノミックな全方向移動が可能であることや,脚そのものを作業のための足場として利用できることなどがあげられます. 以上のような利点の活用を期待され,今日でも多脚ロボットの研究は盛んに行われています.

自由歩容

脚ロボットを歩行させるためには,脚の運動を制御するために歩容を生成する必要があります. 現在,多くの研究では多脚ロボットの歩容は固定歩容が用いられています. これは固定歩容には実装が容易であり,平面において比較的高速な移動が可能であるという利点があるためです. しかし,多脚ロボットに求められるタスクは不整地でのタスク[5] であり,固定歩容では不整地での移動に適していません. 地形に合わせて歩容を変化させる自由歩容が求められます.

本研究の目的

本研究では,多脚ロボットの自由歩容を生成するための手法として,グラフ探索を用いることを提案しています. この手法は,ロボットの状態をノード,動作をエッジとしてグラフを構築し,グラフ探索を行うことで,自由歩容を生成するものです. この手法の持つ利点は,未来の状態を予測することができるため,効率の良い動作が生成できることや,どの足も上げることができないデットロック状態を回避できることです. 課題としては,実時間内の歩容生成のためには,グラフの構築において適切な離散化が必要であることが挙げられます. 課題解決のアプローチとして.自作したシミュレータを用いた動作シミュレーションを行い,その結果から離散化を行いました.

 開発したツール 

 開発したツール 

シミュレータ

この研究のため,グラフ探索よる自由歩容パターン生成の結果をグラフィカルに表示するシミュレータを開発しました. 先行研究でも,同様の機能を持つシミュレータが開発されていましたが,上からの俯瞰した視点でしかカメラを動かせないことや, 画面表示クラスとロジッククラスが分離されていないことなどが課題でした. 私はゲーム開発の経験を活かし,より使いやすく,拡張しやすいシミュレータを開発しました. シミュレータのソースコードは私のレポジトリから確認できます. また,ドキュメントはこちらから確認できます.

機能

  • 歩容パターンの表示
  • カメラの回転・移動
  • 歩容パターンの再生・停止
  • 歩容パターンの再生速度の変更
  • 歩容パターンの再生位置の変更

工夫した点

  • カメラの操作をより直感的にするため,一般的な3Dビューアーのように,マウス操作でカメラを回転・移動させる機能を追加しました.
  • シミュレータの拡張性を高めるため,画面表示クラスとロジッククラスを分離しました.
  • より高速な計算を行うため,位置ベクトルやクォータニオンの計算をするクラスを自作しました.
  • シミュレータの使い方をより分かりやすくするため,Doxygenを使って簡易にドキュメントを追加できるようにしました.
  • google c++ style guide をベースにして,統一した記述でコーディングを行いました.
歩行シミュレーションの様子

歩行シミュレーションの様子

ロボットの可動範囲を確認する様子

ロボットの可動範囲を確認する様子

可動範囲ビューアー

ロボットの脚の可動範囲は3次元の領域になりますが,これを2次元で表現することで,可動範囲を直感的に理解しやすくなります. そこで,ロボットの脚の可動範囲を2次元で表示する可動範囲ビューアーを開発しました. Pythonのmatplotlibを用いて,ロボットの脚の可動範囲を直感的に理解できるようにしました. 逆運動学解の算出に失敗した場合や,脚が胴体に干渉する場合,関節が可動範囲外にある場合は,関節や脚の部分が赤く表示されます. プログラムのソースコードは私のレポジトリから確認できます.

また,マウス操作で脚先座標を変更できるようになっており,ロボットの脚の可動範囲を確認する際に便利です. 加えて,グラフの隣にある表には,各関節の角度やサーボ指令値を表示しており,ロボットの制御を行う際に参考になります.

機能

  • 可動範囲の表示
  • マウスによる脚先座標の変更
  • 脚先座標から逆運動学解の算出と結果の表示
  • 画像の保存
  • 脚力の図示

工夫した点

  • 脚の表示,可動範囲の表示,表の表示などをそれぞれ別クラスにし,必要に応じて組み替えられるように設計しました.
  • マウス操作による,直感的な図示ができるようにしました.
  • 逆運動学解が2つ出た場合は,すべての関節が可動範囲内に入っているものを表示するようにしました.
ロボットの可動範囲を確認する様子

ロボットの可動範囲を確認する様子

実際のロボット脚を横から見た様子

実際のロボット脚を横から見た様子

注釈

トップに戻る