衝突検出の実装について

現在、ロボットアームの経路生成を行うため衝突検出を行う方法を模索しております。

Choreonoid のAPIで自己・環境の衝突検出に利用できるものはありますか?

簡単に実装方法についてもご教授いただきたく存じます。

お手数をおかけいたしますが、何卒よろしくお願いいたします。

まず関連しそうなトピックを貼っておきます.
https://discourse2.choreonoid.org/t/topic/347

一応BodyItemクラスにcollisions()という関数がありまして,こちらで衝突リンクの組を取れるはずなのですが,このあたりは @nakaoka さんにお伺いできればと思います.

干渉検出のコアとなるAPIはsrc/Util以下のCollisionDetector.hやCollision.hで定義されているクラスです。これらはAPIとしてクラスや構造体を定義しています。

実際の干渉検出器の実装はCollisionDetectorクラスを継承したものになります。標準の干渉検出器として、src/AISTCollisionDetectorにおいてAISTCollisionDetectorが実装されています。他にODEPluginで実装されているODECollisionDetectorや、FCLPluginで実装されているFCLCollisionDetectorといった干渉検出器も利用可能です。干渉検出の結果はアルゴリズムや実装によっても変わるので、Choreonoidでは上記のAPIを定義した上で、実際の干渉検出器の実装を交換可能な設計としています。

上記のAPIは干渉検出の低レベルな部分を担っていますので、ロボットモデル(Bodyモデル)に対して干渉検出を行うためには追加のコーディングが必要となります。その部分を処理するクラスとしてsrc/BodyにBodyCollisionDetectorというクラスを定義しています。

BodyCollsiionDetectorクラスの使用方法は定義をみていただければおおよそお分かりいただけるかと思いますが、実際の使用例としてsrc/BodyPluginにKinematicFaultCheckerというものがあります。これはメインメニューの「ツール」から利用できるもので、BodyアイテムとBodyMotionアイテムのセットに対して、運動学的制約を満たした動作であるかをチェックするものです。このチェックの中に、自己干渉を起こしていないかの確認もあり、その処理にBodyCollisionDetectorを使用しています。ですからKinematicFaultCheckerの実装をみることで、BodyCollisionDetectorの使用方法も分かるのではないかと思います。