Gazebo/MoveIt のための 3D モデリング(6)滑らかなサーフェス – 作成編(その1)

著者:yamamoto.yosuke

Gazebo/MoveIt のための 3D モデリング(6)滑らかなサーフェス – 作成編(その1)

前回 「Gazebo/MoveIt のための 3D モデリング(5)滑らかなサーフェス – 知識編」 では 3D モデリングにおける滑らかなサーフェスとは何かについて曲率などの連続性や CAD やサーフェスモデラ内での形状表現のされ方について説明しました.

今回は前回の記事の知識を踏まえて滑らかなサーフェスの作成例について説明します.

滑らかなサーフェスは Gazebo や MoveIt のモデルを作成する場合においてはあまり重要性は高くない… と前回の記事を書いた時点では考えていましたが,今後,Gazebo や MoveIt を走らせる PC の CPU / GPU 性能が向上して細密メッシュモデルを使った精密なシミュレーションへの要求も段々と高くなるかもしれない,とも思いました.

洗濯機前面上部の操作ボタン

サーフェスはモデル内で大きいものから順に作成していった方が全体のバランスを確認しながら作業を進められて修正作業が必要になる量も少なくなるので良いと思います.

ただ,本記事ではまず,Rhinoceros に備わっているコマンド1つほどであまり制御点とか次数とか細かく意識しなくても作成できる曲率連続の滑らかなサーフェスの例として小さいサーフェスの洗濯機前面上部の操作ボタンのモデリングについて説明します.

四角いボタンのモデリング

洗濯機の前面視( Rhinoceros の Right ビュー )で四角いボタンの大きさを見ると大体 20mm 角でした.

ボタンを1つモデリングして,それを洗濯機前面のサーフェス上に8つコピーして配置します.

左の図は四角いボタンのソリッドモデルの作成過程をアニメーション化した画像です.

各手順を以下に順を追って説明します.

20mm の正方形の線を選択して「テーパで平面曲線を押し出し(ExtrudeCrvTapered)」 を実行し,ドラフト角度 15° の設定で 3mm 押し出します.

  • テーパで平面曲線を押し出し
    • メニュー: ソリッド(O) > 平面曲線を押し出し(X) > テーパ(T)
    • コマンド: ExtrudeCrvTapered

四隅を「曲率連続」で丸めるために「エッジをブレンド(BlendEdge)」を実行して四隅のエッジを選択します.

デフォルトでは半径が 1mm となっていてモデリングしたい四隅の半径はもう少し大きいので洗濯機前面図と比較しながら寸法を調整します.

  • エッジをブレンド
    • メニュー: ソリッド(O) > エッジをフィレット(F) > エッジをブレンド(B)
    • コマンド: BlendEdge

「エッジをブレンド」コマンド内の設定を次のようにして

  • ハンドルを連動(L)=はい
  • レールタイプ(R)=レール間の距離(I)

次にコマンド内設定で「全てを設定(T)」で半径(上記設定の場合はレール間の距離)を 8mm にしてコマンドを確定します.

「エッジをブレンド」コマンド内の「レールタイプ」の設定は「レール間の距離」にした場合が比較的綺麗なフィレットがかかるように思っているので設定しました.フィレットをかけるサーフェスの組み合わせによって他の設定の方が良い場合もあるので各モデリング対象にて適宜選択してください.

今度は指で押す面の周囲にブレンドエッジを作成します.「エッジをブレンド(BlendEdge)」コマンドを実行してコマンド内設定 「次の半径(R)」 を 2mm に設定してから該当するエッジをすべて選択して確定・実行します.

下の図は「エッジのブレンド」でフィレットを作成した四角いボタンの平均曲率解析とゼブラ解析の表示結果です.

