LoginSignup
16

More than 1 year has passed since last update.

ROS講座34 stlファイルをrvizで表示する。

Last updated at Posted at 2018-07-30

環境

この記事は以下の環境で動いています。

項目
CPU Core i5-8250U
Ubuntu 20.04
ROS Noetic
blender 2.79b

インストールについてはROS講座02 インストールを参照してください。
またこの記事のプログラムはgithubにアップロードされています。ROS講座11 gitリポジトリを参照してください。

概要

urdfでは基本図形として、直方体、円柱、球を表示することができます。しかし、実際のロボットに近い形を表したいときにはこれではなく、自由形状を記述できるSTLファイルを使うことができます。stlファイルの作り方から表示の仕方までを説明します。

stlファイルの作成

CADを使ってモデリングをします。操作はCADによって異なりますが今回はFusion 360を例に説明します。

モデルの作成

好きなように作ってかまいませんが、CADの原点が後々のモデルの原点にする(またはそこからわかりやすい位置にする)ことが大事です。また軸ですが、ロボットの慣例としてX軸が正面になります。

stlファイルの出力

モデルを開いて、左側のメニューの一番上のコンポーネント名を右クリックします。ここで「STL形式で保存」を選びます。この次に出てくるメニューで「OK」を押すとSTLファイルが保存されます。

vis_stlの生成.png

CADもUbuntu上で行えれば、すべてがUbuntuでできてよいのですが、Ubuntuでで使える良いCADってなかなかありません。

stlファイルの編集

CADから生成したSTLファイルをそのままROSで使用することはできません。ROSで使うためには

  • サイズ
  • 軸の方向
  • 原点の位置

を修正する必要があります。
特にサイズは重要です。多くのCADソフトでは基本単位はmmです。しかしROSは値は全てSI標準単位で表記するので単位はmです。つまりサイズは必ず0.001倍する必要があります。
STLファイルを修正するソフトはいくつかありますが、今回は「blender」を使います。

blenderのインストール

blenderはWin、Mac、Linuxのすべてに対応している3Dモデリングソフトです。例えばWindowsならここからダウンロードすることができます。blenderを起動すると「スタートページ」のようなものが出てくるので、画面の端をクリックすると、以下のような画面になります。
vis_blender1.png

インポート

最初に画面の中に立方体があるので、左クリックで選択した後にdeleteキーを押して消します。そのあとに上にあるメニューバーの「file」->「import」->「STL(.stl)」を選び、出てくるウィンドウで先ほどCADで保存したSTLファイルを選びます。どうやら日本語に対応していないので「デスクトップ」は「□□□□□□」と表示されるのでそれっぽいものを信じて探そう。
vis_stlのインポート.png

編集

軸の回転->サイズ変更->原点調整の順に行うのをお勧めする。
右側のウィンドウの黄色い箱の「object」ウィンドウを開く。Rotationのところで軸の入れ替えをする。Fusion360はビジュアル系のCADなのか上方向がy軸になる。X=90[deg]と入れるとz軸が上になる。またScaleはmm->mの変換のためにx、y、zともに0.001にする。Locationで原点を合わせれるが「この穴の真ん中ぴったりを原点にする」などということはできない。あらかじめCADでモデルを作るときに原点を意識するのが良い。

vis_stlの編集.png

エクスポート

インポートと同様に「file」->「export」->「STL(.stl)」と選択して、保存する場所を選びます。

vis_stlのエクスポート.png

stlファイルの表示

ここからUbuntuとROSに戻ります。

ソースコード

以下がstlファイルを表示するurdfです。<visual>タグの<geometry>タグの中に<mesh filename="package://(ROSパッケージ名)/(相対パス).stl" />のように書きます。

vis_lecture/urdf/stl_body.urdf
<robot name="test_robot">
  <link name="base_link"/>

  <joint name="body_joint" type="fixed">
    <parent link="base_link"/>
    <child  link="body_link"/>
  </joint>
  <link name="body_link">
    <visual>
      <geometry>
        <mesh filename="package://vis_lecture/stl/stl_part.stl" />
      </geometry>
      <origin xyz="0 0 0" rpy="0 0 0"/>
        <material name="red">
        <color rgba="1.0 0.0 0.0 2.0"/>
      </material>
    </visual>
  </link>
</robot>

実行

roscd vis_lecture/urdf
roslaunch urdf_tutorial display.launch model:=stl_body.urdf 

表示が小さいので拡大してみてください。

vis_stlの表示.png

コメント

stlをrvizで表示するとどうしてもrvizの実行が重くなってしまいます。結局はrvizでは簡易的に確認するための形を基本プリミティブで表現するのが良いかと思います。

参考

blenderのインストール
stlのrvizでの表示

目次ページへのリンク

ROS講座の目次へのリンク

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16