Меня интересует пассивная динамика c ходьба, и я использовал скрипт underactuated / examples / simple_legs.ipynb, чтобы получить угол между ногами через вывод Minim_state. Я заметил, что theta_stance плюс theta_swing равны углу между ногами. Мои коды:
def minsimulate():
builder = DiagramBuilder()
compass_gait = builder.AddSystem(CompassGait())
hip_torque = builder.AddSystem(ConstantVectorSource([0.0]))
builder.Connect(hip_torque.get_output_port(0), compass_gait.get_input_port(0))
scene_graph = builder.AddSystem(SceneGraph())
CompassGaitGeometry.AddToBuilder(builder, compass_gait.get_floating_base_state_output_port(),scene_graph)
visualizer = builder.AddSystem(
PlanarSceneGraphVisualizer(scene_graph, xlim=[-1.,8.], ylim=[-1., 2.],
show=plt_is_interactive))
builder.Connect(scene_graph.get_pose_bundle_output_port(),visualizer.get_input_port(0))
logger = builder.AddSystem(SignalLogger(4))
builder.Connect(compass_gait.get_output_port(0), logger.get_input_port(0))
diagram = builder.Build()
simulator = Simulator(diagram)
context = simulator.get_mutable_context()
context.SetAccuracy(1e-4)
context.SetContinuousState([0.,0., 0.4, -2.])
duration = 5.0 if get_ipython() else 0.1 # sets a shorter duration during testing
AdvanceToAndVisualize(simulator, visualizer, duration)
return logger.data()[:]
res=minsimulate()
plt.figure()
plt.plot(res[0,:]+res[1, :])
plt.xlabel('0.01s')
plt.ylabel('rad')
plt.show()
Результат неутешительный, он не синусоидальный: