Choreonoidのシンプルコントローラを作成するとき、OpenCVなどのライブラリを使用したいと思った方はいると思います。
しかし、どのように記述すればライブラリを使用できるようになるか分からず困った方もいると思います。私もそうでした。
今回はそのような方のためのtipsとなります。

どこに追加すればよいか

今回は、extディレクトリにシンプルコントローラのソースコードを配置してChoreonoidと一緒にビルドする場合を例に説明します。
シンプルコントローラのビルド方法は以下を参考にしてください。
https://choreonoid.org/ja/manuals/latest/simulation/howto-build-controller.html

extディレクトリにシンプルコントローラを作成した場合のディレクトリ構成は以下のようになります。
Choreonoidソースディレクトリ
 + ext
  + MyController
   - CMakeLists.txt
   - MyController.cpp

このMyControllerディレクトリ内のCMakeLists.txtの中にライブラリを使用する旨を追記します。

追記内容

シンプルコントローラを作成する場合はCMakeLists.txtの記述は以下のようになります。

choreonoid_add_simple_controller(MyController MyController.cpp)

Choreonoid本体で定義されている choreonoid_add_simple_controller というCMake関数を使用します。引数には、コントローラ名(MyController)とシンプルコントローラのソースファイル(MyController.cpp)を指定します。
CMakeLists.txtの編集が終わったらChoreonoid本体のビルドを行います。MyController.soというシンプルコントローラが作成されます。
MyController.soが作成される場所は「Choreonoidソースディレクトリ/build/lib/choreonoid-1.8/simplecontroller」になります。

ライブラリを使用する場合はここに設定を追記します。
今回は例としてOpenCVを追加してみます。

シンプルコントローラでOpenCVを使用する場合は以下のように追記します。

#ライブラリを検索
find_package(OpenCV REQUIRED)
choreonoid_add_simple_controller(MyController MyController.cpp)
#インクルードディレクトリのパスとシンプルコントローラをリンク
target_include_directories(MyController PUBLIC ${OpenCV_INCLUDE_DIRS})
#ライブラリをシンプルコントローラにリンク
target_link_libraries(MyController ${OpenCV_LIBRARIES})

追加した内容を解説していきます。
・find_package(OpenCV REQUIRED)
OpenCVのライブラリを検索し、インストールされているか確認します。
REQUIRED を指定することで見つからなかった場合CMakeが失敗するようになります。

・target_include_directories(MyController PUBLIC ${OpenCV_INCLUDE_DIRS})
OpenCVのインクルードディレクトリのパスとシンプルコントローラをリンクさせます。

・target_link_libraries(MyController ${OpenCV_LIBRARIES})
OpenCVのライブラリをシンプルコントローラにリンクさせます。

このようにOpenCVのインクルードディレクトリとライブラリをシンプルコントローラにリンクさせています。

他のライブラリを使用するには

今回はOpenCVを例に説明をしましたが、他のライブラリを使用したい方もいると思います。その場合も同じようにCMakeLists.txtに追加をすれば大丈夫です。
具体的なCMakeLists.txtの記述はライブラリごとに変わるのでここでは割愛します。調べ方は、対象のライブラリを使用する場合のCMakeLists.txtの書き方を調べます。その時ソースコードとプロジェクト名の設定のほかにインクルードパスの設定などをしているはずです。その内容をCMakeLists.txtに追加してみてください。

いかがでしたか。CMakeLists.txtの書き方を知っている人やChoreonoidで何回もシンプルコントローラを作成している人にとっては当たり前かもしれません。しかし、初めての方にとっては重要なことだと思い、今回掲載しました。どうぞご利用ください。