:tocdepth: 1
UAV用のローカルプランナを実装する
==========================================================
この章では、`Open Motion Planning Library (OMPL) `_ を使ってドローン用のローカルプランナを実装します。
OMPLはオープンソースの行動計画ライブラリで、マニピュレータやUGVなどの動作計画に用いられる `MoveIt! `_ というライブラリもOMPLを使っています。
インストール
----------------------------------------------------------
UbuntuにOMPLをインストールする方法は以下の3通りあります。
* ソースからインストールする
* ビルド済みバイナリをインストールする
* ROSバージョンのバイナリをインストールする
今回はROSバージョンのバイナリをインストールします。
他の方法については、`OMPLのインストールガイド `_ を見てください。
はじめに、ROSのリポジトリをaptのデータ取得元に追加します。
すでにROSを使っている場合には必要ありません。
.. code-block:: bash
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu `lsb_release -sc` main" > /etc/apt/sources.list.d/ros-latest.list'
wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
追加できたら、OMPLをインストールします。
.. code-block:: bash
sudo apt update
sudo apt install ros-kinetic-ompl
ローカルプランナを実装する
----------------------------------------------------------
以下では、`制御指令値を含むプラニング `_ を参考にして作業を進めていきます。
CMakeLists.txt
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: cmake
find_package(catkin REQUIRED COMPONENTS
roscpp
...
nav_core # add
tf # add
costmap_2d # add
)
.. code-block:: cmake
find_package(OMPL REQUIRED)
.. code-block:: cmake
add_executable(rrt_planner src/rrt_planner.cpp)
target_link_libraries(rrt_planner ${catkin_LIBRARIES}
${OMPL_LIBRARIES}
${Boost_LIBRARIES})
ROSプラグイン
----------------------------------------------------------
ROSのパッケージの中には、処理の一部(画像処理や行動計画など)をプラグインとして作成し、後で変更可能になっているものがあります。
プラグインを作成、使用するためには `pluginlib `_ パッケージを使用します。
プラグインの仕組みを使うことで、特定のインターフェースに従ったクラスを作れば中身の実装は自由にできるので、既存のパッケージを拡張することが容易になります。
navigationスタック
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
navigationスタックは、move_baseやcostmap_2dなどを含むメタパッケージです。
navigationスタックでは、pluginlibを使って作成したプラグインをローカルプランナやグローバルプランナとして使用することができるようになっています。
navigationスタックのローカルプランナとして使用可能なクラスを作るためには、 `nav_core::BaseLocalPlanner `_ を継承したクラスを作る必要があります。
ローカルプランナをプラグイン化する
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
実行する
----------------------------------------------------------
参考
----------------------------------------------------------
`Robotics/OMPL - NAIST::OnlineText `_
OMPLの日本語チュートリアル
`Open Motion Planning Library: A Primer `_
OMPLの英語チュートリアル(PDF)
`sources.list - APT のデータ取得元の設定リスト `_
sources.listについて
`navigationスタックで学ぶpluginlibの使い方 `_
navigationスタック用のプラグインについて
`Writing A Global Path Planner As Plugin in ROS `_
navigationスタック用のグローバルプランナプラグインを作る
`nav_core - ROS Wiki `_
nav_coreパッケージ
`navigation/dwa_local_planner - GitHub `_
dwa_local_plannerのソースコード