ゼロからのROS入門

ロボットモデルの表示

大阪大学 中島優作


← シリーズ一覧に戻る

本スライドのゴール

アームとエンドエフェクタ

Rvizとは?

Rviz画面
  • ロボットのモデルやセンサ情報などを3次元で可視化するためのツール
  • デバッグや動作確認で使う
  • あくまで可視化ツールなので、これがなくてもロボットの動作は可能

勉強用のパッケージ作成


catkin_create_pkg ros_study rospy 
                        
  • catkin_ws/src内でまずは作業用のパッケージを作成(名前は任意ですがここでは"ros_study"とします)
  • これから先のスクリプトは全てこの中で作成します

まずはURDFを表示

  • launchディレクトリを作成し、ur5e.launchという名前で左のコードを保存
  • ビルドします(小文字の"b"で自動的にビルドが走ります)
  • 次のコマンドで実行してください"roslaunch ros_study ur5e.launch"

このような画面になればok

URDF表示デモ

右下のGUIで関節を動かせます

ロボットコントローラはここでは動作していません、GUIは表示を直接操作しているだけです

ロボットモデルを表示するまでの流れ

  1. ステップ1:URDFでロボットモデルを書く
  2. ステップ2:URDFを読み込ませて表示

ロボットモデル表示の全体像

Rvizワークフロー

ステップ1:URDFの書き方

Rvizワークフロー

ロボットアームの構造

ロボットアーム構造図
  • ジョイント(関節):
    モーターが動く部分
  • リンク:
    ジョイントを繋ぐ部分
  • エンドエフェクタ(手先効果器):
    作業をする手先

この構造をファイルに落とし込んだのがURDF↓

URDF(Unified Robot Description Format)

Ur5eの例



  • 一見長くて分かりにくいが。。。

URDF(Unified Robot Description Format)

VS Codeで折りたたんだ

URDF folding

←よく見るとlinkとjointが並んでいるだけ

XACRO(XML Macros for Robots)



  • URDFにマクロ(関数等)を追加したのがXACRO
  • リンク→ジョイントの繰り返し構造をマクロで書けるので便利
  • XACRO読み込み時に変数を渡す

エンドエフェクタを追加したい



  • XACROのinclude機能が便利
  • 既にあるURDFやXACROを呼び出せるのでエンドエフェクタ部分だけ自分で追記すればよい
  • pestleとspatulaの2つのエンドエフェクタを含むUR5e設定例

標準リンク名

ROSでよく使うリンク(慣習であって絶対ではない)

  • base_link: ROSのベース座標系
  • world: Gazebo等のシミュレータのベース座標系

ROS-industrialの標準リンク(産業用ロボットとの互換性を持たせるために決められている)

  • base: 産業用コントローラのベース座標系
  • tool0: 産業用コントローラのデフォルトツール座標系
  • flange: エンドエフェクタ取り付け用フレーム(REP 103準拠、x+が前方)

ジョイントの要素
~type(動作の種類)~

  • revolute: 回転関節(角度制限あり)
  • continuous: 連続回転関節(角度制限なし)
  • prismatic: 直動関節
  • fixed: 固定関節(動かない手先とかで使用)

ジョイントの要素
~リンクとのつながりと制限~

  • parent/child: 親リンクと子リンクの指定
  • origin: 親リンクからの位置・姿勢
  • axis: 回転軸の方向ベクトル
  • limit: 動作範囲、トルク、速度の制限

リンクの要素
~visual(表示用)~

  • geometry: 形状(box, cylinder, sphere, mesh)
  • CADデータ→daeやstlにしてmeshで表示することが多い
  • material: 色・材質
  • origin: リンク座標系からの位置・姿勢

リンクの要素
~collision(干渉計算用)~

  • 干渉計算は重い!モーションプランニング計算量の半分以上は干渉計算
  • 通常はvisualより簡単な形状(よく使うのは円柱とか)を使用し計算量を削減

ジョイントの物理属性

※物理シミュレータを使わないなら記述不要

  • Dynamics
    • friction: 静摩擦[N or N/m]
    • damping: 減衰値[Ns/m or Nms/rad]

リンクの物理属性

※物理シミュレータを使わないなら記述不要

  • 慣性パラメータ ~inertial~
    • mass: 質量
    • ixx, iyy, izz: 主軸周りの慣性モーメント
    • ixy, ixz, iyz: 慣性乗積(通常は0)
    • CADソフトの計算値や実測値を使う

リンク間相互作用

※物理シミュレータを使わないなら記述不要

  • contact_coefficients
    • リンクが相互に接触している時のリンクの動作
    • mu: 摩擦係数
    • kp: 剛性係数
    • kd: 減衰係数

ステップ2:URDFの表示のlaunchファイル

Rvizワークフロー

launchファイルの解説

ロボットモデル表示フロー

<launch>
  <arg name="model" default="$(find grinding_descriptions)/urdf/ur/ur5e.urdf"/>
  <param name="robot_description" command="$(find xacro)/xacro '$(arg model)'" />
  <node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" />
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
</launch>

このような対応関係になっている

TF

Rvizワークフロー

Rvizで表示しているTFとは?↓

TFとは?

  • TF = Transformの略
  • ROS標準搭載のシステムで、座標変換と座標管理の2つの機能がある
  • 実際はTFの改良版のTF2を使う

機能1:座標変換

乳棒座標変換の例
baseから見た乳棒手先
ヘラ座標変換の例
baseから見たヘラの手先
  • ここではTCPの座標変換を示したが、TFで管理された座標系であれば任意の座標変換が可能

座標変換の仕組み

座標変換の例
  • TFはツリー構造になっている
  • 同姿変換行列で順々にツリーを辿って座標変換を計算

機能2:座標管理

  • TFは最新の座標を使わない、指定した時間 or 少しだけ前の座標を使うことで、座標系間での同期をとっている。
  • アプリは雰囲気で正確ではありません
  • 実際の同期の仕組みはTF完全理解を参照

ロボットモデルの数式表現

  • ロボットの構造を行列で表現する方法としてDHパラメータがあります
  • URDFで読み込んだロボットの制御の裏ではDHパラメータを使って計算しています

DHパラメータとは?↓

DHパラメータとは?

  • ロボットの関節とリンクの相対的な位置関係を表すためのパラメータです
  • たった4つのパラメータでロボットの構造を表現でき、行列を使ってロボットの運動学を効率的に計算できます

※厳密には修正DHパラメータです

ありがとうございました

← シリーズ一覧に戻る