Note
Go to the end to download the full example code
Wheel Joint
Create a car with two wheel and wheel joints
Imports
pyb2d is imported as b2d
import b2d
import numpy as np
These imports are only needed for plotting. b2d.plot requires OpenCV to be installed!
import b2d.plot
import matplotlib.pyplot as plt
The world and ground body
world = b2d.world(gravity=(0, -10))
edge = world.create_static_body(
position=(0, 0), fixtures=b2d.fixture_def(shape=b2d.edge_shape([(-20, 0), (5, 0)]))
)
# random slope
x = np.linspace(5, 50, 10)
y = np.random.rand(10) * 4 - 2
y[0] = 0
xy = np.stack([x, y]).T
xy = np.flip(xy, axis=0)
edge = world.create_static_body(
position=(0, 0),
fixtures=b2d.fixture_def(shape=b2d.chain_shape(xy, prev_vertex=(10, 0))),
)
create car
left_wheel = world.create_dynamic_body(
position=(-3, 2),
fixtures=b2d.fixture_def(shape=b2d.circle_shape(radius=2), density=1),
)
right_wheel = world.create_dynamic_body(
position=(3, 2),
fixtures=b2d.fixture_def(shape=b2d.circle_shape(radius=2), density=1),
)
chasis = world.create_dynamic_body(
position=(0, 2),
fixtures=b2d.fixture_def(shape=b2d.polygon_shape(box=[3, 0.5]), density=1),
)
wheel_joint_def = dict(
stiffness=10,
enable_motor=True,
motor_speed=-100,
max_motor_torque=100,
collide_connected=False,
enable_limit=True,
lower_translation=-0.4,
upper_translation=0.4,
local_axis_a=(0, 1),
)
world.create_wheel_joint(chasis, left_wheel, local_anchor_a=(-3, 0), **wheel_joint_def)
world.create_wheel_joint(chasis, right_wheel, local_anchor_a=(3, 0), **wheel_joint_def)
fig, ax, ani = b2d.plot.animate_world(world, world_margin=(10, 10), t=5)
ani
plt.show()
/home/runner/.local/lib/python3.10/site-packages/b2d/plot.py:128: UserWarning: You passed in an explicit save_count=121 which is being ignored in favor of frames=121.
ani = animation.FuncAnimation(
Total running time of the script: ( 0 minutes 32.587 seconds)