これらのブレンドエッジは数ミリと小さいので問題にはあまりなりませんが,大きなサーフェスとしてブレンドエッジを作成する場合は応用的に次のリストの項目を調整編集すると良いでしょう.

  • ブレンドエッジ関連で応用的な項目
      • BlendEdge だとフィレット接続する方向は 5次-6点 で「曲率連続」になるが,長手方向は 3次-多点 になってしまいガタつく
        • →「次数を変更(ChangeDegree)」で長手方向の次数を 7次 に変更してサーフェスマッチングを行い再接続する
        • → 制御点が多すぎる場合は RebuildUV コマンドで U方向 のみ制御点を少なくしてリビルドして(この時点ではまだ 3次-多点 ),その後で「次数を変更(ChangeDegree)」で U方向を 7次 に変更してサーフェスマッチング(MatchSurf)
      • テーパ押し出しの基となった正方形も各辺直線ではなく少し外に膨らむ緩い円弧にするとより滑らかな感じになる

四角いボタンのモデルができましたので洗濯機前面のサーフェス上にコピーして配置します.

ボタンの押される方向の軸と洗濯機前面のサーフェスの法線軸を合わせ,かつ上下辺を水平に配置したいので「配置(3点指定)・(Orient3Pt)」を利用してコピーします.「 配置(3点指定)」は下記リストの 3点 を移動元と移動先で指定して配置変換するものです.

  1. 移動原点
  2. 移動原点から第1の方向を決める方向上の点
  3. 移動原点と第1方向点で構成される軸回りの方向を決める点

四角いボタンの移動先とするために配置するサーフェス上の法線方向と接線方向の直線を各配置点で描画します.まず,YZ 平面上に四角いボタンを配置する中心線を描画して,洗濯機前面視(Rinoceros の Right ビュー)にてそれらをサーフェスに「投影(Project)」します.

  • 投影
    • メニュー: 曲線(C) > オブジェクトから曲線を作成(F) > 投影(P)
    • コマンド: Project

「直線(Line)」を実行してコマンド内で「法線(N)」を指定,もしくはメニューから「サーフェス法線(U)」を実行して,サーフェスを選択後,サーフェス上にある投影した中心曲線の交点を選択して法線を描画します.

今回の「配置(3点指定)・(Orient3Pt)」ではスケーリングコピーはしないので長さは適当で大丈夫です.順次各点における法線を描画して合計8軸を準備します.

  • サーフェス法線
    • メニュー: 曲線(C) > 直線(L) > サーフェス法線(U)
    • コマンド: Line → 法線(N) を選択

洗濯機前面の球面サーフェスに食い込む形で四角いボタンを配置したいのでコピー元となる点を 1mm ボタンの高さ方向へ移動しておいてから「配置(3点指定)・(Orient3Pt)」でコピー元,コピー先の各3点を指定してボタンをサーフェス上に配置します.

  • 配置(3点指定)
    • メニュー: 変形(T) > 配置(O) > 3点指定(3)
    • コマンド: Orient3Pt

コピー元の3点指定
コピー先サーフェス上のの3点指定

8つの四角いボタンを洗濯機前面のサーフェス上に配置してゴースト表示とレンダリング表示をしてそれぞれキャプチャしたものが次の2つの画像です.

丸いボタンのモデリング

丸いボタンの直径は大体 50mm ぐらいのようです.

丸いボタンのように軸回転形状のものは回転形状のプロファイル曲線を作成してそれを軸回りに回転してソリッドモデル(閉じたポリサーフェス)とするのが一番簡単だと思います.

丸いボタンモデルの作成自体は上記四角いボタンのように作成しやすい場所で作成して,軸回りの形状は軸対称で同じなのでそれを今度は「配置(2点指定)・(Orient)」でコピー移動して洗濯機上のサーフェスに配置します.

丸いボタンのモデリングと配置の作業手順をまとめると次のようになります.

  1. 回転中心軸を含む平面上に回転形状プロファイル曲線を描画
  2. 回転中心軸回りに「回転(Revolve)」にて1周分のサーフェスを作成
  3. 作成されたサーフェス群を「結合(Join)」してソリッド(閉じたポリサーフェス)にする
  4. 丸ボタンモデルのコピー元原点とコピー先の原点と方向(サーフェス法線方向)を描画
  5. 「配置(2点指定)・(Orient)」でコピー移動

