これで次に新規作成したデザインからは、上方向が十 Z の座標系になります。この設定によって上方 向は設定出来ましたが、まだ手前方向が一 Y です。続けて画面右上の ViewCube で一右ノを選択してから ーを開き、一現在のビュー次のよラに設定ノイ前ノを選択します。ビューが斜めになっていると正し く設定出来ないので気を付けて下さい。 0 170TTlLjmlJ マ 0 flOITlLjmI.J マ ・イン , 右 く レ ホムごューに移勤 ノ正投曁 直交面でハース投 現在のビュをホムに設定 ホムをリ趁ウト 現在のビュ・一次のように設定 前面をリウト 0 nomumu 1 以上の手順で、出力したデータが ROS でそのまま利用出来る座標系に設定出来ました。ビュー設定 はデザインの作成時点で決定されるのでソフトの再起動を行っても保存されています。一方、設定以前 に作成していたデザインにこの設定が反映されることもありません。後から設定することは可能です が、作成済みモデルは元の座標系を維持するように回転してしまいます。残念ながら目的の座標系に自 動で回転してくれるような機能は無さそうです。 回転と言えば、 ROS の 3D 描画関連は回転も右手系 ( 親指が座標軸の十方向の時、反時計回りが十と なる座標系 ) のようです。回転については 5 章でも出てきますので詳しくは そちらで取り扱います。 10
5.2.5 URDF の回転順序 URDF のタグでモデルの回転を指示する ( 例えば <originrpy="X 回転 Y 回転 Z 回転 " / > ) と、 RViz は X → Y → Z の順で回転を行う仕様になっています。 3D モデルを扱うソフトにおいて回転の順序は重要 ですね。 y 。 bic 。 n. urdf でもサーボの回転などの定義箇所では回転順を意識しながら記述を行いました。 サーボモータで構成されるホビーロボットではモデルデータの回転ぐらいでしか使わないかもしれませ んが、理解しておいた方が良いでしよう。 5.2.6 URDF の数値単位 URDF ファイル内で使用する数値の単位はホビーロボットのスケールで考えると、全般的に大きい値 になっています。移動ロボットに使用するためにはむしろ適切な単位とは思いますが、普段使用しない 単位で混乱するかもしれません。 下表のような対応になっているので参考にして下さい。 ホビーロボット系では mm 単位が多い radian はほとんど見ない g 単位で計量を受ける kgf ・ cm sec/60 度 単位 種類 No 回 ク さ度量ル度 長角質ト速 11 り 00 4 ・ - り radian Kg N ・ m radian/s 単位の取り扱いで特に影響が大きいのが " 長さ [ m ] " です。 yobicon. urdf ファイルの記述にも登場します が、 Fusion360 が出力する STL の単位は m ノなので、単位変換 ( scale ) を行わないと巨大なモデル ( 1000 倍 ) になってしまいます。 関節角度の制限なども、 ra 市 an で指定するので気を付けましよう。 5.2.7 URDF の色指定 URDF の。ノ br> タグではモデルの色を指定する事が出来ますが、 RGB の値を各色 0.0&1.0 の範囲 で指定します。 0 ~ 255 や 0X00 ~ 0xFF ではないのでこちらも注意が必要です。 なお yobicon. urdf でいくつか色の組み合わせを試してみた感触としては、あまり細かい色表現が出来 る実装になっていないのではないかと感じます。モデルを見分けるためにざっくりとした色を付ける程 度の用途で考えておいた方ががっかりしなくて良いかもしれません。 31
5.2.3 URDF ファイル 自作ロボットを RViz で表示するためには、ロボットを構成するフレームの長さや関節の定義を記述 した URDF (Unified Robot Description Format) ファイルが必要になります。「ロボットの定義ファ イル」などというと難解な内容を予想するかもしれませんが、必要な機能だけを非常にシンプルに記述 する事が可能な書式になっています。 XML 形式のファイルで決められたタグに設計値を記人していくだ けで本章冒頭のような表示まで行う事が出来ます。 それでは、作例の 3D モデルを表示するために必要な定義を中心に、書式と記述例を見ていきましょ う。簡単な作例になっているので、理解できれば自分のオリジナルなモデルに変更することも出来ると 思います。内容が分かってきた方は公式 Wiki2 の内容も読み進めて頂けると、色々と遊べる定義が見つ けられて楽しいはずです。 5.2.4 URDF の書き方 URDF を構成する定義の基本は < 石れ々 > と勺 o ⅲレの二つです。 link は構造物 ( フレーム、サーボ etc) の定義、 joint は link と link がどのように接続されて動くかの定義です。最初からヒト型にくみ 上げた定義を読むのは大変ですので、まずは最低限の構成例を見てみましよう。 く material name="base C010r " > く origin xyz="O. 0 0.05 0.0 " / > く parent link="base_link"/> く ?xml version="l . 0” ? > く robot name="EasySample"> く link name="base link"> く visual> く geometry> ←おやくそく ←ロポットの名前 ←全体の基準になるべースリンク く cylinder length="0.1" radius="0.01"/> ←円柱 ( 高さ 10 ( 広直径 lcm) を見た目に定義 く /geometry> く /material> く /visual> く /link> く link name="arm"> く visual> く geometry> く bOX size="O. く /geometry> く material name= く /material> く /visual> く /link> く ( 010r rgba="0.8 0.0 0.8 1 . 0 " / > arm ( 010r ” > 01 0.1 0.01 ” / > く〔 010r rgba="l . 0 0.0 0.0 1 . 0 " / > ←赤色、不透明 ←腕リンク ←リンク原点からのオフセット量を定義 ←箱 ( XZ 方向 1 ( 広 Y 方向 10 ( m ) を見た目に定義 ←紫色、不透明 く joint name="revolute_joint" type="revolute"> ←回転ジョイント "revolute_joint" を定義 く child link=" く orlgln XYZ— く axiS XYZ="O く /joint> く /robot> く limit lowe 作 " -1 囲 . 0 " upper="100.0" effort="l . 0" velo ( ity ゞ 10.0 " / > ←ぐるぐる回るぞ ! 0 1 ” / > ←ジョイントの親はべースリンク ←ジョイントの子は腕リンク ←ジョイントの位置はべースの原点から Z 方向に + 5 ( m ← z 軸を中心に回転する 2 カ乙ゆ・・ / う扉 - / ん /. 和、 s. 田 / 2 〃・ツ / : , / ( / - / 〃んとカ乙ゆ・・ / ゾん /. 物 s. 田 / 切ツ广聟 l/l. / ツわ力なを参賤 29
5.1 STL ファイルを出力する RViz では DAE 、 OBeL STL の 3 種類の 3D モデルデータを扱うことが出来るようです。 この中から 今回は Fusi 。 n360 が出力可能な STL 形式を採用して進めて行きます。 さて、再び Fusion360 の操作です。 3D モデルを STL 形式で出力するのに最も簡単な操作は、一ファ イ / - た刀ブツンノメニューで 3D プリンタ用のデータとして出力する方法です。この時に気を付けな いといけないことは、 3D モデルの回転中心を原点に合わせておくことです。サーボであれば下図のよ うに出力軸の中心を XYZ 軸の原点に合わせた状態で出力します。出力するデータをあらかじめ原点に 寄せておくことで、 RViz 側で楽に扱えるようになります。なお STL 出力データで上では原点からのモ デル位置が維持されるため、顔、髪、耳といったパーツ間の位置関係は組み立てた状態を維持したまま 出力すると都合が良いです。回転の中心を合わせるのがポイントです。 択マ 0 30 フリント メッシュをフレじュー 三角形の数 リファインメント リファインメントオフション マ出力 フリントユーティリティに送信 ー OK キャンセ ) い 3D モデリングした各部品を STL に出力し、組み合わせれば y 。 bicon が組み上がるように準備しま す。今回は以下のモデルを STL 出力しました。 BootsLeft . stl B00tsRight. stl Face . stl HairBack. stl ArmLeft . stl ArmRight. stl B0dyLeft. stl BodyRight. stl HairFront . stl KemonomimiLeft . stl KemonomimiRight. stl LegLeft. stl LegRight. stl SG92R_horn_X. stl SG92R_horn i. stl S692R servo. stl 27
3.1 座標系の設定 モデリングに入る前に Fusi 。 n360 の設定を変更します。今回の記事を執筆する際に分かったのです が、 Fusion360 と ROS では座標系の定義が異なるので、デフォルトで使用していると出力したモデル が意図しない方向を向いてしまいます。座標系の定義は、右手系、左手系、などと表現される事が多い ですが、 Fusion360 も ROS も右手系です。ただし、 Fusion360 は親指を上に向けた場合、 XYZ の順で 中指、親指、人差し指、一方の ROS は人差し指、中指、親指、となりそのままでは回転がかかったモ 方向が十 X になるよう設定を変更します。まずは Fusi 。 n360 の右上にあるメニューから基本設定を選 デフォルトの設定では、手前方向が十 Z 、上方向が十 Y になっていますが デルが出力されてしまいます。 ROS 用に設定を変史する手順を紹介します。 これを手前方向が十 X 、上 びます。 0 nomumu マ ②マ 0 オフラインで作 マイ 1 ロ〕ァイル 基ホ定 Autodesk Account rlOmLJml-J マ 0 ッサインアウト 開いた基本設定画面から、既定のモデリング方向メニューで Z ( 上方向 ) を設定し、適用します。 F 基本設定 API ディン レンダリンヴ CAM 図面 シミュレション マテリアル メッシュ ヴラフイウうス ネウトワう テータ収集およ V 単位と値の表示 シミュレション 一般的なⅢの動作を ] ント 0 応する境謚定 ュ、材言語日本語 ヴラフィ眄スドうイ時自勤遺択 オフラインキウシュ期問旧数 ) [ 可 : 〕こ : : : : : : 〕 ] 既定の単位 デイン シミュレ、 フレビュ、 定にす ション 開じるときに自勤ージョン管理 自勤修復のす 画面移勃、ズム、オービウトのショトカット AutodeskA360 の退知を表示 ] マンド内のエラーと警告を表示 定の計測を表〒 コマンドフロン ツルチッフを表示 定のモデリンヴ方向 ジェスチやべ・一スの表示ナビゲーションを使用 ビュー回転を有効化 ズーム方向を反 既定のオ、ビットタイプ ロ Y ( 上方向 ) Y ( 上方向 ) Fusion 拘東オ・一ビウト ロ Z ( 上方向 ) 通用 キンセル
この例を RViz で描画すると下図のように表示されます。後述のスライダーを表示させておくと、横 に突き出した arm リンクが円柱を中心にぐるぐる回転します。 ー・一 -- ~ ~ ー ~ joint_state—publishe 「 0 0 0 2V0 」 0 旧 t Randomize Cente 「 1 0.00 HTML や XML に慣れている方であれば拍子抜けするほど簡単に見えるのではないかと思います。逆 にどちらも知らない場合でもそこまで難しく考えることはありません。「同じタグで囲む」「一行で書く 場合は最後にツ " を付ける」「タグには必須のものとオプションのものがある」ぐらいが分かっていれば 特に問題はありません。焦って XML の参考書などに手をのばしたりしなくとも大丈夫です。 本書の学習段階では、基本的に < 五石 > と加 t> について様々なパラメータを与える事でロボット を形作ることが出来るという理解で良いでしよう。ちなみに。ル伽 > という重要なタグもあるので すが、まずはロボットを表示する方法の理解を深めることにします。次回以降の記事で取り扱いたいと 30 考えています。
複雑な形状に挑戦した足の付け根は下図のように設計通りの形状で出力され、組み立ても問題ありま せんでした。 ただ、 3D プリンタで出力する際についたアーチ形状の細かなガタが原因で、 あまりスムーズに回転 するとは言いづらい手触りになってしまいました。積み上げる方向にまたがる曲線の出力に弱いのは印 刷の仕組み上どうにもならないので、次回は出力方向を工夫してみるなどして改善を試みようと思いま 今回もうーっ挑戦したケモミミパーツですが、下図のように穴をあけて真鍮線 ( 細かい工作に使われ る金属の細棒です ) を刺し込んでいます。 3D プリンタならば頭と一体成型する事は簡単なのですが、 接合部の細さを考えると金属の芯を入れた方が安心だと考えました。人型ロボットが転倒した際、頭部 には大きな力がかかりやすいため、ケモミミのような細いパーツは折れてしまわないように考慮する方 が良いでしよう。 21
3.2.4 足 今回はヒザと足首のサーボは実装を見送ったため、足の付け根のみ動作するようなサーボ配置になり ました。この軸があると「お辞儀する」「見上げる」といった動きは可能なので、ひとまずこれでいっ てみましよう。 さて、サーボの出力軸だけを連結して動かす ( 肩などに多いです ) ことを片持ち軸と呼んだりします が、この固定方法はサーボの出力軸がねじれる方向に力がかかるため、カのかかる部分では両持ちにな るよう設計することが多いです。一般的なホビーロボットでは出力軸の反対側に軸を設けるのですが、 スペースの都合で今回はアーチ状の部品で支える構造に挑戦してみました。 0 2 か所で支える 回転 体のフレームにアーチ部品を沿わせるためのガイドを作成しました。アーチは” C ”の形にして軸から 逃げないよう工夫しています。将来的に歩行させたくなった時にもこのように強度を確保しておけば安 心ですね。こういった複雑な形状をアイデアからダイレクトに実現出来るのは 3D プリンタがあってこ ジが回せるように穴を設けるのは忘れていません。 工はせず、サーポホーンを埋め込んだだけです。ドライバーでネ は見送ったので、肩のピッチ軸のみを取り付けました。複雑な加 足と同じく、本当はヒジが動くようにしたかったのですが今回 3.2.5 腕 そです。良い時代になりました。 17
く child link="SERV0_HORN_X_1 ” / > ” -0.00545 0.0 0.08185 " rpy="0 0 0 " / > く orlgln XYZ= く joint name="BODY_R_to SERV0-2" type="fixed"> く j0int name="BODY ユ -t0 SERVO-3" type="fixed"> く曲 ild link="SERV0_3" / > く parent link="BODY_L" / > く /joint> く orlgln XYZ2 く child link="SERV0_2" / > く parent link="BODY_R" / > く /joint> ”ー 0.005 - 0.0296 0.0619 ” rpy="0 0 0 ” / > く 0 「 lgln XYZ= " ー 0.005 0.0296 0.0619 " rpy="0 0 0 " / > く child link="SERV0_5" / > く parent link="BODY_L" / > く jOint name="BODY_L_to_SERV0_5" type="fixed"> く /joint> く origin xyz="0.0 - 0.0296 0.0 " rpy="0 0 0 " / > く child link="SERV0_4" / > く parent link="BODY_R" / > く j0int name="BODY_R_to SERV0-4" type="fixed"> く /joint> く visual> く link name="SERV0 1 ” > - Head parts - く /joint> く origin xyz="O. 0 0.0296 0.0 " rpy="0 0 0 " / > く mesh filename="package://yobicon-description/meshes/face. stl" scale = " 0.001 0.001 0.001 " / > く geometry> く visual> く link name="FACE"> く /link> く /visual> く material name="sg92r_color"/> く /geometry> 0 . 001 ” / > く mesh fiIename="package://yobicon-description/meshes/SG92R_servo. stl" s ( ale = " 0.001 0.001 く geometry> く origin xyz="0.0 0.0 0.0 " rpy = " 引 1415926 0.0 0.0 " / > ← X 軸でぐるっと逆さまに回転 く /geometry> く material name="skin ( 010 「” > く ( 010r rgba = " 0.9960 0.9450 0.8784 1 " / > く /material> く /visual> く /link> く link name="HAIR FRONT"> く visual> く geometry> ←イラストの肌色から入力してみたが色が違う・・・ ? く mesh filename= package://yobicon description/meshes/HairFront. stl" 0.001 ” / > く /geometry> く material name="hair ( 010r " > く ( 010r r ba 0 . 引 25 0.5255 0. 1 " / > 34 scale ニ齟 . 001 0 . 001
く /visual> く /link> く link name="SERV0 引 > く visual> く origin xyz="0.0 0.0 0.0 " rpy = " ー 1 . 5708 1 . 5708 0 " / > く geometry> く mesh filename="package://yobicon description/meshes/SG92R_servo. stl" 0 . 001 ソ > く /geometry> く material name="sg92r_coIor"/> く /visual> く /link> く link name="SERV0 4 ” > く visual> く origin xyz="0.0 0.0 0.0 " rpy = " 1 . 5708 -1 . 5708 0 " / > く geometry> く mesh fiIename="package://yobicon-description/meshes/SG92R_servo. stl" 0.001 ソ > く /geometry> く material name="sg92r_coIor"/> く /visual> く /link> く link name="SERV0 5 " > く visual> く origin xyz="0.0 0.0 0.0 " rpy = " -1 . 5708 - 1 . 5708 0 " / > く geometry> く mesh fiIename="package://yobicon-description/meshes/SG92R_servo. stl" 0 . 001 " / > く /geometry> く material name="sg92r_coIor"/> く /visual> く /link> scale scale scale ゞ 0.001 0.001 = . 001 0 . 001 0 . 001 0 . 001 く joint name="BODY(DEBUG)" type = " revolute " > ←全体を傾けて遊びたかったので DEBUG 用のリンクを作成 く parent link="base link" / > く child link="BODY BASE" / > く origin xyz="0.0 0.0 0.0 " rpy="0 0 0 " / > く limit lower ゞ - 1 . 5708 ” upper ゞ 1 . 5708 ” effo 「 t = " 0.24516625 ” velocity= " 10.4719755114 ” / > ←角度等制限 く axis xyz="0 1 0 ソ > く /joint> ← Y 軸で回転 く j0int name="base t0 BODY-R" type="fixed"> く parent link="BODY_BASE" / > く child link="BODY R" / > く origin xyz="0 0 0.15985 " rpy="0 0 0 " / > く /joint> く j0int name="base t0 BODY-L" type="fixed"> く parent link="BODY_BASE" / > く child link="BODY_L" / > く origin xyz="0 0 0.15985 " rpy="0 0 0 " / > く /joint> く joint name="BODY_R_to SERVO HORN-X-I " type="fixed"> く parent link="BODY_R" / > 33