[PYTHON] Setze spinning_friction in pybullet

Dieses Mal werden wir mit einem Parameter namens spinning_friction experimentieren. Gemäß der Schnellstartanleitung ist der Unterschied zur vorherigen Rollreibung wie folgt. Ich weiß nicht, ob es richtig ist, aber ich habe es als Reibungskoeffizienten mit unterschiedlichen Ausrichtungen verstanden.

Umgebung

Was ich getan habe

Legen Sie spinning_friction in der urdf-Datei fest.

Ich möchte die Wirkung der Parameter wissen, also werde ich 3 Sätze machen.

Die urdf-Datei eines Satzes lautet wie folgt. (B gesetzt, c gesetzt) Und in test‗sphere05a.urdf ist visuell Box und Kollision Kugel.

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>

applyExternalTorque

shpere05aid = p.loadURDF("test_sphere05a.urdf")
p.applyExternalTorque(shpere05aid, -1, [0,0,100], flags=p.LINK_FRAME)

Ich wollte es wie eine Solomusik bewegen, also benutze ich applyExternalTorque. Erhalten Sie die eindeutige ID zum Zeitpunkt von loadURDF und geben Sie sie an applyExternalTorque weiter. Das nächste -1 ist die Basis, [0,0,100] ist das Drehmoment und flags = p.LINK_FRAME ist ein Flag, das das Drehmoment im lokalen Koordinatensystem angibt.

Das gesamte Skript ist unten.

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)

Lauf

Das Ausführungsergebnis ist die folgende GIF-Animation. Von vorne ein Satz, b Satz, c Satz. test_pybullet_09.gif

Das a-Set und das c-Set drehten sich länger und das b-Set war kürzer als sie. Diesmal scheint die Größe der Reibung durch die Summe der Parameter bestimmt zu werden, die den beiden Seiten gegeben wurden. Ein Satz: 0,004 + 0,001 = 0,005 b eingestellt: 0,004 + 0,004 = 0,008 c eingestellt: 0,001 + 0,004 = 0,005 Es scheint jedoch, dass lateral_friction auch einen Effekt hat, daher weiß ich nicht, wie ich es verwenden soll ...

Recommended Posts

Setze spinning_friction in pybullet
Stellen Sie ulimit im Supervisor ein
Stellen Sie env.hosts dynamisch mit Stoff ein
Nachdem Sie entschieden haben, wo die Beschriftung abgelegt werden soll, müssen Sie im nächsten Schritt den Anzeigeinhalt, das Anzeigeformat usw. festlegen. Im obigen Beispiel lautet die Position beispielsweise set_xticks ([300.600.900]). Wenn Sie sie jedoch auf dem Display auf klein, mittel oder groß einstellen möchten, setzen Sie set_xticklabels (['klein', 'mittel', 'groß']). Sie können die Neigung des Zeichens mit Drehung festlegen. Wenn es 90 ist, wird es vertikal sein. Die Größe bleibt gleich. Hier möchten wir die Daten von 6/1 bis 6/10 so anzeigen, wie sie sind, also ersetzen wir x0 so wie sie sind. Weitere Anpassung des Anzeigeformats Wenn x0 normal angezeigt wird, werden das ganze Jahr, der Monat, der Tag, die Stunde, die Minute und die Sekunde angezeigt und es ist lang, sodass nur das Jahr, der Monat und der Tag angezeigt werden. Farbe hinzufügen
Richten Sie Nunjucks in Node.js ein
Stellen Sie den Python-Test in Jenkins ein
So setzen Sie die Standardcodierung in Python auf utf-8
Ordnen Sie die in pythons models.py festgelegte Tabelle zu
Legen Sie die Standardwerte vor dem Festschreiben in sqlalchemy.orm fest
Richten Sie Pipenv auf Pycharm in einer Windows-Umgebung ein