Cette fois, nous allons expérimenter avec un paramètre appelé spinning_friction. Selon le guide de démarrage rapide, la différence par rapport au frottement de roulement précédent est la suivante. Je ne sais pas si c'est correct, mais je l'ai compris comme un coefficient de frottement avec des orientations différentes.
Je veux connaître l'effet des paramètres, donc je vais faire 3 sets.
--un ensemble
<Spinning_friction value =" 0.004 "/>
dans test_box07a.urdf
<spinning_friction value =" 0.001 "/>
dans test_sphere05a.urdf
--b ensemble
<Spinning_friction value =" 0.004 "/>
dans test_box07b.urdf
<Spinning_friction value =" 0.004 "/>
dans test_sphere05b.urdf
-C ensemble
<Spinning_friction value =" 0.001 "/>
dans test_box07c.urdf
<Spinning_friction value =" 0.004 "/>
dans test_sphere05c.urdf
Le fichier urdf d'un ensemble est le suivant. (Ensemble B, ensemble c) Et dans test‗sphere05a.urdf, le visuel est une boîte et la collision est une sphère.
test_box07a.urdf
<robot name="robot_name">
<link name="link_name">
<contact>
<lateral_friction value="1.0"/>
<rolling_friction value="0.0"/>
<spinning_friction value="0.004"/>
</contact>
<inertial>
<origin xyz="0.0 -1.0 -0.1" rpy="0.0 0.0 0.0"/>
<mass value="0.0"/>
<inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0"/>
</inertial>
<visual>
<origin xyz="0.0 -1.0 -0.1" rpy="0.0 0.0 0.0"/>
<geometry>
<box size="0.8 0.8 0.2"/>
</geometry>
<material name="red">
<color rgba="1.0 0.0 0.0 1.0"/>
</material>
</visual>
<collision>
<origin xyz="0.0 -1.0 -0.1" rpy="0.0 0.0 0.0"/>
<geometry>
<box size="0.8 0.8 0.2"/>
</geometry>
</collision>
</link>
</robot>
test_sphere05a.urdf
<robot name="robot_name">
<link name="link_name">
<contact>
<lateral_friction value="1.0"/>
<rolling_friction value="0.0"/>
<spinning_friction value="0.001"/>
</contact>
<inertial>
<origin xyz="0.0 -1.0 0.5" rpy="0.0 0.0 0.0"/>
<mass value="1.0"/>
<inertia ixx="0.1" ixy="0.0" ixz="0.0" iyy="0.1" iyz="0.0" izz="0.1"/>
</inertial>
<visual>
<origin xyz="0.0 -1.0 0.5" rpy="0.0 0.0 0.0"/>
<geometry>
<box size="0.4 0.4 0.4"/>
</geometry>
<material name="l_red">
<color rgba="1.0 0.5 0.5 1.0"/>
</material>
</visual>
<collision>
<origin xyz="0.0 -1.0 0.5" rpy="0.0 0.0 0.0"/>
<geometry>
<sphere radius="0.2"/>
</geometry>
</collision>
</link>
</robot>
shpere05aid = p.loadURDF("test_sphere05a.urdf")
p.applyExternalTorque(shpere05aid, -1, [0,0,100], flags=p.LINK_FRAME)
Je voulais le faire bouger comme une musique solo, alors j'utilise applyExternalTorque. Obtenez l'identifiant unique au moment de loadURDF et donnez-le à applyExternalTorque. Le -1 suivant est la base, [0,0,100] est le couple et flags = p.LINK_FRAME est un indicateur qui donne le couple dans le système de coordonnées local.
Le script entier est ci-dessous.
import pybullet as p
import time
from PIL import Image
phisicsClient = p.connect(p.GUI)
p.setGravity(0,0,-10)
p.loadURDF("test_box07a.urdf")
p.loadURDF("test_box07b.urdf")
p.loadURDF("test_box07c.urdf")
sphere05aid = p.loadURDF("test_sphere05a.urdf")
sphere05bid = p.loadURDF("test_sphere05b.urdf")
sphere05cid = p.loadURDF("test_sphere05c.urdf")
p.applyExternalTorque(sphere05aid, -1, [0,0,100], flags=p.LINK_FRAME)
p.applyExternalTorque(sphere05bid, -1, [0,0,100], flags=p.LINK_FRAME)
p.applyExternalTorque(sphere05cid, -1, [0,0,100], flags=p.LINK_FRAME)
camera_img = p.getCameraImage(320,320)
imgs = [Image.fromarray(camera_img[2])]
for i in range(1200):
p.stepSimulation()
if i % 10 == 0:
camera_img = p.getCameraImage(320,320)
imgs.append(Image.fromarray(camera_img[2]))
time.sleep(1./240.)
p.disconnect()
imgs[0].save("test_pybullet_09.gif", save_all = True, append_images = imgs[1:], duration=10, loop = 0)
Le résultat de l'exécution est l'animation GIF suivante. De face, un ensemble, b ensemble, c ensemble.
L'ensemble a et c continuaient à tourner plus longtemps, et l'ensemble b était plus court qu'eux. Cette fois, il semble que l'amplitude du frottement soit déterminée par la somme des paramètres donnés aux deux côtés. ∵ un ensemble: 0,004 + 0,001 = 0,005 b ensemble: 0,004 + 0,004 = 0,008 c ensemble: 0,001 + 0,004 = 0,005 Cependant, il semble que later_friction ait aussi un effet, donc je ne sais pas comment m'en servir ...
Recommended Posts