IWATAKU
1
質問失礼いたします。
Choreonoid-2.0.0で、AGXSimulatorを使用した時、計算時間 / シミュレーション速度が6程度となり、1分のシミュレートをするために、現実で6分経過しない状況となっています。シミュレーションでは、数千のCollisionが存在していることが直接的な原因だと思います。しかし、これ以外の方法で解決できないかと考えています。
CPU性能としては十分だと考えられ、添付した画像でもこれを確認できています。出来ればCPUを全力で使っていただきたいのですが、改善する方法があればご教示してくださると幸いです。
よろしくお願いいたします。
既に試されているかもしれませんが、AGXSimulatorアイテムのプロパティ “NumThreads” で計算に使用するスレッド数を設定できます。この値を増やすと、並列性が向上してシミュレーションが速くなる可能性があります。
ただしAGXの内部でどのような条件で並列化されるかよく分からないところもありまして、この値を増やしたからといって思ったようには速くならないことも多いようです。そこはとりあえず試してみる必要がありますが、期待したほどの効果を得られなかったとしたらすみません。
あとはAMORというプロパティで、静止している剛体同士を一体化させ、ソルバの計算量を減らすこともできるようです。詳細はマニュアルの以下のページをご参照ください。(こちらも既に試されているかもしれませんが…。)
https://choreonoid.org/ja/documents/latest/agxdynamics/agx-simulator-item.html
お返事ありがとうございます。
確かに、NumThreadsが1の場合は、計算時間: 20.292 [s], 計算時間 / シミュレーション時間 = 18.363800904977378
で、32まで上げると、計算時間: 12.193 [s], 計算時間 / シミュレーション時間 = 7.007471264367816
とだいぶ改善されます。
(全てのコアがフルで使われるわけではなさそうですが)
AMORについては、既に試していたのですが、改善されなかったですね…
参考に、今回使用しているBodyファイルの一部を載せます。(この後、elementsが大量にある)
format: ChoreonoidBody
formatVersion: 1.0
angleUnit: degree
name: Terrain
links:
-
name: Terrain
translation: [ 0.0, 0.0, 0.0 ]
jointType: fixed
AMOR: true
material: Ground
centerOfMass: [ 0.0, 0.0, 0.0 ]
mass: 100.0
inertia: [ 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0 ]
elements:
-
{ type: Shape, translation: [ -18.0, -23.5, 0.006592193 ], geometry: { type: Box, size: [ 0.25, 0.25, 0.131592193 ] } }
-
{ type: Shape, translation: [ -18.0, -23.25, 0.02490387 ], geometry: { type: Box, size: [ 0.25, 0.25, 0.14990387 ] } }
-
{ type: Shape, translation: [ -18.0, -23.0, 0.03955319 ], geometry: { type: Box, size: [ 0.25, 0.25, 0.16455319000000002 ] } }
ご報告ありがとうございます。
NumThreadsを増やすことでちゃんと効果が出ているのですね。
数千のCollisionが存在しているとのことで、それくらいになると並列化の効果も大きいのですね。私自身はこれまでNumThreadsの効果をそこまで把握できていなかったので、大変参考になりました。さすがにAGXは商用であるだけあってこのような機能も優れていますね。
AMORについては改善されなかったのですね。
静止しているかどうかの判定次第というところもあるかと思うので、そううまくいくものでもないのかもしれませんね。