注意
僕は初心者です.
記事の通りにすれば動きはすると思いますが,熟練の方から見ると不自然なところがあるかもしれません.ご了承下さい.
OnShapeとは
ブラウザで完結するCADです.
会員登録が必要ですが,基本無料で使えます.
個人的にすごく好きです.
さらに,最近のアップデートでURDF形式(pybulletに落とし込むときに必要な形式)でのエクスポートに対応しています.
しかしそのままpybulletに入れれるものでもなかったのでその方法について解説します.
手順
とりあえずエクスポート
まず,適当にデータを用意して下さい.
Part Studioだけではいまのところ無理なので,Assemblyしてください.
下のタブ(デフォルトなら"Assembly 1"と書いてある)を右クリックします

このような画面が出てくるので,適当なファイル名にしましょう.
さらにフォーマットはURDF
ジオメトリの形式はSTLにします.
青いエクスポートボタンを押してエクスポート.
zipファイルがエクスポートされるのでそれを解凍してください.
これがすんなり入ればいいのですが,そうも行きません.
stlファイルの置き換え
zipを解凍してその中身を見ていくと,meshesというフォルダの中にstlファイルがあるのがわかると思います.
実はここでエクスポートされるstlファイルはテキストフォーマットなのですが,pybulletが認識できるのはバイナリフォーマットのstlです.
従って,それぞれのパーツをバイナリフォーマットのstlファイルとしてエクスポートして,置き換えてください.
このとき単位をmeterにするのも忘れてはいけません(pybulletのデフォルト単位はmeter).
これでひとまずpybulletで読み込めます.
当たり判定の追加
エクスポートされたフォルダの中を見ると.urdfのファイルがあります.ここには各パーツの物理的なパラメータが記述されているのですが,デフォルトでは当たり判定がありません.(今後追加される可能性はあります.)
なので当たり判定を追記しましょう.
<visual>
<origin xyz="0 -0.04 -1.04095e-18" rpy="0 -0 0" />
<geometry>
<mesh filename="../meshes/67.stl" scale="1 1 1" />
</geometry>
<material name="0.647059_0.647059_0.647059_0.000000_0.000000">
<texture />
<color rgba="0.647059 0.647059 0.647059 1" />
</material>
</visual>
↑これはデフォルトであります.この値を参考にしながら
↓そのすぐ下にこのように当たり判定を書いてあげましょう
<collision>
<origin xyz="0 -0.04 -1.04095e-18" rpy="0 -0 0" />
<geometry>
<mesh filename="../meshes/67.stl" scale="1 1 1" />
</geometry>
</collision>
まだ挙動が変な場合
当たり判定はできてそうだけど,まだ挙動が変なばあい,.urdfのファイルで記述されている重量やinertiaが小さすぎる場合があります.
これらの値を大きくすることで自然な挙動になる可能性があります.
おわり
だいぶ雑になってしまいました.質問,アドバイスあったらしてください.
OnShapeがURDFファイル出力に対応したのは本当に最近のことなので,すぐに仕様が変わることもありえます.そういった場合この記事は役に立たないかもしれませんがあしからず.