URDF/SRDFとロボットモデルの仕様¶
SRDF¶
MoveIt!がURDFに加えて利用するロボットモデルの記述形式です。 グループ、キネマティックチェーン、エンドエフェクタ名、干渉ペアの指定を行います。
詳しい仕様は、以下の外部ドキュメントを参照してください。
SRDFファイルは、MoveIt Setup Assistantを使って生成できます。詳しくは以下の外部ドキュメントを参照してください。
モデルローダー¶
URDFとSRDFファイルをロードするユーティリティクラスです。運動学プラグインのロードにも使われます。
-
class
robot_model_loader
::
RobotModelLoader
¶ パブリック関数
-
const robot_model::RobotModelPtr &
getModel
() const¶ planning_models::RobotModelを取得します。
-
const std::string &
getRobotDescription
() const¶ ロボットモデルのパラメーター名を取得します。
-
const urdf::ModelInterfaceSharedPtr &
getURDF
() const¶ パース済みのURDFモデルを取得します。
-
const srdf::ModelSharedPtr &
getSRDF
() const¶ パース済みSRDFモデルを取得します。
-
const rdf_loader::RDFLoaderPtr &
getRDFLoader
() const¶ モデルの読み込みに使用されたrdf_loader::RDFLoaderのインスタンスを取得します。
-
const kinematics_plugin_loader::KinematicsPluginLoaderPtr &
getKinematicsPluginLoader
() const¶ 運動学ソルバーのプラグインローダーを取得します。
- 注意
このプラグインローダーは変数スコープ内に維持する必要があります。そうしないと、運動学ソルバーがアンロードされる可能性があります。
-
void
loadKinematicsSolvers
(const kinematics_plugin_loader::KinematicsPluginLoaderPtr &kloader = kinematics_plugin_loader::KinematicsPluginLoaderPtr())¶ 運動学ソルバーを運動学モデルにロードします。これは、コンストラクターに渡されるオプションによって明示的に無効にされない限り、デフォルトで行われます。
-
struct
Options
¶ RobotModelLoaderコンストラクターに渡されるオプション。
公開メンバー
-
std::string
robot_description_
¶ URDFがロードされるROSパラメーターに対応する文字列名。パラメータ名に「_planning」サフィックスを使用して、追加の構成を指定できます(追加のジョイント制限など)。パラメータサーバからのロードは、文字列からのロードが失敗した場合にのみ試行されます。
-
std::string
urdf_string_
¶ URDFおよびSRDFドキュメントの文字列コンテンツ。文字列からのロードは、XMLからのロードが失敗した場合にのみ試行されます。
-
bool
load_kinematics_solvers_
¶ 指定されたROSパラメーターを使用して、キネマティクスソルバーもロードする必要があるかどうかを示すフラグ。
-
std::string
-
const robot_model::RobotModelPtr &
ロボットモデル¶
-
class
moveit::core
::
RobotModel
¶ ロボット運動学モデルの定義。このクラスはスレッドセーフではありませんが、複数のインスタンスを作成できます。
関節モデルへのアクセス
-
const JointModel *
getRootJoint
() const¶ ルート関節を取得します。モデルが空でない限り、1つのルート関節が存在します。これはSRDFから抽出されるか、タイプ指定されていない場合は固定関節が想定されます。
-
const std::string &
getRootJointName
() const¶ ルート関節の名前を返します。ルート関節がない場合、例外をスローします。
-
bool
hasJointModel
(const std::string &name) const¶ 関節が存在するかどうかを確認します。存在する場合はtrueを返します。
-
const JointModel *
getJointModel
(const std::string &joint) const¶ 名前を指定して関節を取得します。関節が存在しない場合は、エラーが出力され、NULLが返されます。
-
const JointModel *
getJointModel
(int index) const¶ インデックス指定で関節を取得します。関節が存在しない場合は、エラーが出力され、NULLが返されます。
-
JointModel *
getJointModel
(const std::string &joint)¶ 名前を指定して関節を取得します。関節が存在しない場合は、エラーが出力され、NULLが返されます。
-
const std::vector<const JointModel *> &
getJointModels
() const¶ RobotStateに格納されている順序で、関節のリストを取得します。
-
const std::vector<JointModel *> &
getJointModels
()¶ RobotStateに格納されている順序で、関節のリストを取得します。JointModelGroup::getJointModels()とは対照的に、すべてのタイプの関節(mimicおよび固定を含む)が含まれます。
-
const std::vector<std::string> &
getJointModelNames
() const¶ RobotStateに格納されている順序で、関節名のリストを取得します。
-
const std::vector<const JointModel *> &
getActiveJointModels
() const¶ このモデルのアクティブな(固定やmimicではない)関節のリストを取得します。
-
const std::vector<JointModel *> &
getActiveJointModels
()¶ このモデルのアクティブな(固定やmimicではない)関節のリストを取得します。
-
const std::vector<const JointModel *> &
getSingleDOFJointModels
() const¶ すべての単一自由度関節(mimic関節を含む)のリストを取得します
-
const std::vector<const JointModel *> &
getMultiDOFJointModels
() const¶ すべてのmulti-dof関節のリストを取得します。
-
const std::vector<const JointModel *> &
getContinuousJointModels
() const¶ 無限回転する関節のリストを、RobotStateに格納されている順序で取得します。
-
const std::vector<const JointModel *> &
getMimicJointModels
() const¶ mimic関節のリストを、RobotStateに格納されている順序で取得します。
リンクモデルへのアクセス
-
const LinkModel *
getRootLink
() const¶ ロボットの物理的なルートリンクを取得します。
-
const std::string &
getRootLinkName
() const¶ ロボットのルートリンクの名前を取得します。
-
bool
hasLinkModel
(const std::string &name) const¶ リンクが存在するかどうかを確認します。存在する場合はtrueを返します。
-
const LinkModel *
getLinkModel
(const std::string &link) const¶ 名前指定でリンクを取得します。リンクが見つからない場合は、エラーが出力され、NULLを返します。
-
const LinkModel *
getLinkModel
(int index) const¶ インデックス指定でリンクを取得します。リンクが見つからない場合は、エラーが出力され、NULLを返します。
-
LinkModel *
getLinkModel
(const std::string &link)¶ 名前指定でリンクを取得します。リンクが見つからない場合は、エラーが出力され、NULLを返します。
-
const std::vector<const LinkModel *> &
getLinkModels
() const¶ リンクの配列を取得します。
-
const std::vector<LinkModel *> &
getLinkModels
()¶ リンクの配列を取得します。
-
const std::vector<std::string> &
getLinkModelNames
() const¶ (すべてのリンクの)リンク名を取得する
-
const std::vector<const LinkModel *> &
getLinkModelsWithCollisionGeometry
() const¶ 干渉形状が関連付けられているリンクを取得します。
-
const std::vector<std::string> &
getLinkModelNamesWithCollisionGeometry
() const¶ 干渉形状が関連付けられているリンクの名前を取得します。
-
const LinkModel *
getRigidlyConnectedParentLinkModel
(const LinkModel *link)¶ 固定関節を介してのみ接続されているキネマティックツリーのもっとも根元にあるリンクを取得します。
updateStateWithLinkAt()を使用してリンクを特定のポーズに向ける必要がある場合に便利に使えます。 updateStateWithLinkAt()は、指定されたリンクとその子孫のみの向きを変えるため、リンクが抽象フレーム名の場合、目的を達成できない可能性があります。次の例を考えてみてください: root -> arm0 -> ... -> armN -> wrist grasp_frame palm -> エンドエフェクタ... ここで、updateStateWithLinkAt(grasp_frame)を呼び出しても、エンドエフェクタの向きは変わりません。代わりに、updateStateWithLinkAt(getRigidlyConnectedParentLinkModel(grasp_frame),...)とすると実際に手首(およびそのすべての子孫)の向きが変わります。
グループへのアクセス
-
bool
hasJointModelGroup
(const std::string &group) const¶ JointModelGroupグループが存在するかどうかを確認します。
-
const JointModelGroup *
getJointModelGroup
(const std::string &name) const¶ 名前指定でグループを取得します。
-
JointModelGroup *
getJointModelGroup
(const std::string &name)¶ 名前指定でグループを取得します。
-
const std::vector<const JointModelGroup *> &
getJointModelGroups
() const¶ 定義されたグループのリストを取得します。
-
const std::vector<JointModelGroup *> &
getJointModelGroups
()¶ 定義されたグループのリストを取得します。
-
const std::vector<std::string> &
getJointModelGroupNames
() const¶ このモデルに定義されているすべてのグループの名前を取得します。
-
bool
hasEndEffector
(const std::string &eef) const¶ エンドエフェクタが存在するかどうかを確認します。
-
const JointModelGroup *
getEndEffector
(const std::string &name) const¶ 特定のエンドエフェクタ名に対応するグループを取得します。
-
JointModelGroup *
getEndEffector
(const std::string &name)¶ 特定のエンドエフェクタ名に対応するグループを取得します。
-
const std::vector<const JointModelGroup *> &
getEndEffectors
() const¶ エンドエフェクタ名とそれらが対応するグループ間のマップを取得します。
パブリック関数
パース済みのロボットモデルとグループのリストから運動学モデルを構築します。
-
~RobotModel
()¶ デストラクタ。すべてのメモリをクリアします。
-
const std::string &
getName
() const¶ モデル名を取得します。
-
const std::string &
getModelFrame
() const¶ このモデルの基準座標を取得します(RobotStateを使用する場合)。この基準座標はルート関節に依存します。そのため、基準座標はSRDFから抽出されるか、ルート関節の名前であると想定されます。
-
bool
isEmpty
() const¶ モデルが空の場合、trueを返します(ルートリンクも関節もありません)
-
const urdf::ModelInterfaceSharedPtr &
getURDF
() const¶ パース済みのURDFモデルを取得します。
-
const srdf::ModelConstSharedPtr &
getSRDF
() const¶ パース済みSRDFモデルを取得します。
-
void
printModelInfo
(std::ostream &out) const¶ モデルに関する情報を出力します。
-
void
getVariableRandomPositions
(random_numbers::RandomNumberGenerator &rng, double *values) const¶ RobotStateのランダム値を計算します。
-
void
getVariableDefaultPositions
(double *values) const¶ RobotStateのデフォルト値を計算します。
-
void
getVariableRandomPositions
(random_numbers::RandomNumberGenerator &rng, std::vector<double> &values) const¶ RobotStateのランダム値を計算します。
-
void
getVariableDefaultPositions
(std::vector<double> &values) const¶ RobotStateのデフォルト値を計算します。
-
void
getVariableRandomPositions
(random_numbers::RandomNumberGenerator &rng, std::map<std::string, double> &values) const¶ RobotStateのランダム値を計算します。
-
void
getVariableDefaultPositions
(std::map<std::string, double> &values) const¶ RobotStateのデフォルト値を計算します。
-
std::size_t
getVariableCount
() const¶ このモデルを記述する変数の数を取得します。
-
const std::vector<std::string> &
getVariableNames
() const¶ この状態を記述する関節の変数名を取得します。固定関節には自由度がないため、ここには含まれませんが、mimic関節は含まれます。返される要素の数は常にgetVariableCount()と等しくなります
-
const VariableBounds &
getVariableBounds
(const std::string &variable) const¶ 指定された変数の境界値を取得します。変数が見つからない場合、例外をスローします。
-
const JointBoundsVector &
getActiveJointModelsBounds
() const¶ すべてのアクティブな関節の境界値を取得します。
-
int
getVariableIndex
(const std::string &variable) const¶ ロボット状態の変数名のインデックス値を取得します。
-
const JointModel *
getCommonRoot
(const JointModel *a, const JointModel *b) const¶ 引数として渡された2つの関節の共通の親であり、キネマティックツリーで最も深い関節を取得します。
-
void
setKinematicsAllocators
(const std::map<std::string, SolverAllocatorFn> &allocators)¶ 運動学ソルバーとグループ名を関連付けたマップを登録する。
-
const JointModel *