При походке по компасу угол между ногами синусоидален? - PullRequest
0 голосов
/ 25 мая 2020

Меня интересует пассивная динамика 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()

Результат неутешительный, он не синусоидальный: enter image description here

...