回転方向は曲率一定になるので回転プロファイルの曲線さえ滑らかな曲線を作成すれば回転で作成するポリサーフェスも滑らかになります.そこで丸ボタンの回転プロファイルを次の図のように作成するのですが,ボタンの側面と指で押される面に相当する曲線間に滑らかなフィレット曲線を作成します.

ボタンの側面と指で押される面に相当する両曲線に接する円を描画して円の接する点でトリムするとその間の曲線の接続も比較的バランス良く繋がります.円との接点でトリムされた両曲線間に「接続(BlendCrv)」で曲線を作成します.

  • 接続
    • メニュー: 曲線(C) > 接続(U)
    • コマンド: BlendCrv

「接続(BlendCrv)」内の設定で各接続点における接続条件を設定します.連続性を「曲率」もしくは「G3(曲率変化率)」を設定すると各設定に応じた滑らかな曲線が描画されます.各制御点は [ Shift ] キーを押しながらマウスでドラッグすると対象な点も同時に移動してくれるので便利です.曲線形状や曲率変化を見ながら制御点を調整して意図した形状で確定をします.

回転形状のプロファイル曲線が作成できたら「回転(Revolve)」 で曲線を回転したサーフェスを作成します.

  • 回転
    • メニュー: サーフェス(S) > 回転(V)
    • コマンド: Revolve

1回転分のサーフェスを作成するにはコマンド内で「360度(F)」を指定します.

右の図(ワイヤーフレーム表示)のようなボタン形状のサーフェスが作成されます.

1回転分作成したサーフェスをすべて選択して「結合(Join・Ctrl-J)」してソリッドモデル(閉じたポリサーフェス)にします.

<参考>
Rhinoceros 上では回転形状プロファイル曲線群を先に「結合(Join)」してから「回転(Revolve)」しても同じ形状になるのですが,サーフェスのフィレットのような回り込みの大きい形状と一体化したサーフェスをメッシュ化するときにフィレット形状付近を飛ばして粗いメッシュが作成されてしまうことがあります.フィレット形状部分のサーフェスは一体化したものとせずに別体のものを作成した後「結合(Join)」した方がフィレットサーフェスのエッジがメッシュ境界に反映されるので適切な形状のメッシュ作成のためには良いでしょう.

丸いボタンのソリッドモデルが作成できたら「配置(2点指定)・(Orient)」で洗濯機前面サーフェス上の法線方向に合わせてコピー移動します.先述したように軸回りの形状は軸対称で同じなので位置と方向1つのみの指定の移動変換をします.

四角いボタンと同様に前面サーフェスに少し食い込ませたいので丸いボタンの背面から 1mm 入ったところをコピー原点としてからボタンを押す方向軸上の1点を選択して,コピー先の洗濯機前面サーフェス上の点と法線方向を指定してスケーリングしない設定でコピー移動します.

  • 配置(2点指定)
    • メニュー: 変形(T) > 配置(O) > 2点指定(2)
    • コマンド: Orient

丸いボタンを洗濯機前面サーフェス上に配置したものを四角いボタンと併せて Perspective ビューにゴースト表示させたものが次の図です.

レンダリング表示にしてキャプチャした画像が次の図です.

洗濯機本体とボタン類のソリッドモデルをブーリアン演算して一体化するのは全ての作業の最後で良いので,他のモデリング作業の邪魔にならないようにとりあえず新しいレイヤー buttons(例)を追加してそこに移動しておきます.

今回の記事はここまでです.


本シリーズ次回の記事は引き続き滑らかなサーフェスの作例紹介で

「Gazebo/MoveIt のための 3D モデリング(7)滑らかなサーフェス – 作成編(その2)」

を予定しています.

Gazebo/MoveIt のための 3D モデリング(5)滑らかなサーフェス - 知識編
Gazebo/MoveIt のための 3D モデリング(7)滑らかなサーフェス - 作成編(その2)

著者について

yamamoto.yosuke administrator

コメントを投稿するにはログインしてください。