From 568ea6ab4c25d94177e2d5d585324c5e98a65350 Mon Sep 17 00:00:00 2001 From: ZhaiShuaiShuai <18264798931@163.com> Date: Wed, 30 Jul 2025 11:54:39 +0800 Subject: [PATCH] add --- .../.github/workflows/test_and_distribute.yml | 44 + pypot-master/pypot-master/.gitignore | 45 + pypot-master/pypot-master/LICENSE.txt | 674 +++++++ pypot-master/pypot-master/MANIFEST.in | 4 + pypot-master/pypot-master/README.md | 61 + pypot-master/pypot-master/REST-APIs.md | 58 + pypot-master/pypot-master/changelog.md | 106 ++ pypot-master/pypot-master/doc/ErgoRobots.jpg | Bin 0 -> 31013 bytes pypot-master/pypot-master/doc/FAQ.rst | 12 + pypot-master/pypot-master/doc/Makefile | 153 ++ pypot-master/pypot-master/doc/README.md | 22 + .../pypot-master/doc/_static/my-css.css | 0 .../pypot-master/doc/_templates/layout.html | 5 + pypot-master/pypot-master/doc/about.rst | 22 + pypot-master/pypot-master/doc/api.rst | 12 + .../pypot-master/doc/banderole-pypot.jpg | Bin 0 -> 46004 bytes pypot-master/pypot-master/doc/conf.py | 257 +++ pypot-master/pypot-master/doc/controller.rst | 335 ++++ .../pypot-master/doc/controlling_robot.rst | 17 + pypot-master/pypot-master/doc/dynamixel.rst | 168 ++ pypot-master/pypot-master/doc/extending.rst | 81 + pypot-master/pypot-master/doc/index.rst | 61 + .../pypot-master/doc/installation.rst | 105 ++ pypot-master/pypot-master/doc/logging.rst | 103 ++ pypot-master/pypot-master/doc/move.rst | 48 + .../pypot-master/doc/poppy-creatures.jpg | Bin 0 -> 305952 bytes pypot-master/pypot-master/doc/primitive.rst | 147 ++ pypot-master/pypot-master/doc/pypot-archi.jpg | Bin 0 -> 157923 bytes .../pypot-master/doc/pypot.dynamixel.rst | 81 + .../pypot-master/doc/pypot.primitive.rst | 36 + pypot-master/pypot-master/doc/pypot.robot.rst | 64 + .../pypot-master/doc/pypot.sensor.rst | 24 + .../pypot-master/doc/pypot.server.rst | 40 + pypot-master/pypot-master/doc/pypot.tools.rst | 17 + pypot-master/pypot-master/doc/pypot.utils.rst | 24 + pypot-master/pypot-master/doc/pypot.vrep.rst | 25 + .../pypot-master/doc/pypot_logo-144x144.png | Bin 0 -> 6467 bytes .../pypot-master/doc/pypot_logo-48x48.png | Bin 0 -> 2440 bytes pypot-master/pypot-master/doc/pypot_logo.png | Bin 0 -> 10337 bytes pypot-master/pypot-master/doc/quickstart.rst | 132 ++ .../pypot-master/doc/remote_access.rst | 42 + pypot-master/pypot-master/doc/vrep.rst | 47 + pypot-master/pypot-master/pypot/__init__.py | 5 + pypot-master/pypot-master/pypot/_version.py | 1 + .../pypot-master/pypot/creatures/__init__.py | 26 + .../pypot/creatures/abstractcreature.py | 201 ++ .../pypot/creatures/configure_utility.py | 84 + .../pypot-master/pypot/creatures/ik.py | 170 ++ .../pypot/creatures/services_launcher.py | 280 +++ .../pypot-master/pypot/dynamixel/__init__.py | 141 ++ .../pypot/dynamixel/controller.py | 210 +++ .../pypot/dynamixel/conversion.py | 421 +++++ .../pypot-master/pypot/dynamixel/error.py | 74 + .../pypot/dynamixel/io/__init__.py | 5 + .../pypot/dynamixel/io/abstract_io.py | 581 ++++++ .../pypot-master/pypot/dynamixel/io/io.py | 279 +++ .../pypot-master/pypot/dynamixel/io/io_320.py | 248 +++ .../pypot/dynamixel/io/io_xl330.py | 214 +++ .../pypot/dynamixel/io/io_xm430.py | 188 ++ .../pypot-master/pypot/dynamixel/motor.py | 407 ++++ .../pypot/dynamixel/protocol/__init__.py | 0 .../pypot/dynamixel/protocol/v1.py | 183 ++ .../pypot/dynamixel/protocol/v2.py | 233 +++ .../pypot-master/pypot/dynamixel/syncloop.py | 119 ++ pypot-master/pypot-master/pypot/kinematics.py | 214 +++ .../pypot-master/pypot/primitive/__init__.py | 1 + .../pypot-master/pypot/primitive/manager.py | 81 + .../pypot-master/pypot/primitive/move.py | 215 +++ .../pypot-master/pypot/primitive/primitive.py | 301 +++ .../pypot-master/pypot/primitive/utils.py | 137 ++ .../pypot-master/pypot/robot/__init__.py | 12 + .../pypot-master/pypot/robot/config.py | 377 ++++ .../pypot-master/pypot/robot/controller.py | 110 ++ pypot-master/pypot-master/pypot/robot/io.py | 10 + .../pypot-master/pypot/robot/motor.py | 11 + .../pypot-master/pypot/robot/remote.py | 68 + .../pypot-master/pypot/robot/robot.py | 187 ++ .../pypot-master/pypot/robot/sensor.py | 39 + .../pypot-master/pypot/sensor/__init__.py | 5 + .../pypot/sensor/arduino/__init__.py | 5 + .../pypot/sensor/arduino/arduino_sensor.py | 54 + .../pypot/sensor/camera/__init__.py | 9 + .../pypot/sensor/camera/abstractcam.py | 52 + .../pypot-master/pypot/sensor/camera/dummy.py | 14 + .../pypot/sensor/camera/opencvcam.py | 34 + .../pypot/sensor/contact/__init__.py | 4 + .../pypot/sensor/contact/contact.py | 25 + .../pypot/sensor/depth/__init__.py | 5 + .../pypot-master/pypot/sensor/depth/sonar.py | 134 ++ .../pypot/sensor/imagefeature/__init__.py | 14 + .../pypot/sensor/imagefeature/blob.py | 82 + .../pypot/sensor/imagefeature/face.py | 57 + .../pypot/sensor/imagefeature/marker.py | 64 + .../pypot/sensor/kinect/__init__.py | 4 + .../pypot/sensor/kinect/sensor.py | 110 ++ .../pypot-master/pypot/sensor/optibridge.py | 57 + .../pypot-master/pypot/sensor/optitrack.py | 83 + .../pypot-master/pypot/server/__init__.py | 19 + .../pypot-master/pypot/server/httpserver.py | 1136 ++++++++++++ .../pypot-master/pypot/server/rest.py | 273 +++ .../pypot-master/pypot/server/server.py | 27 + .../pypot-master/pypot/server/snap.py | 440 +++++ .../snap_projects/blocs de base Poppy_FR.xml | 26 + .../legacy_projects/poppy-ergo-jr-lib.xml | 3 + .../pypot-snap-record-orchestration-demo.xml | 8 + .../snap_projects/poppy-base_demo_FR.xml | 26 + .../snap_projects/poppy-demo-project.xml | 24 + .../snap_projects/pypot-snap-blocks.xml | 24 + pypot-master/pypot-master/pypot/server/ws.py | 97 + .../pypot-master/pypot/server/zmqserver.py | 49 + .../pypot-master/pypot/tools/__init__.py | 0 .../pypot-master/pypot/tools/dxlconfig.py | 173 ++ .../pypot-master/pypot/utils/__init__.py | 58 + .../pypot-master/pypot/utils/appdirs.py | 566 ++++++ .../pypot-master/pypot/utils/flushed_print.py | 11 + .../pypot/utils/i2c_controller.py | 29 + .../pypot-master/pypot/utils/interpolation.py | 114 ++ .../pypot-master/pypot/utils/pypot_time.py | 12 + .../pypot/utils/stoppablethread.py | 209 +++ .../pypot-master/pypot/utils/trajectory.py | 109 ++ .../pypot-master/pypot/vpl/__init__.py | 0 .../pypot-master/pypot/vpl/download.py | 67 + .../pypot-master/pypot/vpl/scratch.py | 13 + pypot-master/pypot-master/pypot/vpl/snap.py | 13 + .../pypot-master/pypot/vrep/__init__.py | 176 ++ .../pypot/vrep/child_script/inject_code.lua | 67 + .../pypot/vrep/child_script/timer.lua | 41 + .../pypot-master/pypot/vrep/controller.py | 184 ++ pypot-master/pypot-master/pypot/vrep/io.py | 395 ++++ .../pypot/vrep/remoteApiBindings/__init__.py | 0 .../pypot/vrep/remoteApiBindings/vrep.py | 1480 +++++++++++++++ .../pypot/vrep/remoteApiBindings/vrepConst.py | 811 ++++++++ .../pypot-master/samples/REST/ruby/README.md | 28 + .../pypot-master/samples/REST/ruby/motor.rb | 117 ++ .../samples/REST/ruby/poppy-processing.rb | 45 + .../pypot-master/samples/REST/ruby/poppy.rb | 92 + .../samples/benchmarks/controller.png | Bin 0 -> 34694 bytes .../samples/benchmarks/controller_sync.ipynb | 131 ++ .../samples/benchmarks/cpu_load.ipynb | 133 ++ .../samples/benchmarks/cpu_usage.png | Bin 0 -> 30143 bytes .../samples/benchmarks/dxl-controller.py | 43 + .../samples/benchmarks/dxl-single-motor.py | 94 + .../samples/benchmarks/load_data.ipynb | 114 ++ .../samples/benchmarks/packet.pdf | Bin 0 -> 126735 bytes .../samples/benchmarks/packet.png | Bin 0 -> 40111 bytes .../pypot-master/samples/benchmarks/robot.py | 42 + .../samples/benchmarks/run-all.py | 43 + .../samples/benchmarks/single_packet.ipynb | 132 ++ .../pypot-master/samples/benchmarks/vrep.py | 38 + ...pypot REST API through HTTP requests.ipynb | 507 +++++ .../samples/notebooks/Another language.ipynb | 1646 +++++++++++++++++ .../Benchmark your Poppy robot.ipynb | 645 +++++++ ...trolling a Poppy Creature using SNAP.ipynb | 480 +++++ .../QuickStart playing with a PoppyErgo.ipynb | 477 +++++ ..., and Play Moves on a Poppy Creature.ipynb | 358 ++++ .../notebooks/image/snap-basic-blocks.png | Bin 0 -> 67506 bytes .../image/snap-find-pypot-blocks.png | Bin 0 -> 93445 bytes .../samples/notebooks/image/snap-header.png | Bin 0 -> 232194 bytes .../notebooks/image/snap-hello-world.png | Bin 0 -> 53062 bytes .../samples/notebooks/image/snap-import.png | Bin 0 -> 99731 bytes .../image/snap-orchestration-demo.png | Bin 0 -> 239862 bytes .../samples/notebooks/image/snap-ready.png | Bin 0 -> 137655 bytes .../notebooks/image/snap-right-click.png | Bin 0 -> 66414 bytes .../samples/notebooks/image/snap-sinus.png | Bin 0 -> 109814 bytes .../notebooks/image/snap-slider-example.png | Bin 0 -> 8622 bytes .../samples/notebooks/image/snap-slider.png | Bin 0 -> 28963 bytes .../samples/notebooks/image/snap.png | Bin 0 -> 73173 bytes .../pypot-master/samples/notebooks/readme.md | 83 + .../samples/notebooks/robot-client.ipynb | 116 ++ .../samples/notebooks/robot-server.ipynb | 100 + .../samples/notebooks/sum-of-sinus.ipynb | 393 ++++ .../ergo-jr-rpi2-idle-light-syncloop.prof | Bin 0 -> 29797 bytes .../pypot-master/samples/profiles/profiles.md | 16 + .../samples/remoterobot-server.py | 24 + .../pypot-master/samples/test_connection.py | 65 + pypot-master/pypot-master/setup.cfg | 4 + pypot-master/pypot-master/setup.py | 76 + .../pypot-master/tests/test_crashed_prim.py | 19 + pypot-master/pypot-master/tests/test_dummy.py | 44 + pypot-master/pypot-master/tests/test_ik.py | 14 + .../pypot-master/tests/test_import.py | 23 + .../pypot-master/tests/test_primitive.py | 81 + .../pypot-master/tests/test_rest_api.py | 504 +++++ pypot-master/pypot-master/tests/test_snap.py | 44 + .../pypot-master/tests/test_websocket.py | 48 + pypot-master/pypot-master/tests/utils.py | 11 + 186 files changed, 23227 insertions(+) create mode 100644 pypot-master/pypot-master/.github/workflows/test_and_distribute.yml create mode 100644 pypot-master/pypot-master/.gitignore create mode 100644 pypot-master/pypot-master/LICENSE.txt create mode 100644 pypot-master/pypot-master/MANIFEST.in create mode 100644 pypot-master/pypot-master/README.md create mode 100644 pypot-master/pypot-master/REST-APIs.md create mode 100644 pypot-master/pypot-master/changelog.md create mode 100644 pypot-master/pypot-master/doc/ErgoRobots.jpg create mode 100644 pypot-master/pypot-master/doc/FAQ.rst create mode 100644 pypot-master/pypot-master/doc/Makefile create mode 100644 pypot-master/pypot-master/doc/README.md create mode 100644 pypot-master/pypot-master/doc/_static/my-css.css create mode 100644 pypot-master/pypot-master/doc/_templates/layout.html create mode 100644 pypot-master/pypot-master/doc/about.rst create mode 100644 pypot-master/pypot-master/doc/api.rst create mode 100644 pypot-master/pypot-master/doc/banderole-pypot.jpg create mode 100644 pypot-master/pypot-master/doc/conf.py create mode 100644 pypot-master/pypot-master/doc/controller.rst create mode 100644 pypot-master/pypot-master/doc/controlling_robot.rst create mode 100644 pypot-master/pypot-master/doc/dynamixel.rst create mode 100644 pypot-master/pypot-master/doc/extending.rst create mode 100644 pypot-master/pypot-master/doc/index.rst create mode 100644 pypot-master/pypot-master/doc/installation.rst create mode 100644 pypot-master/pypot-master/doc/logging.rst create mode 100644 pypot-master/pypot-master/doc/move.rst create mode 100644 pypot-master/pypot-master/doc/poppy-creatures.jpg create mode 100644 pypot-master/pypot-master/doc/primitive.rst create mode 100644 pypot-master/pypot-master/doc/pypot-archi.jpg create mode 100644 pypot-master/pypot-master/doc/pypot.dynamixel.rst create mode 100644 pypot-master/pypot-master/doc/pypot.primitive.rst create mode 100644 pypot-master/pypot-master/doc/pypot.robot.rst create mode 100644 pypot-master/pypot-master/doc/pypot.sensor.rst create mode 100644 pypot-master/pypot-master/doc/pypot.server.rst create mode 100644 pypot-master/pypot-master/doc/pypot.tools.rst create mode 100644 pypot-master/pypot-master/doc/pypot.utils.rst create mode 100644 pypot-master/pypot-master/doc/pypot.vrep.rst create mode 100644 pypot-master/pypot-master/doc/pypot_logo-144x144.png create mode 100644 pypot-master/pypot-master/doc/pypot_logo-48x48.png create mode 100644 pypot-master/pypot-master/doc/pypot_logo.png create mode 100644 pypot-master/pypot-master/doc/quickstart.rst create mode 100644 pypot-master/pypot-master/doc/remote_access.rst create mode 100644 pypot-master/pypot-master/doc/vrep.rst create mode 100644 pypot-master/pypot-master/pypot/__init__.py create mode 100644 pypot-master/pypot-master/pypot/_version.py create mode 100644 pypot-master/pypot-master/pypot/creatures/__init__.py create mode 100644 pypot-master/pypot-master/pypot/creatures/abstractcreature.py create mode 100644 pypot-master/pypot-master/pypot/creatures/configure_utility.py create mode 100644 pypot-master/pypot-master/pypot/creatures/ik.py create mode 100644 pypot-master/pypot-master/pypot/creatures/services_launcher.py create mode 100644 pypot-master/pypot-master/pypot/dynamixel/__init__.py create mode 100644 pypot-master/pypot-master/pypot/dynamixel/controller.py create mode 100644 pypot-master/pypot-master/pypot/dynamixel/conversion.py create mode 100644 pypot-master/pypot-master/pypot/dynamixel/error.py create mode 100644 pypot-master/pypot-master/pypot/dynamixel/io/__init__.py create mode 100644 pypot-master/pypot-master/pypot/dynamixel/io/abstract_io.py create mode 100644 pypot-master/pypot-master/pypot/dynamixel/io/io.py create mode 100644 pypot-master/pypot-master/pypot/dynamixel/io/io_320.py create mode 100644 pypot-master/pypot-master/pypot/dynamixel/io/io_xl330.py create mode 100644 pypot-master/pypot-master/pypot/dynamixel/io/io_xm430.py create mode 100644 pypot-master/pypot-master/pypot/dynamixel/motor.py create mode 100644 pypot-master/pypot-master/pypot/dynamixel/protocol/__init__.py create mode 100644 pypot-master/pypot-master/pypot/dynamixel/protocol/v1.py create mode 100644 pypot-master/pypot-master/pypot/dynamixel/protocol/v2.py create mode 100644 pypot-master/pypot-master/pypot/dynamixel/syncloop.py create mode 100644 pypot-master/pypot-master/pypot/kinematics.py create mode 100644 pypot-master/pypot-master/pypot/primitive/__init__.py create mode 100644 pypot-master/pypot-master/pypot/primitive/manager.py create mode 100644 pypot-master/pypot-master/pypot/primitive/move.py create mode 100644 pypot-master/pypot-master/pypot/primitive/primitive.py create mode 100644 pypot-master/pypot-master/pypot/primitive/utils.py create mode 100644 pypot-master/pypot-master/pypot/robot/__init__.py create mode 100644 pypot-master/pypot-master/pypot/robot/config.py create mode 100644 pypot-master/pypot-master/pypot/robot/controller.py create mode 100644 pypot-master/pypot-master/pypot/robot/io.py create mode 100644 pypot-master/pypot-master/pypot/robot/motor.py create mode 100644 pypot-master/pypot-master/pypot/robot/remote.py create mode 100644 pypot-master/pypot-master/pypot/robot/robot.py create mode 100644 pypot-master/pypot-master/pypot/robot/sensor.py create mode 100644 pypot-master/pypot-master/pypot/sensor/__init__.py create mode 100644 pypot-master/pypot-master/pypot/sensor/arduino/__init__.py create mode 100644 pypot-master/pypot-master/pypot/sensor/arduino/arduino_sensor.py create mode 100644 pypot-master/pypot-master/pypot/sensor/camera/__init__.py create mode 100644 pypot-master/pypot-master/pypot/sensor/camera/abstractcam.py create mode 100644 pypot-master/pypot-master/pypot/sensor/camera/dummy.py create mode 100644 pypot-master/pypot-master/pypot/sensor/camera/opencvcam.py create mode 100644 pypot-master/pypot-master/pypot/sensor/contact/__init__.py create mode 100644 pypot-master/pypot-master/pypot/sensor/contact/contact.py create mode 100644 pypot-master/pypot-master/pypot/sensor/depth/__init__.py create mode 100644 pypot-master/pypot-master/pypot/sensor/depth/sonar.py create mode 100644 pypot-master/pypot-master/pypot/sensor/imagefeature/__init__.py create mode 100644 pypot-master/pypot-master/pypot/sensor/imagefeature/blob.py create mode 100644 pypot-master/pypot-master/pypot/sensor/imagefeature/face.py create mode 100644 pypot-master/pypot-master/pypot/sensor/imagefeature/marker.py create mode 100644 pypot-master/pypot-master/pypot/sensor/kinect/__init__.py create mode 100644 pypot-master/pypot-master/pypot/sensor/kinect/sensor.py create mode 100644 pypot-master/pypot-master/pypot/sensor/optibridge.py create mode 100644 pypot-master/pypot-master/pypot/sensor/optitrack.py create mode 100644 pypot-master/pypot-master/pypot/server/__init__.py create mode 100644 pypot-master/pypot-master/pypot/server/httpserver.py create mode 100644 pypot-master/pypot-master/pypot/server/rest.py create mode 100644 pypot-master/pypot-master/pypot/server/server.py create mode 100644 pypot-master/pypot-master/pypot/server/snap.py create mode 100644 pypot-master/pypot-master/pypot/server/snap_projects/blocs de base Poppy_FR.xml create mode 100644 pypot-master/pypot-master/pypot/server/snap_projects/legacy_projects/poppy-ergo-jr-lib.xml create mode 100644 pypot-master/pypot-master/pypot/server/snap_projects/legacy_projects/pypot-snap-record-orchestration-demo.xml create mode 100644 pypot-master/pypot-master/pypot/server/snap_projects/poppy-base_demo_FR.xml create mode 100644 pypot-master/pypot-master/pypot/server/snap_projects/poppy-demo-project.xml create mode 100644 pypot-master/pypot-master/pypot/server/snap_projects/pypot-snap-blocks.xml create mode 100644 pypot-master/pypot-master/pypot/server/ws.py create mode 100644 pypot-master/pypot-master/pypot/server/zmqserver.py create mode 100644 pypot-master/pypot-master/pypot/tools/__init__.py create mode 100644 pypot-master/pypot-master/pypot/tools/dxlconfig.py create mode 100644 pypot-master/pypot-master/pypot/utils/__init__.py create mode 100644 pypot-master/pypot-master/pypot/utils/appdirs.py create mode 100644 pypot-master/pypot-master/pypot/utils/flushed_print.py create mode 100644 pypot-master/pypot-master/pypot/utils/i2c_controller.py create mode 100644 pypot-master/pypot-master/pypot/utils/interpolation.py create mode 100644 pypot-master/pypot-master/pypot/utils/pypot_time.py create mode 100644 pypot-master/pypot-master/pypot/utils/stoppablethread.py create mode 100644 pypot-master/pypot-master/pypot/utils/trajectory.py create mode 100644 pypot-master/pypot-master/pypot/vpl/__init__.py create mode 100644 pypot-master/pypot-master/pypot/vpl/download.py create mode 100644 pypot-master/pypot-master/pypot/vpl/scratch.py create mode 100644 pypot-master/pypot-master/pypot/vpl/snap.py create mode 100644 pypot-master/pypot-master/pypot/vrep/__init__.py create mode 100644 pypot-master/pypot-master/pypot/vrep/child_script/inject_code.lua create mode 100644 pypot-master/pypot-master/pypot/vrep/child_script/timer.lua create mode 100644 pypot-master/pypot-master/pypot/vrep/controller.py create mode 100644 pypot-master/pypot-master/pypot/vrep/io.py create mode 100644 pypot-master/pypot-master/pypot/vrep/remoteApiBindings/__init__.py create mode 100644 pypot-master/pypot-master/pypot/vrep/remoteApiBindings/vrep.py create mode 100644 pypot-master/pypot-master/pypot/vrep/remoteApiBindings/vrepConst.py create mode 100644 pypot-master/pypot-master/samples/REST/ruby/README.md create mode 100644 pypot-master/pypot-master/samples/REST/ruby/motor.rb create mode 100644 pypot-master/pypot-master/samples/REST/ruby/poppy-processing.rb create mode 100644 pypot-master/pypot-master/samples/REST/ruby/poppy.rb create mode 100644 pypot-master/pypot-master/samples/benchmarks/controller.png create mode 100644 pypot-master/pypot-master/samples/benchmarks/controller_sync.ipynb create mode 100644 pypot-master/pypot-master/samples/benchmarks/cpu_load.ipynb create mode 100644 pypot-master/pypot-master/samples/benchmarks/cpu_usage.png create mode 100644 pypot-master/pypot-master/samples/benchmarks/dxl-controller.py create mode 100644 pypot-master/pypot-master/samples/benchmarks/dxl-single-motor.py create mode 100644 pypot-master/pypot-master/samples/benchmarks/load_data.ipynb create mode 100644 pypot-master/pypot-master/samples/benchmarks/packet.pdf create mode 100644 pypot-master/pypot-master/samples/benchmarks/packet.png create mode 100644 pypot-master/pypot-master/samples/benchmarks/robot.py create mode 100644 pypot-master/pypot-master/samples/benchmarks/run-all.py create mode 100644 pypot-master/pypot-master/samples/benchmarks/single_packet.ipynb create mode 100644 pypot-master/pypot-master/samples/benchmarks/vrep.py create mode 100644 pypot-master/pypot-master/samples/notebooks/Accessing pypot REST API through HTTP requests.ipynb create mode 100644 pypot-master/pypot-master/samples/notebooks/Another language.ipynb create mode 100644 pypot-master/pypot-master/samples/notebooks/Benchmark your Poppy robot.ipynb create mode 100644 pypot-master/pypot-master/samples/notebooks/Controlling a Poppy Creature using SNAP.ipynb create mode 100644 pypot-master/pypot-master/samples/notebooks/QuickStart playing with a PoppyErgo.ipynb create mode 100644 pypot-master/pypot-master/samples/notebooks/Record, Save, and Play Moves on a Poppy Creature.ipynb create mode 100644 pypot-master/pypot-master/samples/notebooks/image/snap-basic-blocks.png create mode 100644 pypot-master/pypot-master/samples/notebooks/image/snap-find-pypot-blocks.png create mode 100644 pypot-master/pypot-master/samples/notebooks/image/snap-header.png create mode 100644 pypot-master/pypot-master/samples/notebooks/image/snap-hello-world.png create mode 100644 pypot-master/pypot-master/samples/notebooks/image/snap-import.png create mode 100644 pypot-master/pypot-master/samples/notebooks/image/snap-orchestration-demo.png create mode 100644 pypot-master/pypot-master/samples/notebooks/image/snap-ready.png create mode 100644 pypot-master/pypot-master/samples/notebooks/image/snap-right-click.png create mode 100644 pypot-master/pypot-master/samples/notebooks/image/snap-sinus.png create mode 100644 pypot-master/pypot-master/samples/notebooks/image/snap-slider-example.png create mode 100644 pypot-master/pypot-master/samples/notebooks/image/snap-slider.png create mode 100644 pypot-master/pypot-master/samples/notebooks/image/snap.png create mode 100644 pypot-master/pypot-master/samples/notebooks/readme.md create mode 100644 pypot-master/pypot-master/samples/notebooks/robot-client.ipynb create mode 100644 pypot-master/pypot-master/samples/notebooks/robot-server.ipynb create mode 100644 pypot-master/pypot-master/samples/notebooks/sum-of-sinus.ipynb create mode 100644 pypot-master/pypot-master/samples/profiles/ergo-jr-rpi2-idle-light-syncloop.prof create mode 100644 pypot-master/pypot-master/samples/profiles/profiles.md create mode 100644 pypot-master/pypot-master/samples/remoterobot-server.py create mode 100644 pypot-master/pypot-master/samples/test_connection.py create mode 100644 pypot-master/pypot-master/setup.cfg create mode 100644 pypot-master/pypot-master/setup.py create mode 100644 pypot-master/pypot-master/tests/test_crashed_prim.py create mode 100644 pypot-master/pypot-master/tests/test_dummy.py create mode 100644 pypot-master/pypot-master/tests/test_ik.py create mode 100644 pypot-master/pypot-master/tests/test_import.py create mode 100644 pypot-master/pypot-master/tests/test_primitive.py create mode 100644 pypot-master/pypot-master/tests/test_rest_api.py create mode 100644 pypot-master/pypot-master/tests/test_snap.py create mode 100644 pypot-master/pypot-master/tests/test_websocket.py create mode 100644 pypot-master/pypot-master/tests/utils.py diff --git a/pypot-master/pypot-master/.github/workflows/test_and_distribute.yml b/pypot-master/pypot-master/.github/workflows/test_and_distribute.yml new file mode 100644 index 0000000..c81e1eb --- /dev/null +++ b/pypot-master/pypot-master/.github/workflows/test_and_distribute.yml @@ -0,0 +1,44 @@ +name: pypot + +on: [push] + +jobs: + build: + + runs-on: ubuntu-latest + strategy: + matrix: + python-version: [3.6, 3.7, 3.8, 3.9] + env: + # The Python version from the matrix used to build and deploy to Pypi + PYTHON_BUILD_VERSION: 3.8 + steps: + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install flake8 build websocket ../pypot + pip install poppy-ergo-jr + - name: Lint with flake8 + run: | + # stop the build if there are Python syntax errors or undefined names + flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics + # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + - name: Test package with unittest + working-directory: tests + run: | + python -m unittest discover + - name: Build package with Python ${{ env.PYTHON_BUILD_VERSION }} + if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags') && matrix.python-version == env.PYTHON_BUILD_VERSION }} + run: python -m build + - name: Publish package relying on pypa/gh-action-pypi-publish with Python ${{ env.PYTHON_BUILD_VERSION }} + uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29 + if: ${{ github.event_name == 'push' && startsWith(github.ref, 'refs/tags') && matrix.python-version == env.PYTHON_BUILD_VERSION }} + with: + user: __token__ + password: ${{ secrets.PYPI_API_TOKEN }} diff --git a/pypot-master/pypot-master/.gitignore b/pypot-master/pypot-master/.gitignore new file mode 100644 index 0000000..6552cc9 --- /dev/null +++ b/pypot-master/pypot-master/.gitignore @@ -0,0 +1,45 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg +*.egg-info + +# Sphinx +doc/_build + +# OS generated files +.DS_Store +.DS_Store? +.Trashes +ehthumbs.db +Thumbs.db + +# Gedit +*~ + +# Jupyter (ipython) +.ipynb_checkpoints/ +*-checkpoint.ipynb + +# Pypot record files +*.record + diff --git a/pypot-master/pypot-master/LICENSE.txt b/pypot-master/pypot-master/LICENSE.txt new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/pypot-master/pypot-master/LICENSE.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/pypot-master/pypot-master/MANIFEST.in b/pypot-master/pypot-master/MANIFEST.in new file mode 100644 index 0000000..bcd0032 --- /dev/null +++ b/pypot-master/pypot-master/MANIFEST.in @@ -0,0 +1,4 @@ +include pypot/vrep/remoteApiBindings/lib/*/*/remoteApi.* +include pypot/server/snap_projects/* +include *.md + diff --git a/pypot-master/pypot-master/README.md b/pypot-master/pypot-master/README.md new file mode 100644 index 0000000..7bf447e --- /dev/null +++ b/pypot-master/pypot-master/README.md @@ -0,0 +1,61 @@ +[![PyPI](https://img.shields.io/pypi/v/pypot.svg)](https://pypi.python.org/pypi/pypot/) +[![Build Status](https://github.com/poppy-project/pypot/actions/workflows/test_and_distribute.yml/badge.svg)](https://github.com/poppy-project/pypot/actions) +[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.591809.svg)](https://doi.org/10.5281/zenodo.591809) + + + +# Pypot ⚙️ A Python library for Dynamixel motor control + +Pypot is a cross-platform Python library making it easy and fast to control custom robots based on multiple models of Dynamixel motors. Use Pypot to: + +* control Robotis motors through USB2Dynamixel, USB2AX or [Pixl 4 Raspberry Pi](https://github.com/poppy-project/pixl) devices, +* define kinematic chains of a custom robot and control it through high-level commands (Forward & Inverse Kinematics), +* define primitives (motions applying to motor groups) and easily combine them to create custom complex behaviors (Robot dance, arm shaking, writing with a pen...). +* define sensor access and processing (QRCode detection, force sensors, RGB-D, ...) + +Pypot is also compatible with the [CoppeliaSim simulator](http://www.coppeliarobotics.com) (formerly V-REP), embeds a [REST API](https://docs.poppy-project.org/en/programming/rest.html) for Web-based control, and supports visual programming via [Scratch](https://docs.poppy-project.org/en/getting-started/program-the-robot.html#using-scratch) and [Snap](https://docs.poppy-project.org/en/getting-started/program-the-robot.html#using-snap). + +## 🔌 Compatible hardware + +**Compatible motors:** MX-106, MX-64, MX-28, MX-12, AX-12, AX-18, RX-24, RX-28, RX-64, XL-320, SR-RH4D, EX-106. Derivated versions are also supported (e.g. MX-28AT, MX-28R, MX-28T, ...). Both protocols v1 and v2 are supported but v2 is used only for XL-320. Use [Herborist](https://github.com/poppy-project/herborist#herborist) to help detect IDs and baudrates of motors. + +**Compatible sensors:** Kinect 1, QRCode from RGB camera, sonar, micro-switch from Raspberry Pi GPIO, digital or analog sensor connected to Arduino + +**Compatible interpreters:** Python 3.6, 3.7, 3.8, 3.9 + +Other models of motors and sensors can be integrated with little effort and time. Other programming languages may be connected through the REST API. + +## Read 📖 [Documentation](https://docs.poppy-project.org/en/software-libraries/pypot.html) and get ⁉️ [Assistance](https://forum.poppy-project.org/) + +## Pypot is part of the opensource Poppy project + +Pypot is part of the [Poppy project](http://www.poppy-project.org) aiming at developing robotic creations that are easy to build, customize, deploy, and share. It promotes open-source by sharing 3D-printed hardware, software, and web tools. + +The Poppy creatures are: +* **[Poppy Humanoid](https://www.poppy-project.org/en/robots/poppy-humanoid/)**: a kid-size humanoid robot designed for biped locomotion and physical human-robot interaction (25 DoF) for biped research and university workshops, +* **[Poppy Torso](https://www.poppy-project.org/en/robots/poppy-torso/)**: just the torso of the humanoid robot, with a suction pad to stick it attach it firmly to a desk (13 DoF) for HRI research, university and high school workshops +* **[Poppy Ergo Jr](https://www.poppy-project.org/en/robots/poppy-ergo-jr/)**: a low-cost robotic arm for primary to middle school (6 Dof) for primary or middle school workshops + +![Poppy Humanoid](./doc/poppy-creatures.jpg) + +All those creatures are based on a combination of standard dynamixel actuators, 3D printed parts and open-source electronics such as Arduino boards. Both the hardware (3D models, electronics...) and software can be freely used, modified and duplicated. + +## 💻 Installation + +If you are using a Poppy robot embedding a Raspberry Pi, Pypot is already shipped with it. For custom robots, just type ⌨️ `pip install pypot` in your system terminal! + +If you intend to modify or add features to Pypot, create a virtual environment and install it from sources instead: +```bash +git clone https://github.com/poppy-project/pypot +cd pypot/pypot +pip install . +``` + +Additional drivers may be needed for USB2serial, depending of your OS. Check here: +* [USB2AX](http://www.xevelabs.com/doku.php?id=product:usb2ax:quickstart) - this device is designed to manage TTL communication only +* USB2Dynamixel - this device can manage both TTL and RS485 communication. +* [Pixl board](https://github.com/poppy-project/pixl) for RaspberryPi + +## 👨‍💻 Contributing + +If this is the first time you contribute to Pypot, it is a good idea to share your work on [the forum](https://forum.poppy-project.org/) first, we will be happy to give you a hand so that you can contribute to the opensource project. diff --git a/pypot-master/pypot-master/REST-APIs.md b/pypot-master/pypot-master/REST-APIs.md new file mode 100644 index 0000000..8a0236f --- /dev/null +++ b/pypot-master/pypot-master/REST-APIs.md @@ -0,0 +1,58 @@ +# Pypot REST APIs + +The pypot library provides a REST API which can be used to access the [Robot](http://poppy-project.github.io/pypot/pypot.robot.html) level and all its attached [motors](http://poppy-project.github.io/pypot/pypot.robot.html#module-pypot.robot.motor), [sensors](http://poppy-project.github.io/pypot/pypot.robot.html#module-pypot.robot.sensor), and [primitives](http://poppy-project.github.io/pypot/pypot.primitive.html). Through the REST API, you can: +* **Motors** + * get the motors list and get/set value from/to their registers +* **Sensors**: + * get the sensors list and get/set value from/to their registers +* **Primitives**: + * get the primitives list (running or not), start, stop, pause, and resume them. + * you can also access their publicly available properties and methods. + +*Note that only the defined as **publicly available** registers or methods will be accessed through the REST API. Please refer to the [note for developers](#markdown-header-note-for-developers) below for details.* + +# REST APIs + +*Please note that all answers are always sent as json dictionary.* + +## Robot + +### Motor + +| | HTTP | JSON | Example of answer | +|--------------------------------------------|:------------------------------------------------------------:|:---------------------------------------------------------------------------------------------------------------------------------------------------:|------------------------------------------------------------------------| +| Get the motors list | GET /motor/list.json | {"robot": {"get_motors_list": {"alias": "motors"}}} | {'motors': ["l_elbow_y", "r_elbow_y", "r_knee_y", "head_y", "head_z"]} | +| Get the motors alias list | GET /motor/alias/list.json | {"robot": {"get_motors_alias": {}}} | {'alias': ["r_leg", "torso", "l_leg_sagitall"]} | +| Get the motors list of a specific alias | GET /motor/\/list.json | {"robot": {"get_motors_list": {"alias": ""}}} | {\: ["l_elbow_y", "r_elbow_y", "r_knee_y", "head_y", "head_z"]} | +| Get the registers list of a specific motor | GET /motor/\/register/list.json | {"robot": {"get_registers_list": {"motor": ""}}} | {'registers': ["goal_speed", "compliant", "present_load", "id"]} | +| Get the register value | GET /motor/\/register/\ | {"robot": {"get_register_value": {"motor": "", "register": ""}}} | {"present_position": 30} | +| Set new value to a register | POST /motor/\/register/\/value.json | {"robot": {"set_register_value": {"motor": "", "register": "", "value": {"arg1": "val1", "arg2": "val2", "...": "..."}}} | {} | + +### Sensor + +*Similar to the motor API. You just replace motor by sensor (for the moment there is no alias for sensors).* + +## Primitive + +| | HTTP | JSON | Example of answer | +|-----------------------------------|:-------------------------------------------------:|:--------------------------------------------------------------------------------------------------------------------------------------------:|:----------------------------------------------------------------------:| +| Get the primitives list | GET /primitive/list.json | {"robot": {"get_primitives_list": ""}} | {'primitives': ["stand_up", "sit", "head_tracking"]} | +| Get the running primitives list | GET /primitive/running/list.json | {"robot": {"get_running_primitives_list": ""}} | {'primitives': ["head_tracking"]} | +| Start a primitive | GET /primitive/\/start.json | {"robot": {"start_primitive": {"primitive": ""}}} | {} | +| Stop a primitive | GET /primitive/\/stop.json | {"robot": {"stop_primitive": {"primitive": ""}}} | {} | +| Pause a primitive | GET /primitive/\/pause.json | {"robot": {"pause_primitive": {"primitive": ""}}} | {} | +| Resume a primitive | GET /primitive/\/resume.json | {"robot": {"resume_primitive": {"primitive": ""}}} | {} | +| Get the primitive properties list | GET /primitive/\/property/list.json | {"robot": {"get_primitive_properties_list": {"primitive": ""}}} | {"property": ["filter", "smooth"]} | +| Get a primitive property value | GET /primitive/\/property/ | {"robot": {"get_primitive_property": {"primitive": "", "property": ""}}} | {"sin.amp": 30.0} | +| Set a primitive property value | POST /primitive/\/property//value.json | {"robot": {"set_primitive_property": {"primitive": "", "property": "", "args": {"arg1": "val1", "arg2": "val2", "...": "..."}}}} | {} | +| Get the primitive methods list | GET /primitive/\/method/list.json | {"robot": {"get_primitive_methods_list": {"primitive": ""}}} | {"methods": ["get_tracked_faces", "start", "stop", "pause", "resume"]} | +| Call a method of a primitive | POST /primitive/\/method/\/args.json | {"robot": {"call_primitive_method": {"primitive": "", "method": "", "args": {"arg1": "val1", "arg2": "val2", "...": "..."}}}} | | + + +## Note for developers + +In order to **publicly** available through the REST API, the registers of the motors/sensors and the properties/methods of the primitives should be added to specific lists. + +More precisely, the [Motor](http://poppy-project.github.io/pypot/pypot.robot.html#pypot.robot.motor.Motor) class sets the [registers](http://poppy-project.github.io/pypot/pypot.dynamixel.html#pypot.dynamixel.motor.DxlMotor.registers) list (similarly for the [Sensor](http://poppy-project.github.io/pypot/pypot.sensor.html) class) and the [Primitives](http://poppy-project.github.io/pypot/pypot.primitive.html#pypot.primitive.primitive.Primitive) uses the [methods]() and [properties]() list. + +Those are class variables and can be extended when defining your own subclasses (see the [Sinus primitive](https://github.com/poppy-project/pypot/blob/REST-API-2.0/pypot/primitive/utils.py) as an example). diff --git a/pypot-master/pypot-master/changelog.md b/pypot-master/pypot-master/changelog.md new file mode 100644 index 0000000..4ffafba --- /dev/null +++ b/pypot-master/pypot-master/changelog.md @@ -0,0 +1,106 @@ +# Changelog + +## V 4.1 +* Add support for EX motors + +## V 4.0 + +* Fix compatibility with Python 3.8 and drop compatibility with Python 2 +* Fix poppy-configure and dxl-config for recent Dynamixel firmwares with protocol v1 +* Replaced the Snap build from pypot by a Snap downloader for `poppy-services --snap` +* Add Snap entry points for webcam access in the REST API +* Jupyter notebooks update for py3 +* Updated ikpy to the latest version + +## V 3.1 + +* Add support for connecting multiple robots to a same VREP scene. +* Fix a bug in the minjerk trajectory computation. + +## V 2.11 + +## Features +* Add dummy motors (mostly for unittest) +* add native support for the pixl board +* allow to disable sensor at loading (convenient for camera sensor) +* add a dummy camera +* Add support for RX-24 dynamixel motors +* Add an event used to check if a "loopable" thread has been updated +* Move can now be plotted using matplotlib + +### Snap +* Add blocs: “ping url ” and “set $robot host to ” which aim to fix DNS issues in some filtered networks. +* update “set of motor(s) to value ” : speed register is now moving_speed instead of goal_speed. Able to use it through many motors at once now +* fix “get of motor(s) ” +* fix some default values of inputs variable for consistency +* add entry for ik in SnapRemoteServer +* check return-delay-time at startup to prevent timeouts with misconfigured motors + +## Bugfix +* many primitives threading issues +* python >= 3.4 compatibility issues +* setup unittest via dummy robot +* fix the unclear exception "Cannot unpack *values" +* fix cli tool `poppy-motor-reset` and rename it to `dxl-config` +* Fix deprecation issue in get_control_table +* Clear error when there is no "time script" in a v-rep scene +* Fix a freeze when stopping a paused primitive +* Fix offset/orientation issue in DummyController +* Fix hostname resolution +* Make initialization of synchronization loop more robust +* Fix #155: Closing a DummyRobot raises an issue + +## V 2.10 +### Features +* add support for led inside primitive (XL320) +* remove RPICam and use v4l driver in opencv +* support hampy marker in Snap! + +### Fix +* network issue for finding local ip when there is no interface +* Python 3.5 compatibility + + + +## V 2.9 +### Image feature Sensors +* face +* blob +* qrcode + +### LED register for XL-320 motors +### various bug fixes + +## V 2.8 +### Sync Loop +* possibility to define synchronous loop +* define a "light" synchronization loop +* can now choose sync. loop inside the config + +### Better Sensor Integration +* can specify sensor inside the config file + +## V 2.1 +* now uses the poppy_creature package +* add support for present_load/torque_limit/compliant in V-REP +* fix a bug when using setup.py install +* add minimum jerk of Steve N'Guyen +* add safe compliance behavior +* add camera sensor based on opencv + +## V. 2.0 + +### Major changes +* support for V-REP simulator +* new controller implementation: [extending pypot](http://poppy-project.github.io/pypot/extending.html) + +### Minor changes +* Use of descriptors for motor registers +* REST API / remote robot +* Starts automatically the synchronization + + +## V. 1.7 + +### Minor changes +* Autodetect robot diff --git a/pypot-master/pypot-master/doc/ErgoRobots.jpg b/pypot-master/pypot-master/doc/ErgoRobots.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2c967adc50bc5d7b920eea13913c4167a122d11c GIT binary patch literal 31013 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

Bt68oU-`84 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 literal 0 HcmV?d00001 diff --git a/pypot-master/pypot-master/doc/FAQ.rst b/pypot-master/pypot-master/doc/FAQ.rst new file mode 100644 index 0000000..a925891 --- /dev/null +++ b/pypot-master/pypot-master/doc/FAQ.rst @@ -0,0 +1,12 @@ +FAQ +*** + +Why is the default baud rate different for robotis and for pypot ? +------------------------------------------------------------------ + +Robotis motors are set up to work with a 57140 baud rate. Yet, in pypot we choose to use 1000000 baud rate as the default configuration. While everything would work with the robotis default baud rate, we choose to incitate people to modify this default configuration to allow for more performance. + +I got a DxlCommunicationError when scanning multiple motors on a bus +-------------------------------------------------------------------- + +This exception is usually raised when two (or more) motors share the same id. This should never happened, all ids should be unique on a same bus. Otherwise, package will collide resulting in communication error. diff --git a/pypot-master/pypot-master/doc/Makefile b/pypot-master/pypot-master/doc/Makefile new file mode 100644 index 0000000..d2cfede --- /dev/null +++ b/pypot-master/pypot-master/doc/Makefile @@ -0,0 +1,153 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = _build + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + +clean: + -rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/PyPot.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/PyPot.qhc" + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/PyPot" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/PyPot" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." diff --git a/pypot-master/pypot-master/doc/README.md b/pypot-master/pypot-master/doc/README.md new file mode 100644 index 0000000..6f86de4 --- /dev/null +++ b/pypot-master/pypot-master/doc/README.md @@ -0,0 +1,22 @@ +# Building docs # +To build docs, run `make` in this directory. `make help` lists all targets. + +## Requirements ## +Sphinx and Latex is needed to build doc. + +**Spinx:** +```sh +pip install sphinx sphinxjp.themes.basicstrap +``` + +**Latex Ubuntu:** +```sh +sudo apt-get install -qq texlive texlive-latex-extra dvipng +``` + +**Latex Mac:** + +Install the full [MacTex](http://www.tug.org/mactex/) installation or install the smaller [BasicTex](http://www.tug.org/mactex/morepackages.html) and add *ucs* and *dvipng* packages: +```sh +sudo tlmgr install ucs dvipng +``` diff --git a/pypot-master/pypot-master/doc/_static/my-css.css b/pypot-master/pypot-master/doc/_static/my-css.css new file mode 100644 index 0000000..e69de29 diff --git a/pypot-master/pypot-master/doc/_templates/layout.html b/pypot-master/pypot-master/doc/_templates/layout.html new file mode 100644 index 0000000..845398c --- /dev/null +++ b/pypot-master/pypot-master/doc/_templates/layout.html @@ -0,0 +1,5 @@ + +{# Import the theme's layout #} +{% extends "!layout.html" %} + +{% set css_files = ['_static/my-css.css'] + css_files %} diff --git a/pypot-master/pypot-master/doc/about.rst b/pypot-master/pypot-master/doc/about.rst new file mode 100644 index 0000000..2def00b --- /dev/null +++ b/pypot-master/pypot-master/doc/about.rst @@ -0,0 +1,22 @@ +What is pypot? +============== + +.. image:: banderole-pypot.jpg + :width: 100% + :align: center + + +Pypot is a framework developed in the `Inria FLOWERS `_ team to make it easy and fast to control custom robots based on dynamixel motors. This framework provides different level of abstraction corresponding to different types of use. More precisely, you can use pypot to: + +* directly control robotis motors through a USB2serial device (both protocols v1 and v2 are supported: you can use it with AX, RX, MX and XL320 motors), +* define the structure of your particular robot and control it through high-level commands. + +.. * define primitives and easily combine them to create complex behavior. + +Pypot has been entirely written in Python to allow for fast development, easy deployment and quick scripting by non-necessary expert developers. The serial communication is handled through the standard library and thus allows for rather high performance (10ms sensorimotor loop). It is crossed-platform and has been tested on Linux, Windows and Mac OS. It is distributed under the `GPL V3 open source license `_. + +Pypot is also compatible with the `V-REP simulator `_. This allows you to seamlessly switch from a real robot to its simulated equivalent without having to modify your code. + +The next sections describe how to :ref:`install ` pypot on your system and then the :ref:`first steps to control an Ergo-Robot `. If you decide to use pypot and want more details on what you can do with this framework, you can refer to the :ref:`tutorial `. + +.. note:: Pypot is part of the `poppy-project `_ and is mainly used to control Poppy Creatures. If you are not interested in the low-level communication with motors and sensors but rather on high-level behaviors of Poppy Robots, you should directly see the poppy-* libraries (e.g. `Poppy Humanoid `_ or `Poppy Ergo Jr `_). They are built on top of pypot and abstract most of its operating and already come with convenient method for creating and starting your robot. They are also a good starting point if you want to define your own Poppy Creatures. diff --git a/pypot-master/pypot-master/doc/api.rst b/pypot-master/pypot-master/doc/api.rst new file mode 100644 index 0000000..01fe271 --- /dev/null +++ b/pypot-master/pypot-master/doc/api.rst @@ -0,0 +1,12 @@ +Pypot's API +*********** + +.. toctree:: + pypot.dynamixel + pypot.primitive + pypot.robot + pypot.sensor + pypot.server + pypot.vrep + + pypot.utils diff --git a/pypot-master/pypot-master/doc/banderole-pypot.jpg b/pypot-master/pypot-master/doc/banderole-pypot.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0b5a84573411ec5743a1a444ca2b31dc3c3a424a GIT binary patch literal 46004 zcmbTd2UJwg(l5Fv0Rs#SIm3{1&LA-4ELj1`Ip;8nzz`%OQKCqYASeg|0)mo30ZF2g zqre{|iju<{zq9Ul&U@6fPmQbKd{4p;2>uVuAcy)>g#tuz}?j?2*u;bixQQUl|gAahk7{&1qmA3J9^p& zIH6R1z5VQc?gPNT&iStvK>pXZD4da{L}jI<1jU4K=KpW{UsnFN)c+d%9ov6N92x!B zn1QHA{>}Th?!S4yWdI=a2WOk~fAbvj0ifj(0MO3r>{%0fn zf2sB#efSIiHLr1iqWl`5v=su7W0U}7cLab^5CIUYXSf>Be~+6U{0{K<%Dc<5`LB78 z!?^nYD*s;vI1Tp~9O&+f`pZ@|HbprG2Za2^xNG8X0RspDQh*Ym1DFAJfCmr+!~khP z9zX-?fDT{)m;x4n4d4j40p36W5DGj5qJTIc8Au1700lrXP!3cBb-){-1?T{}fdOC` z7ze%rbHFmN4*UcTfMehS1OnlM5FiQ=9f$?Q3E~Hdfn-36Aa#%)$QWb+vIDt-d_cjV zhoBfxGAI*N04fDlgBn0>pl;A7&;)1(v;x`!{Q{kXAz)%KC721!1r`R&fR(|zU{kO) z*cI##egKXIKL+Q4%fPR|Z^7N*VenV*GWaL>4+MY^L8u|D5J89xL=|EHv4prl0w58P zBuEaV3{nSq2N{HXfhD{r!NiY=tBAXZXNZpw2m}`b zjj%)nAs!>D5xs~-#3=~{i4ci4i4#dANg>Hwl1Y+1QaC9msWPbz=>yUn(niuT(j6om z$%Rx!+9M;7g~&GKcjO;33NleL12S*26tWt!Ph|g)&TCBmWrL3c@7i`>YW^B=Huh|yZ z3E5@XUD&hPd)N;+SUB`K9&)_onB|0X%5b`I=5h{lo^Ww<-Q|ksYT^2ao0eOf`vLb$ z?s*;rj}nhRPZ`e?FCMQ9uP1L2?>HZrPm<4#uaIwyAIvYs@6KPuKOq1UkQML|C=>WD zNGzx<7$W#ma7Bn(NKYtQs6}W`m_yi7I74_)_*z6##7m@HWKNV^R7W&g^quH0F+MRz zu|lyaafG;rc%*o%_@M;9gtNpmiD^j+Nqxz9$sWloDQT$ysXD1GX%1;S>8H})Whi9~ zWm055%EDw-WFuueWY6TJ^>PYzp=Yr3%Z6C`CKP z62)aDRwa9-GNn~CJK70diQZJ^RrXMRrM#yiq7tCeta73%ry8!>r3O*cR7+ADRVPi1n zp!ZH6tgoY=r9Xe0^S00J76ZUQ+aSwe!I0a~->}^X&&bfI&}hS0)cB$Cpb3SEtx1i^ zv8jq_n(3Swk6Ex;&mGb`R(GoJoZMBrn|XKHT-ZF^eAt5C!rh|P65sNUWu@hxd+PU| z+*`Mjw2HI(X3cGlvHoO3Z{ub2-j>wX-nP*WW_Q=F#_rPIz`o4>kAt?uQ-=dbRmWV% zpH66}Y^N<}1?NoXO&0~1OqYLL6GNgw#rRJ6@%zR3E&I#)Kk+{Z&<&^z1O-|Lwgyq+oT-sup5RBp zD8k`W!71of-W*=5EZpSf*HP?AjyEM=#?@;sWBn$IHhTCqNV26Gjuo z6Y~?Vlbn)}VxwJiOt zx7n!dr0m~MY@d9}k;o~|CCm-ZUCz_XYt84#PtU(Ba4Yy)s8aa)DdW?`rzb^DMU&6a z&+3Yqij#}aOWaGQOEpX1mT{HkJjZ(;@_eKGPWfPkOht7iePwdxRh3WG@(be^ebv&{ z)isPYX)nPqgI{jFvU)XMt5(}uCsK6o1R9Q#=0iXrl-vm z%}H-TZ|}c7XmM*^uiO7|Kx3eHPf@Zx9RUz-e znZ209&co)D7LW@$i;Rn9OT0_3m!+29uc)nzteULOtvRm!{1N!$ay@nfv5~XMvRVC) z*gqXx8e8Mr_qNx6`u)7viQ6UHeY(f9*R+q`A2~2TSU(Iny!n-KM0Zs6TjF=mAHzS3 z$KJ;mCrPJtr!UTA&IZr#o^M`+UgBToUGZMMyVkv)zwy4gxtRl00SNdn{VgFl!rcV_ z5&<3_3=d8~NC+o@!wHE=i3y2Fh~RJp8G?iqi6lc35|dMqBPnng`S&28znTyz0ZtJ~ z1Si6A{}1V=3m_u^&Y^k`5E}p{13}0@H+=vT&VdEMkiQQ+|ARnaJbVZgMgYfEYa;;= z7z%@cA^5l-+!qD{lK~JYD-4fZR2kpMp3R>^EQ)|KqqL#>K*gAfePV@1+#%qQIvUQw zsmf&%m{}$vspj|wcPM(Clk#8mKia{0Q(#;>c(^(NG7x~X4hV`nOW41<0wM#8LRgid zb&dQEDr{&chKdD#?P~}odqBR2UpA9v4#joB#IRq*7f~dmE{$% zkhTILq74=4YRLoespI-f0Dpib76Q6Vc-ROY2if)TFZ~1w-0yTNAtJ+8*qF-e9tcyz!;|G{SDEoF~vC1D0A!L5c<2{iwUUmSZcrTs;v zmKawr?&G_9h&IQ>L5fbAS6ni?7imdbeC!Kpk^uQG{u@9TBD=YTNNe;ajdNuKiLmY1 z0WF~2-*Hl{EUF0X`kBZ$fVZ^)agf0{PBASzXmkI@T51Ey(jua;orMck!S1DmN>FWx zXP2(1{F2WB=wo|-#W47_Jo*-C5AJZQWKd8@@+9-p8MZvScahoxm;HcDBT*0AoH$w#5_%j*j&~6^3(iHHs$Q39pD2`&0Vg}m z<4tM4n0kR5;Hi}Nqthm3;*EjvkB%SXvgabZdM6j>>K`S5*GE79NrFRLY1(ILnWDH8 zN+9nOH~R$8h>+vBFoux8J`we#xMz0lTO#CEsf!HMduk>OppaFvnI~;nz3z{ZB9Dhm z@X0>*e2Yc@+MrfZQGH-ca0^YYi>F^pZK%vF9it^wg$Es?yEc9(p}>L1Hon_N9o7Wv z4V6zrPFug~?E|r1;aw9OL4Sqy)Hg44YlDwF+mHauB#}B^q}f>$0}Y{nBf5MWSn`MG z7z`PQIIs=D=ZZzT>~@rW2f&cn58X4R4cD2W@ncA76rLM&==i(`Vt!?(ZUEJbp0P;AL9fN7`=OTBIeM{oa`eX{5jy-qFv?xm*o8 z7Wj^N&-n+u8(u2XS%FULL6UvATK3hFj`t70=w*L=1N;ObdUrSQxP9!i=jRqyGCoPK zm$0hL5#b|a`si}na3 zH3l+_8bFi~Tf!Z1K{`NPG?v_C{b-g#^7K}Rk>H%$o%biZ)L z0psj;*;y4J-SgZVPr#2RXcABbG9r7x1k#F!9@Ax0=ElNgy9zoG>dKd8KKP^W3ZWfC$y8M`%9iPsq zxll)LP%tZZkP)x!c4Cwtf2Q`@pz!ZALo0pB^8StlC*VV?iyqc# zHF8Y|hAzuf)ic7drJd9b?&?Mxl7wo<$1d)7CX^wLMG_DlMiJj*yW%}}K~U;?Y>WLa zCE8CZn(7z>Rnuhw^F;M`^ssk8a~C&91oO-0%wi3YY2QGa41___3@So^oYCTu=ae%nl1&m9GJlo6zAfBp_$0%m0xX<-inHcX*9>2Mavo1gZr;n5d z?GyX-p^4!*%}LT(1xp>tj~TMT7)iC|rpTQ4Qp)?g1fjn#=>pex)AmiiA1BTYv123Z z_q&=zwp}_b)cUZ$rZUz!Aozp@P2zqNcl_u|3;o8QLINa1FouA9KOoCg;=|g|;)aDY zdm}m(5AgRfc9xeaKTvB2iwq032wp-tP(T@Q@>u)#QS}{XQytT`s3N`wvb!@+!ph|Q zGh7*afyRgfr1I`A>Ffkj)R08T8^oj!DOLQM$ONit&Mv$qDkl#`T6j#a;0ct1mhx_{oYQeEBVxs1`j1Ag_ z;Vaq1daRVd^6a?#+Z;0O*+I{4yVdsA+RI`faS2-etBP^}|nm*r=Grll>g59|_P6@_>TF8h4xCJ_@< zc$VY|AjU8R5bd>X)^fl3BTA5Px#-MAmojMVM@Ryv(mW{=pZ#oBFh5hV7OpI`772!C zi3kxrwpr4m%?gX_xKlXq?e@TYW-yJ+2#&X$>`nZLNV;A12T5;H=|9|QxG0OCwWr&=A)WReCBMxD!~uOS`N^?TAbaBhiXdY4{QHmqt~<5 zTd`RoQwmD2piH-mMi&qDSOP9@;mxsxV2cBeWAs~vKgBU6H>M3ix*8mOf!6m4v1oe- zo8u&QZI@Zdhs@EiJb2^bR;3Ej81+R*M>t@q71Ze7<051R<(XP zBm&LJSXPVxu~|Z^FH$_FjiF0ZiC=L%4?5kS8)?dE)kci6WXQl!^|FxJ@-)W_63i9j z)};>ZjsTWiv%=qraE{z13~ZSoQ@X=?&P`d$d(MqOzVQ}{xzCq+WMh^5@d0x2Aku8~ z@E)R$75VwBOVuL34WmXbTRSNS(!Gc2$#RKxL17Ub#l5e@N2>C*p#apGP_mq9mNpiJ_Qgz^faEy{6 zL51%E4W7ftN+^^j;MPN5hHgLBUp=5Gh(A6lF+Kw>$O>sl^05ca>=NUyY#EMQiU(cG zKHhHl+iZZ9D#O0p!(PY6c&y$VTH{1D3D(&H~jq1vumGe13ql6qOnXDEsBmDPVgs-IhEk5;; z-8)IgtI)k$K0A?Yasxb3H2tiYEy$;&LhMX?46{gbAnNDgG8w5V66Cfhm^JqrPu%+Q zd(Xzk_RE>fDW+kJXPEA_m)_LCUGdGjGVVTul_Weuzerk#{zMV4J~{KbH6zSpZK zlMnHkKe3#jNVv{EY>y8=3*r@bAG!fXv^{e-6ON9SbZUM*CetqvNqG=2vP_kHD%LR*%X5*tt|h#1}~8_qM+U^U?vH+a@&4DgRrT47IIS1F%DXg+qjc6`=< z`cI{y!Jt1J-pk7e(I?c_9hqpIF8=)}``g(d%50rj3Do~2NxRRjk&0%C*JUWP9Ew#f zy{((RdK@t!Q;F{PODV-}^3}YvZQr0vQs;yF2FGhY4~X z7b3xCV#W>pAgeV20plAWDauf})rnI21{jk3tYJ0C>mQR-@7x6f zcYQ)qD~<~@l8yhAe6xR3<7_5O*xOGz!((V!2_0#ABc#P4!^|G2TlxG3NRcpW4sd=t z`}A@33QV!ll3YmhM7-w90=gGAj>n1Za-D==Fz+X1i2ihYb~=$hbX;Bhna5xUGWyfL9=>?6j#ccK7M~$ zG5#%X(^~huM|$7~cLg#5IG;S;m%ayWnKjRO!%Gi|#d%i0N>GXi3JNq2m%lJ=(o?A% z=2wZ<*snwW#wX5%5g+nGdQ)7tjD$u2gl zdbkc}Dar?oX7FtyFkv89OwZGU5f~b0Dxj^>Di7UJ*ie>*j&MZO=DcUclFO^oyf;P6 zlqm*OBj!bv=LI#CV@BDJ#*9PRz2OYI5QAsrDoNv+Pk0!xR%sFAN$U@l^{CU5#-1Ba zX}&#tDf^(0TCABmZZi zL6xOmIk?x5?ZUNdJu65J8M#inv(Jy*d7X(|41jyI`xPDWl-?+8xm2YX!}+L#v35!B>xw6({1CN z<$50LVy6y){>*d7;s=2#e^@HaUD$KC-;6$5J(UdB98_`tYAk{u)(hiY<+Tc;$_y#;$n5~mE~1E zTPFE~OMSg}j~-M?KHq;sIe$ulnLqb;1PLho+?4oyAxzCeRUoSEc#4XHQlu{PPCM$_* z>$Xm^ERyMxYOT$8F+X|GcKoO!CVi!BkAP5~8HMtYj~anCj|C8QilUOi=IWp}u3a}T zriDHudMyJ*OFV6dZ!>S*Ttnm=FM8qEFOl#`=h3=IwLsr*d>ct3Dh8EGMH-`ON0#hO3MgCvTdE9@HS zvq&+^ZU|-Yn-JJ}re4~dO=rWF6qef2tHR(v-(`$Qw38xJ7qUHn7)U_6N2r7g8{Hc{ z7G+yoZ|Mkdlhdh%qlw%bVxfX|3~9(GFTiH@h$tcLIe%i#VFm_O6)>8#j~;^`Im&Tt*AZ0u_5ssZMmg6pj1i5^1GPKW2SX_k>kXZAbv*tDy;8i zShCNCz_ITrm|!jvLx9>HOkH8PoKtU17a->H?+qkE=J+xn|w;n7$z50yfgxB2$hQc9?(ZyHu61ow8{-WkJMZvN0Y3i1o+`Am9v-2 z;JXpP@drED;9LSgSy$itfAG z+4*@xK!~elfUee&xP$FNp)JWl<`PBK7Pi}~E+Qfx7uWmjJC<%|ZWr;W54E-~ie`ES zv`WXR79vX1`urgP3ep|c4|MOI_JE#UTxS^U&Z0mL45^PNX6ovy`>L+?DzwCDStoOd z+3O%ht-G-JJ+>Cc{I%E>im5%t=4&SsG($LB9rIEOH`|CXW&gCA9ccHo7vR+U<|ZT) z8P-K>Wdj9rIz1%}Im$V?wd5Zkv^mU+B)JA?3faKEB}lg*5Q$L9Pvmy~dU;%uOMhyGyT`qs4zr8MF7m$P*-8o6Ad^#^*EUT+?){^Fsp_7QrS zgMXN6{8XpIL6ugLPcj-)Bc2;f*ZrV5>(f`vc5<#fLFgjH*M+&m&Z0+ed*{={tCqWY zo5ojjmu{nmdEs&@LlO^r{kIhlV}k~z?DHvPR?doPhyNLLf05Z#_t@Rw>@h$@U;9Gx z*>}-YYJr~BgGj^r4e0xaODW?UwSJK=}#e)+@Q4toMwH&SaP3n)0__6uO{e;b@4nF?99@{QgdyT>$%TKev zxMo!=i#HYV8potl;_V4Js=M<_FU+gU(}Yow}5^e6ES}cntLbZ+HhkukqI8R33d)b`|y)-C8u%au*#q_2U0V45gy?5 zk%dGpF<{bXa-5vy9~2MF|HHU@JEz7~pSS}#bN5OPc&Od~tV>6A&-x?gfvL7&V7qEP zl=>PRUKVE>pez22fbbw(cqFK!c{}rWuq(rm-N7h5nTg z_&(`mB?xWXA=-|l&D@NODuVS8457nlv6QI23`(K)n>T!|m?6*i`a|spYRT^AivG-{F z`Z5-gzoQYuR?1|dleT}Nv_Yz#0T=ybp(tQ~7aX!}p$-iXw%th>5^3>9G8x>Zs?q1ou`}w*>YjeKZ zVMQK`-t9!ZUqNadAAzK~E_(#NC%MjGSHXavFLj0h)#pC_Hc`9w<|T}N_cbk_faUrK z8`Eyz-IYbKbQoGC#v+!B#QVcxq=@e%8KgH9i8L2QEhXqFW_WvM+9R!J!9>XJ>-5w! z>SPD}Jj*b&s^7>`tk7pltNlO-vqJ*Pce8_yQC^*fbrCPj5=_ttf_KQPQ$G6^3xW;I z@vYZ3g}gXuo7<~k)~6N)uzaGz4fVg3T08`ouXfs0`Y*mo`V zc1Z2JVD;^c(D z{NcSovr&F;NpN0B?ewQKJU(vXLd9{;tU^ZxSQ{FI_ead0B1^(LL~Osb_`1DMg!&E# zQZ;8SMI3O4v)-M#P<`j4o+b*whL;)=h4!RHKb0+8u03`L%Gw6z8s=4qn5_T-v)-Ob zD;Ab9w|Y8(rKemjkYrzA?*@=g10%Jy1WxAFMceo$=^5|>8+SphQlW@GYG~UHfGNQ$ z`+f5~j*I#<%l)os1?1elE9G2O| zyczg3&5#8kj?5WEJ0v)}=Mk-KaW}x+nX-3ni}xyax)Ez2Lf-X)GUt617E3F;__;}n zgR;^0vI&$)^dh;54OAZ3KHc(@NQ*vGy+7)5waZ9p60}mv*`v(v=?mm@Hd|<{UZ9n~ z)^~2Mti02Y&OfmmTV((%3k?3jKH|LHoi!pw{YSo@eGpSc-*E#l(*^D23byZ(MnS2= zHD}4D-wuW>(u1|24H3O(t2~lt3&ZI0YF0rP+#XJ!On9Q39X?1kV$jWA8dhv)-kv~! z0#oW2Hi0;Jz`3H91SpC?;c7_YL1u$33?325rI|r2UBt?a8mBd{l_*or@E{?Y2ND=Zo zn!h{0CwPIqBf;PtzRBc;WoJCL-bf7G?gz+m9xdf)U(d9fN%%CUGvYv0=}Smd6Jl0lZG+ptVba{D+C3XgSPh!#9 zlS?_{pA(&0gz;ZweqLBk_~L->B!$RnNuTUemh{Js?BZpfqkU`3YG|c08KS@mu29*T zSewi&XQhxt6e8Q!O}QzZa=ExP5j7KY%ci>xw{~Sx5|R0?M3qwuX}5HU9p6$Hkp~;B zlN+nYTy$|kW0#(>BD<)CsUpx=j*Pb}C65(iM0X%Zu&CDe*BQ=Izq~g%l3SEsQFBq) z`ILeJ=w6RuT-$Ulj%UeVLE04xD2;vVNqwMfMBZ()!up9#Y=v8m5>PxKT^J+L5Wdo2 zSJjEp>uL~H%Pj43Bsy!d&?Ra}bRh6P!R82r3x5)+BbXJ47yk699LeBDAan`XhrEwF z)FGx7!N%^} zO9?{X$&3byI<@pR=GBq&3(KhJtK}C83w=2796(<2{Woo#;A0L_d%PuA`3CK zrIN$f^-RhGhpJ7i#8$qPqKmZA3#Cz!Zde+TnU777P}jIFv}ntP>eVuS0@ND+SV6g9PUGwL)AFhcYk{XtRV!5lcFm+(cd{jq@gR7g?+c4LJw@BM zr6J4&J|%t?ME}f{RGNQ8M8pn z-s^=2oglg~)4OI#PR#imx57ErnoacbkGSyirJnLoR$K3po%Uaq21a-e7ugi}>3vEV zugoPW%S#OK$j*1?$fAMn8o9^_?ZwNAE;m=y?qj|Hu(<#g|o?%Non4$~?M}1&Ntm z9HFc_m+Yle5%s|ge8KG^#w%?()tF!szC^9wN@$%*1zkW=M)~7l{$~ydZq4|+4koEM zU-YZlXE?vuR=JQzQ|f4Tw7J6QL{GksX*Zu~v!D(N%F3x@G=rt#?!v9>`7cH4a<3{x zE{&t}C8i{QxmSJtq@NjORxM868xPWF%vY^&gD2u zXyG#p6^I`@avH75bDGjFvHuT~Cae2WT#E zN5)UBvOM5bf{D|Xzs82CCxjD68l;?dhMlyoy{sO3b6%Z#d9QzWtwV&->KY01_dHF8 zx6%MJ@ovMLu@xR9MVhnJnY9T_*hR&-KBeUwK>s}O%R>{9AWy=P=CgK~S+KR<**cL* zx^ql}mmA9HPyuR_u|FER z1rIdSw?2%Y-Fx1uR?|i)$y-&`@5)sj$i-I?z@=xQZ6QZ+>Rw+@*kn|?GrD&y(j~Ag zwbrOP;l4FClPl_SUYEOUcGfApK^Gk8w{5w7p4KsWyIPrdQkgS4!L?z>MpWR*IQ%qD zw2;(LoKS27mdTY*`~HDZZ6w9H5ibW)Cx-8m$MWEuZ#GR=5*xP9n2;eCH1>#1Z>Evp zjI*RxvmIcTzW>jdu3S{~YI8X0Sl$44((><(x(Kq=iKP3DKgzaEvnn{QY@^(U6#J*8 zb!(1-sRi#A9Ev{Gr)JAuAuPqq+WU}k7(1C(d^@JRrY{|Od-=5qjQ& z@GVU&k}&y{FZ-ZrNGIq1Z|vqTvJYc33`}LupBERLx2M19JKw$^EavV{|Af~gr+!Ol z>x%7R`UF4|Sige1O#&!tEx*u|Z^h;JpVMtqUKco1O>9`{=zRu1M-==X)&laQT%8bi zxeIN?iN72hZV%k;+HUxv+jThf0Pf=K^ooI;N_;C*(V^{uvi-2^A%g0Q;c)rOA_K89 zeI~U}F*L_ zf`+-*T1gE8HCPKosZ3MC5IW8y7wOt;_c(ZC=FXD`5(Y%POoUdOWtbJ>P3@;siN_w9 zX`2>_I|)WNy|7M3M$}9F!#mlpw&dpUBb|V>F;ZTg<3R#yzdp71*x{cak6#9pJS&!1 zKJEGSo{7qa-AvBx)=WT61i0U1NpMzvS^Dq5EodY-ZJo!ZN#4mEVTczUh&) z#^FPF(0%!xtHd9S7Lo)KUju36tlB1(|0HH^aH3vSWmG3FN}LuO{8WCCPMP@yWF9o< zI19UP{^ny?R0J#5SjSXBvn66&H($sDTp>t7UYm5g^tW5=?F^YZtE7CBulySXc~5v1 zml?vt)E`f%;hHF2-R z@2IH6))~TSb~fF5f2V0da^Ch(>*)|o7NMe#BZqkKj%P0;1ra?_Q(4|8$jM^sx3Kx* z^|C5=@DI_YStPV_<<9OtRfQUpp3U_^7sPJXV%nPsl}VC|w-%@$BX?rucqg?XMTXS3=RH6p=iTMA$0|AN zpX?Z#VA2d$d%FZ=;mRkt%;d|`!AM*tkO)e$I6+fKRiXCnkN!8hI`_W55WQ3??w|?g zDWC4;G5ZKTbQnKDEhM&GwM%bC8=mIbr>d0ek zxriNvA=jTVMcY}%aIQ(4)RjbjRygAJIw5_y>tT3l4`wLY7CgZ^3c%dq^^09el7pb1mFxR2`2uN4oBkCvbD$+yL5`&qS zshcc#=^5wAmPK*l_c^SAJVAX>$pJoLtWTvBE*sR`EA}5w>BiI*=!;w*?_PEPz|dLh zz8ZL4W-Z#CWN%|UPr4=RQP7M0osJjO(qbDqwH^~JTkDEgR8k7mUR?byME?jTZQ z$%H6zThfUr%En|%SqU%A@qKcuOcw8X6)Jfj0r^0RBdgt2S(5%jA2!O&J;i#85^6%J zTStU*3&+WK%f%9X!<6f1KK@WAE8iOpKZ*6~qegjCT5d;*Bo`&lf=zSUIy-LnYx-QX zr*E@2Bu;7zAZ`E|3|R%bVYi_P1tB+G_OcYf>bI?RuwQ)&E3^cO?>El%p`r6$H$ZHF zDA)R2pZ4#)g<4zypjBu>;JNqvvixN6aC>SyrUYze^av1ZavGXcAD*HOElT?)0CyG8 zdY`8v#agGZC}8sgm!`@Oe81H-X>o!eSoqj7QI@?dJAImHH%Eh2FJ8)1iwWz6xY0&- zK(liqbXBCvh0P_Xxt~OhH$b@&!~mm)4Bw{|Otx9H$6u!S9XGHXQIEX3j#`$pUnt-K zV>Xb~EfMzEIW%HKL>LGS%h})|LE$eQ$1Oc60lYNEaoK3kCeSj-SW%$&ne}VZz*Q2a zT4FpcEdA0x)pQ;j4^w5|fW>!-TPOul`5Y233lk$3PS3kOhwY#Ck_`IU#rSO;8hrAu z8!uR2X-qwhj+S96i~An=I~Fn*)^D!lV+Xa+?vzeFOZlTq`|(P0>#L$oeykb16-^bu zxAo-~r?!qoZ**25Jz48?i0D9d_8ZgMz#lq%ZNU{B#UiXvToub)p56c!d@n`rvZ`d0 zv8g3S66$5#06Lfx%+Nty=f(po#ex{-VGN0*8Ji04wx}$0G#hWRgrxG<#494o=)#zf zyTs`kKaGtqWZi5tvNx>$5N#pPIi%4`SVqdEfowk^De`1?Unv; zo8yb&9?@qx%NEh$R8#`z9<$Bvg#y)FOT2#c-!~LpNS?s(q0ETBK!X=AU*#YEUx}pY|}~TFS=j>p2>boVwlU{3?|G)Gg0nPFu`L2O*?aKJtcKiFUe3ciUI* z*NK@p(08uDjvN%}P~*fUH$4DbZ6)RkYUfK?%+C`+ekGhO7F3qS)mU3|{P|eSsT{DO zYos$?+5oj8V{HD~JYC_nqe=O)$i&3>y@~6nk?{sEHkfD69Jpqqk5f)vm2H2S|DlEE zHiMCE!nf!~19d@Nv30I)Uhugw=_ZTDrq@i;j}O?1Z!Sqt`?EFr-mK^f9eYFfo`i3u zgC&`o0TaJAY)A5A_*QxQ-z*B6#oejEGk;NKsMB+Mb@`YKbL>1~QPX&-DduRFS7b=9 zHkGsLbo9z~9OO$+BNun{Cu>1^_a}n7d`i@} z-|XB<*tz3!X@Y!Sq;8}gAA4I{+4P+^KcqVlbLi!RyPrTS>ek!h-`Q%Ce!U81q4|9p zu)b6Ca=Vk#AfR&bqF;x({^Y|od!|}aO|x5NhFDM+W2I@cK-4Fv=zDDm+5l`i^*a6G zu43sZ9X^k%OonTEPGMOZeNhGNtrl*f5!L@KA?j(%^YeN&dx zXX9K&%aJ!`BFJvlmDJ)u+C3`V8*b#~b;asJZ_RG~*0;X3lo_BB#bd-s?MN5RVi{h{ zxn5W8^sqD81sA^}=`1&E$z7e%1f}g3CTyrT7_bN^Y8#@TPHZ5iv}YBg)-+SI(dniQ{{D*QQEj+k8vQy&wcdFV&71X^Q+CXFRQeBKA--yx=^vT z@BLF-BxYP;AkLLt@?2*qK}Z@Dm2ww<7*nYrRBaxV??GApRowV@j;sB~06TJ|Ete*} zz{^(L(LD9mn}4$IB^tcQ$yw*M{Ae()X_@n;F3X~#x{#Isc78EJT`t~XuKz(emrXIV zTd^61OsIcK-|csM4vxVqo8Or*-j-4Csw*3&t??9NE?ijgtJ}gRpD1c}7fm9bm3Csr z8_9&6nstp;vP9*y*nZe6z#G}G1ahxhh> zBu<5RWOvAqCaFr zlI!cs4RPt-^^3#~^nJEzEm0B@Y|?Hc!{BjWcG>#iD4I9gdq^_SdMx7ZGc#v1W0v+}4+qy>k1 zwdrzBJ_3KhW9jE6$uP&P{cmyl(kJ`n>18EDd={7B`h8m4*I2m4bZnAqYoy zX6Eue%wDkY>no$}_XtIbr=kUF_HSqojg;di2z87y6)rgtF^rd z&f0Fkudt>0Imx!I=~3|=(W$kwFJxJYUWt+59JNGSLUn=K-#V%})T9BsyKun{x!ftA zQe0HP#U^o0M&tenW$UAW1`e|+?Y_#yuP{z$HithR_du?~EE21jI?gl)Ntprhgt6Ck zFKzp)YhKv2Wo37HSa!a6W6V-d_BMcYR_Zmc6R)+@=OU4znIqvzQ=z)JT!yLQ{|CW9 zKEJw5Q6!WoA#NO!0Rg+lw9Odk%(;@kGYl4k3>DQPp%{G{TAG=HN5hsk(dmCKc80b^ zOUM8lr8{}rKCJr+bu&NH=X$=JNX+#~%QU%X8^xqys+TL_N~=nxEKLVax79Uf>L8P} zeBGKe3Cy)}D!;>I(flbQQADrnxGroyf->%bbzYC6`RcDZSKw7Rth$^B5W&9fPc;(O zl~nvTm`cbDpNDa|dugw#^&rIRU0nKoKN%gah#`!%C}=1#Qd9)@&Fp_KhP!}8rU+{=^~h+MoZJKuw`GgUUH!5$5FaRl(6~?#%5ArwU{j-lUIe* z{3R|~6F;nJLV-S=g^Sxs^hc{TJsZx+%%clNFNM`o&cm^ME@Ig=l#^_<0&El*6uq|` zxZ9a~s{a6G9+Kjdv;P1|@}_pgGjzFA5r$G@Y66D~nzWIuFaH3!r(j)1<+qI2YuhNx zCnWTPqy0Ri$GT0F^F?-R&)A+$#p>}2P-f_pTQ;0bmaqv50$qo&alCW&->3Z}smR@7 z!ZN2y@Qkfp(kxbjO&%kMIGJB6dL=DMo=Cs^(k}Y~FB(@mb!P|1x((C3qd|#RD>r4# z)r#Zzl*3H9XhP~&K4iJl=BQ{|z9ht{l1`KD9o(zc>@t5uy48Yb{Lxign={Jr>D1F| zWvXK9RVP4NmoX^_NeM{ZtRYbe)|yFa2sci~JGdQA6^CPV71-Vr{wask)XJSzMXx}q zk`xN1YW|%;!|?Its}#bDh#18I8@Z{MZ_YU+)l$_JecHA}{R7qT<|Sbx%M#r07qaQ~ z6q+xye^xp@)vV8wIu~1$vFwkRQ;O40RyMilDwwH>LHJ>1BqYmGWd<*_V?SpuisX)= z;5pwq=R7|#W3<^r;38gM%d=~Kmho^(yk7-|QN)ap)&*VSP(9Tvbdo)L>ptrU2c6`3deS&~$?5>k~FD20`&14$ysYsSsT zIw|&I>3%0Gr(Id!-kPDUsMoadU&UtQ| zDCD~Q)t$0-dFsvwn5nTDn4VgcluKS8CSaN+)TtzeD5(i!Yw!Ru#njG)V1H>G^NIDJ zrrlf06!;Em_*J;voMyl7wU{*j0K1}G)R}Da14~H((m{KWLncn4fnc9yin^b)jXyy1 z25L0)wX~BlDtu;+Kw4+gd?PYk)FnCrQti+~LKlzELnJH~Bj>Su7`bU}4 z&XnUlTE%f(I}64ztSuNd2*j&uu_=WTq{u2M)JWsfU$kM2qMw+#^R#advepZU<{Eyk z;8-mZ>g((BDyiw|(%PoYRLP+z4q3_lW9NFi^gfr9la6X;Zs*6lD8KUQ#~%FRC5v?n zpqaBE;7QF%#&A5#fElTftXBo7__C!;QS_o>cSDu{xdir(&Q<#|^~z6z>w zJ!%P$$Sz{+>B8-2VVN>T4WkswN`;0GECL0H%6sc=3#V)jv%_j+bYtx&0k5 zIeu)s$2M}Q(L*&!N|dmIyC~SFN>rzIAQ<=ar`gM_83zTMn6nmElyK<>{OXzt$#qGm zPYRk6#Uc4(J)?i1RMP#Zx(kG3^N_sNLx3imF(@%vsr#JsEGYK?Ot+Z9e$Du9Y@zF( zW5e-E3|5~2nw)Us((0tmmrQAuGGdTdtOOF}B`0>P{J)k_ z)ZbU_xaxNeM;13z`LFnm{{VKT$$b{;e^D^`xVB2kmAI`WnTAT|N|`AL_<%V_t!Z)` zM~{l+Jn4gGd3iS!%N5j^Ur}d6v;A_6RBt*gpsFm&fLc*P%*5>Q}%r6Msm!Pr_Ic?nC)zwKB}lIc%8M46$NEn{@34qiUM z!?I={jP?Hj2J8HpL0MYAEzHi7CxPgfStg(0%t7JZNg#KA(eg$mUt5_mio9BUxsxif zTB)^4LP1)!%~@WQfpSKs7UDa4KV3erDu~uGGx3z&$NN%par+|w0QEf7hj2~9arwq^ zk+RMPx_n-zJ!Nd_s(H9trr^`?%qFE$*HwKgQiQ!KmO~IhAm4jN7_l;1l`dqmg(Q>^ zpu{tVAneRz=)bbJR=S&rbvG_#97j816*+MfRaD5sCMHk8M7dPUGSUb@TP1@!jBoWG zPF^ohmnR>Hx$a_WJL+mvjxoz9jGs4vq7s#ag$4@a)w2il#8k;@mam01Dnf?gLrQ>t z#__iP&$+KBWj>|i71_q3mW)(V)ze|vl~p(1B;oanndqG{9Do4?@!{hu>-4U*SLNI? zW_8DMwr0zfScIfd<{T200V$fZp$M2#T_e=`PVKwKIX!gY>SKa&h>7zvF@IfD*W%)S z7BIX$(J!55PLU~MRLY4m)T8K@xrqf{!0!}FQb=+b-TwfVkEFVt)k%E=%(J>-le&AB zDsUVUjzPqeUqkV#acQcQCQMSM?w14rSzGOB^z#1zPjXHH_MEB1sPgS4Rs~g)DlyJhAZf>r~S${8P44F?wiAk!#U>UZ%E?}9XF45CUnIkk& z$f2uJmY}Ip3KFyZ(vCyr9!)U}l;kvkEoK~$<#sGsu|0R@3>M*D#tuTna7n7Uh<>hgwX zmnc*}<`w&MFjr_!@hYnm20t50I zB$m5*F=J6vHjx2$BU26Gp(oOI2HWuxZsF`LV-`U!liz4WYHvS76w({IK?idQL4}RG zyjU7tARivk9W7+`X5uA~<5T|tN`dnR_U*mnkdi=80EXf??pOhB?(hrT6KF>MEcT0J z><#vbxeV{)v5FyqW*hm1r(t_Ljw6wX8$W055=ehg3N6G0d3$f>4JCt}zc`{(pFup|-Q5qCR&&=N`9n{Np~0!ZibhEiScXFg(D%zJJ6#Q_W) z-;JVs1Me1WUdOaaN#6YX#1bvPW{DsXZ)mj-n1gnNN!rcHiXpc)fQ`r(iY^Ako!^L+ zZFYX}6UFWC1=#Fjh`X!4@h8sE6Wf?YxG_bxXhgHN{$Qyg>_wpv1){jz#Q7o+gh7OF zu{PktF8e~e{?SCW;Sf&3D&@$9q;6mFgbtvwxQA{806a15evkuwVT<$ihAd%$0DFtW zXFQlfD%`XJ-uE$9ZP~j($CzVd;sJp6yBK4+gx0ubhuFLW9EfarHuiw+zYxaEU;qp| z3tQRX0h-r_Ie$~Y2_(Z{57rocpYniz)9zvhLD`=1LCvkOgfFDLHn#iO;21rPgbv`7 z&oJANF95p{!27gbOTzLpF-+nDvU61pALTukRI zQ$J107@c5Bu?iXV+S4*<02NA67bS;rwW1L5x}lSDth#)opR#=sqrtOe)XSNNsZJzM z3mVX$1Zw;(8K+b+u99@$J}V^DbVmWMqLWKaK5cS+H9$-Roi3fmlYK%ko}=g7w~kch zERm7rPyYbZ`EGoq%AY+tW>n5p#Dz?5EdK6eXm#7CIR`U!GIlABb$1EN)k2PzU0n@q zzw-pNrCL=ixN<=|gR~@T+||rYRxtf;w@ za9p!GmkgquutA&*#FeSLdJ^AQ$vTVCjI)jPV=!i{ORITqgAQIODlr;K%F|U&Qi)+w zwCcGjO^bh4&=_tL(!8^ldiO7;xy7*@D!m$MDh$O-Buz;&CVE=#k`ED&8Wt}$_!K~ z$tYPJij;nl^i5VHm8kNzEB2$Hn2}$LW#rHbW&udASNUtd_Yx8h{jeV(_9e(~al1J$SL7L?4LIVqbl)iFRRX4fX<{x2Su zVZfDuR7;Wf*>xgpy4y`zge;5`YGm*(PqH_us$yAqW>5{(8chlv46Dgk6G zLQkYQj`u+@ey~r)Yw@0t*3u%fi6}))Ec%2bR3T2u_-nMm^$p%O&sH*pPBqeOe>e4a zAYge*H({Y4;guMC`DtDzum1ooa?(g*NgI}Tv`3q6x7jBG>1@gMweoY0F1*V#FIA@# z!=}(D?zFN=0aGPS(CbhDTT$HjjXj=ncSW!)wIaW!{aM6wEoqx3T4-vp(N59`yuiH! zVRq&-Ke7z!fB2D$VJe+16R}(ZwvLocTWgxFESEgSx6K_L>W@yc_{4LDPOQS|sg*8? z6KWMNMESZ|Aq=8OQ5GyW5bTykl6q^>{Ch1^;~BrMcqUe@t5n3If~H2fhzU~#Eb9yn zh}y(QlhuxvV!bBBD8+6oMT_CMoiE?8{7!|;nwcYV1=x#O&f+(|XUlohBV~M~zJhe) z3C6ITOA41$UyLUTmx$C)sx7HA9YCZ3vje%=uZ?}I4l;UQ(wW(p1x6K%F9NGoZ5*m` zAXCiJjYtyz0Hg!N51Dx=`zz0(!!XQGIrWbuCHb=vZuo|tDKyC%p(pY0CZ~9POI2I2eU@P`(B~3PMT=|{{Z+VP5XM&{Q5`F z(@<9;YBYsBwFc4;8#F9^ht?mm%?2!tnv9{F@*V=JYylE##YI=Z7>x3ylTwla){?{p z9`W*SGlj1M#w)OS^)e^TpsAZmxsn&ERK-hKNm36fEa37QH`m&)FW2LkZ%DCP915oq zpjJ(nP9{mBT|z!6T((Q4C5t-)ynOh&b4aCAO^~SykgWz<<>@lWwvwI**|>=^Y>)?F zS~C8fbcd*YRjI0xk#gek0Z7K8e95VkB2(-XwQT*b^o&8xgD|sNH!nr{#guYpP|Q6% z>P88Q&B{57u3c44eicxvYMM%fp(qF9YDg*4f$0i;>|Q0&<%;ziqFqVpEj=w>d&}ve zky|lRWKNe=E_}7DB&ehmm)H}uc$uRjW}KNX3!9m6rBTYp=>Gu3C?Cz~+1*s>jsYj9G`&>mXH&5Z*O87OiZw{Y7Qc@{RI(C~q?4qQR0Dtrd%p4R%);w> z&-PToh67LcoXgWJSNtpC1nN@gYM4nUohc?+C;tHTn7;!^*JOO#hhR8HXT&n~T#PFp znq*;hgrKIaV|1V;MSOCQ4+O?TKcL-gro-2Y&FL;_MHIArMO1ywDgis{(iB$T`(8G; z+HF*MZ$0$8qnKKnn<7%-6q8VufBsC`nI%u$fRXlt-#t6(2l!~k)sV9) zXh_xfgM?HGdRua$iw`mNrVWv@yq~u3P?o$Fo}yk`psB}j{5?npT7Ob6%PwF-$OCq%j*M`fHBkq#Yph1=q@bv(YTjqO0{{RCB>Bmp;-lykm zGb3f$a{l{?O$gS%l2oyE%wL42{{VpIGM>89be{mn>2hC7spnLuFA0=bmN`0eoKmDI zmZYQQ2}**J8_Z_^0At;Bm0eQIREd032gvj1VZ;wmT*XWaZ=|$G&uAazpoOVHDM@p8 zw}0LiH%CP}ant^>Wz1I~NnGqRsNqv9a5|~8&)sn(B@Ss6pXgPb8i<;a~TV``T%2TIVdAc7CHdf6Wv#B%0y%h`honz=QUIIR@v3r&upJpiZb z2~V<&Z6CH)2}6N>qqA*39)u+|e|E$c6Y`0(r43*Wh0^~3QhUVE(u`OKAZ@6bXDXdkIdDpqI8H!H(>VrWwT2eBXN@S6sIhG%8-UOyjh)Cmz;1q|{i`~I z)Qp`!Ash!P<;)hkYG&8Sz;NHXn#CZv_@_~HxVYzIYaK39m4yW)DJmYWL4O>>KBg`K z9pdz;Y><7ThzUwlr$_)hBnBTwjv17+l?z1K^s*++P13c?N{9fsVndIlbC7hB5>21U zfk|&ru^plWrdVl#Bpuv1C%jy_v!s%#GiOUGODM}(Ng(i9trC|$q>Hl`cZyf2fZQHo zvUbS&b)WMuOEabypE8|NWMX(?$w69PT*+z-xl;!yP_Z7za3i_ZjL(wurh2Z-`5P$A z%Q$`_nROHJ<2&LZ6^aDURJO8ZsYTM8HQWMY58b1$YTSEJ<%Y z<7MLoto;l;sQ(y5hKlIi)PBZR@x0!S9cg})JGj4Civ5`ywbozx6x2ccOdRMhhjscKQ(g3zr$`*iMO6e%R>+!KFj8s3oLhu-)1 zgz#|AAGbJ1xA9S5*!N|36We9+% zS*+i*B!vPtFEpz*nX@qJ$tkE*$`wjtwMkI~qfk$%9l-XDZJ9IPbn8}b!v=QD)KZqYiKCG* za>X?j47DA?1B4;&OOxkl!dQz1Fniw6$U1CAjk`uT{RamRCS2IWd-9o^sJOrSCzC0N z#&r*;GtO?qIz#qwo6xE*q2YO_9LDNr{o#0A--#xMf^5L4lEU5nUZ&dQkN^!IKja+i zi1hP1VR_pLrlqN>!l#+?FMQ19I=kMqxpGY96CG36&KZ{w&pEpm&3J`1G>W`#u++?xAZV0@Cu(b=(j@iXGrtyFI2OhE0$zsj2ecnrFGIVd2@a)x^*QeN(J1NAHqIcN`I?egYy)d zBjL*ogt1Bz`bX1fzOT|{&&B&3Sw=Y3PgmBu?klgf!#Ku$*+*=jBj(Jtma`pJC7JRa z4r;?{(=`gCtD31MUbU48h)@Sgz_--iGTiCb9H)uoI=-Cr=cUy7M+e0#WnvhSHR`FG zI&7vWVr-TvP2KGpr9s-(cDVBlCsA{2Tf}ta^n6^Lk;|3bSDCAgb#>R$MtMdw-5>F< zrTMZ}9g6jPq!pQmGGTPmsZ)qhVkxGVT`FJvu~#gqI@@iPXYSF~%l&*Ktk|bjb6yuY za`6lfw+E9)hlG(%iK#+lp*o62gans6-oot~e5cTE53t@5ORB+zpR{q0(|tTd#6;A@ z#^F{tFvASL59%Hkex_G*%KC}6_Q4jvV#x} z-Y{}X%EDZNU-P+&QdFlSpRN1CT3sXpdz;6z4m@$sE=b-}bN!+}#6un;KMSO#pIK8X zii(C2 z#&Me2)s@(U^-rj&s8L+W(-dx{DDHnjZKIx>dk%;Xm#n0Jb0 z6p-IG!VM&Ypfg|I5<*H&`nTJ}Pp3W}L_l`vY zs{6NSgr`rWHI2MLBH*+BaU^`D_AeAc1U-ZE4My7+v%e4_0Nw5##7>eOy@T@Uk{s{iD1)RI8xA25N}O-Fyiq&p{NZixeC+}(n2p>H?Yv7J&9?f*F%Hhpv?3h% zFd-zi>Dm+b40hfqfCw*h5>gGn7zE`v7B6_0Cg2>?mTMk(iZ1>? zNC+-AFc8G{cwaHL@mo9nVH4`^)O@c=Kz@jzQ>LvIl8-*^TCZx3by@HM;M84ct0fCGZ? z+fU&G7+~3ev;)4-!0`o}ZQyS2+ui}Na>MHlnA!~_5=jupj(o%nKJeSjCpusBhQqP& z&<%*&pUN0<{{Wa8&*SS126upAo%V*z-N$1H0z=*!Tn^Uyz!wC5G4Es9&mGKoHV1&> zi>EZXcAM^W0#uTPCQ)lBxzv3k>?6Yr>@EI~z`t|*KrkG$?+g|eQRU)5Joq<@4Qq|B z+9ZpooT^%x6-hu*lR8}B6n805Qy+GWm#G>4zp0tFZf?YABv8~;Q^}`Pig}7!0F(#? z)B$s<_KaOV))#XOzdJ>N>g8;4Sz|Kcd5sjQs+oq>%c@MGy#irDaGh6Y?$OxKnUv?8 z>x}0)n0&fPn7vu5G6Mb}l5`;~7C0E}f_QR_V1{ef!6Y^r=ZLfzH<%QgkOcf4yt z0pH#jBm;hX-VhrA0)VtTv+_lWHxO)Gn|6n0c02C>0K5p5)6b};o$=|aCditQLS{*t zscQqm(m@}La@68Djd&m87?o{ahhtY&HhE9C#8GdgaI##dz#bqh93R30+Nq%IUMxpJ25RBgoRh(%ZaK zhS|fwWLa;h{Xxmn6-$)!wl#!GTD25X)hROE@)D;=KEgWLqd4Zw>oQvNhGoQYnUX?~ zg;vehQWdxx0PG$-a;FDT-tJ+iOKBm%@eL1WGG`pqoJ|DW*^g9WtHSA1MMkOVmhvgX zG_>eSeIv`B<~(5GLiZeP4JS{^m+uT}2VuSaqJ5DawpLF2M)j8<;8OC=SI$!;;gUg2 znG@+{PxuM#D5yFI;?e2ko{Y-st`#>q;~jO$IeQYXt*H3)IME`hO8AB5kd>q|%cwBe z#-rGPMyC!f3?vo`Vm9tzH~g=%B7mr`hykJz(k{ zb;}f)PY}UCMFl;0si?1*NL-YeY&0z-sA(FBD%>^xIRKR%K$h9Tc$8DhOvO!?B2pH+ zDQQ3i`<`IBWf`+RVp+ea*oRUp<&#xkjHeb7R(?Qs zKUL3GYw#*s8pBzK)tVVK3Y#c>(NfeC@f47zSHro}XV|syVPFcq+qmKdF(hnW@Jnqh zbL|bAYkK2X*L(twp9ID#ry^mbmo-%qQh_NFmnf2ym7zfa>^~^WabL6#L-PWvaja+T zp_V3QYNV}GE9F)cQ>t=-1%D4iyWeQgE)u}llgAKh2h{uiP@)?%?CI3%K9==9iyy|M zE@lT^Pdf_5ZgD3$C3Rs_6z}lyK?Nu^gd|167vsNizcF)zT2@ zL2Z_RLP+cZdyqAu1ug(?+{bQaCy3Qi)8X|M)e~uG+*3)JIZKx(Rmeg~WP)x$7v2(l zw=dbJrBvANHlD0!*@(lk4osY!LlCZ?WYtfUb<3rcKdEJ5FXGpGYu>D9>dvV3A24Uy z$tsepVzpHgq%8jc$&wi|<+$vSAB{y#9uje^WBefH^x}1c3^V@o_dkrUf$@lMiJ{w9 zmU!r-5wN*(@4QHmFf2)OE;u3^D@*hIXa=Ip1;+)Vjmw8G+RYReA1EV|@M+U?^8vwt zB`HWr+UDj0knTYQZZ{W+zC?x?zdWmd;LJprx8x}9bHzaAXeVe;O(`F-KZ=_o2j`j#3jqKs!2VzQghCoR= zUHNO;C^;eYw!^T8f{+-ff(aWNu@Ll|g67QN@!6q<*f|drv=rR4A5#uL*ZrZch(cVJ zPo=JT4+9k@<+SsrEC8f{99gXhfux?njkbZ+5x(HK1eV>PQgpJ3amZ+FcI+KC-TcGQ zQVqekFSA6@l_4eDNFDfqhx7xv;My!G1hP*pyhyr<)Z_GlA1MSeO0MR_aRO47*fNhc zF+mQZ_Py-`Hp0xu#8DvxD1rstu{-#M>I5lFA9VSO1eFwv0ANWhR0Xen`GFmzhgH<% zji3if0D_V)y`svV`i7HzKws$yB%kUWTzHB0ct({5FJX4$@%DwKwgfn0Iqw#IC5^!C z{P%*y1_!;aL~2vzH%ebpk1-`GYm(=Nv{(Ypd;r({A*gPV=fkuvl?oRCs53s$mYpRj zP#3qI?G&UXz)>!y4$v_!+dnZZj)`EB+q6hXQ8sbGCwQ+)ixAh;f1gNUpVF5kw`YWO zox_ayJnzIv2T)d|kM)jK7jhQlKl98={EHTG4X)6j2f8*^x;DLR01Z|@C5 za;u%T{UK-5g+!3-19ta;h3&rYzr0&%95@ab-V&baZ=-Jl63HjjNOD@u2qd#?T(g^) zvg`m!EwLkW5UtM#yf#4u+tTN4R)zApV%s-prcl@={6Iqow)cYHglIan{{T}kcnC{d zehgE3T(~cCJ3?g;Myp?8x4-8XY^0 zdqAM4a&P#1_lncEsmeysxn_OYkL3Wgl$)rV zS|ov}+(jrjHeuQMiP8zMCI0{@pzvIuZX!z(N^i$#pf|qPw&oBd0+IOkfR9i%2K~Fh zrXH)>&ljixU_D*bD_cnKte#1c(|LIC{5KK{{HX5Pi&7gIlNngU2=@4qmJEaSO~PzfF) zSese*iWZx*7@f-<#9M*@*ut>{Y#z}BI3meAUeKPvmmI|q*B2e(6TQ#01hFlB#?YGk zMH6BP-0$Wk*f;426Tm8XLw>4*uIkl!6$2Vo3i0tHq!ravT8&lh_|G7RS57w_yve z&AM;K+(lmTAUJL!x3P)=`a>79!umVK1|DD=Y}SS@LvaWXA}Bxs_%?gP2h1Iu!vMe5 z@Bq9}ACp3B@pyaQ0o>W5fCIgu0djeUJ9ESXYrAa>IoU9P@AQfqf$tCjECDQGxhySc zE^TY^3_jqF&=1HE$Lj_B?$F5o-LJF(xDGk*59K!}w$O&g!^BW`VgZ0+;>o`-T$Tdc z!vq)HGys1{BenQ|8@;?mfLsH1v3Nj>8y{$+rHNu1CW3b*!~XGI?p$`_5<%^^AG9`W zhhu%(EQZf>XnPTM<@pe-3zh8*0LAVi5TV(a3&ZU1W7dp^YhFW-LI5$pz|AX14|y2`-zR;hG$?P z46o{S3tlNeYEJ~UgW0>o(iB`H(m?)rhok~*uJ=2@Y^@I0w__5Z*ddm|uf5OG5C8&4 z9nb0J7z2Q4~k2^&Kd^4n}nA^{=iDUgL-(Uyj77nW= zM*a5MDbyq^0+3Q$pB|D6o}HqTK*o#yF&v?Nea{s#B=o# zNeMR={;z1AAw&eI7Hx!1rFA`|xlsfghJD@;4b8>x%yJMC1)Y`cx#k5Glj%#n+4hTM zAzrmR*uBh6zz&_Qej|_uO43EcjqX|zf33?rNi8Z!A;%jYARq-0FT=wHN&u)i_ud8o zIX-s$9x6&1MZGo_U@Rb5D?Xs?8Mprc#84zCfWYr#%qBuj$I-X*1-B3yh%U`&tsyRM z-~t=7#ei6lNnjJ&1b|ZE+?xV7g_hziV1Q4jp5N~P)UQ>nJ97;#H#?Tv5FirFHEvkI zu9Bcl)R234iZAmQei-oqbf&<*%>MwS8cvpdj}Va#R5s?o{-zLONp2cB3I^BTv_VM# ztdYC6?Fvnxf*h;b$A4%=Cz8dQ(a1tlKqUVFaAOFUNZ5hiDx}zIa2x9JD$}K#a?j!@ zr3D}*%bma01tpk($9EeD2vA}k;9G8Zga*KfwW-KZ;9l48VnIMj0Yvt^1gJIA3!6Yf zeqpc=Za)}od;aedLErUg0DzDm-JT_#RwDjdD5lH_v3QUIh$#)H^?*f)B$4#u6Kd2p zw`isg&g5Th;#2?tyAE%$fL61pu)IJ@MV>hwz)-dS060r2P_YaJj8Pgu4o6@-!e%TM z-_O!4v+4oJu!$qo%mdi}0OlZzSb_*Q_kdgw-Qn2Wum@;Gi6Knqyiq)W19raf5C!{e z&=Ie=<>4p-9E-sU#{Bu>6TQn0Hi|YbIX1K{$OO4~ZBRe}g9`f>Be{yToOs$3Uhi$a zpd~@i)!-n8BaRz*dT#gaXp+r$ei{N<#gfC32#ziy)WyIp^@YaHU|I|A58-%AXJcpB z#avhxCd>pbZcXBeBHkVsl9C3(DBXY$^ocGW+dw8P!}N&^}~`bILE zrHHm4j^K3oRvm}T2%0CRi;Rrd>?2Su$c|6@f8G4xpY|GRjQ7lWXYe>#4C^N8r(*Dsfb>2pn0j z7;q1@?fAx1mc!*-#HJte5e&K^(x}34y4*&a56e|^>P+VfROAF{E<6h}$D}fz0J?#O z%gr*?hy(ES8Gq%K{{U;p7f&>dac&u3cAKOA=8pnNpZCNo)Mp8xo4M5g0P7RGt3F=F z50z(E<5Tcz+K;-LR4Qb}1nOX((c2k5hQ3nQmoe!Wgvn{tWR&Pylj1UDB_li6XlFQ4 zD{t;@V+P8zC(FzjX{IOQ8R$tPl=44V%uLU4Oi;lx^=36yGM-UHgvlDG%$sD(1H5{5 z88cNJ>f9R|ro_cC*EJGdDo7ijG45iiMLrFhl}YI{(_YM0I81`rwdwhJeetf zhdNZmOdM&_U-S`u(=lyVhB8BsRen7MD&%2!{{Y^VN}2LxR4@FpeIx}R z*`ekfMouw`O~fQorj}ghX+fI9e{&nY*?H#g>bGcZs44c|5hRvoJDB8>p)PtSD*9Fl z*n$CnZXlXPw<6{!C5^kgMr)7dfALJqRGcWnvpVe$+|#Nlf#|JxQzSaR;C!x9)}G70F(eJ_wwD$Yz%gGT*|1!sZ*4wt5;P< ziiOOcqq!IUd5mISHHIe|{{RwRS)*MkmO!B^KMC5(c7HoV9IiTqn5P~qgVSNu)D==O zNfk!2U&LIwd&xbFbR^SEsGf>xQk11kP(nt|qF4{cGQ8(WgewHV@k}oUro+x8iIZka zli`>@KJn7Yb@)v#DUVN~*<48kSHQT6{RSi0NS2V+f+l z@-qftp|8XZTF9rSq)N6MsYGlc8TE2ZFu#QTzBVp0WxKy!V!_lsvs3kLUul`$b(7u$gu z{vDU{J|ixgoKWU4xxpjvVnH%evuoRDhEwg@#9IJUg#4+!jk`rZlAi$CqteVcEZn<} z)!_4Id__~tXBN~5aDM|HcmXeCxh3M=!VuC!007?hk4RuO;{+LvNtS6o@%L1crdPzd z+p}{X&Roj4ZB`FAG3G2*Wey)MZ@`q9Xw@=w!MFpkk9ROp;FP^Bl8gfoomon}SSwuA zXj)W3bf^f#=NC;xHPJ{d%a$6pFxmZ1OL*-W9tVVE`q~e@W0{t&lAz2|M2dQEiKK8z zV`B?3WfOr{;nHcbBvw)4U@nrS2-B$rKwNl#tXax5mDRD(_GF|p6WSV?%E(A84(jiYqTKJRumeSt3NrVw9B-;X1t9F`5jajAA*7d1^$I3b`v#oK#sd!gohEAfgvCk{ln#$C#IwrQxSm4u>EG^i72Dtym|lqJY=eug_)gCpV@ za*$Wm;uvK_vav5sEl`-JKlHG)Cn(Z)G1D9+3vEM}CEbi8avTR12cM*D5tegK3zD%= zgy2;eeDq7GsF;c3Wkj)HG_bd`_l!?3<=kU5VhY3Xc`2DO64fzUmJkq-TIBI@5;BQe zrlg=LxA?-z~bB4TPL zCS-|irdqWhN_-8YHb+UZ)0G!j{tG==zuypDoP!lk+n1g=OU6)7Oa0mGPBNtp!>S^={vscC*bS+B*7VP0GgrP^ClD z>I(RTI5R9x=k$lVE|RH^ZcF=jxBeg?A5xTdXzb6ztEp(DSJYEXmrqm*=?z59dSMbv`k3m=$0QZYyt#U$5wD@RcZ*cmHGlrXqqAk+?`w-w-5qJ z19c7jKmiT&Tn4t#5SFp|OSgy`B?7daCC@Err8yRReI66(*tc>ld_Y_%Es636?G!5n zkjLDPVFoTr2_#>{R+1D6XW84B2rR^bc6R=GiAACGmq`S6JcxEuKqY~@f-Mw)?4*Dl zH`9O0C6dIm9v;^a9Avipz3*m$+RmUji%X?Vq%juZp*qq|l-}-7e+D!W8-g2WequsE zw*))II4XTV_QC+EnBQjy^Zs^;qrIm}or^H<5=dg@wgNdAkQq1dIR5~|KtTb3D&4KI zgh*Oc4v;qBo0ye{54k({ize*eHoQ)w{UL__{{YLy6Q@E(q=L*n;kZ0lk7%Q)GG6=d zzt`RnVy!_pA;2*#tI{>7vUHPRyI%R@p{r*3$OVZ(=t zySh_x-VV!iYwxry(l5*SZUhHyM%Vlyl&U3#{{W8^`bj}ZZ#FQPxjgbBj;FaHw($u- zf=E0-3w0j`>>(Y402tri9>Yl6m`q1*C?%uscM655H!LD0j7m`$8?Nf(6(^ zVFF1bf!ZL8JGI^{ITk$c2qf&F3maQ_xKw;J;v~Cl@CicT18dqO-sAL! zLAB4c2JB7W^?-r_E>AXu+gd8-_Pint1Y2U!DpFEeS3c2Y_U{8~xlwqdq#7Rmpx>Bx z^LPdvhIl=O`@lRHcWamjXJ9QAw%kGkkbf9{2QUnHfH>}8ZtV=SaocDH#>1F)9B%`N zcKo0kPmQ90VdI!vUy;WUUe@L$iUEraw}u-|(3!Y~;CJ?D3Je3Z7H0$SfLiAf_TJ!GqLP&==}G(|O-b9iiQ*G+I?2_lQnbyORuEQL ze*|?4k{jB>04%{R;wt=)tX&%`mjd_O>mJS(jMLCyxULyCMAfdoSV|NdN=W|hW61e! zs^S3Kzp(ETd)W@|7l_nh71FU9MSq(lxCdnh+whEyIQC6NSNO2NYCij`;(R}dJ{G?J z0FC1jHx{#av@k(77d$jc#@9@n0?l&dWA#|RGKq^#WTi?XPz0nF@7PCXn;Xhl0sGDY zhgHw40i{i&D)WN?fU|p|bc72`=B!?_Kc<&mIk)GFP z`V?W9G} z;Q~#7K2K=p7)9Gw%5%;qhvHN4rBPKPdL&`;SU`$Iqs5|n`3fE()pT2i2ylMoc8 z5Rgm?=iHV$rEgDpU z>G={Z#A9K{sVR46Xf%}ED3Uqj^MvX)7XWZ##x)Tif_rD!H7YZHMv;~1s;T8-SY=Y@ zqD<9<{A4ZMf_b@)YtwXbdBBo56 zG`z{nUXtFWId80I+x?f_5#h9@Vfl_`SHV})gC|Ll^}i3{{B=)%P*%UJb@TYdkgSy> z7jM5yOH=?u{7;K7wZ9105-MlNB-2itD`)siQcHOt-Z^Vih{>oj@dVY$sFZG*;c1wH zdxbKA*zFmPI-bk8rfHp$M_1IQXRoAwAO2i>vT7;O)a=`X&8U@4Hx-b&Srb)YnS}s= z{$KJjtLhhtOR7apYU;&8!X~C<;;^zA(y&!>Ea3hT#WJR%qH^jgDitzh!sTmGQj~j= zZecuguY~tQAgJlib)+*URA4m%Oq8igm`M0w4ahHW-?V0QdaC5z(6?Rdl!Dz)oswI3hDK4=3fCQUe;|?hbD!KJt z&py%I#PN(%7g|+{;#Cz&M&BA~R*@Y&ih@!b+i2D?P)yq@>0nR(zrlkO{(Ak$_-eF! zxjO*NRGmpxY}_)clA1+K`L#1bG{anfw&R&^%t)Qss8#^;tn8r~#PhW+Jiif|H*G)P{P*+5R zi4!pSij-Q#CSuw(>H-54AOZ>C59ZO|!|{wy45zE5p{rbkS4sF4As{r#Z}OK8*N%>z zje*+S{{XaZBBoiHxTbHBqMW%ae8(?Lq|cLGj-qtAlE3;T zLfL64vyGlHEE6!}8FHxC;PuOqG$%u(0tnrRHa}SOCTEPxHom77nTUnd)l({ta+N78 zWUKl>0^R$@XAGugVq?oI$@zkotvMG0lUF#^(PER0LJC#?04-@*K-ICa9@|Hify_|q z)jpYpDE|N(nvzno-!iw1R|>?dFe>VNQiVwsG>Q{tYZ`zc9yzfvrs7poF(u-ncAB-+ z8l7nxNSUisfIP$5b2PT@X4!LPW{hAiQj?~>Ztu#=U)u4KQ`J@;lGaX5T>WXrWrHy@ zSE(q{IeQPRc=+~x%z2)PG+4Ch3YL`x{{WXxC8=s0sP1=;EVrETysDYf@b7^#MOEg= zsFEg2Q5zQSAvonRADBysmy`GGK{FLSHMJ<7Q>0By z3m}rRNm87>&gSAVjBgpL$FT{xt#Fc=(-II&+yiR!DHe&_@*yii(@nK z%BiGPPMh(8Nh3)cY3$4!+9$Se;eFBPZJmkd3JfGdR}=q1It<}zW_`l^{|nT%zO7ZI&WKuu)n1k59X zcrl2{#3o6^QHp#SMQES#z7bEM^=fZ!8?;O@_Uy`Sz)>*@(x6lS0C0&SXY{2^3*VC- zzHH1hb4D>Y7oABaLgu9jD3ol#a!%&^v~%UG)^heAiqL=cgpy2Zbog^r|++NU~flbbk=kbMDG=X8eIJfTx z`wjObzc9-H{-!Nwu>Imv%5nloACc`BuP0`1z@3ivACw1CWI99J+y4MCHk9r)u^Ng0 z09a0qO0gt1qWr_jFrriikdotKcZ3-s(xPw3^3WFu95vs7U`X}cl-ud}d;YOJngdW% zHpDsa1G#C1%0-mL;MB9di5i~d6BJ7V6@O4>u!?B3x60|h!J!>LDz^Dv~ny029~kCnc`NPJ%MI-v{)qvg*X6q z+(d-#Qg*)A{3DQn$5Km|XBQCE18O@P8$i~aWq}Q1&)k?rK`utckGxR%8t$hszonGI z%vt{cf*%QAlxaGd*~^0O2~4L}?po()qJ;tr1F?5_6icZfZ+*A(1xDuE!eZLX4LrI1 zB8Uz>JHi2j5FdaB&>)GiEY@dx#53HeDgOXSy(FyZ0lBvx3?^U+1DlWMcxXneBr!jv z4PpVfJl(_uvbOoTYxsdcl$!&|XrU=2dYlVgxQRAEAUsn$f(R$HAX1ZJZMotm#5LJF z6JZFxz&W!QizsUn+;<+(k~awr-^5W00Dw|X_b&{jyBjnHz@GfVC9Tf;JS)N^kW21& z1j0NqZeM7!Mx&)ieaMI+?m*H+6qpiU+ukQmk@CkO1Oi;&Xo4L~4d0Uspovi3n{g7L z4X#g}p}EvqLifBU1b~ydzZZvKW4lLZqeN!*uz)(~`(m$t*aOWwup^ongek!`OMR6@O09h-h`q>^kO_KGD!?B#&%6Sns;VJ?Mr{jPD5XBFcMD!&Dg>qg5oO2dva|E?h9OZiYJgB$FxBA z+x3h2uFfE5a?I9v7K6JF!VyYN@XemyAsZ+Hd>2LAAF341}e9%8Ok#8~$40B&!*Q)xRF@3o;f z1CC+cwsyYp00!nM``Elol1VH(#efM7^#UjZKg#dgCU1}){mbQY)=|Xj?wi-ed$^{ zkCHlOxmn`^!K$e8=t61nIiC#9mam3N(p-F{AUBwVFdXyJEVqnMnrr10m&Ub${5s)!BLiRbB*GaRK?_~dX!3~pt--TT-whatmo1!zt$YjUDT|D z)SS5|55}eny2%)gN5Y>;G^7QBj#-7R18g6vJuJYowl9@&oTpt;U6nJ6CZ}XW+;qX4$0MYh?!oGl66ArC8X%?0M&nJ+1-5mJ>#82>c%6PFx=ag=_n>h zrk7Zny1$1$ktstJ6gR2Cad8g|4NZ^qOAgDuYRfqpc$DhwznSM#&Z4ZALS{^*m`mUL zg|GhrP>i!0%0Fc+J3nGQEv&<{o)3u8SAT|_W@aL()WUfQ(ta6P^t#i!SVul#&AD?j zeWH3@fMr}kHQ07jRW=bWu?5pTdVyIT!1!rnX2UnX>SsI%wJlRXm=Lsd;ssT$@f1yUw@ zOO&aU8)pVF-kWrqerxMRH%oEZ6QoO(h*U_#47KQ5BuUm(u%Ys}31hg{Bhl-JQ>pRp zxJ}PlHl)mzgo;XP8Q`*Keb}g_cK($WC_is_`bQHPPXNKQC)(cysg$Xihb+sHNlw5n zUL!DQne`+f5#10xzBA6$7$zH=@tij-ndb_luA3r{<4iLq8E96QQqRof68(se7falO z_}VT~X4KRn3Z3eju#%!|NjsDEk5@6}>Dg+sO(g2cH42)IVN%jS9u3SYUYhg{@l0C^s?C^O$)Dns-v*+ZZ^x38EkjCQ(gAkZ$B~opANcF`a>BY} zl<`U_IkP6?GwacY)YJ(^wnXh?QdD^w%W&yyN1>UzYn(b$_B_n_e?DQd@ap>9+lE!h zk@tj5Ql)%p16QP;Qm>>T=4uX?<*tllbQpzKRWtTsz^Y|brd1s#3x@sjbwrYclQe-X zYyygtw-3yF{Z{CPSjyQK3F?1NGo@Z+%J`jG!`Cvpj8j!o)Bs3C#A!=x&7=@xZ1ndp z=bF#6o?WZ^HKz^#0M#>VCmhtdKX*8YE$B?MJP;B+Hau+?*6L2IQT>rCDGC z%2QODe~PMoO88{_01>bpKX{Ns2uDDADVK6qOwB!1>rOj>RcBl%Vw80BSV||$LI!}n zOET6#Ntl4-jr>Lt)_#arbf+_67+xKYO3XNBVx>i13tdcrKJ_g{DFL?B>Q2`62+h9I z$kWpgv%vKLGEGjBfBi~0_d17-Qf2Ig_E^lAl(kH!!|*zKx`zbnmo8;FSG}CTc{N{V zE}UdqI$B=0eV`~Zo;y<^6$1&Nq7_qV(xGpRNK-xb3Hr0f4N1{+o4UC#rTr_-beW<= z>0*4mUq`}_i2yvwiyQsm{4`HLg}6Lsf=PmoUmn zl$4oDO4OYpB`z=hMlbB2M_P{a^gX4LNE*c6sIG&Zsl~AHqgiX?|rUwK+ z^bqhN=E(adWX#Dvvn=%E?G2Z+CUT>cxr@R6=w%{urH@i2P1SPz`hbs}Dk-X|Dkjp^ z$yB-0rY=<3Y79`ct4fl5f(VbUFpMYdFVno~D-ggw#~n1K#IUKVnN5q~8Br2ZEs{Z6 zCyJ*4q^p2PG4j4QUtO9rJ|T)vr<97^V-lZLHdK&81liM+wIvR0kfjg`Q!nFr&bvG1{F{~X{MmHX_|`H>lP+?S7A1rQCC-&3pHOW> zc-NTzUc|E1QfRSRNJPb;O;5v_s1*1%?9scv&6&TfS#K|6)cIGWD(WUguc<`5Zwr}4 z@#LD2gs~c3XWzL;roifBG;_~pioU@6jl+O!L zPsXQ8i=hd9Tv#ZSz2k%I-Gbv8uk6wGg31|sl6E1DR?|>aQqf2nrp-bS#HBl%r0oX= zqU!HW@D7;O&`Q9%y_B>3tU^rr(?8gab>fGo`9th;mrf0bW7HC8@ye{bRbN+CB+ioc!nGcm zY8sZilG-0=U*Tc%MK4J+)n8PkbYNj}q~^K!im;h2)P#EVZt7A2%H-o`Qf%k@B{y8#HVT+bt;n0OFg4=ty;E3PN_@ z{3yS)e8txK96fz(&-3O`Qix9pdkdS8a-Jo!5|cu8Rw8;2l>H?A&Z`v3b@WT6%s85-RZqfZOG*UF+20LDaX<{DsV(ZbA{}gvHy_!j zE9G33k~3f0e?MTdv1&Y-K2{xv(9zQeMrrimUPXv z$g9NhX{L2V#L7&x63h~mrI{cA2P^}UZyVq?E&l++zM5VXO4pY3B`wrGu*+2x{{U-Vgkt$i7sIJP;)hGHpYa?I5S1x1myBUD zzvfa+31O`%00lESO1UCFPD-WDmL^KNR*gYV^McG{>3{wnvMOc$p{HXLiB=JYWh`=L zCa>sBwM#%qSBC~ZZL6CieEGE$hFYXdTIR}QVudJ_k@O-SQ*IK(mSAmYwHGDS#o36r z=Mbf^1nObAdqWo75FP#h0M;xMBFs`$$t3xJ1cT@qJ*dFB}!rIeH#AI=B3 z^?Fc>38@X?p zM1Q;tL;AKhZhS=mBm0RTi37A6RFUZd#^27+037-Qt6(#3JKM_8JsV)zsjvSa7uees^U+{n(Kqy`<6-B-1uOs-v=*FX zfTkZUz04C71GT}updnlaBelJtQl7!Z?)G!<0((dfTamlMASgE6kYS`K06_tc;6fm$ zaPM}3q^a46Ec?3=1i)0`CgeqLVnYkC?GnWz#ei}=!U9&5fB-IciFC91JHxwzLz7@& z{{X3;+r<)~39wp%6eLe`uu+>DzO>B@#Cx{{U8p(2e&m-Vq@8 zhRSDV;6Qi3BeV%a+kf|jM_|BgB9&z`KRZO5sfh9|0FSAL!1D+K90Dy3h_#E2ps;oy z=wgTgi6e``K9k)3Q9yI$&7ls@yb4JUTyA1~MG$?MLO0=n{NN<+@QFy>yg7;^YkBsC zq#fWoL74c4>_6TYgA8u{;)=iXczc+U_3stl0q$aj%f$YW?sqW*2Zk*a0s2A&n=psB z)+l1zZxqB>ULm~ zn8JWjVovwI@m2}AHh~}=f?1ltZ3%K@&Sg!JEowt)Do9Zt#Kj~AVDG>%&Y}YnM)3!0 z4yr{SBS&7aR+>t=6(kSp66U3Pd=sUJ@H#lYpv)6;fo&M2f8wCd>F~ zXVjM$H?fQ?>abCEz2Uu`-tPgBbpHS{)8y>yfacn&NtIHtdgN8ikt;}Cz>s|@DqsnI zOmcN2GgD{Ipk^%VO^2?UPC1Awwp~2^Dw!!I2pUvU;Ga(5v}1QSJO2LBLdEw6?EFAv z{XfLIeTCzyo7AkciQ~9RHelIv2qar^b9=mMKby%g&`BE`LW>Cny*}g~W06W)i>+lxxg^``9AK7m z%m*=G4kAy_)|t(!f# zx5QCs>i~8KffOxdi;i9cu|bGpIAp^+3dE~uCa3_Zly!3?EkJBFODQB?IqNapcM?y- z#j)I4y)NKZViT$YPjT@SrZLe88z?b-BiaXdQ$-!R%u^J^B+|&lF?#yRbP~*pNp&@I zXCj(eAe2f%ltiT1dQt$ewS-kpD~ngsQepMjt#ws4886_`$)8g)WU5(q^h!#JOtjc~ zQUI`ynp6vZfLM8sK$i5StQyMRCvgMVz_Y$}%JP*@mh*-^g-TnKE{77GAqDqzp+E!W zqtCCz@jOzsSdJ%%)z;O_A#0ygJ#%I#jlD`F+k*CvyRh_&p3u{*5){b?hJ*~cJznan zFr$E{shOl<`ZRsmV$<|#ZJ$&Aaf%?QC@Cveuw5$HgWMl@fWS7t#w=_u*0VtRb}MlT z>_%_LudAC;G$bG@YKp8j0zLef)b6D8?Ne3L?E8*o-;TQ%M47n5Q7J#WqBo;uHl%+cZVD=BRW_U;1 z%k49OVY2XC8?G6anvy~Uxl)z)S^5$K02ek&rXQ+_jY<@E@5m0&&XRQ!Jw^+rSe~fo z#-`S zm333pkdKQxVv3fg0088YzyW(lKmZAJ*z7w+DbB#K-@^v-*qns_V~Hvbo85^FB<(Fmj|WWjLXcDO1%fg(S>cQWT~j z9mU1oH8TP|LG0Hs{#5{`EH~%<;H}yAYU@T{>BV+Ak~)`$FB0kId#C>Z56m=@(p0%N z(u%obeQ5D=0Be8_y6RQ~m2$px#jtFToF!(g3YuvYIHak65AQOHbtT6t0O=$!Dh9)7 z#*&br6L;kP&?uKBh;YQ4hm6MA`h6c=)E=I6N1)YxJ?UO$mzZ;}QRroi(T-CgQl;Uv zCC}U>m((UQh*1W_sM^9la8=8ILEu0OrNLq@J->|t{X*$*2H?db@(6Yg?`KZu%n55K z5O^HINl*`RJobuLq}gFFxp=eqUnIX$wQJ#nm>nRUC&=^d2_)%Y0Ap}$S{j|KY%O8l zC&5%jM^h`*c>?g>`dl4WW`bGZkaX@Zu@H-w3=7x*e>etS<4ZGG4q+A!N8)o3sZnw zZyUuj*xZ0`?+_+f=uzWM_wxvw1&KORt+_W5O507%iyqLuNcDvR2LAxOH3u64OE7=h z8Yq-O0F;0>xZWtfzd#_7d%|TB2<+wIB}A1cZq59>LSO}@!B?a!m)o>36ruu20p1fN zxNu1fF9|ntc7K285ok7EDg$)J&^(ijGE_GnH>XC?P> zXkaD%2?Tc~?*P)2vm0>D6fzVP-~a;=@7@PfGbP9UEZ<08pnWC5FK+MvojQ_1ZHJhX z2aqgAlo0kV`$KgTr0({&ZK6`GAtlmCHedUxc2b@Dq?vZ%RlnbN(Do3+gS1pO3RB8zkB{L zJg0I>oriaL3N-AeJ>KxhW9kJ?e}eGVfEV(On$Wl<#k(a&;Jdc)GD8x<+!8x`MG>t0 z&emop=@YD)OLQ+9v+q*>RQNNJf`^AVpNt8{Ov$I4H;0Aklick#cJhg`K!3tBP?X!*H zp$ZCe&I$ZtY@kvuMWVh_a@T#}K9&IOxZd5MZ3J7=eqH+*TYRD`O1lsAi7IU%@5R43 z1Q-(EouXWUdluxA77|U%A8uk)FLM4Oz(5b~ay!JNGSt>C(ML!;m))%h0-?6z%@9Zj zouFb(h~57H7-jfNeHq~uIJgGaF+?3A?jN(fNnocW4&BUMzzS`IN|FVWao!LEVoFaj z8(8c`qKZe$w{sFpdV)vc2!NEuuF$UF7xsoo?$5`VM!+}ecmzp1mIr8^wj0AfcKAwNB8Ye2^Mptn18aR^ z@2QLUyd^t^Fc3g{67U1uesC$jyLd`rxg*)&ZPE?_Yr_W30O73-fQlF&U!*qYctN)9 z6a+xS@*#ozFoSF%gWs5;fcsh-4dDVi-|~mKy`BPxv@zoMi6A}f@k4u-Xo7+9?+=Hw zAIb+k`Ed%w-NWq&6btVE09au*ZJ}DuFBA#gF!~8To=*3R0KJ?TTYj}X8H!XRLSw$O6I;v0P}yYUPFRePTB4bJ=R3^*4I{EguPO~=)t zfot>nKmZi`pD|lpZ?sDXDGl7k?3WC~=>k**pJTv=$zmD3q5<^&abeg3&*lIHh%QaL z+v^XHFR}e#01!6V@eBd|KwEGR5G=s-yIp|s?+u+GTgil-OfO>X+9`-2AI2a9zL&S2 z(Oi7C-TS~Ta7DH+0CfOJZvxPi*glhUaLpE#62HzgQyA<`SGKm^^tj{qQ&A1uadTtKG*1gZDsbme?B|$r zzz0xZ!=ByYvu?$%=ZF9V*+relh$MH>kWxu;aQm=x42J*$%eNk~v|z;=W;cHg&uq&50Oi}Kx~d?nV11h_1B ze&X;D)gh2@hQ5r)tZRQ$ToP`?}w()Is+4HASByIbc7D831?YY0_2$li# z@4H+;Qp$6fgBk0BD<#Eazi=;eZdD9firr1$<_9v8b0rA%Dg@be6TuHwuKn_3u44X?O(6cRg;z0WwQ6}oJ+y1Du1OVy-VF(RCADATZ#6M9bu1Ws@cuEQh)Dw1o%p!cj9jE}2&F`>i zS3f6y?(s?_D1}|O9Dlq@L0MC#!}#%THzWXEMI>q@I}RWmsBUey4-9JGK?jC00Ys=M z0lSbl{(r1IC)$G$#UZ#4`@&EvB`0<_X20(MQgt@`gYOnEq%DJbcZYDjMvx7+u{M3f zf2?nI2&6ZtsI|6;B~HS`7K+jcV4z=;ArLkm01dc? zwh{jTF*=Y`32VYqZWU&CbN-OjUfa22Ylufx)DQmvx&-t^Ad>5|-u8|+a>^xF?jw=G za6kdA5=kl~ChxEuL&CuzBqR`@BmJUJ_P@9hUWY!DZr_w5%CnMqV)1)Kq=c7IV|Hs^ zCDfFSAbE4%ETpIY?+0jFPT;vaS>gnvq!uF9_l__@VYoe_%2`D&Lk4DvQE*lt+%ags z1SF48AhA5{0R$VmpUhErDK`C#B`beT$NpX&$ct$WcPs-t#H-Zm)NBCl4U_-`?avS> zX|X>}B7vN^)OPoX45A6&w&ogzhYh=S?FhB*TnLZ?-~bhF+eCluu>B&|pHAh(OFqC} z?C^lNv`U#)4ZX`nFt|4FzR@fQA&U;;0Rej`J8t_#kZi3iVXH-~=Klae2nIXb%xEBj z+dulk<8V2&GHq-3g<|Z?JH$IHKISB_01!#$+{Gxr5hK!E-p&t*M`0A(d&IH3-rtNe zEWyVRjko-GfRF*X`n(5n4cVcRk{mU-h2HMwDc+K9_u2&mwfn;)4jv@jJHUc3#@oWO zeMLSuhON0{<>FKUEpOfcVf~?^0o_Ay5y<7pJj5R`AuP|&?F>KmKhhGeLwAAOZ_*nb z8y%v+0^h?6f_y}RTYh4WPWwOuT%G%fU(}yyr19+l{h_xv5i7B@TC5a%7*9Y2&+iv; z-G!llPvZyl2%iUobIY-`FaZ61qEo-o;+6A{AVB#s&Hn)2C^~lL@R7gc0q5WMfl39- zjk|vFPj1{oQe z^AChjJX+U^I{@Bxi68TRu}Llm{l+A(fEe6e%u%tn-Hy;N{#gG2v_n7zoOX&>Yq8m_ z4fTA_@7ff*sDrcZ6pO7d$`9)RB`IjOX#?nxxx0IS<`efEw-f$Fx*^8*(Ik-zB# z%L{n@OgB2&>{3iis8b*xQjePmph{A}7x4`MTHn+n2_jffEJ{nCq*&b*Yj8eNZ}o;) zvTg%|>W44n9^?0k8xz==kZYq)%+5*X(PXl$Zg;;h05yWw(*gi0E(b93mSHXP008|= zJC#0`vjfZc{NYQw!}x$-L*IBqP~>J}kVrRo{GboNYdlJRSx39S;T5p}ZT{vI%=DxM zX$}LkT<`RPp$W zG1*o`JB9+@FWLe%Bnyox4}G2)Bm;f6@e+b{JKgt<5w$m{5wN|$apS}%EK;>I*|^_< z3t#})8-7u9gG;yf575NXX$f^b+;ZQXHvknd{_Ua4`H}wsXo;Khtn%c3Q1V%$cR!?5o~EHGQh+wIa$LK_0#jg+!}UL`6A1-G7Pdkw=}!c!IrKw;X$@s2c-ub91_{_)N%um;+pGg8br(l#$( zEqJ07fJp!VEC+w#h(SKE{{Y<-Np1Ls<w+&loC zJMsHPNxIbk0L#Nrvk?(xq^o1ij~l`c7sw>sK%#y+gV+TSBBgxC{{VD6B=rSi2~kK+ z?C#Ks0WOsBYeGN{Ey?|2zpM`tLI&=jz?(MYLjVGh1&43e31QTbb_zE9Va&A4cR#3! zGPICDbgeFK-bZl=5}SfweWQ|C20&Q@SE~H(V43oLe|TB&lE8*w_PKyMpGg4h-J%MJ zn5HL>&_^=TlC~)gZal&}A;ys2me{Zlx4ZxaUhdG+27_Vqv{axB9Fg8dmd~#xtTsiDaLcT;Rog(mp zBIb?V)OT|Ii0u%hx2H+FmV5g{ngUjxA)FU(Y-5j>;{O1&B05hrq?bBKxxV`dLH8ow zV&(u4rVPk?M;y|~4Qn6&0O|*jK>3Zd?9h~5-;0J91`+w&$cRxPV1vY3?t=guq(3YK z3BT%d?%~3*DG_<^ZJ`gcTAm&xn;1qkrljsEM;e=Iwo&BS^ReFy;4(B)Pu=7RgIl z(B-+jTIhtZF6#Wh2p;=@7y)P>bNt#6C*hl$OL&PLhSWVf{?QCT1p0gX$06t0F~)vF z_5EV}EF`*;%uBZ0Lm(txU7K$fwPOFO>aR`!GJn{VeVx|GFXybFCckK~m&g?dCtR^G^PIRyXw=WVoK7Z0La$mptL~BruHet`{5<%bw5FXq-1LZ!^W3--=ckt~A z%a0GdIfaw}u+l$hl6@oF_KJK02p$FDaxHg@M#OO(Dn7CFh#I?taT8&%y`it=SJ(B2 u&;Hko;6=lDJVGOfJ))P#xq*K-(g=b=Y*akLQ7%}tQnnD2aTX`FfB)I1Cgu46 literal 0 HcmV?d00001 diff --git a/pypot-master/pypot-master/doc/conf.py b/pypot-master/pypot-master/doc/conf.py new file mode 100644 index 0000000..2124bdd --- /dev/null +++ b/pypot-master/pypot-master/doc/conf.py @@ -0,0 +1,257 @@ +# -*- coding: utf-8 -*- +# +# Pypot documentation build configuration file, created by +# sphinx-quickstart on Sat Sep 15 18:52:00 2012. +# +# This file is execfile()d with the current directory set to its containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys +import os +import re + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# sys.path.insert(0, os.path.abspath('..')) + +# -- General configuration ----------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. +extensions = ['sphinx.ext.autodoc', + 'sphinx.ext.intersphinx', + 'sphinx.ext.viewcode', + 'sphinx.ext.coverage', + 'sphinxjp.themes.basicstrap'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = 'pypot' +copyright = '2015, Poppy-Project' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. + + +def version(): + with open('../pypot/_version.py') as f: + return re.search(r"^__version__ = ['\"]([^'\"]*)['\"]", f.read()).group(1) + +version = release = version() + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +#language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['_build'] + +# The reST default role (used for this markup: `text`) to use for all documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + +autoclass_content = 'both' +autodoc_member_order = 'bysource' + +# -- Options for HTML output --------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +#html_theme = 'sphinxdoc' +html_theme = 'basicstrap' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +html_logo = 'pypot_logo-144x144.png' + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +html_favicon = 'pypot_logo-48x48.png' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'Pypotdoc' + + +# -- Options for LaTeX output -------------------------------------------------- + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + #'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + #'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + #'preamble': '', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass [howto/manual]). +latex_documents = [ + ('index', 'Pypot.tex', 'Pypot Documentation', + 'Poppy-Project', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +latex_logo = 'pypot_logo.png' + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output -------------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + ('index', 'pypot', 'Pypot Documentation', + ['Poppy-Project'], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------------ + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ('index', 'pypot', 'Pypot Documentation', + 'Poppy-Project', 'Pypot', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' + + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = {'http://docs.python.org/': None} diff --git a/pypot-master/pypot-master/doc/controller.rst b/pypot-master/pypot-master/doc/controller.rst new file mode 100644 index 0000000..8a007b8 --- /dev/null +++ b/pypot-master/pypot-master/doc/controller.rst @@ -0,0 +1,335 @@ +.. _controller: + +Robot Controller +================ + +Using the robot abstraction +--------------------------- + +While the :ref:`low_level` provides access to all functionalities of the dynamixel motors, it forces you to have synchronous calls which can take a non-negligible amount of time. In particular, most programs will need to have a really fast read/write synchronization loop, where we typically read all motor position, speed, load and set new values, while in parallel we would like to have higher level code that computes those new values. This is pretty much what the robot abstraction is doing for you. More precisely, through the use of the class :class:`~pypot.robot.robot.Robot` you can: + +* automatically initialize all connections (make transparent the use of multiple USB2serial connections), +* define :attr:`~pypot.dynamixel.motor.DxlMotor.offset` and :attr:`~pypot.dynamixel.motor.DxlMotor.direct` attributes for motors, +* automatically define accessor for motors and their most frequently used registers (such as :attr:`~pypot.dynamixel.motor.DxlMotor.goal_position`, :attr:`~pypot.dynamixel.motor.DxlMotor.present_speed`, :attr:`~pypot.dynamixel.motor.DxlMotor.present_load`, :attr:`~pypot.dynamixel.motor.DxlMXMotor.pid`, :attr:`~pypot.dynamixel.motor.DxlMotor.compliant`), +* define read/write synchronization loop that will run in background. + + +We will first see how to define your robot thanks to the writing of a :ref:`configuration `, then we will describe how to set up :ref:`synchronization loops `. Finally, we will show how to easily :ref:`control this robot through asynchronous commands `. + + + +.. _config_file: + +Writing the configuration +------------------------- + +The configuration, described as a Python dictionary, contains several important features that help build both your robot and the software to manage you robot. The important fields are listed below: + +* **controllers** - This key holds the information pertaining to a controller and all the items connected to its bus. +* **motors** - This is a description of all the custom setup values for each motor. Meta information, such as the motor access name or orientation, is also included here. It is also there that you will set the angle limits of the motor. +* **motorgroups** - This is used to define alias of a group of motors (e.g. left_leg). + +.. note:: The configuration can be written programmatically or can be loaded from any file that can be loaded as a dict (e.g. a JSON file). + +Now let's detail each section. To better understand how the configuration is structure it is probably easier to start from one of the example provided with pypot and modify it (e.g. :obj:`pypot.robot.config.ergo_robot_config`): + +#. **controllers**: You can have a single or multiple :class:`~pypot.dynamixel.controller.DxlController`. For each of them, you should indicate whether or not to use the SYNC_READ instruction (only the USB2AX device currently supported it). When you describe your controller, you must also include the port that the device is connected to (see :ref:`open_connection`). In this section, you can also specify which robotis protocol to use (if not specified it uses the v1). You also have to specify which motors are attached to this bus. You can either give individual motors or groups (see the sections below):: + + my_config['controllers'] = {} + my_config['controllers']['upper_body_controler'] = { + 'port': '/dev/ttyUSB0', + 'sync_read': False, + 'attached_motors': ['torso', 'head', 'arms'], + 'protocol': 1, + } + +#. **motorgroups**: Here, you can define the different motors group corresponding to the structure of your robot. It will automatically create an alias for the group. Groups can be nested, i.e. a group can be included inside another group, as in the example below:: + + my_config['motorgroups'] = { + 'torso': ['arms', 'head_x', 'head_y'], + 'arms': ['left_arm', 'right_arm'], + 'left_arm': ['l_shoulder_x', 'l_shoulder_y', 'l_elbow'], + 'right_arm': ['r_shoulder_x', 'r_shoulder_y', 'r_elbow'] + } + +#. **motors**: Then, you add all the motors. The attributes are not optional and describe how the motors can be used in the software. You have to specify the type of motor, it will change which attributes are available (e.g. compliance margin versus pid gains). The name and id are used to access the motor specifically. Orientation describes whether the motor will act in an anti-clockwise fashion (direct) or clockwise (indirect). You should also provide the angle limits of your motor. They will be checked automatically at every start up and changed if needed:: + + my_config['motors'] = {} + my_config['motors']['l_hip_y'] = { + 'id': 11, + 'type': 'MX-28', + 'orientation': 'direct', + 'offset': 0.0, + 'angle_limit': (-90.0, 90.0), + } + + +#. This is all you need to create and interact with your robot. All that remains is to connect your robot to your computer. To create your robot use the :func:`~pypot.robot.config.from_config` function which takes your configuration as an argument. Here is an example of how to create your first robot and start using it:: + + import pypot.robot + + robot = pypot.robot.from_config(my_config) + + for m in robot.left_arm: + print(m.present_position) + +#. (optional) If you prefer working with file, you can read/write your config to any format that can be transformed into a dictionary. For instance, you can easily use the JSON format:: + + import json + + import pypot.robot + + from pypot.robot.config import ergo_robot_config + + with open('ergo.json', 'w') as f: + json.dump(ergo_robot_config, f, indent=2) + + ergo = pypot.robot.from_json('ergo.json') + + +To give you a complete overview of what your config should look like, here is the listing of the Ergo-Robot config dictionary:: + + ergo_robot_config = { + 'controllers': { + 'my_dxl_controller': { + 'sync_read': False, + 'attached_motors': ['base', 'tip'], + 'port': 'auto' + } + }, + 'motorgroups': { + 'base': ['m1', 'm2', 'm3'], + 'tip': ['m4', 'm5', 'm6'] + }, + 'motors': { + 'm5': { + 'orientation': 'indirect', + 'type': 'MX-28', + 'id': 15, + 'angle_limit': [-90.0, 90.0], + 'offset': 0.0 + }, + 'm4': { + 'orientation': 'direct', + 'type': 'MX-28', + 'id': 14, + 'angle_limit': [-90.0, 90.0], + 'offset': 0.0 + }, + 'm6': { + 'orientation': 'indirect', + 'type': 'MX-28', + 'id': 16, + 'angle_limit': [-90.0, 90.0], + 'offset': 0.0 + }, + 'm1': { + 'orientation': 'direct', + 'type': 'MX-28', 'id': 11, + 'angle_limit': [-90.0, 90.0], + 'offset': 0.0 + }, + 'm3': { + 'orientation': 'indirect', + 'type': 'MX-28', + 'id': 13, + 'angle_limit': [-90.0, 90.0], + 'offset': 0.0 + }, + 'm2': { + 'orientation': 'indirect', + 'type': 'MX-28', + 'id': 12, + 'angle_limit': [-90.0, 90.0], + 'offset': 0.0 + } + } + } + + +Since pypot 1.7, you can now set the port to 'auto' in the dictionary. When loading the configuration, pypot will automatically try to find the port with the corresponding attached motor ids. + +.. note:: While this is convenient as the same config file can be use on multiple machine, it also slows the creation of the :class:`~pypot.robot.robot.Robot`. + + +Auto-detection and generation of the configuration +-------------------------------------------------- + +Pypot provides another way of creating your :class:`~pypot.robot.robot.Robot`. The :func:`~pypot.dynamixel.autodetect_robot` can scan all dynamixel ports plugged and find all connected motors. It then returns the corresponding :class:`~pypot.robot.robot.Robot`. For instance:: + + from pypot.dynamixel import autodetect_robot + + my_robot = autodetect_robot() + + for m in my_robot.motors: + m.goal_position = 0.0 + +.. note:: As the :func:`~pypot.dynamixel.autodetect_robot` function scans all available ports, it can be quite slow (few seconds). So this should be used to first discover the robot configuration and then export it (see below). + +If you have manually created your :class:`~pypot.robot.robot.Robot` (or thanks to the :func:`~pypot.dynamixel.autodetect_robot` function), you can then use the :meth:`~pypot.robot.Robot.to_config` method to export the :class:`~pypot.robot.robot.Robot` current configuration. + +This configuration can then be easily saved:: + + import json + + config = my_robot.to_config() + + with open('my_robot.json', 'wb') as f: + json.dump(config, f) + +You can then easily re-create your robot:: + + from pypot.robot import from_json + + my_robot = from_json('my_robot.json') + +.. _sync_loop: + +Dynamixel controller and Synchronization Loop +--------------------------------------------- + +As indicated above, the :class:`~pypot.robot.robot.Robot` held instances of :class:`~pypot.dynamixel.motor.DxlMotor`. Each of this instance represents a real motor of your physical robot. The attributes of those "software" motors are automatically synchronized with the real "hardware" motors. In order to do that, the :class:`~pypot.robot.robot.Robot` class uses a :class:`~pypot.dynamixel.controller.DxlController` which defines synchronization loops that will read/write the registers of dynamixel motors at a predefined frequency. + +.. warning:: The synchronization loops will try to run at the defined frequency, however don't forget that you are limited by the bus bandwidth! For instance, depending on your robot you will not be able to read/write the position of all motors at 100Hz. Moreover, the loops are implemented as python thread and we can thus not guarantee the exact frequency of the loop. + +If you looked closely at the example above, you could have noticed that even without defining any controller nor synchronization loop, you can already read the present position of the motors. Indeed, by default the class :class:`~pypot.robot.robot.Robot` uses a particular controller :class:`~pypot.dynamixel.controller.BaseDxlController` which already defines synchronization loops. More precisely, this controller: + +* reads the present position, speed, load at 50Hz, +* writes the goal position, moving speed and torque limit at 50Hz, +* writes the pid or compliance margin/slope (depending on the type of motor) at 10Hz, +* reads the present temperature and voltage at 1Hz. + +So, in most case you should not have to worry about synchronization loop and it should directly work. Off course, if you want to synchronize other values than the ones listed above you will have to modify this default behavior. + +.. note:: With the current version of pypot, you can not indicate in the configuration which subclasses of :class:`~pypot.dynamixel.controller.DxlController` you want to use. This feature should be added in a future version. If you want to use your own controller, you should either modify the config parser, modify the :class:`~pypot.dynamixel.controller.BaseDxlController` class or directly instantiate the :class:`~pypot.robot.robot.Robot` class. + +The synchronization loops are automatically started when instantiating your robot, the method :meth:`~pypot.robot.robot.Robot.start_sync` is directly called. You can also stop the synchronization if needed (see the :meth:`~pypot.robot.robot.Robot.stop_sync` method). Note that prior to version 2, the synchronization is not started by default. + +.. warning:: You should never set values to motors when the synchronization is not running. + +Now you have a robot that is reading and writing values to each motor in an infinite loop. Whenever you access these values, you are accessing only their most recent versions that have been read at the frequency of the loop. This automatically make the synchronization loop run in background. You do not need to wait the answer of a read command to access data (this can take some time) so that algorithms with heavy computation do not encounter a bottleneck when values from motors must be known. + +Now you are ready to create some behaviors for your robot. + + +.. _control_robot: + +Controlling your robot +---------------------- + +Controlling in position ++++++++++++++++++++++++ + +As shown in the examples above, the robot class let you directly access the different motors. For instance, let's assume we are working with an Ergo-robot, you could then write:: + + import pypot.robot + + from pypot.robot.config import ergo_robot_config + + robot = pypot.robot.from_config(ergo_robot_config) + + # Note that all these calls will return immediately, + # and the orders will not be directly sent + # (they will be sent during the next write loop iteration). + for m in ergo_robot.base: + m.compliant = False + m.goal_position = 0 + + # This will return the last synchronized value + print(ergo_robot.base_pan.present_position) + +For a complete list of all the attributes that you can access, you should refer to the :class:`~pypot.dynamixel.motor.DxlMotor` API. + +As an example of what you can easily do with the Robot API, we are going to write a simple program that will make a robot with two motors move with sinusoidal motions. More precisely, we will apply a sinusoid to one motor and the other one will read the value of the first motor and use it as its own goal position. We will still use an Ergo-robot as example:: + + import time + import numpy + + import pypot.robot + + from pypot.robot.config import ergo_robot_config + + amp = 30 + freq = 0.5 + + robot = pypot.robot.from_config(ergo_robot_config) + + # Put the robot in its initial position + for m in ergo_robot.motors: # Note that we always provide an alias for all motors. + m.compliant = False + m.goal_position = 0 + + # Wait for the robot to actually reach the base position. + time.sleep(2) + + # Do the sinusoidal motions for 10 seconds + t0 = time.time() + + while True: + t = time.time() - t0 + + if t > 10: + break + + pos = amp * numpy.sin(2 * numpy.pi * freq * t) + + ergo_robot.base_pan.goal_position = pos + + # In order to make the other sinus more visible, + # we apply it with an opposite phase and we increase the amplitude. + ergo_robot.head_pan.goal_position = -1.5 * ergo_robot.base_pan.present_position + + # We want to run this loop at 50Hz. + time.sleep(0.02) + + +Controlling in speed +++++++++++++++++++++ + +Thanks to the :attr:`~pypot.dynamixel.motor.DxlMotor.goal_speed` property you can also control your robot in speed. More precisely, by setting :attr:`~pypot.dynamixel.motor.DxlMotor.goal_speed` you will change the :attr:`~pypot.dynamixel.motor.DxlMotor.moving_speed` of your motor but you will also automatically change the :attr:`~pypot.dynamixel.motor.DxlMotor.goal_position` that will be set to the angle limit in the desired direction. + + +.. note:: You could also use the wheel mode settings where you can directly change the :attr:`~pypot.dynamixel.motor.DxlMotor.moving_speed`. Nevertheless, while the motor will turn infinitely with the wheel mode, here with the :attr:`~pypot.dynamixel.motor.DxlMotor.goal_speed` the motor will still respect the angle limits. + + +As an example, you could write:: + + t = numpy.arange(0, 10, 0.01) + speeds = amp * numpy.cos(2 * numpy.pi * freq * t) + + positions = [] + + for s in speeds: + ergo_robot.head_pan.goal_speed = s + positions.append(ergo_robot.head_pan.present_position) + time.sleep(0.05) + + # By applying a cosinus on the speed + # You observe a sinusoid on the position + plot(positions) + +.. warning:: If you set both :attr:`~pypot.dynamixel.motor.DxlMotor.goal_speed` and :attr:`~pypot.dynamixel.motor.DxlMotor.goal_position` only the last command will be executed. Unless you know what you are doing, you should avoid to mix these both approaches. + +Closing the robot +----------------- + +To make sure that everything gets cleaned correctly after you are done using your :class:`~pypot.robot.robot.Robot`, you should always call the :meth:`~pypot.robot.robot.Robot.close` method. Doing so will ensure that all the controllers attached to this robot, and their associated dynamixel serial connection, are correctly stopped and cleaned. + +.. note:: Note calling the :meth:`~pypot.robot.robot.Robot.close` method on a :class:`~pypot.robot.robot.Robot` can prevent you from opening it again without terminating your current Python session. Indeed, as the destruction of object is handled by the garbage collector, there is no mechanism which guarantee that we can automatically clean it when destroyed. + +When closing the robot, we also send a stop signal to all the primitives running and wait for them to terminate. See section :ref:`my_prim` for details on what we call primitives. + +.. warning:: You should be careful that all your primitives correctly respond to the stop signal. Indeed, having a blocking primitive will prevent the :meth:`~pypot.robot.robot.Robot.close` method to terminate (please refer to :ref:`start_prim` for details). + +Thanks to the :func:`contextlib.closing` decorator you can easily make sure that the close function of your robot is always called whatever happened inside your code:: + + from contextlib import closing + + import pypot.robot + + # The closing decorator make sure that the close function will be called + # on the object passed as argument when the with block is exited. + + with closing(pypot.robot.from_json('myconfig.json')) as my_robot: + # do stuff without having to make sure not to forget to close my_robot! + pass diff --git a/pypot-master/pypot-master/doc/controlling_robot.rst b/pypot-master/pypot-master/doc/controlling_robot.rst new file mode 100644 index 0000000..bef00f3 --- /dev/null +++ b/pypot-master/pypot-master/doc/controlling_robot.rst @@ -0,0 +1,17 @@ + +Controlling robot +***************** + +Pypot handles the communication with dynamixel motors from robotis. Using a USB communication device such as USB2DYNAMIXEL or USB2AX, you can open serial communication with robotis motors (MX, RX, AX and XL320) using communication protocols TTL or RS485. More specifically, it allows easy access (both reading and writing) to the different registers of any dynamixel motors. Those registers includes values such as position, speed or torque. The whole list of registers can directly be found on the `robotis website `_. + +You can access the register of the motors through two different ways: + +* **Low-level API:** In the first case, you can get or set a value to a motor by directly sending a request and waiting for the motor to answer. Here, you only use the low level API to communicate with the motor (refer to section :ref:`low_level` for more details). + +* **Controller API:** In the second case, you define requests which will automatically be sent at a predefined frequency. The values obtained from the requests are stored in a local copy that you can freely access at any time. However, you can only access the last synchronized value. This second method encapsulates the first approach to prevent you from writing repetitive request (refer to section :ref:`controller` for further details). + +While the second approach allows the writing of simpler code without detailed knowledge of how the communication with robotis motor works, the first approach may allow for more performance through fine tuning of the communication needed in particular applications. Examples of both approaches will be provided in the next sections. + +.. toctree:: + dynamixel.rst + controller.rst diff --git a/pypot-master/pypot-master/doc/dynamixel.rst b/pypot-master/pypot-master/doc/dynamixel.rst new file mode 100644 index 0000000..44f7f9f --- /dev/null +++ b/pypot-master/pypot-master/doc/dynamixel.rst @@ -0,0 +1,168 @@ +.. _low_level: + +Dynamixel Low-level IO +====================== + +The low-level API almost directly encapsulates the communication protocol used by dynamixel motors. This protocol can be used to access any register of these motors. The :py:class:`~pypot.dynamixel.io.io.DxlIO` class is used to handle the communication with a particular port. + +.. note:: The port can only be accessed by a single DxlIO instance. + +More precisely, this class can be used to: + +* open/close the communication +* discover motors (ping or scan) +* access the different control (read and write) + +The communication is thread-safe to avoid collision in the communication buses. + + +As an example, you can write:: + + import itertools + + with DxlIO('/dev/USB0') as dxl_io: + ids = dxl_io.scan([1, 2, 3, 4, 5]) + + print(dxl_io.get_present_position(ids)) + dxl_io.set_goal_position(dict(zip(ids, itertools.repeat(0)))) + + +.. note:: Since pypot version 2.2, support for the robotis protocol v2 and for XL-320 motors has been added. To avoid confusion there is a another class that should be used: :py:class:`~pypot.dynamixel.io.io_320.Dxl320IO` in this case. + +.. _open_connection: + +Opening/Closing a communication port +------------------------------------ + +In order to open a connection with the device, you will need to know what port it is connected to. Pypot has a function named :func:`~pypot.dynamixel.get_available_ports` which will try to auto-discover any compatible devices connected to the communication ports. + +To create a connection, open up a python terminal and type the following code:: + + import pypot.dynamixel + + ports = pypot.dynamixel.get_available_ports() + + if not ports: + raise IOError('no port found!') + + print('ports found', ports) + + print('connecting on the first available port:', ports[0]) + dxl_io = pypot.dynamixel.DxlIO(ports[0]) + +This should open a connection through a virtual communication port to your device. + +.. warning:: It is important to note that it will open a connection using a default baud rate. By default your motors are set up to work on the robotis default baud rate (57140) while pypot is set up to work with a 1000000 baud rate. To communicate with your motors, you must ensure that this baud rate is the same baud rate that the motors are configure to use. So, you will need to change either the configuration of your motors (see `the Herborist tool `_.) or change the default baud rate of your connection. + +To set up a connection with another baud rate you can write:: + + dxl_io = pypot.dynamixel.DxlIO(port, baudrate=57600) + +The communication can be closed using the :meth:`~pypot.dynamixel.io.DxlIO.close` method. + +.. note:: The class :class:`~pypot.dynamixel.io.DxlIO` can also be used as a `Context Manager `_ (the :meth:`~pypot.dynamixel.io.DxlIO.close` method will automatically be called at the end). + For instance:: + + with pypot.dynamixel.DxlIO('/dev/ttyUSB0') as dxl_io: + ... + +Finding motors +-------------- + +Pypot has been designed to work specifically with the Robotis range of motors. These motors use two different protocols to communicate: TTL (3 wire bus) and RS485 (4 wire Bus). The motors can be daisy chained together with other types of motors on the same bus *as long as the bus communicates using the same protocol*. This means that MX-28 and AX-12 can communicate on the same bus, but cannot be connected to a RX-28. + +All motors work sufficiently well with a 12V supply. Some motors can use more than 12V but you must be careful not to connect an 18V supply on a bus that contains motors that can only use 12V! Connect this 12V SMPS supply (switch mode power supply) to a Robotis SMPS2Dynamixel device which regulates the voltage coming from the SMPS. Connect your controller device and a single motor to this SMPS2Dynamixel. + +Open your python terminal and create your :class:`~pypot.dynamixel.io.DxlIO` as described in the above section :ref:`open_connection`. + +To detect the motors and find their id you can scan the bus. To avoid spending a long time searching all possible values, you can add a list of values to test:: + + dxl_io.scan() + >>> [4, 23, 24, 25] + + dxl_io.scan([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) + >>> [4] + +Or, you can use the shorthand:: + + dxl_io.scan(range(10)) + >>> [4] + +This should produce a list of the ids of the motors that are connected to the bus. Each motor on the bus must have a unique id. This means that unless your motors have been configured in advance, it is better to connect them one by one to ensure they all have unique ids first. + +.. note:: You also can modify the timeout to speed up the scanning. Be careful though, as this could result in loosing messages. + + +Low-level control +----------------- + +Now we have the id of the motors connected, we can begin to access their functions by using their id. Try to find out the present position (in degrees) of the motor by typing the following:: + + dxl_io.get_present_position((4, )) + >>> (67.8, ) + +You can also write a goal position (in degrees) to the motor using the following:: + + dxl_io.set_goal_position({4: 0}) + +The motors are handled in degrees where 0 is considered the central point of the motor turn. For the MX motors, the end points are -180° and 180°. For the AX and RX motors, these end points are -150° to 150°. + +.. warning:: As you can see on the example above, you should always pass the id parameter as a list. This is intended as getting a value from several motors takes the same time as getting a value from a single motor (thanks to the SYNC_READ instruction). Similarly, we use dictionary with pairs of (id, value) to set value to a specific register of motors and benefit from the SYNC_WRITE instruction. + +As an example of what you can do with the low-level API, we are going to apply a sinusoid on two motors (make sure that the motion will not damage your robot before running the example!). Here is a complete listing of the code needed:: + + import itertools + import numpy + import time + + import pypot.dynamixel + + AMP = 30 + FREQ = 0.5 + + if __name__ == '__main__': + ports = pypot.dynamixel.get_available_ports() + print('available ports:', ports) + + if not ports: + raise IOError('No port available.') + + port = ports[0] + print('Using the first on the list', port) + + dxl_io = pypot.dynamixel.DxlIO(port) + print('Connected!') + + found_ids = dxl_io.scan() + print('Found ids:', found_ids) + + if len(found_ids) < 2: + raise IOError('You should connect at least two motors on the bus for this test.') + + ids = found_ids[:2] + + dxl_io.enable_torque(ids) + + speed = dict(zip(ids, itertools.repeat(200))) + dxl_io.set_moving_speed(speed) + pos = dict(zip(ids, itertools.repeat(0))) + dxl_io.set_goal_position(pos) + + + t0 = time.time() + while True: + t = time.time() + if (t - t0) > 5: + break + + pos = AMP * numpy.sin(2 * numpy.pi * FREQ * t) + dxl_io.set_goal_position(dict(zip(ids, itertools.repeat(pos)))) + + time.sleep(0.02) + + + +Thanks to pypot, you can access all registers of your motors using the same syntax (e.g. :meth:`~pypot.dynamixel.io.DxlIO.get_present_speed`, :meth:`~pypot.dynamixel.io.DxlIO.set_max_torque`, :meth:`~pypot.dynamixel.io.DxlIO.get_pid_gain`). Some shortcuts have been provided to make the code more readable (e.g. :meth:`~pypot.dynamixel.io.DxlIO.enable_torque` instead of set_torque_enabled). All the getter functions takes a list of ids as argument and the setter takes a dictionary of (id: value) pairs. You can refer to the documentation of :class:`~pypot.dynamixel.io.DxlIO` for a complete list of all the available methods. + + +.. note:: Pypot provides an easy way to extend the code and automatically create methods to access new registers added by robotis. diff --git a/pypot-master/pypot-master/doc/extending.rst b/pypot-master/pypot-master/doc/extending.rst new file mode 100644 index 0000000..d305b0b --- /dev/null +++ b/pypot-master/pypot-master/doc/extending.rst @@ -0,0 +1,81 @@ +.. _extending: + +Extending pypot +=============== + +While pypot has been originally designed for controlling dynamixel based robots, it became rapidly obvious that it would be really useful to easily: + +* control other types of motor (e.g. servo-motors controlled using PWM) +* control an entire robot composed of different types of motors (using dynamixel for the legs and smaller servo for the hands for instance) + +While it was already possible to do such things in pypot, the library has been partially re-architectured in version 2.x to better reflect those possibilities and most importantly make it easier for contributors to add the layer needed for adding support for other types of motors. + +.. note:: While in most of this documentation, we will show how support for other motors can be added, similar methods can be applied to also support other sensors. + +The rest of this section will describe the main concept behing pypot's architecture and then give examples of how to extend it. + +Pypot's architecture +-------------------- + +Pypot's architecture is built upon the following basic concepts: + +* **I/O**: low-level layer handling the communication with motors or sensors. This abstract layer has been designed to be as generic as possible. The idea is to keep each specific communication protocol separated from the rest of the architecture and allow for an easy replacement of an IO by another one - such an example is detailed in the next section when `dynamixel IO `_ is replaced by the `communication layout with the VREP `_ simulator. + +* **Controller**: set of update loops to keep an (or multiple) "hardware" device(s) up to date with their "software" equivalent. This synchronization can goes only from the hard to the soft (e.g. in the case of a sensor) or both ways (e.g. for reading motor values and sending motor commands). The calls can be asynchronous or synchronous, each controller can have its own refresh frequency. An example of :class:`~pypot.robot.controller.Controller` is the :class:`~pypot.dynamixel.controller.DxlController` which synchronizes position/speed/load of all motors on a dynamixel bus in both directions. + +* **Robot**: The robot layer is a pure abstraction which aims at bringing together different types of motors and sensors. This high-level is most likely to be the one accessed by the end-user which wants to directly control the motors of its robot no matter what is the IO used underneath. The robot can be directly created using a `configuration file `_ describing all IO and Controllers used. + +* **Primitive**: independent behaviors applied to a robot. They are not directly accessing the robot registers but are first combined through a `Primitive Manager `_ which sends the results of this combination to the robot. This abstraction is used to designed behavioral-unit that can be combined into more complex behaviors (e.g. a walking primitive and and balance primitive combined to obtain a balanced-walking). Primitives are also a convenient way to monitor or remotely access a robot - ensuring some sort of sandboxing. + +Those main aspects of pypot's architecture are summarized in the figure below. + +.. image:: pypot-archi.jpg + :width: 60% + :align: center + +Adding another layer +-------------------- + +If you want to add support for the brand new servo-motors in pypot or the new mindblowing sensor, you are in the right section. As an example of how you should proceed, we will describe how support for the `V-REP simulator `_ was added and how it allows for a seamless switch from real to simulated robot. + +Adding support for the V-REP simulator in pypot could be sum up in three main steps: + +* Writing the low-level IO for V-REP. +* Writing the controller to synchronize pypot's :class:`~pypot.robot.robot.Robot` with the V-REP's one. +* Integrates it to a :class:`~pypot.robot.robot.Robot` + +Writing a new IO +++++++++++++++++ + +In pypot's architecture, the IO aims at providing convenient methods to access (read/write) value from a device - which could be a motor, a camera, or a simulator. It is the role of the IO to handle the communication: + +* open/close the communication channel, +* encapsulate the protocol. + +For example, the :class:`~pypot.dynamixel.io.DxlIO` (for dynamixel buses) open/closes the serial port and provides high-level methods for sending dynamixel packet - e.g. for getting a motor position. Similarly, writing the :class:`~pypot.vrep.io.VrepIO` consists in opening the communication socket to the V-REP simulator (thanks to `V-REP's remote API `_) and then encapsulating all methods for getting/setting all the simulated motors registers. + +.. warning:: While this is not by any mean mandatory, it is often a good practice to write all IO access as synchronous calls. The higher-level synchronization loop is usually written as a :class:`~pypot.robot.controller.AbstractController`. + +The IO should also handle the low-level communication errors. For instance, the :class:`~pypot.dynamixel.io.DxlIO` automatically handles the timeout error to prevent the whole communication to stop. + +.. note:: Once the new IO is written most of the integration into pypot should be done! To facilitate the integration of the new IO with the higher layer, we strongly recommend to take inspiration from the existing IO - especially the :class:`~pypot.dynamixel.io.DxlIO` and the :class:`~pypot.vrep.io.VrepIO` ones. + +Writing a new Controller +++++++++++++++++++++++++ + +A :class:`~pypot.robot.controller.Controller` is basically a synchronization loop which role is to keep up to date the state of the device and its "software" equivalent - through the associated IO. + +In the case of the :class:`~pypot.dynamixel.controller.DxlController`, it runs a 50Hz loop which reads the actual position/speed/load of the real motor and sets it to the associated register in the :class:`~pypot.dynamixel.motor.DxlMotor`. It also reads the goal position/speed/load set in the :class:`~pypot.dynamixel.motor.DxlMotor` and sends them to the "real" motor. + +As most controller will have the same general structure - i.e. calling a sync. method at a predefined frequency - pypot provides an abstract class, the :class:`~pypot.robot.controller.AbstractController`, which does exactly that. If your controller fits within this conception, you should only have to overide the :meth:`~pypot.robot.controller.AbstractController.update` method. + +In the case of the :class:`~pypot.vrep.controller.VrepController`, the update loop simply retrieves each motor's present position and send the new target position. A similar approach is used to retrieve values form V-REP sensors. + +.. note:: Each controller can run at its own pre-defined frequency and live within its own thread. Thus, the update never blocks the main thread and you can used tight synchronization loop where they are needed (e.g. for motor's command) and slower one when latency is not a big issue (e.g. a temperature sensor). + +Integrates it into the Robot +++++++++++++++++++++++++++++ + +Once you have defined your Controller, you most likely want to define a convenient factory functions (such as :func:`~pypot.robot.config.from_config` or :func:`~pypot.vrep.from_vrep`) allowing users to easily instantiate their :class:`~pypot.robot.robot.Robot` with the new Controller. + +By doing so you will permit them to seamlessly uses your interface with this new device without changing the high-level API. For instance, as both the :class:`~pypot.dynamixel.controller.DxlController` and the :class:`~pypot.vrep.controller.VrepController` only interact with the :class:`~pypot.robot.robot.Robot` through getting and setting values into :class:`~pypot.robot.motor.Motor` instances, they can be directly switch. diff --git a/pypot-master/pypot-master/doc/index.rst b/pypot-master/pypot-master/doc/index.rst new file mode 100644 index 0000000..7a20ec4 --- /dev/null +++ b/pypot-master/pypot-master/doc/index.rst @@ -0,0 +1,61 @@ +.. Pypot documentation master file, created by + sphinx-quickstart on Sat Sep 15 18:52:00 2012. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Pypot +***** + +Welcome to pypot's documentation! +================================= + +**Introduction** + +.. toctree:: + :titlesonly: + :maxdepth: 2 + + about.rst + installation.rst + quickstart.rst + +.. _tutorial: + +**Tutorial** + +.. toctree:: + :titlesonly: + :maxdepth: 2 + + controlling_robot.rst + primitive.rst + vrep.rst + extending.rst + remote_access.rst + logging.rst + + +**Tools** + +.. toctree:: + :titlesonly: + :maxdepth: 2 + + move.rst + + +**Misc** + +.. toctree:: + :titlesonly: + :maxdepth: 1 + + api.rst + FAQ.rst + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/pypot-master/pypot-master/doc/installation.rst b/pypot-master/pypot-master/doc/installation.rst new file mode 100644 index 0000000..4a1f3ce --- /dev/null +++ b/pypot-master/pypot-master/doc/installation.rst @@ -0,0 +1,105 @@ +.. _installation: + +Installation +============ +Requirements +------------------- +Pypot is written in `python `__ and need a python interpreter to be run. Moreover pypot has `scipy `_ and `numpy `_ for dependencies, as they are not fully written in python they need system side packages to be build, it easier to use pre-build binaries for your operating system. + +Windows +~~~~~~~~~~~~~~~~~~~ +Install Python for Windows, then you can install pypot with `pip <#via-python-packages>`_ in the command prompt. + +GNU/Linux +~~~~~~~~~~~~~~~~~~~ +Use the binaries provided by your default package manager. + +On Ubuntu & Debian:: + + sudo apt-get install python-pip python-numpy python-scipy python-matplotlib + +On Fedora:: + + sudo yum install python-pip numpy scipy python-matplotlib + +On Arch Linux:: + + sudo pacman -S python2-pip python2-scipy python2-numpy python2-matplotlib + +After that, you can install pypot with `pip <#via-python-packages>`_. + +Mac OSX +~~~~~~~~~~~~~~~~~~~ +Mac OSX (unlike GNU/Linux distributions) don’t come with a package manager, but there are a couple of popular package managers you can install, like `Homebrew `_. + +The easier way is to install `Homebrew `_. You have to type these commands in a terminal:: + + ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" + +An use Homebrew to install python:: + + brew install python + +After that, you can install pypot with `pip <#via-python-packages>`_. + + +Via Python Packages +------------------- +The pypot package is entirely written in Python. So, the install process should be rather straightforward. You can directly install it via easy_install or pip:: + + pip install pypot + +**or**:: + + easy_install pypot + +The up to date archive can also be directly downloaded `here `_. + +If you are on a GNU/Linux operating system, you will need to execute the above commands with **sudo**. + +From the source code +-------------------- + +You can also install it from the source. You can clone/fork our repo directly on `github `_. + +Before you start building pypot, you need to make sure that the following packages are already installed on your computer: + +* `python `_ +* `pyserial `_ +* `numpy `_ +* `scipy `_ +* `enum34 `_ + +Other optional packages may be installed depending on your needs: + +* `sphinx `_ and `sphinx-bootstrap-theme `_ (to build the doc) +* `PyQt4 `_ (for the graphical tools) +* `bottle `_ and `tornado `_ for REST API support and http-server + +Once it is done, you can build and install pypot with the classical:: + + cd pypot + sudo python setup.py install + +Testing your install +-------------------- + +You can test if the installation went well with:: + + python -c "import pypot" + +You will also have to install the driver for the USB2serial port. There are two devices that have been tested with pypot that could be used: + +* USB2AX - this device is designed to manage TTL communication only +* USB2Dynamixel - this device can manage both TTL and RS485 communication. + +On Windows and Mac, it will be necessary to download and install a FTDI (VCP) driver to run the USB2Dynamixel, you can find it `here `__. Linux distributions should already come with an appropriate driver. The USB2AX device should not require a driver installation under MAC or Linux, it should already exist. For Windows XP, it should automatically install the correct driver. + +.. note:: On the side of the USB2Dynamixel there is a switch. This is used to select the bus you wish to communicate on. This means that you cannot control two different bus protocols at the same time. + +On most Linux distributions you will not have the necessary permission to access the serial port. You can either run the command in sudo or better you can add yourself to the *dialout* or the *uucp* group (depending on your distribution):: + + sudo addgroup $USER dialout + sudo addgroup $USER uucp + +At this point you should have a pypot ready to be used! In the extremely unlikely case where anything went wrong during the installation, please refer to the `issue tracker `_. diff --git a/pypot-master/pypot-master/doc/logging.rst b/pypot-master/pypot-master/doc/logging.rst new file mode 100644 index 0000000..1a86e30 --- /dev/null +++ b/pypot-master/pypot-master/doc/logging.rst @@ -0,0 +1,103 @@ +Mastering the logging system +============================ + +Pypot used the Python's builtin `logging `_ module for logging. For details on how to use this module please refer to Python's own documentation or the one on `django webstite `_. Here, we will only describe what pypot is logging and how it is organised (see section :ref:`log_struct`). We will also present a few examples on how to use pypot logging and parse the information (see section :ref:`log_ex`). + +.. _log_struct: + +Logging structure +----------------- + +Pypot is logging information at all different levels: + +* low-level dynamixel IO +* motor and robot abstraction +* within each primitive +* each request received by the server + +.. note:: As you probably do not want to log everything (pypot is sending a lot of messages!!!), you have to select in the logging structure what is relevant in your program and define it in your logging configuration. + +Pypot's logging naming convention is following pypot's architecture. Here is the detail of what pypot is logging with the associated logger's name: + +* The logger's name **pypot.dynamixel.io** is logging information related to opening/closing port (INFO) and each sent/received package (DEBUG). The communication and timeout error are also logged (WARNING). This logger always provides you the port name, the baudrate and timeout of your connection as extra information. + +* The logger **pypot.dynamixel.motor** is logging each time a register of a motor is set (DEBUG). The name of the register, the name of the motor and the set value are given in the message. + +* **pypot.robot.config** is logging information regarding the creation of a robot through a config dictionary. A message is sent for each motor, controller and alias added (INFO). A WARNING message is also sent when the angle limits of a motor are changed. We provide as extra the entire config dictionary. + +* The logger **pypot.robot.robot** is logging when the synchronization is started/stopped (INFO) and when a primitive is attached (INFO). + +* **pypot.primitive.primitive** logs a message when the primitive is started/stopped and paused/resumed (INFO). Eeach :meth:`~pypot.primitive.primitive.LoopPrimitive.update` of a LoopPrimitive is also logged (DEBUG). Each time a primitive sets a value to a register a message is also logged (DEBUG). + +* **pypot.primitive.manager** provides you information on how the values sent within primitives were combined (DEBUG). + +* **pypot.server** logs when the server is started (INFO) and each handled request (DEBUG). + +.. _log_ex: + +Using Pypot's logging +--------------------- + +As an example of what you can do with the logging system, here is how you can check the "real" update frequency of a loop primitive. + +First, you have to define a logging config. As you can see, here we specify that we only want the log coming form 'pypot.primitive' and the message is formatted so we only keep the timestamp:: + + LOGGING = { + 'version': 1, + 'disable_existing_loggers': True, + 'formatters': { + 'time': { + 'format': '%(asctime)s', + }, + }, + 'handlers': { + 'file': { + 'level': 'DEBUG', + 'class': 'logging.FileHandler', + 'filename': 'pypot.log', + 'formatter': 'time', + }, + }, + 'loggers': { + 'pypot.primitive': { + 'handlers': ['file', ], + 'level': 'DEBUG', + }, + }, + } + +Then, we just have to write a simple program, where for instance we run our dummy primitive for ten seconds:: + + import pypot.robot + [...] + + if __name__ == '__main__': + logging.config.dictConfig(LOGGING) + + r = pypot.robot.from_config(ergo_config) + + class DummyPrimitive(LoopPrimitive): + pass + + p = DummyPrimitive(r, 50) + p.start() + time.sleep(10) + p.stop() + +The execution of the program above will create a file named 'pypot.log' where each line corresponds to the timestamp of each primitive update. This file can then be easily parsed:: + + t = [] + + with open('pypot.log') as f: + for l in f.readlines(): + d = datetime.datetime.strptime('%Y-%m-%d %H:%M:%S,%f\n') + t.append(d) + + t = numpy.array(t) + dt = map(lambda dt: dt.total_seconds(), numpy.diff(t)) + dt = numpy.array(dt) * 1000 + + print(numpy.mean(dt), numpy.std(dt)) + + plot(dt) + show() diff --git a/pypot-master/pypot-master/doc/move.rst b/pypot-master/pypot-master/doc/move.rst new file mode 100644 index 0000000..7858cfd --- /dev/null +++ b/pypot-master/pypot-master/doc/move.rst @@ -0,0 +1,48 @@ +.. _move: + +Move recording and playing +========================== + +The :mod:`~pypot.primitive.move` module contains utility classes to help you record and play moves. Those :class:`~pypot.primitive.move.Move` is simply defined as a sequence of positions. + +.. note:: To keep the :mod:`~pypot.primitive.move` module as simple as possible, you can only define :class:`~pypot.primitive.move.Move` as a predefined frequency and you can not define keyframes whenever you want. This could be added if it seems like it would be useful. + +You can use the :mod:`~pypot.primitive.move` module to: + +* record moves, +* play moves, +* save/load them on the disk. + +The :class:`~pypot.primitive.move.MoveRecorder` and :class:`~pypot.primitive.move.MovePlayer` are defined as subclass of :class:`~pypot.primitive.primitive.LoopPrimitive` and can thus be used as such. For instance, if you want to record a 50Hz move on all the motor of an ergo-robot you can simply use the following code:: + + import time + import pypot.robot + + from pypot.primitive.move import MoveRecorder, Move, MovePlayer + + ergo = pypot.robot.from_config(...) + + move_recorder = MoveRecorder(ergo, 50, ergo.motors) + + ergo.compliant = True + + move_recorder.start() + time.sleep(5) + move_recorder.stop() + +This move can then be saved on disk:: + + with open('my_nice_move.move', 'w') as f: + move_recorder.move.save(f) + +And loaded and replayed:: + + with open('my_nice_move.move') as f: + m = Move.load(f) + + ergo.compliant = False + + move_player = MovePlayer(ergo, m) + move_player.start() + +.. warning:: It is important to note that you should be sure that you primitive actually runs at the same speed that the move has been recorded. If the player can not run as fast as the framerate of the recorded :class:`~pypot.primitive.move.Move`, it will be played slowly resulting in a slower version of your move. diff --git a/pypot-master/pypot-master/doc/poppy-creatures.jpg b/pypot-master/pypot-master/doc/poppy-creatures.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7661182f651c3d958d15871ebbf64916c299d550 GIT binary patch literal 305952 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 F|Jj_YTuA@` literal 0 HcmV?d00001 diff --git a/pypot-master/pypot-master/doc/primitive.rst b/pypot-master/pypot-master/doc/primitive.rst new file mode 100644 index 0000000..1de5229 --- /dev/null +++ b/pypot-master/pypot-master/doc/primitive.rst @@ -0,0 +1,147 @@ +.. _my_prim: + +Primitives everywhere +===================== + +In the previous sections, we have shown how to make a simple behavior thanks to the :class:`~pypot.robot.robot.Robot` abstraction. But how to combine those elementary behaviors into something more complex? You could use threads and do it manually, but we provide the :class:`~pypot.primitive.primitive.Primitive` to abstract most of the work for you. + +What do we call "Primitive"? +---------------------------- + +We call :class:`~pypot.primitive.primitive.Primitive` any simple or complex behavior applied to a :class:`~pypot.robot.robot.Robot`. A primitive can access all sensors and effectors in the robot. A primitive is supposed to be independent of other primitives. In particular, a primitive is not aware of the other primitives running on the robot at the same time. We imagine those primitives as elementary blocks that can be combined to create more complex blocks in a hierarchical manner. + +.. note:: The independence of primitives is really important when you create complex behaviors - such as balance - where many primitives are needed. Adding another primitive - such as walking - should be direct and not force you to rewrite everything. Furthermore, the balance primitive could also be combined with another behavior - such as shoot a ball - without modifying it. + +To ensure this independence, the primitive is running in a sort of sandbox. More precisely, this means that the primitive has not direct access to the robot. It can only request commands (e.g. set a new goal position of a motor) to a :class:`~pypot.primitive.manager.PrimitiveManager` which transmits them to the "real" robot. As multiple primitives can run on the robot at the same time, their request orders are combined by the manager. + +.. note:: The primitives all share the same manager. In further versions, we would like to move from this linear combination of all primitives to a hierarchical structure and have different layer of managers. + +The manager uses a filter function to combine all orders sent by primitives. By default, this filter function is a simple mean but you can choose your own specific filter (e.g. add function). + +.. warning:: You should not mix control through primitives and direct control through the :class:`~pypot.robot.robot.Robot`. Indeed, the primitive manager will overwrite your orders at its refresh frequency: i.e. it will look like only the commands send through primitives will be taken into account. + +.. _write_own_prim: + +Writing your own primitive +-------------------------- + +To write you own primitive, you have to subclass the :class:`~pypot.primitive.primitive.Primitive` class. It provides you with basic mechanisms (e.g. connection to the manager, setup of the thread) to allow you to directly "plug" your primitive to your robot and run it. + +.. note:: You should always call the super constructor if you override the :meth:`~pypot.primitive.primitive.Primitive.__init__` method. + +As an example, let's write a simple primitive that recreate the dance behavior written in the :ref:`dance_` section. Notice that to pass arguments to your primitive, you have to override the :meth:`~pypot.primitive.primitive.Primitive.__init__` method:: + + import time + + import pypot.primitive + class DancePrimitive(pypot.primitive.Primitive): + + def __init__(self, robot, amp=30, freq=0.5): + self.robot = robot + self.amp = amp + self.freq = freq + pypot.primitive.Primitive.__init__(self, robot) + + def run(self): + amp = self.amp + freq = self.freq + # self.elapsed_time gives you the time (in s) since the primitive has been running + while self.elapsed_time < 30: + x = amp * numpy.sin(2 * numpy.pi * freq * self.elapsed_time) + + self.robot.base_pan.goal_position = x + self.robot.head_pan.goal_position = -x + + time.sleep(0.02) + +To run this primitive on your robot, you simply have to do:: + + ergo_robot = pypot.robot.from_config(...) + + dance = DancePrimitive(ergo_robot,amp=60, freq=0.6) + dance.start() + +If you want to make the dance primitive infinite you can use the :class:`~pypot.primitive.primitive.LoopPrimitive` class:: + + class LoopDancePrimitive(pypot.primitive.LoopPrimitive): + def __init__(self, robot, refresh_freq, amp=30, freq=0.5): + self.robot = robot + self.amp = amp + self.freq = freq + LoopPrimitive.__init__(self, robot, refresh_freq) + + # The update function is automatically called at the frequency given on the constructor + def update(self): + amp = self.amp + freq = self.freq + x = amp * numpy.sin(2 * numpy.pi * freq * self.elapsed_time) + + self.robot.base_pan.goal_position = x + self.robot.head_pan.goal_position = -x + +And then runs it with:: + + ergo_robot = pypot.robot.from_config(...) + + dance = LoopDancePrimitive(ergo_robot, 50, amp = 40, freq = 0.3) + # The robot will dance until you call dance.stop() + dance.start() + + +.. warning:: When writing your own primitive, you should always keep in mind that you should never directly pass the robot or its motors as argument and access them directly. You have to access them through the self.robot and self.robot.motors properties. Indeed, at instantiation the :class:`~pypot.robot.robot.Robot` (resp. :class:`~pypot.dynamixel.motor.DxlMotor`) instance is transformed into a :class:`~pypot.primitive.primitive.MockupRobot` (resp. :class:`~pypot.primitive.primitive.MockupMotor`). Those class are used to intercept the orders sent and forward them to the :class:`~pypot.primitive.manager.PrimitiveManager` which will combine them. By directly accessing the "real" motor or robot you circumvent this mechanism and break the sandboxing. If you have to specify a list of motors to your primitive (e.g. apply the sinusoid primitive to the specified motors), you should either give the motors name and access the motors within the primitive or transform the list of :class:`~pypot.dynamixel.motor.DxlMotor` into :class:`~pypot.primitive.primitive.MockupMotor` thanks to the :meth:`~pypot.primitive.primitive.Primitive.get_mockup_motor` method. + For instance:: + + class MyDummyPrimitive(pypot.primitive.Primitive): + def run(self, motors_name): + motors = [getattr(self.robot, name) for name in motors_name] + + while True: + for m in fake_motors: + ... + + or:: + + class MyDummyPrimitive(pypot.primitive.Primitive): + def run(self, motors): + fake_motors = [self.get_mockup_motor(m) for m in motors] + + while True: + for m in fake_motors: + ... + + + +.. _start_prim: + +Start, Stop, Pause, and Resume +------------------------------ + +The primitive can be :meth:`~pypot.primitive.primitive.Primitive.start`, :meth:`~pypot.primitive.primitive.Primitive.stop`, :meth:`~pypot.utils.stoppablethread.StoppableThread.pause` and :meth:`~pypot.utils.stoppablethread.StoppableThread.resume`. Unlike regular python thread, primitive can be restart by calling again the :meth:`~pypot.primitive.primitive.Primitive.start` method. + +When overriding the :class:`~pypot.primitive.primitive.Primitive`, you are responsible for correctly handling those events. For instance, the stop method will only trigger the should stop event that you should watch in your run loop and break it when the event is set. In particular, you should check the :meth:`~pypot.utils.stoppablethread.StoppableThread.should_stop` and :meth:`~pypot.utils.stoppablethread.StoppableThread.should_pause` in your run loop. You can also use the :meth:`~pypot.utils.stoppablethread.StoppableThread.wait_to_stop` and :meth:`~pypot.utils.stoppablethread.StoppableThread.wait_to_resume` to wait until the commands have really been executed. + +.. note:: You can refer to the source code of the :class:`~pypot.primitive.primitive.LoopPrimitive` for an example of how to correctly handle all these events. + + +Attaching a primitive to the robot +---------------------------------- + +In the previous section, we explain that the primitives run in a sandbox in the sense that they are not aware of the other primitives running at the same time. In fact, this is not exactly true. More precisely, a primitive can access everything attached to the robot: e.g. motors, sensors. But you can also attach a primitive to the robot. + +Let's go back on our DancePrimitive example. You can write:: + + ergo_robot = pypot.robot.from_config(...) + + ergo_robot.attach_primitive(DancePrimitive(ergo_robot), 'dance') + ergo_robot.dance.start() + +By attaching a primitive to the robot, you make it accessible from within other primitive. + +For instance you could then write:: + + class SelectorPrimitive(pypot.primitive.Primitive): + def run(self): + if song == 'my_favorite_song_to_dance' and not self.robot.dance.is_alive(): + self.robot.dance.start() + +.. note:: In this case, instantiating the DancePrimitive within the SelectorPrimitive would be another solution. diff --git a/pypot-master/pypot-master/doc/pypot-archi.jpg b/pypot-master/pypot-master/doc/pypot-archi.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e4278213092a08546b6309618ab7bff31d3ae79 GIT binary patch literal 157923 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 literal 0 HcmV?d00001 diff --git a/pypot-master/pypot-master/doc/pypot.dynamixel.rst b/pypot-master/pypot-master/doc/pypot.dynamixel.rst new file mode 100644 index 0000000..be1cf79 --- /dev/null +++ b/pypot-master/pypot-master/doc/pypot.dynamixel.rst @@ -0,0 +1,81 @@ +:mod:`dynamixel` Package +======================== + +.. autofunction:: pypot.dynamixel.get_available_ports + +.. autofunction:: pypot.dynamixel.find_port + +.. autofunction:: pypot.dynamixel.autodetect_robot + + +:mod:`~pypot.dynamixel.io` Package +---------------------------------- + +.. automodule:: pypot.dynamixel.io + :members: + :undoc-members: + :show-inheritance: + +.. automodule:: pypot.dynamixel.io.io + :members: + :undoc-members: + :show-inheritance: + +.. automodule:: pypot.dynamixel.io.io_320 + :members: + :undoc-members: + :show-inheritance: + +:mod:`motor` Module +------------------- + +.. automodule:: pypot.dynamixel.motor + :members: + :show-inheritance: + +.. autoattribute:: pypot.dynamixel.motor.DxlMotor.registers + + +:mod:`controller` Module +------------------------ + +.. automodule:: pypot.dynamixel.controller + :members: + :undoc-members: + :show-inheritance: + + +:mod:`error` Module +------------------- + +.. automodule:: pypot.dynamixel.error + :members: + :undoc-members: + :show-inheritance: + +:mod:`conversion` Module +------------------------ + +.. automodule:: pypot.dynamixel.conversion + :members: + :undoc-members: + :show-inheritance: + +:mod:`protocol` Package +----------------------- + +:mod:`v1` Module +++++++++++++++++ + +.. automodule:: pypot.dynamixel.protocol.v1 + :members: + :undoc-members: + :show-inheritance: + +:mod:`v2` Module +++++++++++++++++ + +.. automodule:: pypot.dynamixel.protocol.v2 + :members: + :undoc-members: + :show-inheritance: diff --git a/pypot-master/pypot-master/doc/pypot.primitive.rst b/pypot-master/pypot-master/doc/pypot.primitive.rst new file mode 100644 index 0000000..1ec37c2 --- /dev/null +++ b/pypot-master/pypot-master/doc/pypot.primitive.rst @@ -0,0 +1,36 @@ +:mod:`primitive` Package +======================== + + +:mod:`~pypot.primitive.primitive` Module +---------------------------------------- + +.. automodule:: pypot.primitive.primitive + :members: + :undoc-members: + :show-inheritance: + + +:mod:`~pypot.primitive.manager` Module +-------------------------------------- + +.. automodule:: pypot.primitive.manager + :members: + :undoc-members: + :show-inheritance: + +:mod:`~pypot.primitive.move` Module +------------------------------------ + +.. automodule:: pypot.primitive.move + :members: + :undoc-members: + :show-inheritance: + +:mod:`~pypot.primitive.utils` Module +------------------------------------ + +.. automodule:: pypot.primitive.utils + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/pypot-master/pypot-master/doc/pypot.robot.rst b/pypot-master/pypot-master/doc/pypot.robot.rst new file mode 100644 index 0000000..bd0bd72 --- /dev/null +++ b/pypot-master/pypot-master/doc/pypot.robot.rst @@ -0,0 +1,64 @@ +:mod:`robot` Package +==================== + +.. automodule:: pypot.robot + :members: + :undoc-members: + :show-inheritance: + + +:mod:`robot` Module +------------------- + +.. automodule:: pypot.robot.robot + :members: + :undoc-members: + :show-inheritance: + +:mod:`motor` Module +------------------- + +.. automodule:: pypot.robot.motor + :members: + :undoc-members: + :show-inheritance: + +:mod:`sensor` Module +-------------------- + +.. automodule:: pypot.robot.sensor + :members: + :undoc-members: + :show-inheritance: + +:mod:`controller` Module +------------------------ + +.. automodule:: pypot.robot.controller + :members: + :undoc-members: + :show-inheritance: + +:mod:`io` Module +---------------- + +.. automodule:: pypot.robot.io + :members: + :undoc-members: + :show-inheritance: + +:mod:`config` Module +-------------------- + +.. automodule:: pypot.robot.config + :members: + :undoc-members: + :show-inheritance: + +:mod:`remote` Module +-------------------- + +.. automodule:: pypot.robot.remote + :members: + :undoc-members: + :show-inheritance: diff --git a/pypot-master/pypot-master/doc/pypot.sensor.rst b/pypot-master/pypot-master/doc/pypot.sensor.rst new file mode 100644 index 0000000..1bbb453 --- /dev/null +++ b/pypot-master/pypot-master/doc/pypot.sensor.rst @@ -0,0 +1,24 @@ +:mod:`sensor` Package +===================== + +.. automodule:: pypot.sensor + :members: + :undoc-members: + :show-inheritance: + + +:mod:`kinect` Module +-------------------- + +.. automodule:: pypot.sensor.kinect.sensor + :members: + :undoc-members: + :show-inheritance: + +:mod:`optitrack` Module +----------------------- + +.. automodule:: pypot.sensor.optitrack + :members: + :undoc-members: + :show-inheritance: diff --git a/pypot-master/pypot-master/doc/pypot.server.rst b/pypot-master/pypot-master/doc/pypot.server.rst new file mode 100644 index 0000000..36b7487 --- /dev/null +++ b/pypot-master/pypot-master/doc/pypot.server.rst @@ -0,0 +1,40 @@ +:mod:`server` Package +===================== + +.. automodule:: pypot.server + :members: + :undoc-members: + :show-inheritance: + +:mod:`rest` Module +--------------------- + +.. automodule:: pypot.server.rest + :members: + :undoc-members: + :show-inheritance: + +:mod:`httpserver` Module +------------------------ + +.. automodule:: pypot.server.httpserver + :members: + :undoc-members: + :show-inheritance: + + +:mod:`zmqserver` Module +----------------------- + +.. automodule:: pypot.server.zmqserver + :members: + :undoc-members: + :show-inheritance: + +:mod:`snap` Module +----------------------- + +.. automodule:: pypot.server.snap + :members: + :undoc-members: + :show-inheritance: diff --git a/pypot-master/pypot-master/doc/pypot.tools.rst b/pypot-master/pypot-master/doc/pypot.tools.rst new file mode 100644 index 0000000..3ed8ede --- /dev/null +++ b/pypot-master/pypot-master/doc/pypot.tools.rst @@ -0,0 +1,17 @@ +pypot.tools package +=================== + +Submodules +---------- + +.. toctree:: + + +pypot.tools.dxl_reset module +---------------------------- + +.. automodule:: pypot.tools.dxl_reset + :members: + :undoc-members: + :show-inheritance: + diff --git a/pypot-master/pypot-master/doc/pypot.utils.rst b/pypot-master/pypot-master/doc/pypot.utils.rst new file mode 100644 index 0000000..04667e8 --- /dev/null +++ b/pypot-master/pypot-master/doc/pypot.utils.rst @@ -0,0 +1,24 @@ +:mod:`utils` Package +==================== + +.. automodule:: pypot.utils + :members: + :undoc-members: + :show-inheritance: + + +:mod:`stoppablethread` Module +----------------------------- + +.. automodule:: pypot.utils.stoppablethread + :members: + :undoc-members: + :show-inheritance: + +:mod:`trajectory` Module +----------------------------- + +.. automodule:: pypot.utils.trajectory + :members: + :undoc-members: + :show-inheritance: diff --git a/pypot-master/pypot-master/doc/pypot.vrep.rst b/pypot-master/pypot-master/doc/pypot.vrep.rst new file mode 100644 index 0000000..c512f15 --- /dev/null +++ b/pypot-master/pypot-master/doc/pypot.vrep.rst @@ -0,0 +1,25 @@ +:mod:`vrep` Package +=================== + +.. automodule:: pypot.vrep + :members: + :undoc-members: + :show-inheritance: + + +:mod:`io` Module +---------------- + +.. automodule:: pypot.vrep.io + :members: + :undoc-members: + :show-inheritance: + + +:mod:`controller` Module +------------------------ + +.. automodule:: pypot.vrep.controller + :members: + :undoc-members: + :show-inheritance: diff --git a/pypot-master/pypot-master/doc/pypot_logo-144x144.png b/pypot-master/pypot-master/doc/pypot_logo-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..bc2ba50297ab28deacab775e4cfad0a3c4c2e5f6 GIT binary patch literal 6467 zcmZ{o2QXa!x4;*x_uk8DSw!zOi^URc5m8cz-d0Vb_p(@m=pmNXTSQL~8__~^QG<;V zQ6hrq!SA!K?h8tC20@sqWa)Mo0Xe@81uR5kWQ7`nX)?JZWj0LC z(922*hR_ z*>|w3%%(IVb0p=6G{#v$vp29JNVO)PM27ewU%;u#zBc1bz$)g<@@-ym* z!)bOk%l)TIrEOW-X_cy$75O!#nh9M9BWTqU%hUewr#ug#P|E4`V&s(LPxMzmXrY4h zuA)jr4zvZ&5uQF&`PHw1@m0LOx>4HL%{1m5tY0%=li()Ga3h#uphj-2?j%Lul&283 z?Mdi2U8IJ=%3`;JS8{v(B^TffU zUmhXW6AbJ?&IBu<&`lg!l6hf5XJ1VuX*HV*-Kjsri>9nxs!L*@wEe$@5v1A5o679O zwl(QKs*x+zCn*M|NTz)WJF)K>6}+b`J_Y`-gRr!fk9w9~FibL7#p_@t$&1uhuz$Y> z5Gt0qRp$R`#NNU97!W3p6JE-HFSkD`&YTPyRTd_SAUv9u`oVXgcB_F(ENUdS=I|Rz zENBwDfz9R^2;+8A7H%M`!`@+d^aCg5qv~L8V50paxX!^FDiIH4`EG=5iq(F7yRkky zxW6cwj5*$9i^qaB8_Q4%57y=VPWO{M)5cz{w{Fmd(QC7Ufz!!!|KkCz{vPST zE;AcVH8lK=TOT$~c}U+=mnJ1S7CRt<6$gK9(9CF_qo9GEwrcv+^*m?j7j|-X0vMz^@fm$3zhWR>Yn3?Ih|y zr6Q*6ak9Xd^>6hk&a@HbekWn6J_o6^n8=L`nc3&eU;E1Z23KB6IvEr4P<}s8?qbTB zxrmyfl#RLryv`Zoxiq2Mnjs3QdKAGyxQA}uJnpjC#LOoiq<2yHiDkgx78M#XsB{4q zaqzv82geUt0=e?KU6cmCMgO>QS9_<8eV+dA5tWOw11a|*2}PKm3#dlQ^I+XnVuHTt zrhssn>N4rTaV`O|pbU#HBo1X%-$gT2@t)r9Q*Wm<4L3^rGh?nK--?k-28$|^qytS3 ziYAPd7}cBopo7H}<9D<_E0eQ?t(m_%q(ZQRH0czyrGKw9jF#}bFg%{9@e8e zV3Dxk(Qi^0Ml-OGzd+U!mIwyY_^SL&p)ugKmiZ$g2P({rSYPRQS!I9qH#TeB1=D-s zg~$kMA92mL#fjmU*ce@$yJ*{JBUZaIvy42ise-5t9(3JUB!FN!5X^arv`u$W=4B;# zb1#ruvuzeWVkHyC{PA{lg>q+X>6nEJN*TMEe$QfWE(gA9CH=s_O+*e=t#`Os5kOaW zbjFU*b%<6gjeK76V^$NfjaavMwTF@=K9$<2=$(x`4684rKD~9xxKyP1_s>~-8qV@T znXTf!D${Y8F;4T=!B=2QZLsO?u;6`pLXR{`tat4ac=~&S5V%U?aXuBlNKVn92J?oR zo_&xLeCr@EHu}kn;q*^ZKaKVXK17Noa-_uu<*o`Y7;I^%h?M4R>{ytft!y=nEBv(i zejan_j};|Jb8l&V4J5c0WhZ zImFJ87*TSr7<|ibpIv_fRofylrg0P3ts~1w|E1=}vB1M!yz!Xne1w^pNi7n`x%ICws zRA+CGKbBTd-4D!sW`9((gwdlyE9I_&>Y&tzz&Z1buK)=J=k4?lYCcTS~ykOC+N?p=4}a-{&l}|5WQ8-Dm2`p zVq3QS1hb=t-2Tx`p=MN=v2lyT3`S6225cuiWy)|xi|hnHxDutjRJ4(Hk?*S*G0LR1 zGuCzNWZNLP`og{=53SdL_G)bAw-&>$??(=sS_vr__bBz534>&h55X4nOv<CUSihEy#Vqf) zv*P|t@J-+%9jTBCFMH{3ygfx;#n|?Ndwxj4H?vBk z&m5z~E7~na(FK@%OQqLHWXd}>>3CC())kKJFtBjWspCN!-Jp)*_4$a#`hb2~Lc585 zS=zJk#{!cnH0Hq++r37KBYL#;zbmKDCfg0J=%W&~(E5XVa@;!OMjBB#B+_^7fqel9V!zy5l=jq z=8e%zNu_U~Pc3WG^@1oqQblTme-F_9I&BO4%y*E*KTc)v2K6l#Hj@}?%&IhdB-403 zQ%v!q3%)YmU@sO$n5a!i0d7OsBY1V5?r`5jrRy+YXw^|6VDTttT#>gLipl;?Zu69p>w?V0 zv9RdN47bvbF4lYP2uPv!-lt!6uHv5jrW{-Hvn3Wu213Rx^ku9@1aJ7A{yME+E+)b( zMDLX_Dw=?KKV`OJb)z1mMSg-a-DP;KpWYqM3}I?y7>-MI=1=S(>|6Q}SF7w{&lr_W z^jPa2U0HOec6*_In?R$d=G!+9kx82M@xA` zRa@gRi}kZH0q#w?%U4c3DS{U7+?pluOw=yU0z(}L&HDlTWP$j1T8U6n*DlVkBo(+KkP`9ER5s`NJVoZ_*buBFW7yq_nu#m z(RmEcqt;an&)g>H%GmRMn5TVS`u-sKtYCXyGPRGA88iwU(&H#|XhxH&bo8vDGZxWWyP(sI!Zi|Gvgx?hhfl48=AP_opY$zc-nY%{r!x3t6&ry#NRQVZJPa4h z?*EA8A&e?-U`>A&p`q7mb|vb*{*Gmsamcgx!L-+M?L~O0S9w$I*DiXm0Z*K9$wQWJ z{a$P>?+e0^Hv)Rk{m-FyDnIu-1^{g69O`HEZ)+0ke`m)b|Q{UumH zlv&0r{7}d=X;t4DGx+72(8fyzwZnOExjct;CZrY^D7h~a8>crxC^iO4aH8b*TsUjX zp<~~)nQVUu@f(#k$|`ESeat9J%&{vx4$ilE4=xPgVY)C41T-^!{8L%G=>eX&GRRDG z7W{Zs**0EKM(8w(}%%e!vJ2%NBd4&_oKh?n1v(K)&MmOd9`*B|=)T}pe zN+=GFG5tShbeFE|I)EGyOEbyqtQyTUt&QFkl>Agk;n=hOZF%c;W|LyzdF7+_y2@A; zOA5I;$tZ~8Gh3KL8J*@q);iJXb1#(8xRkr`S4aSZE0cZ^H$945c@={8f_+Y@RuGK| zpq<*szFL)uHN4b?qQQIjCAWD(8v1>=qm}4f>BP0iIVVoFk&yDD7p&!qX;l&_T7+H5 zh3;O&d2}Eh*|gR7&&Ym-r4eB`49%5c>ioUEL7M84Aqee|*iKi;*uri&-})oKjwWSA_=FM!nvx& zH@+G-UmCiHi#X)GFcK{=#+)Do3CQrj_Ym0@YD_ktFpyM z)3C6f%-uN)D>h&lmU7TfB^@W-)hyf3GF`B30+-znEj2apQl;2!MFShhN}j4k7qoHe zcX_|O{mp}#1uaBSoi|DnRguoF{=j(!R0{Qm+{0)JjY&W!Q-fC;fN{Aof<2bIV$d&q zD_;}dwp#}h#(|dO4c8>LO$u%&)xXg(>RqcA&Fq6V0i7{_6(n@u54}Zszl(D|E z@K)+as8E_F5x*g6lK+UGhD%9N5G`Jr6b(E<=M?@ZADrb=8%^S z7Z+BE8oD|rVfyXfn`Q8bO-Ctt(P(8MJno;3o-{tqXdrn%sjo#zMG0NJNVjwyel~kl zF06JcFv*SZoqMUVuw z{w58NT($ek_X`z4B?`}%GWxpq^GSrjzQ}sS8Bg_tr5J{03GIw^c(h(;4&i-J#-Reg%pwZz8}!(yiS`o2*f`t!-NRT?wMrQPURXh z;u+yoO*nd;;_4pCXdo!7JWmbdsD~%pOyk5^aB~>au>5=EeLXc+72b_@fFnOSvR{*(l4Ll`M*72lI*KIqJw%n3 zy*u87Q;BEyCdoz}-1TxsXNxa^&uS>Qv^>%fM+_1KlcOgC#hJ;Pmlef9SoX@#(V*`J z(*>fW4-%?XQ?*n^}!*V0T`{95tP+WfN_fHr3qHCzIQA#fo?2CGbqU<7lSM z!O7LU8UXx{5P4E=49^b^XmtYHBJTuh5mh?;8&kEXuz9LKn(GhuyWvLWN`k7I*aCU0 zm6qbOy~$$|r+f>F-|4uW#TR-(##Ux0SJ1R8&Ez?lc=CI@(` zPN=CUeTBxs8Faq}qfR-Gq-HTy{d_SD9rci@xreUqwlU>(AtIifQ>&;DvZsDwUg7mj*iEiBIXh!$KPRH%DTFx@<-2!%dyWsTl!q?{98B6gJG#wbMrE!xtqU6yzgxMSmvBJa7*9~zy1+OP$yi| z*JaH#&-byOnX^LN!y{YM<28`Q*|v}=4ZXzZNhiSfS~{z|BwEGi8+9$jE3`;2d#ZA* zy{v&&zH=M69J82KOs}jwrsI4@`PxBd&~`cgOOU|3{KB<06~^A$%hyvmXm?l^O2)iqucgyu}vNp3<~Pq?_BasVj7g{JQ~SX8y^ArhlC8-J;2 zBH&Rz`NL2fdp3Hl2of7g-Wu!)rqHi2Q)j2;_oyZhY?9qGEA?KAB+I{Z^%P_#4$Ts% zNsl{e_x~`bke9^CF=6YS&0WdFimuuXPMR%OR9-Wtk=hf4{$NHz3Y}7o1QOO{m^j#f zH)4PUb^(G-f*(yL7C&?@vnr(1-RG|4GK1;81L(}GM5_%vcC7V#h1NB+AdFfyWi1hT zqIzJuq8)Hm{sPu3UDje|sAERTWGBz9hMyvKl-IoF3z6lnrG-p&Ef?fskp`d;=fPDb`FZVn!N3KEJEO5)0V_>ywsQu5-`GJJ4p1wPk+03Q`e z$>-0XOSt_*;{{Jkc>B40i~ogB2w?jsqlN2JuO})hP;ZB)UQUPr6%|uF>JN~vxapAm zKg@q>s;Ia+xw*Io0Hl>=XaRn4c!u>~dH$QZ@8%fb`VTTy3nIfK?EgZH+`OCuf_$6+ z|LIE72jOz3(bD+;Sw&@8c?D$!D%7ke9-;kL9&@)~CxDceR%VIDF5YGN zFV{UYeSou@rxX72CA|;{3F^1M_*+u^s&{VPY literal 0 HcmV?d00001 diff --git a/pypot-master/pypot-master/doc/pypot_logo-48x48.png b/pypot-master/pypot-master/doc/pypot_logo-48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..dc28abf727dea0de68b6d389e0f46b98385e583a GIT binary patch literal 2440 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq8sKd6mGxU^Rn*LA+qju0R_G2BwJt zJ|V6^1*2dz1O`b6{Qv(yW$CZAK-b(X3GxeOU}WPFk`PpM$e*!(|EVKR0=C_U9(?}$ ztBylB^XU73Gx?Yt5B!v6Nq=_tgGa`j3G29BpC>N*9U=PAr{%|M1J>k#(0A7*ndOVt zY@DsIHc$QXR<2vcyh~@5?>XPkx%ZBivv<vsm}u#}2(mTTB)NZn&tj zddH;`npf?c&9bDYyf|0GUjO!sp_FgP?F;<7cb+-hIBCv88|5^=_$R7iM$@W|#drvBE3A9mFNgs>F>EQKA1j=01qO>I3~FK9LU#A)Sc2_`l|C!e`Z{61g(NX?fT$x~Wxjv`02 z4ByLdcVJzZr8u$w`@uhpT8?IYxuBD{a%YV8@)=Kq*x5}_3zhbzU;6Yvv3665>y1-W zW`q{56k^zt$>+D%%9dGv%drpp9S&YMWaWvP{gQ1{f!ocGmS^e@p8Hf7uio&KTT&;1a*8^Tu(G~tXX@8apKW)?|rHjvu=NrFut?! z{!Z>wESzF)8=}t#ot_kQ#iaVww?jE=?R;YW-Y5U~%YLJ4{d47DS9ag_P0nfZc8~JT z9^bRJ>F&BKyc`DMa%X2850_;QJ)V2&l}eq}(ZmhUI~6uBI~ErmE`PV-&Wt2e(^Hn# zOE-y(>4bl*ekk?@zwnpWKrVfz*7Di~JFCvBTCaZaNi;MlBIanQ)SD|Tam*o)zXqGjujXVXoE6 z?6ce2oZZ`^+22RW2%kJw?xbRYAtwYU!YXsv01us!I$?jJQp}y zt!&s567|}PPbA1V_iM@h?t6Fe^($)`rk}!T7J0Wmeu><mH`$}|*Ip$CNA(k`sxt@32&%`ZK z8~T6AWxhnn^k=Jc;AH(y_g*VC?X}enhbGm3D>ZZ#V_3Cw$HI86-2L~I74|Lc z*mnElGNHBF)r(iGs(JiF=63x4-hw@6+RBTX7F2J|Ob*%n<8RALXXh)^j!o+9Z`ri$ z`n~^Oex82u;^TT#&gr-JKbV!I{X%O0UxPn$ zSVHH{?e8_+|7!1OzCV-9+eAGPz2OC7#SFv>Kd5q8kvO{T38vISecq>8yHv_7&L^5MxtoQ%}>cptHiD0 zBlp^;Kn-pn8;bMOO3D+9QW-pR6Vp?D6Vo%3vlYzr%=IjEEfs)Pn&=vs>KYm;1R9zt zWR#Q?Sn2DRmzV2hf>Z-BP_w?G3KBtRyHWR&J6Sy{Q{Czs}?=9O4k1pt*6 zGZ-%azgr(o4cJaAtBlml^o$Y)LrWumhN4!W8gV3ZplZT1Q%W*GN-nQaL{j3L znVVWtS&+&Ac9niXUb_9JFh4YNd_#b$7z|B}%`J^h%`DA$damaHmGC2(6P#I<%3$E+ zG-Z+98=zDel2mArCqr6hPAbs*`nh=}Ir-`OX^CZ-$@zK3`iO|pH!({|F-}RdOfs=Z uvPd*Yv@kI?Gd52&H#9RyOEED@)&uI$1G?{^s_Z(T4Gf;HelF{r5}E+n%Ia$X literal 0 HcmV?d00001 diff --git a/pypot-master/pypot-master/doc/pypot_logo.png b/pypot-master/pypot-master/doc/pypot_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c59c0d5ad94a494c8c3d6d32a54ddf30b46bbd GIT binary patch literal 10337 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 literal 0 HcmV?d00001 diff --git a/pypot-master/pypot-master/doc/quickstart.rst b/pypot-master/pypot-master/doc/quickstart.rst new file mode 100644 index 0000000..680ca59 --- /dev/null +++ b/pypot-master/pypot-master/doc/quickstart.rst @@ -0,0 +1,132 @@ +.. _quickstart: + +QuickStart: playing with an Ergo-Robot +====================================== + +To let you discover what you can do with pypot, in this section we describe the few steps required to make a robot build from robotis motor dance. This short introduction will in particular describe you: + +* how to define your robot within the software, +* how to connect it to your computer, +* and finally how to control it. + +We have developed in our team the Ergo-Robot as a way to explore large scale long term robotic experiments outside of the lab and we have made the whole hardware and software architecture available publicly in an open-source manner so that other research team in the world can use it and leverage our efforts for their own research. As a consequence, you can easily build your own Ergo-Robot. + +In this Quick Start, we will use this robot as a base and thus assume that you are using such a robot. Obviously, you can transpose all the following examples to any particular robot made from robotis motor. + + +Building your own Ergo-Robot +---------------------------- + +Ergo-Robots have been developed for an art exhibition in Fondation Cartier: `Mathematics a beautiful elsewhere `__. They are small creatures made from robotis motors and shaped as a stem with a head designed by David Lynch. They were developed to explore research topics such as artificial curiosity and language games. The robots were used during 5 months at the exhibition. More details on the whole project can be found `here `__. + +.. image:: ErgoRobots.jpg + :height: 400 + :align: center + +The complete instructions to build your own Ergo-Robot are available `here `__. + +Connecting the robot to your computer +------------------------------------- + +Now that you have your own robot, let's start writing the code necessary to control it. + +The first step is to setup the configuration for your robot. It will describe the motor configuration of your robot, the USB2serial controller used and make the initialization really easy. Configurations are described as Python dictionaries. Yet, they can be quite repetitive to write. Luckily, the pypot package comes with an example of a configuration for an Ergo-Robot. You can first import it, so you can modify it:: + + from pypot.robot.config import ergo_robot_config + +If you do some introspection on this object, you will see that it is just a regular Python dictionary. So you can directly edit it like you will do with any other dict. You can also copy the one provided with pypot and work with your own copy:: + + my_config = dict(ergo_robot_config) + my_config['controllers']['my_dxl_controller']['port'] = 'COM6' # For Windows' users + +You will only have to modify the USB2serial port and the id of the motors so they correspond to your robot. If you do not know how to get this information, you can refer to the documentation on the `Herborist tool `__. +Alternatively, you can directly ask pypot:: + + import pypot.dynamixel + + print(pypot.dynamixel.get_available_ports()) + ['/dev/tty.usbserial-A4008aCD', '/dev/tty.usbmodemfd1311'] + + dxl_io = pypot.dynamixel.DxlIO('/dev/tty.usbserial-A4008aCD') + print(dxl_io.scan()) + [11, 12, 13, 14, 15, 16] + +.. note:: You can save/load configurations from any format that can be written/read as a Python dictionary. A wrapper for loading json configuration file is provided (see :func:`~pypot.robot.config.from_json`). + +.. note:: Since pypot 1.7, you can now set the port to 'auto' in the dictionary. When loading the configuration, pypot will automatically try to find the port with the corresponding attached motor ids. + For instance:: + + my_config = dict(ergo_robot_config) + my_config['controllers']['my_dxl_controller']['port'] = 'auto' + +Once you have edited the configuration dictionary, you should be able to instantiate your robot directly like this:: + + import pypot.robot + + ergo_robot = pypot.robot.from_config(my_config) + +At this point, if you have not seen any errors it means that you are successfully connected to your robot! You can find details on how to write more complex configuration file in the :ref:`config_file` section. + +.. _dance_: + +Controlling your Ergo-Robot +--------------------------- + +Now that you are connected to your Ergo-Robot, let's write a very simple program to make it dance a bit. + +First, write the following lines to start you robot (we assume that you have correctly setup your configuration):: + + import pypot.robot + + ergo_robot = pypot.robot.from_config(my_config) + +Everything should be clear now. When creating your robot, it automatically starts the synchronization between the "software" robot and the real one, i.e. all commands that you will send in python code will automatically be sent to the physical Ergo-Robot (for details on the underlying mechanisms, see :ref:`Sync Loop `). + +Now, we are going to put the robot in its initial position:: + + for m in ergo_robot.motors: + m.compliant = False + + # Go to the position 0 within 2 seconds. + # Note that the position is expressed in degrees. + m.goto_position(0, 2) + +The robot should raise and smoothly go to its base position. Now, we are going to move it to a more stable position. We will use it as a rest position for our dance:: + + rest_pos = {'base_tilt_lower': 45, + 'base_tilt_upper': -45, + 'head_tilt_lower': 30, + 'head_tilt_upper': -30} + + # You can directly set new positions to motors by providing + # the Robot goto_position method with a dictionary such as + # {motor_name: position, motor_name: position...} + ergo_robot.goto_position(rest_pos, duration=1, wait=True) + +We will now create a very simple dance just by applying two sinus with opposite phases on the base and head motors of the robot:: + + import numpy + import time + + amp = 30 + freq = 0.5 + + # As you can notice, property to access the motors defined + # in the configuration file are automatically created. + ergo_robot.base_pan.moving_speed = 0 # 0 corresponds to the max speed + ergo_robot.head_pan.moving_speed = 0 + + t0 = time.time() + while True: + t = time.time() - t0 + if t > 10: + break + + x = amp * numpy.sin(2 * numpy.pi * freq * t) + ergo_robot.base_pan.goal_position = x + ergo_robot.head_pan.goal_position = -x + + time.sleep(0.02) + + +Your robot should start dancing for ten seconds. Now, that you have seen the very basic things that you can do with pypot. It is time to jump on the :ref:`tutorial ` to get a complete overview of the possibility. diff --git a/pypot-master/pypot-master/doc/remote_access.rst b/pypot-master/pypot-master/doc/remote_access.rst new file mode 100644 index 0000000..bb98e08 --- /dev/null +++ b/pypot-master/pypot-master/doc/remote_access.rst @@ -0,0 +1,42 @@ +REST API +======== + +We add the possibility to remotely access and control your robot through TCP network. This can be useful both to work with client/server architecture (e.g. to separate the low-level control running on an embedded computer and higher-level computation on a more powerful computer) and to allow you to plug your existing code written in another language to the pypot's API. + +We defined a protocol which permits the access of all the robot variables and method (including motors and primitives) via a JSON request. The protocol is entirely described in the section :ref:`remote_protocol` below. Two transport methods have been developed so far: + +* HTTP via GET and POST request (see the :class:`~pypot.server.httpserver.HTTPRobotServer`) +* ZMQ socket (see the :class:`~pypot.server.zmqserver.ZMQRobotServer`) + +The :class:`~pypot.server.rest.RESTRobot` has been abstracted from the server, so you can easily add new transport methods if needed. + +As an example of what you can do, here is the code of getting the load of a motor and changing its position:: + + import zmq + import threading + + robot = pypot.robot.from_config(...) + + server = pypot.server.ZMQServer(robot, host, port) + # We launch the server inside a thread + threading.Thread(target=lambda: server.run()).start() + + c = zmq.Context() + s = c.socket(zmq.REQ) + + req = {"robot": {"get_register_value": {"motor": "m2", "register": "present_load"}}} + s.send_json(req) + answer = s.recv_json() + print(answer) + + req = {"robot": {"set_register_value": {"motor": "m2", "register": "goal_position", "value": 20}}} + s.send_json(req) + answer = s.recv_json() + print(answer) + +.. _remote_protocol: + +Protocol +-------- + +The entire protocol is entirely described `here `_. diff --git a/pypot-master/pypot-master/doc/vrep.rst b/pypot-master/pypot-master/doc/vrep.rst new file mode 100644 index 0000000..34dca70 --- /dev/null +++ b/pypot-master/pypot-master/doc/vrep.rst @@ -0,0 +1,47 @@ +Using a simulated robot with V-REP +********************************** + +Connecting to V-REP +------------------- + +As it is often easier to work in simulation rather than with the real robot, pypot has been linked with the `V-REP simulator `_. It is described as the "Swiss army knife among robot simulators" and is a very powerful tool to quickly (re)create robotics setup. As presenting V-REP is way beyond the scope of this tutorial, we will here assume that you are already familiar with this tool. Otherwise, you should directly refer to `V-REP documentation `_. + +Details about how to connect pypot and V-REP can be found in `this post `_. + +The connection between pypot and V-REP was designed to let you seamlessly switch from your real robot to the simulated one. It is based on `V-REP's remote API `_. + +In order to connect to V-REP through pypot, you will only need to install the `V-REP `_ simulator. Pypot comes with a specific :class:`~pypot.vrep.io.VrepIO` designed to communicate with V-REP through its `remote API `_. + +This IO can be used to: + +* connect to the V-REP server : :class:`~pypot.vrep.io.VrepIO` +* load a scene : :meth:`~pypot.vrep.io.VrepIO.load_scene` +* start/stop/restart a simulation : :meth:`~pypot.vrep.io.VrepIO.start_simulation`, :meth:`~pypot.vrep.io.VrepIO.stop_simulation`, :meth:`~pypot.vrep.io.VrepIO.restart_simulation` +* pause/resume the simulation : :meth:`~pypot.vrep.io.VrepIO.pause_simulation`, :meth:`~pypot.vrep.io.VrepIO.resume_simulation` +* get/set a motor position : :meth:`~pypot.vrep.io.VrepIO.get_motor_position`, :meth:`~pypot.vrep.io.VrepIO.set_motor_position` +* get an object position/orienation : :meth:`~pypot.vrep.io.VrepIO.get_object_position`, :meth:`~pypot.vrep.io.VrepIO.get_object_orientation` + +Switch between the simulation and the real robot in a single line of code +------------------------------------------------------------------------- + +As stated above, the bridge between V-REP and pypot has been designed to let you easily switch from the robot to the simulated version. In most case, you should only have to change the way you instantiate your robot:: + + # Working with the real robot + import pypot.robot + + poppy = pypot.robot.from_config(config) + + poppy.walk.start() + +will become:: + + # Working with the simulated version + import pypot.vrep + + poppy = pypot.vrep.from_vrep(config, vrep_host, vrep_port, vrep_scene) + + poppy.walk.start() + +In particular, the walking primitive should work exactly the same way in both cases without needing to change anything. + +.. note:: Not all dynamixel registers have their V-REP equivalent. For the moment, only the control of the position is used. More advanced features can be easily added thanks to the controller abstraction (see section :ref:`extending`). diff --git a/pypot-master/pypot-master/pypot/__init__.py b/pypot-master/pypot-master/pypot/__init__.py new file mode 100644 index 0000000..e312fa6 --- /dev/null +++ b/pypot-master/pypot-master/pypot/__init__.py @@ -0,0 +1,5 @@ +import logging + +from ._version import __version__ + +logging.getLogger(__name__).addHandler(logging.NullHandler()) diff --git a/pypot-master/pypot-master/pypot/_version.py b/pypot-master/pypot-master/pypot/_version.py new file mode 100644 index 0000000..6a92b24 --- /dev/null +++ b/pypot-master/pypot-master/pypot/_version.py @@ -0,0 +1 @@ +__version__ = '5.0.2' diff --git a/pypot-master/pypot-master/pypot/creatures/__init__.py b/pypot-master/pypot-master/pypot/creatures/__init__.py new file mode 100644 index 0000000..954466b --- /dev/null +++ b/pypot-master/pypot-master/pypot/creatures/__init__.py @@ -0,0 +1,26 @@ +import sys + +from .abstractcreature import AbstractPoppyCreature + +module = sys.modules[__name__] + + +installed_poppy_creatures = {} +# Feel free to make a pull request to add your own creature here +existing_creatures = ['poppy-humanoid', 'poppy-torso', 'poppy-ergo-jr', + 'poppy-ergo-starter', 'poppy-6dof-right-arm', + 'poppy-dragster-mini', 'poppy-ergo', 'roboticia-quattro', + 'roboticia-first', 'roboticia-uno', 'roboticia-drive', + 'doggy'] + +for creature in existing_creatures: + package = creature.replace('-', '_') + cls_name = ''.join(x.capitalize() or '_' for x in package.split('_')) + + try: + cls = getattr(__import__(package), cls_name) + installed_poppy_creatures[creature] = cls + setattr(module, cls_name, cls) + + except (ImportError, AttributeError): + pass diff --git a/pypot-master/pypot-master/pypot/creatures/abstractcreature.py b/pypot-master/pypot-master/pypot/creatures/abstractcreature.py new file mode 100644 index 0000000..8cf94e9 --- /dev/null +++ b/pypot-master/pypot-master/pypot/creatures/abstractcreature.py @@ -0,0 +1,201 @@ + + +import sys +import logging +import json +import os +import re + +from threading import Thread + +from pypot.robot import Robot, from_json, use_dummy_robot +from pypot.server.snap import SnapRobotServer, find_local_ip + +logger = logging.getLogger(__name__) + +MAX_SETUP_TRIALS = 10 + + +class classproperty(property): + def __get__(self, cls, owner): + return self.fget.__get__(None, owner)() + + +def camelcase_to_underscore(name): + return re.sub('([a-z])([A-Z0-9])', r'\1_\2', name).lower() + + +class AbstractPoppyCreature(Robot): + """ Abstract Class for Any Poppy Creature. """ + def __new__(cls, + base_path=None, config=None, + simulator=None, scene=None, host='localhost', port=19997, id=None, shared_vrep_io=None, + use_snap=False, snap_host='0.0.0.0', snap_port=6969, snap_quiet=True, + use_http=False, http_host='0.0.0.0', http_port=8080, http_quiet=True, + use_remote=False, remote_host='0.0.0.0', remote_port=4242, + use_ws=False, ws_host='0.0.0.0', ws_port=9009, + start_background_services=True, sync=True, + **extra): + """ Poppy Creature Factory. + + Creates a Robot (real or simulated) and specifies it to make it a specific Poppy Creature. + + :param str config: path to a specific json config (if None uses the default config of the poppy creature - e.g. poppy_humanoid.json) + + :param str simulator: name of the simulator used : 'vrep', 'poppy-simu', or 'dummy' + :param str scene: specify a particular simulation scene (if None uses the default scene of the poppy creature, use "keep-existing" to keep the current VRep scene - e.g. poppy_humanoid.ttt) + :param str host: host of the simulator + :param int port: port of the simulator + :param int id: robot id in simulator (useful when using a scene with multiple robots) + :param vrep_io: use an already connected VrepIO (useful when using a scene with multiple robots) + :type vrep_io: :class:`~pypot.vrep.io.VrepIO` + :param bool use_snap: start or not the Snap! API + :param str snap_host: host of Snap! API + :param int snap_port: port of the Snap! + :param bool use_http: start or not the HTTP API + :param str http_host: host of HTTP API + :param int http_port: port of the HTTP API + :param int id: id of robot in the v-rep scene (not used yet!) + :param bool sync: choose if automatically starts the synchronization loops + + You can also add extra keyword arguments to disable sensor. For instance, to use a DummyCamera, you can add the argument: camera='dummy'. + + .. warning:: You can not specify a particular config when using a simulated robot! + + """ + if config and simulator: + raise ValueError('Cannot set a specific config ' + 'when using a simulated version!') + + creature = camelcase_to_underscore(cls.__name__) + base_path = (os.path.dirname(__import__(creature).__file__) + if base_path is None else base_path) + + default_config = os.path.join(os.path.join(base_path, 'configuration'), + '{}.json'.format(creature)) + + if config is None: + config = default_config + + if simulator is not None: + if simulator == 'vrep': + from pypot.vrep import from_vrep, VrepConnectionError + + scene_path = os.path.join(base_path, 'vrep-scene') + if scene != "keep-existing": + if scene is None: + scene = '{}.ttt'.format(creature) + + elif not os.path.exists(scene): + if ((os.path.basename(scene) != scene) or + (not os.path.exists(os.path.join(scene_path, scene)))): + raise ValueError('Could not find the scene "{}"!'.format(scene)) + + scene = os.path.join(scene_path, scene) + # TODO: use the id so we can have multiple poppy creatures + # inside a single vrep scene + + # vrep.simxStart no longer listen on localhost + if host == 'localhost': + host = '127.0.0.1' + + try: + poppy_creature = from_vrep(config, host, port, scene if scene != "keep-existing" else None, id=id, shared_vrep_io=shared_vrep_io) + except VrepConnectionError: + raise IOError('Connection to V-REP failed!') + + elif simulator == 'poppy-simu': + use_http = True + poppy_creature = use_dummy_robot(config) + elif simulator == 'dummy': + poppy_creature = use_dummy_robot(config) + else: + raise ValueError('Unknown simulation mode: "{}"'.format(simulator)) + + poppy_creature.simulated = True + + else: + for _ in range(MAX_SETUP_TRIALS): + try: + poppy_creature = from_json(config, sync, **extra) + logger.info('Init successful') + break + except Exception as e: + logger.warning('Init fail: {}'.format(str(e))) + exc_type, exc_inst, tb = sys.exc_info() + + else: + import traceback + traceback.print_tb(tb) + raise OSError('Could not initialize robot: {}'.format(exc_inst)) + poppy_creature.simulated = False + + with open(config) as f: + poppy_creature.config = json.load(f) + + urdf_file = os.path.join(os.path.join(base_path, + '{}.urdf'.format(creature))) + poppy_creature.urdf_file = urdf_file + + if use_snap: + poppy_creature.snap = SnapRobotServer( + poppy_creature, snap_host, snap_port, quiet=snap_quiet) + snap_url = 'http://snap.berkeley.edu/snapsource/snap.html' + block_url = 'http://{}:{}/snap-blocks.xml'.format(find_local_ip(), snap_port) + url = '{}#open:{}'.format(snap_url, block_url) + logger.info('SnapRobotServer is now running on: http://{}:{}\n'.format(snap_host, snap_port)) + logger.info('You can open Snap! interface with loaded blocks at "{}"\n'.format(url)) + + if use_http: + from pypot.server.httpserver import HTTPRobotServer + poppy_creature.http = HTTPRobotServer(poppy_creature, http_host, http_port, + cross_domain_origin="*", quiet=http_quiet) + logger.info('HTTPRobotServer is now running on: http://{}:{}\n'.format(http_host, http_port)) + + if use_remote: + from pypot.server import RemoteRobotServer + poppy_creature.remote = RemoteRobotServer(poppy_creature, remote_host, remote_port) + logger.info('RemoteRobotServer is now running on: http://{}:{}\n'.format(remote_host, remote_port)) + + if use_ws: + from pypot.server import WsRobotServer + poppy_creature.ws = WsRobotServer(poppy_creature, ws_host, ws_port) + logger.info('Ws server is now running on: ws://{}:{}\n'.format(ws_host, ws_port)) + + cls.setup(poppy_creature) + + if start_background_services: + cls.start_background_services(poppy_creature) + + return poppy_creature + + @classmethod + def start_background_services(cls, robot, services=['snap', 'http', 'remote', 'ws']): + for service in services: + if hasattr(robot, service): + s = Thread(target=getattr(robot, service).run, + name='{}_server'.format(service)) + s.daemon = True + s.start() + logger.info("Starting {} service".format(service)) + + @classmethod + def setup(cls, robot): + """ Classmethod used to specify your poppy creature. + + This is where you should attach any specific primitives for instance. + + """ + pass + + @classproperty + @classmethod + def default_config(cls): + creature = camelcase_to_underscore(cls.__name__) + base_path = os.path.dirname(__import__(creature).__file__) + + default_config = os.path.join(os.path.join(base_path, 'configuration'), + '{}.json'.format(creature)) + + with open(default_config) as f: + return json.load(f) diff --git a/pypot-master/pypot-master/pypot/creatures/configure_utility.py b/pypot-master/pypot-master/pypot/creatures/configure_utility.py new file mode 100644 index 0000000..95e020c --- /dev/null +++ b/pypot-master/pypot-master/pypot/creatures/configure_utility.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python + + + +""" +Poppy configuration tools + +Examples: +* poppy-configure ergo-jr m2 + +""" +import sys + +from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter +from subprocess import call + +from pypot.creatures import installed_poppy_creatures +from pypot.utils import flushed_print as print + + +def find_port_for_motor(config, motor): + def flatten_motorgroups(motors, groups): + l = [] + for m in motors: + if m in groups: + l += flatten_motorgroups(groups[m], groups) + else: + l.append(m) + return l + + for bus in config['controllers']: + motors_on_bus = config['controllers'][bus]["attached_motors"] + motors = flatten_motorgroups(motors_on_bus, config['motorgroups']) + if motor in motors: + return config['controllers'][bus]["port"] + + raise ValueError('Something must be wrong in your configuration file. ' + 'Could not find bus for motor {}'.format(motor)) + + +def main(): + robots = [c.replace('poppy-', '') for c in installed_poppy_creatures] + + parser = ArgumentParser(description='Configuration tool for Poppy robots ', + formatter_class=ArgumentDefaultsHelpFormatter) + + parser.add_argument('robot', type=str, choices=robots, + help='Robot used.') + + parser.add_argument('motor', type=str, + help='Name of the motor to configure.') + + args = parser.parse_args() + + RobotCls = installed_poppy_creatures['poppy-{}'.format(args.robot)] + c = RobotCls.default_config + + if args.motor not in c['motors']: + print('"{}" is not a motor of "{}"! ' + 'possibilities={}'.format(args.motor, args.robot, + sorted(c['motors'].keys()))) + print('Exiting now...') + sys.exit(1) + + motor_config = c['motors'][args.motor] + + args = [ + '--id', motor_config['id'], + '--type', motor_config['type'], + '--port', find_port_for_motor(c, args.motor), + '--return-delay-time', 0 + ] + + if 'wheel_mode' in motor_config.keys(): + args.extend(('--wheel-mode', motor_config['wheel_mode'])) + else: + args.extend(('--angle-limit',motor_config['angle_limit'][0],motor_config['angle_limit'][1], + '--goto-zero')) + + call(['dxl-config'] + list(map(str, args))) + + +if __name__ == '__main__': + main() diff --git a/pypot-master/pypot-master/pypot/creatures/ik.py b/pypot-master/pypot-master/pypot/creatures/ik.py new file mode 100644 index 0000000..070e4b9 --- /dev/null +++ b/pypot-master/pypot-master/pypot/creatures/ik.py @@ -0,0 +1,170 @@ +from ikpy.chain import Chain +from ikpy.utils.geometry import rpy_matrix +from ikpy.urdf.URDF import get_chain_from_joints +from numpy import deg2rad, rad2deg, array, arctan2, sqrt + + +class IKChain(Chain): + """ Motors chain used for forward and inverse kinematics. + This class is based on the IK Chain as defined in the IKPY library (https://github.com/Phylliade/ikpy). It + provides convenient methods to directly create such a chain directly from a Poppy Creature. + """ + + @classmethod + def from_poppy_creature(cls, poppy, motors, passiv, tip, reversed_motors=[]): + """ Creates an kinematic chain from motors of a Poppy Creature. + :param poppy: PoppyCreature used + :param list motors: list of all motors that composed the kinematic chain + :param list passiv: list of motors which are passiv in the chain (they will not move) + :param list tip: [x, y, z] translation of the tip of the chain (in meters) + :param list reversed_motors: list of motors that should be manually reversed (due to a problem in the URDF?) + """ + chain_elements = get_chain_from_joints(poppy.urdf_file, [m.name for m in motors]) + + activ = [False] + [m not in passiv for m in motors] + [True] + + chain = cls.from_urdf_file(poppy.urdf_file, + base_elements=chain_elements, + last_link_vector=tip, + active_links_mask=activ) + + chain.motors = [getattr(poppy, l.name) for l in chain.links[1:-1]] + + for m, l in zip(chain.motors, chain.links[1:-1]): + # Force an access to angle limit to retrieve real values + # This is quite an ugly fix and should be handled better + m.angle_limit + + bounds = m.__dict__['lower_limit'], m.__dict__['upper_limit'] + l.bounds = tuple(map(rad2deg, bounds)) + + chain._reversed = array([(-1 if m in reversed_motors else 1) for m in motors]) + + return chain + + @property + def joints_position(self): + """ Returns the joints position of all motors in the chain (in degrees). """ + return [m.present_position for m in self.motors] + + # Transformation matrix M: + # [[ Rx.x, Ry.x, Rz.x, T.x ], R = M[:3][:3] is the rotation matrix. + # [ Rx.y, Ry.y, Rz.y, T.y ], + # [ Rx.z, Ry.z, Rz.z, T.z ], T = M[:3][3] is the translation matrix. It corresponds + # [ 0 , 0 , 0, 1 ]] to the absolute coordinates of the effector + + @property + def position(self): + """ Returns the cartesian position of the end of the chain (in meters). """ + angles = self.convert_to_ik_angles(self.joints_position) + return self.forward_kinematics(angles)[:3, 3] + + @property + def orientation(self): + """ Returns the rotation matrix along X axis (values from -1 to 1). """ + angles = self.convert_to_ik_angles(self.joints_position) + return self.forward_kinematics(angles)[:3, 0] + + @property + def pose(self): + """ + Gives the 4x4 affine transformation matrix of the current position + *Used for debug* + :return: 4x4 affine transformation matrix (float) + """ + angles = self.convert_to_ik_angles(self.joints_position) + return self.forward_kinematics(angles) + + @property + def rpy(self): + """ + Gives the rpy values of the current position + :return: roll, pitch, yaw (float) + """ + angles = self.convert_to_ik_angles(self.joints_position) + R = self.forward_kinematics(angles) + yaw = arctan2(R[2][1], R[1][1]) + pitch = arctan2(-R[3][1], sqrt(R[3][2] ^ 2 + R[3][3] ^ 2)) + roll = arctan2(R[3][2], R[3][3]) + return roll, pitch, yaw + + def rpy_to_rotation_matrix(self, r, p, y): + """ + converts rpy to a 3x3 rotation matrix + :param r: roll (float) + :param p: pitch (float) + :param y: yaw (float) + :return: 3x3 rotation matrix + """ + return rpy_matrix(r, p, y) + + def goto(self, position, orientation, duration, wait=False, accurate=False): + """ Goes to a given cartesian position. + :param list position: [x, y, z] representing the target position (in meters) + :param list orientation: [Rx.x, Rx.y, Rx.z] transformation along X axis (values from -1 to 1) + :param float duration: move duration + :param bool wait: whether to wait for the end of the move + :param bool accurate: trade-off between accurate solution and computation time. By default, use the not so + accurate but fast version. + """ + # if len(position) != 3: + # raise ValueError('Position should be a list [x, y, z]!') + self._goto(position, orientation, duration, wait, accurate) + + def _goto(self, position, orientation, duration, wait, accurate): + """ Goes to a given cartesian pose. + :param matrix position: [x, y, z] representing the target position (in meters) + :param list orientation: [Rx.x, Rx.y, Rx.z] transformation along X axis (values from -1 to 1) + :param float duration: move duration + :param bool wait: whether to wait for the end of the move + :param bool accurate: trade-off between accurate solution and computation time. By default, use the not so + accurate but fast version. + """ + kwargs = {} + if not accurate: + kwargs['max_iter'] = 3 + + if orientation is not None: + shape = array(orientation).shape + if shape == (3, 3): + orientation_mode = "all" + elif shape == (3,): + orientation_mode = "X" + else: + orientation_mode = None + else: + orientation_mode = None + + # q0 = self.convert_to_ik_angles(self.joints_position) + q = self.inverse_kinematics(target_position=position, + target_orientation=orientation, + orientation_mode=orientation_mode, + **kwargs) + + joints = self.convert_from_ik_angles(q) + + last = self.motors[-1] + for m, pos in list(zip(self.motors, joints)): + m.goto_position(pos, duration, wait=False if m != last else wait) + + def convert_to_ik_angles(self, joints): + """ Convert from poppy representation to IKPY internal representation. """ + if len(joints) != len(self.motors): + raise ValueError('Incompatible data, len(joints) should be {}!'.format(len(self.motors))) + + raw_joints = [(j + m.offset) * (1 if m.direct else -1) for j, m in zip(joints, self.motors)] + + raw_joints *= self._reversed + + return [0] + [deg2rad(j) for j in raw_joints] + [0] + + def convert_from_ik_angles(self, joints): + """ Convert from IKPY internal representation to poppy representation. """ + if len(joints) != len(self.motors) + 2: + raise ValueError('Incompatible data, len(joints) should be {}!'.format(len(self.motors) + 2)) + + joints = [rad2deg(j) for j in joints[1:-1]] + joints *= self._reversed + + return [(j * (1 if m.direct else -1)) - m.offset + for j, m in zip(joints, self.motors)] diff --git a/pypot-master/pypot-master/pypot/creatures/services_launcher.py b/pypot-master/pypot-master/pypot/creatures/services_launcher.py new file mode 100644 index 0000000..7fd25f4 --- /dev/null +++ b/pypot-master/pypot-master/pypot/creatures/services_launcher.py @@ -0,0 +1,280 @@ +#!/usr/bin/env python + + +import os +import sys +import time +import random +import logging +import argparse +import webbrowser + +from contextlib import closing +from argparse import RawTextHelpFormatter + +from pypot.server.snap import find_local_ip +from pypot.creatures import installed_poppy_creatures +from pypot.utils import flushed_print as print + +from multiprocessing import Process +from http.server import HTTPServer +from http.server import SimpleHTTPRequestHandler + + +def start_poppy_with_services(args): + params = poppy_params_from_args(args) + + for i in range(5): + try: + print('Attempt {} to start the robot...'.format(i + 1)) + return installed_poppy_creatures[args.creature](**params) + + except Exception as e: + # In case of failure, + # Give the robot some time to statup, reboot... + time.sleep(random.random()) + print(e) + else: + print('Could not start up the robot...') + sys.exit(1) + + +def poppy_params_from_args(args): + params = { + 'use_snap': args.snap, + 'snap_port': args.snap_port, + 'use_http': args.http or args.scratch, + 'http_port': args.http_port, + 'use_scratch': args.scratch, + 'scratch_port': args.scratch_port, + 'use_remote': args.remote, + 'use_ws': args.ws, + 'ws_port': args.ws_port, + } + + if args.verbose: + params['snap_quiet'] = False + params['http_quiet'] = False + params['ws_quiet'] = False + + if args.vrep: + params['simulator'] = 'vrep' + elif args.poppy_simu: + params['simulator'] = 'poppy-simu' + elif args.dummy: + params['simulator'] = 'dummy' + + if args.disable_camera: + params['camera'] = 'dummy' + + return params + + +def main(): + parser = argparse.ArgumentParser( + description=('Poppy services launcher. Use it to quickly instantiate a poppy creature with Snap!, ' + 'Scratch, an http server, or a remote robot.'), + epilog=""" +Examples: +* poppy-services --http poppy-ergo-jr +* poppy-services --snap poppy-torso +* poppy-services --scratch --vrep poppy-humanoid""", + formatter_class=RawTextHelpFormatter) + + parser.add_argument('creature', type=str, + help='poppy creature name', + action='store', nargs='?', + choices=list(installed_poppy_creatures.keys())) + parser.add_argument('--dummy', + help='use a simulated dummy robot', + action='store_true') + parser.add_argument('--vrep', + help='use a V-REP simulated Poppy Creature', + action='store_true') + parser.add_argument('--poppy-simu', + help='start a simulated dummy robot and the HTTP API to connect to the viewer on simu.poppy-project.org', + action='store_true') + parser.add_argument('--snap', + help='start a Snap! robot server', + action='store_true') + parser.add_argument('--snap-port', + help='port used by the Snap! server', + default=6969, type=int) + parser.add_argument('--scratch', + help='start a Scratch robot server', + action='store_true') + parser.add_argument('--scratch-port', + help='port used by the Scratch server', + default=8601, type=int) + parser.add_argument('-nb', '--no-browser', + help='avoid automatic start of Snap! in web browser', + action='store_true') + parser.add_argument('--http', + help='start a http robot server', + action='store_true') + parser.add_argument('--http-port', + help='port of HttpRobotServer, used for poppy-simu', + default=8080, type=int) + parser.add_argument('--remote', + help='start a remote robot server', + action='store_true') + parser.add_argument('--ws', + help='start the websocket server', + action='store_true') + parser.add_argument('--ws-port', + help='port of Websocket Server', + default=9009, type=int) + parser.add_argument('--disable-camera', + help='Start the robot without the camera.', + action='store_true') + parser.add_argument('-v', '--verbose', + help='start services with verbose mode. There is 3 debug levels, add as "v" as debug level you want', + action='count') + parser.add_argument('-f', '--log-file', + help='Log filename', + action='store') + + nb_creatures = len(installed_poppy_creatures.keys()) + if nb_creatures == 0: + print('No installed poppy creature were found!') + print('You should first install the python package ' + 'corresponding to your robot or check your python environment.') + sys.exit(1) + + args = parser.parse_args() + + # If no creature are specified and only one is installed + # We use it as default. + if args.creature is None: + if nb_creatures > 1: + parser.print_help() + sys.exit(1) + + args.creature = list(installed_poppy_creatures.keys())[0] + print('No creature specified, use {}'.format(args.creature)) + + if args.log_file: + fh = logging.FileHandler(args.log_file) + fh.setLevel(logging.DEBUG) + formatter = logging.Formatter( + '%(asctime)s - %(name)s - %(levelname)s - %(message)s') + fh.setFormatter(formatter) + logging.getLogger('').addHandler(fh) + + if args.verbose: + args.snap_quiet = False + args.http_quiet = False + args.ws_quiet = False + + if args.verbose == 1: + lvl = logging.WARNING + elif args.verbose == 2: + lvl = logging.INFO + elif args.verbose > 2: + lvl = logging.DEBUG + + if args.log_file is not None: + ch = logging.FileHandler(args.log_file) + else: + ch = logging.StreamHandler() + + ch.setLevel(lvl) + formatter = logging.Formatter( + '%(name)-12s: %(levelname)-8s %(message)s') + ch.setFormatter(formatter) + logging.getLogger('').addHandler(ch) + + if not any([args.snap, args.scratch, args.http, args.remote, args.poppy_simu, args.ws, args.dummy]): + print('No service specified! See --help for details.') + sys.exit(1) + + scratch_static_server_started = False + if args.scratch and not args.no_browser: + scratch_static_port = args.scratch_port + scratch_static_server = HTTPServer(("0.0.0.0", scratch_static_port), SimpleHTTPRequestHandler) + + from pypot.vpl.scratch import download_scratch_interactively + static_app = download_scratch_interactively() + if static_app is None: + print("The static server was not started because the VPL app has not been downloaded") + else: + os.chdir(static_app) + scratch_static_server_process = Process(target=scratch_static_server.serve_forever, args=()) + scratch_static_server_started = True + scratch_static_server_process.start() + + scratch_url = 'http://127.0.0.1:{}/'.format(scratch_static_port) + url = '{}'.format(scratch_url) + + snap_static_server_started = False + if args.snap and not args.no_browser: + snap_static_port = 8888 + snap_static_server = HTTPServer(("0.0.0.0", snap_static_port), SimpleHTTPRequestHandler) + + from pypot.vpl.snap import download_snap_interactively + static_app = download_snap_interactively() + if static_app is None: + print("The static server was not started because the VPL app has not been downloaded") + else: + os.chdir(static_app) + snap_static_server_process = Process(target=snap_static_server.serve_forever, args=()) + snap_static_server_started = True + snap_static_server_process.start() + + snap_url = 'http://127.0.0.1:{}/snap.html'.format(snap_static_port) + block_url = 'http://{}:{}/snap-blocks.xml'.format( + find_local_ip(), args.snap_port) + url = '{}#open:{}'.format(snap_url, block_url) + + with closing(start_poppy_with_services(args)): + + msg = '' + + if args.dummy or args.poppy_simu: + msg += 'Simulated robot created! He is running on: ip={}'.format(find_local_ip()) + else: + msg += 'Robot instantiated! He is running on: ip={},'.format(find_local_ip()) + if args.disable_camera: + msg += ' without camera access.' + else: + msg += ' with camera access.' + + if args.vrep: msg += ' With V-REP link.' + + if args.snap or args.scratch or args.ws or args.http or args.poppy_simu: + msg += '\nServer started on:' + if args.http or args.scratch or args.poppy_simu: msg += ' http_port={},'.format(args.http_port) + if args.snap: msg += ' Snap_port={},'.format(args.snap_port) + if args.ws: msg += ' ws_port={},'.format(args.ws_port) + msg = msg[0:-1] + '.' + + print(msg) + + sys.stdout.flush() + + if snap_static_server_started or scratch_static_server_started: + for browser_name in ['firefox', 'chromium-browser', 'chromium', 'google-chrome', + 'chrome', 'safari', 'midori', None]: + try: + browser = webbrowser.get(browser_name) + browser.open(url, new=0, autoraise=True) + break + except Exception: + pass + + # Just run4ever (until Ctrl-c...) + try: + while (True): + time.sleep(1000) + except KeyboardInterrupt: + print("Bye bye!") + if scratch_static_server_started: + scratch_static_server_process.terminate() + scratch_static_server_process.join() + if snap_static_server_started: + snap_static_server_process.terminate() + snap_static_server_process.join() + + +if __name__ == '__main__': + main() diff --git a/pypot-master/pypot-master/pypot/dynamixel/__init__.py b/pypot-master/pypot-master/pypot/dynamixel/__init__.py new file mode 100644 index 0000000..56a576d --- /dev/null +++ b/pypot-master/pypot-master/pypot/dynamixel/__init__.py @@ -0,0 +1,141 @@ +import sys +import platform +import glob +import logging + +import serial.tools.list_ports + + +from .io import DxlIO, Dxl320IO, DxlXM430IO, DxlXL330IO +from .error import BaseErrorHandler +from .syncloop import BaseDxlController +from .motor import DxlMXMotor, DxlAXRXMotor, DxlXL320Motor, DxlSRMotor +from .io.abstract_io import DxlError + +from ..robot import Robot + +logger = logging.getLogger(__name__) + + +def _get_available_ports(): + """ Tries to find the available serial ports on your system. """ + if platform.system() == 'Darwin': + return glob.glob('/dev/tty.usb*') + + elif platform.system() == 'Linux': + return glob.glob('/dev/ttyACM*') + glob.glob('/dev/ttyUSB*') + glob.glob('/dev/ttyAMA*') + + elif sys.platform.lower() == 'cygwin': + return glob.glob('/dev/com*') + + elif platform.system() == 'Windows': + import winreg + import itertools + + ports = [] + path = 'HARDWARE\\DEVICEMAP\\SERIALCOMM' + key = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, path) + + for i in itertools.count(): + try: + ports.append(str(winreg.EnumValue(key, i)[1])) + except WindowsError: + return ports + else: + raise EnvironmentError('{} is an unsupported platform, cannot find serial ports!'.format(platform.system())) + return [] + + +def get_available_ports(only_free=False): + ports = _get_available_ports() + + if only_free: + ports = [port for port in ports if port not in DxlIO.get_used_ports()] + + return ports + + +def get_port_vendor_info(port=None): + """ Return vendor informations of a usb2serial device. + It may depends on the Operating System. + :param string port: port of the usb2serial device + + :Example: + + Result with a USB2Dynamixel on Linux: + In [1]: import pypot.dynamixel + In [2]: pypot.dynamixel.get_port_vendor_info('/dev/ttyUSB0') + Out[2]: 'USB VID:PID=0403:6001 SNR=A7005LKE' """ + + port_info_dict = dict((x[0], x[2]) for x in serial.tools.list_ports.comports()) + return port_info_dict[port] if port is not None else port_info_dict + + +def find_port(ids, strict=True): + """ Find the port with the specified attached motor ids. + + :param list ids: list of motor ids to find + :param bool strict: specify if all ids should be find (when set to False, only half motor must be found) + + .. warning:: If two (or more) ports are attached to the same list of motor ids the first match will be returned. + + """ + ids_founds = [] + for port in get_available_ports(): + for DxlIOCls in (DxlIO, Dxl320IO): + try: + with DxlIOCls(port) as dxl: + _ids_founds = dxl.scan(ids) + ids_founds += _ids_founds + + if strict and sorted(_ids_founds) == sorted(ids): + return port + + if not strict and len(_ids_founds) >= len(ids) / 2: + logger.warning('Missing ids: {}'.format(ids, list(set(ids) - set(_ids_founds)))) + return port + + if len(ids_founds) > 0: + logger.warning('Port:{} ids found:{}'.format(port, _ids_founds)) + + except DxlError: + logger.warning('DxlError on port {}'.format(port)) + continue + + missing = list(set(ids) - set(ids_founds)) + if len(missing) == 0: + raise ValueError('All motors have been found but they are not connected as specified in the configuration file, please check connections') + raise IndexError('No suitable port found for ids {}. These ids are missing {} !'.format(ids, missing)) + + +def autodetect_robot(): + """ Creates a :class:`~pypot.robot.robot.Robot` by detecting dynamixel motors on all available ports. """ + motor_controllers = [] + + for port in get_available_ports(): + for DxlIOCls in (DxlIO, Dxl320IO): + dxl_io = DxlIOCls(port) + ids = dxl_io.scan() + + if not ids: + dxl_io.close() + continue + + models = dxl_io.get_model(ids) + + motorcls = { + 'MX': DxlMXMotor, + 'RX': DxlAXRXMotor, + 'AX': DxlAXRXMotor, + 'XL': DxlXL320Motor, + 'SR': DxlSRMotor, + } + + motors = [motorcls[model[:2]](id, model=model) + for id, model in zip(ids, models)] + + c = BaseDxlController(dxl_io, motors) + motor_controllers.append(c) + break + + return Robot(motor_controllers) diff --git a/pypot-master/pypot-master/pypot/dynamixel/controller.py b/pypot-master/pypot-master/pypot/dynamixel/controller.py new file mode 100644 index 0000000..045577d --- /dev/null +++ b/pypot-master/pypot-master/pypot/dynamixel/controller.py @@ -0,0 +1,210 @@ +import time +import logging + +from .io.abstract_io import DxlError +from ..robot.controller import MotorsController + +logger = logging.getLogger(__name__) + + +class DxlController(MotorsController): + def __init__(self, io, motors, sync_freq, synchronous, + mode, regname, varname=None): + MotorsController.__init__(self, io, motors, sync_freq) + + self.ids = [m.id for m in self.working_motors] + self.synchronous = synchronous + + self.mode = mode + self.regname = regname + self.varname = regname if varname is None else varname + + for m in motors: + if mode == 'get': + m._read_synchronous[self.varname] = self.synchronous + else: + m._write_synchronous[self.varname] = self.synchronous + + @property + def working_motors(self): + return [m for m in self.motors if not m._broken] + + @property + def synced_motors(self): + motors = [m for m in self.working_motors if self.varname in m.registers] + + if self.synchronous: + motors = ([m for m in motors if m._read_synced[self.varname].needed] + if self.mode == 'get' else + [m for m in motors if m._write_synced[self.varname].needed]) + + return motors + + def setup(self): + if self.mode == 'set': + MAX_TRIALS = 25 + for _ in range(MAX_TRIALS): + if self.get_register(self.working_motors, disable_sync_read=True): + break + time.sleep(0.1) + else: + raise IOError('Cannot initialize syncloop for "{}". You need to desactivate sync_read if you use a usb2dynamixel device. '.format( + self.regname)) + + def update(self): + if not self.synced_motors: + return + + return (self.get_register(self.synced_motors) + if self.mode == 'get' else + self.set_register(self.synced_motors)) + + def get_register(self, motors, disable_sync_read=False): + """ Gets the value from the specified register and sets it to the :class:`~pypot.dynamixel.motor.DxlMotor`. """ + if not motors: + return False + + ids = [m.id for m in motors] + getter = getattr(self.io, 'get_{}'.format(self.regname)) + + values = (sum([list(getter([id])) for id in ids], []) + if disable_sync_read else + getter(ids)) + + if not values: + return False + + for m, val in zip(motors, values): + m.__dict__[self.varname] = val + + for m in motors: + m._read_synced[self.varname].done() + + return True + + def set_register(self, motors): + """ Gets the value from :class:`~pypot.dynamixel.motor.DxlMotor` and sets it to the specified register. """ + if not motors: + return + ids = [m.id for m in motors] + + values = (m.__dict__[self.varname] for m in motors) + getattr(self.io, 'set_{}'.format(self.regname))(dict(zip(ids, values))) + + for m in motors: + m._write_synced[self.varname].done() + + +class AngleLimitRegisterController(DxlController): + def __init__(self, io, motors, sync_freq, synchronous): + DxlController.__init__(self, io, motors, sync_freq, + synchronous, 'get', 'angle_limit') + + self.varnames = ['lower_limit', 'upper_limit'] + for m in motors: + for var in self.varnames: + m._read_synchronous[var] = self.synchronous + + @property + def synced_motors(self): + motors = self.working_motors + + if self.synchronous: + sync_motors = [] + + for m in motors: + for var in self.varnames: + if m._read_synced[var].needed: + sync_motors.append(m) + + motors = sync_motors + + return motors + + def get_register(self, motors): + if not motors: + return + + ids = [m.id for m in motors] + values = self.io.get_angle_limit(ids) + + for m, val in zip(motors, values): + m.__dict__['lower_limit'], m.__dict__['upper_limit'] = val + + for m in motors: + for var in ['lower_limit', 'upper_limit']: + m._read_synced[var].done() + + +class PosSpeedLoadDxlController(DxlController): + def __init__(self, io, motors, sync_freq): + DxlController.__init__(self, io, motors, sync_freq, + False, 'get', 'present_position') + + def setup(self): + torques = self.io.is_torque_enabled(self.ids) + for m, c in zip(self.working_motors, torques): + m.compliant = not c + self._old_torques = torques + self._old_goals = {m.id: 0.0 for m in self.motors} + + try: + values = self.io.get_goal_position_speed_load(self.ids) + positions, speeds, loads = zip(*values) + except ValueError: + raise DxlError("Couldn't initialize pos/speed/load sync loop!") + + for m, p, s, l in zip(self.working_motors, positions, speeds, loads): + m.__dict__['goal_position'] = p + m.__dict__['moving_speed'] = s + m.__dict__['torque_limit'] = l + + def update(self): + self.get_present_position_speed_load(self.working_motors) + self.set_goal_position_speed_load(self.working_motors) + + def get_present_position_speed_load(self, motors): + ids = [m.id for m in motors] + values = self.io.get_present_position_speed_load(ids) + + if not values: + logger.warning('Timeout when getting pos/speed/load from %s', ids) + return + + positions, speeds, loads = zip(*values) + + for m, p, s, l in zip(motors, positions, speeds, loads): + m.__dict__['present_position'] = p + m.__dict__['present_speed'] = s + m.__dict__['present_load'] = l + + def set_goal_position_speed_load(self, motors): + change_torque = {} + torques = [not m.compliant for m in motors] + for m, t, old_t in zip(motors, torques, self._old_torques): + if t != old_t: + change_torque[m.id] = t + self._old_torques = torques + if change_torque: + self.io._set_torque_enable(change_torque) + + rigid_motors = [] + + for m in motors: + # Filter force control motors - only update values if goal_position has changed + if getattr(m, "force_control_enable", False) and not m.compliant and self._old_goals[m.id] != m.__dict__['goal_position']: + rigid_motors += [m] + self._old_goals[m.id] = m.__dict__['goal_position'] + # Do not filter motors without force control + elif not m.compliant: + rigid_motors += [m] + + ids = tuple(m.id for m in rigid_motors) + + if not ids: + return + + values = ((m.__dict__['goal_position'], + m.__dict__['moving_speed'], + m.__dict__['torque_limit']) for m in rigid_motors) + self.io.set_goal_position_speed_load(dict(zip(ids, values))) diff --git a/pypot-master/pypot-master/pypot/dynamixel/conversion.py b/pypot-master/pypot-master/pypot/dynamixel/conversion.py new file mode 100644 index 0000000..e94c2d0 --- /dev/null +++ b/pypot-master/pypot-master/pypot/dynamixel/conversion.py @@ -0,0 +1,421 @@ +# -*- coding: utf-8 -*- + + +""" + This module describes all the conversion method used to transform value from the representation used by the dynamixel motor to a more standard form (e.g. degrees, volt...). + + For compatibility issue all comparison method should be written in the following form (even if the model is not actually used): + * def my_conversion_from_dxl_to_si(value, model): ... + * def my_conversion_from_si_to_dxl(value, model): ... + + .. note:: If the control is readonly you only need to write the dxl_to_si conversion. + + """ + +import numpy +import itertools + +from enum import Enum + +# MARK: - Position + +position_range = { + 'MX': (4096, 360.0), + 'SR': (4096, 360.0), + 'EX': (4096, 251.0), + '*': (1024, 300.0), + 'XM': (4096, 360.0) +} + +torque_max = { # in N.m + 'MX-106': 8.4, + 'MX-64': 6.0, + 'MX-28': 2.5, + 'MX-12': 1.2, + 'AX-12': 1.2, + 'AX-18': 1.8, + 'RX-24': 2.6, + 'RX-28': 2.5, + 'RX-64': 4.0, + 'XL-320': 0.39, + 'SR-RH4D': 0.57, + 'EX-106': 10.9 +} + +velocity = { # in degree/s + 'MX-106': 270., + 'MX-64': 378., + 'MX-28': 330., + 'MX-12': 2820., + 'AX-12': 354., + 'AX-18': 582., + 'RX-24': 756., + 'RX-28': 402., + 'RX-64': 294., + 'SR-RH4D': 300.0, +} + + +def dxl_to_degree(value, model): + determined_model = '*' + if model.startswith('MX'): + determined_model = 'MX' + elif model.startswith('SR'): + determined_model = 'SR' + elif model.startswith('EX'): + determined_model = 'EX' + elif model.startswith('XM'): + determined_model = 'XM' + max_pos, max_deg = position_range[determined_model] + + return round(((max_deg * float(value)) / (max_pos - 1)) - (max_deg / 2), 2) + + +def degree_to_dxl(value, model): + determined_model = '*' + if model.startswith('MX'): + determined_model = 'MX' + elif model.startswith('SR'): + determined_model = 'SR' + elif model.startswith('EX'): + determined_model = 'EX' + elif model.startswith('XM'): + determined_model = 'XM' + max_pos, max_deg = position_range[determined_model] + + pos = int(round((max_pos - 1) * ((max_deg / 2 + float(value)) / max_deg), 0)) + pos = min(max(pos, 0), max_pos - 1) + + return pos + +# MARK: - Speed + + +# Speed factor (RPM per least significant bit) +def _speed_factor(model): + if model == 'MX-12': + return 0.916 + + if model.startswith('MX') or model.startswith('SR'): + return 0.114 + + return 0.111 + + +def dxl_to_speed(value, model): + cw, speed = divmod(value, 1024) + direction = (-2 * cw + 1) + + return direction * (speed * _speed_factor(model)) * 6 + + +def speed_to_dxl(value, model): + direction = 1024 if value < 0 else 0 + speed_factor = _speed_factor(model) + + max_value = 1023 * speed_factor * 6 + value = min(max(value, -max_value), max_value) + + return int(round(direction + abs(value) / (6 * speed_factor), 0)) + +# MARK: - Torque + + +def dxl_to_torque(value, model): + return round(value / 10.23, 1) + + +def torque_to_dxl(value, model): + return int(round(value * 10.23, 0)) + + +def dxl_to_load(value, model): + cw, load = divmod(value, 1024) + direction = -2 * cw + 1 + + return dxl_to_torque(load, model) * direction + +# MARK - Acceleration + + +def dxl_to_acceleration(value, model): + """Converts from ticks to degress/second^2""" + + return value * 8.583 # degrees / sec**2 + + +def acceleration_to_dxl(value, model): + """Converts from degrees/second^2 to ticks""" + + return int(round(value / 8.583, 0)) # degrees / sec**2 + +# PID Gains + + +def dxl_to_pid(value, model): + return (value[0] * 0.004, + value[1] * 0.48828125, + value[2] * 0.125) + + +def pid_to_dxl(value, model): + def truncate(x): + return int(max(0, min(x, 254))) + return [truncate(x * y) for x, y in zip(value, (250, 2.048, 8.0))] + +# MARK: - Model + + +dynamixelModels = { + 12: 'AX-12', # 12 + (0<<8) + 18: 'AX-18', # 18 + (0<<8) + 24: 'RX-24', # 24 + (0<<8) + 28: 'RX-28', # 28 + (0<<8) + 29: 'MX-28', # 29 + (0<<8) + 64: 'RX-64', # 64 + (0<<8) + 107: 'EX-106', + 360: 'MX-12', # 104 + (1<<8) + 310: 'MX-64', # 54 + (1<<8) + 320: 'MX-106', # 64 + (1<<8) + 350: 'XL-320', # 94 + (1<<8) + 400: 'SR-RH4D', + 401: 'SR-RH4D', # Virtual motor + 16897: 'USB2AX', + 1030: 'XM-430', +} + + +def dxl_to_model(value, dummy=None): + try: + return dynamixelModels[value] + except KeyError: + return 'Unknown model number {}'.format(value) +# MARK: - Drive Mode + + +def check_bit(value, offset): + return bool(value & (1 << offset)) + + +def dxl_to_drive_mode(value, model): + return ('reverse' if check_bit(value, 0) else 'normal', + 'slave' if check_bit(value, 1) else 'master') + + +def drive_mode_to_dxl(value, model): + return (int('slave' in value) << 1 | int('reverse' in value)) + +# MARK: - Baudrate + + +dynamixelBaudrates = { + 1: 1000000.0, + 3: 500000.0, + 4: 400000.0, + 7: 250000.0, + 9: 200000.0, + 16: 117647.1, + 34: 57600.0, + 103: 19230.8, + 207: 9615.4, + 250: 2250000.0, + 251: 2500000.0, + 252: 3000000.0, +} + +dynamixelBaudratesWithModel = { + 'XL-320': { + 0: 9600.0, + 1: 57600.0, + 2: 115200.0, + 3: 1000000.0, + 4: 2000000.0 + } +} + + +def dxl_to_baudrate(value, model): + return dynamixelBaudratesWithModel.get(model, dynamixelBaudrates)[value] + + +def baudrate_to_dxl(value, model): + current_baudrates = dynamixelBaudratesWithModel.get(model, dynamixelBaudrates) + for k, v in current_baudrates.items(): + if (abs(v - value) / float(value)) < 0.05: + return k + raise ValueError('incorrect baudrate {} (possible values {})'.format(value, list(current_baudrates.values()))) + +# MARK: - Return Delay Time + + +def dxl_to_rdt(value, model): + return value * 2 + + +def rdt_to_dxl(value, model): + return int(value / 2) + +# MARK: - Temperature + + +def dxl_to_temperature(value, model): + return float(value) + + +def temperature_to_dxl(value, model): + return int(value) + +# MARK: - Current + + +def dxl_to_current(value, model): + if model.startswith('SR'): + # The SR motors do use a different conversion formula than the dynamixel motors + # See http://kb.seedrobotics.com/doku.php?id=dh4d:dynamixelcontroltables + return (value * 0.4889) / 1000.0 + else: + return 4.5 * (value - 2048.0) / 1000.0 + +# MARK: - Voltage + + +def dxl_to_voltage(value, model): + return value * 0.1 + + +def voltage_to_dxl(value, model): + return int(value * 10) + +# MARK: - Status Return Level + + +status_level = ('never', 'read', 'always') + + +def dxl_to_status(value, model): + return status_level[value] + + +def status_to_dxl(value, model): + if value not in status_level: + raise ValueError('status "{}" should be chosen among {}'.format(value, status_level)) + return status_level.index(value) + +# MARK: - Error + +# TODO: depend on protocol v1 vs v2 + + +dynamixelErrors = ['None Error', + 'Instruction Error', + 'Overload Error', + 'Checksum Error', + 'Range Error', + 'Overheating Error', + 'Angle Limit Error', + 'Input Voltage Error'] + + +def dxl_to_alarm(value, model): + return decode_error(value) + + +def decode_error(error_code): + bits = numpy.unpackbits(numpy.asarray(error_code, dtype=numpy.uint8)) + return tuple(numpy.array(dynamixelErrors)[bits == 1]) + + +def alarm_to_dxl(value, model): + if not set(value).issubset(dynamixelErrors): + raise ValueError('should only contains error among {}'.format(dynamixelErrors)) + + indices = [len(dynamixelErrors) - 1 - dynamixelErrors.index(e) for e in value] + return sum(2 ** i for i in indices) + + +XL320LEDColors = Enum('Colors', 'off red green yellow ' + 'blue pink cyan white') + + +def dxl_to_led_color(value, model): + return XL320LEDColors(value + 1).name + + +def led_color_to_dxl(value, model): + value = getattr(XL320LEDColors, value).value - 1 + value = int(value) & 0b111 + return value + + +control_modes = { + 1: 'wheel', + 2: 'joint', +} + + +def dxl_to_control_mode(value, _): + return control_modes[value] + + +def control_mode_to_dxl(mode, _): + return (next((v for v, m in control_modes.items() + if m == mode), None)) + +# MARK: - Various utility functions + + +def dxl_to_bool(value, model): + return bool(value) + + +def bool_to_dxl(value, model): + return int(value) + + +def dxl_decode(data): + if len(data) not in (1, 2, 4, 8): + raise ValueError('try to decode incorrect data {}'.format(data)) + + if len(data) == 1: + return data[0] + + if len(data) == 2: + return data[0] + (data[1] << 8) + + if len(data) == 4: + return int.from_bytes(data, byteorder='little', signed=False) + + if len(data) == 8: + return ( + data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24), + data[4] + (data[5] << 8) + (data[6] << 16) + (data[7] << 24), + ) + + +def dxl_decode_all(data, nb_elem): + if nb_elem > 1: + data = list(zip(*([iter(data)] * (len(data) // nb_elem)))) + return tuple(map(dxl_decode, data)) + else: + return dxl_decode(data) + + +def dxl_code(value, length): + if length not in (1, 2, 4): + raise ValueError('try to code value with an incorrect length {}'.format(length)) + + if length == 1: + return (value, ) + + if length == 2: + return (value % 256, value >> 8) + + if length == 4: + return value.to_bytes(4, byteorder='little', signed=False) + + +def dxl_code_all(value, length, nb_elem): + if nb_elem > 1: + return list(itertools.chain(*(dxl_code(v, length) for v in value))) + else: + return dxl_code(value, length) diff --git a/pypot-master/pypot-master/pypot/dynamixel/error.py b/pypot-master/pypot-master/pypot/dynamixel/error.py new file mode 100644 index 0000000..0482938 --- /dev/null +++ b/pypot-master/pypot-master/pypot/dynamixel/error.py @@ -0,0 +1,74 @@ +# -*- coding: utf-8 -*- + +import logging + +logger = logging.getLogger(__name__) + + +class DxlErrorHandler(object): + """ This class is used to represent all the error that you can/should handle. + + The errors can be of two types: + + * communication error (timeout, communication) + * motor error (voltage, limit, overload...) + + This class was designed as an abstract class and so you should write your own handler by subclassing this class and defining the apropriate behavior for your program. + + .. warning:: The motor error should be overload carrefuly as they can indicate important mechanical issue. + + """ + # MARK: - Communication errors + + def handle_timeout(self, timeout_error): + raise NotImplementedError + + def handle_communication_error(self, communication_error): + raise NotImplementedError + + # MARK: - Motor errors + def handle_input_voltage_error(self, instruction_packet): + raise NotImplementedError + + def handle_angle_limit_error(self, instruction_packet): + raise NotImplementedError + + def handle_overheating_error(self, instruction_packet): + raise NotImplementedError + + def handle_range_error(self, instruction_packet): + raise NotImplementedError + + def handle_checksum_error(self, instruction_packet): + raise NotImplementedError + + def handle_overload_error(self, instruction_packet): + raise NotImplementedError + + def handle_instruction_error(self, instruction_packet): + raise NotImplementedError + + def handle_none_error(self, instruction_packet): + raise NotImplementedError + + +class BaseErrorHandler(DxlErrorHandler): + """ This class is a basic handler that just skip the communication errors. """ + def handle_timeout(self, timeout_error): + msg = 'Timeout after sending {} to motors {}'.format(timeout_error.instruction_packet, + timeout_error.ids) + logger.warning(msg, + extra={'port': timeout_error.dxl_io.port, + 'baudrate': timeout_error.dxl_io.baudrate, + 'timeout': timeout_error.dxl_io.timeout}) + + def handle_communication_error(self, com_error): + msg = 'Communication error after sending {}'.format(com_error.instruction_packet) + + logger.warning(msg, + extra={'port': com_error.dxl_io.port, + 'baudrate': com_error.dxl_io.baudrate, + 'timeout': com_error.dxl_io.timeout}) + + def handle_none_error(self, instruction_packet): + logger.info('None Error!') diff --git a/pypot-master/pypot-master/pypot/dynamixel/io/__init__.py b/pypot-master/pypot-master/pypot/dynamixel/io/__init__.py new file mode 100644 index 0000000..590b8f4 --- /dev/null +++ b/pypot-master/pypot-master/pypot/dynamixel/io/__init__.py @@ -0,0 +1,5 @@ +from .io import DxlIO +from .io_320 import Dxl320IO +from .io_xm430 import DxlXM430IO +from .io_xl330 import DxlXL330IO +from .abstract_io import DxlError diff --git a/pypot-master/pypot-master/pypot/dynamixel/io/abstract_io.py b/pypot-master/pypot-master/pypot/dynamixel/io/abstract_io.py new file mode 100644 index 0000000..656eb6c --- /dev/null +++ b/pypot-master/pypot-master/pypot/dynamixel/io/abstract_io.py @@ -0,0 +1,581 @@ +# -*- coding: utf-8 -*- + +import serial +import logging +import operator +import itertools +import threading + +from collections import namedtuple, OrderedDict +from contextlib import contextmanager + +from ..conversion import (dxl_code_all, dxl_decode_all, decode_error, + dxl_to_model) + + +logger = logging.getLogger(__name__) +# With this logger you should always provide as extra: +# - the port +# - the baudrate +# - the timeout + + +_DxlControl = namedtuple('_DxlControl', ('name', + 'address', 'length', 'nb_elem', + 'access', + 'models', + 'dxl_to_si', 'si_to_dxl', + 'getter_name', 'setter_name')) + + +class _DxlAccess(object): + readonly, writeonly, readwrite = range(3) + + +class AbstractDxlIO(object): + """ Low-level class to handle the serial communication with the robotis motors. """ + + __used_ports = set() + __controls = [] + _protocol = None + + @classmethod + def get_used_ports(cls): + return list(cls.__used_ports) + + # MARK: - Open, Close and Flush the communication + + def __init__(self, + port, baudrate=1000000, timeout=0.05, + use_sync_read=False, + error_handler_cls=None, + convert=True): + """ At instantiation, it opens the serial port and sets the communication parameters. + + :param string port: the serial port to use (e.g. Unix (/dev/tty...), Windows (COM...)). + :param int baudrate: default for new motors: 57600, for PyPot motors: 1000000 + :param float timeout: read timeout in seconds + :param bool use_sync_read: whether or not to use the SYNC_READ instruction + :param error_handler: set a handler that will receive the different errors + :type error_handler: :py:class:`~pypot.dynamixel.error.DxlErrorHandler` + :param bool convert: whether or not convert values to units expressed in the standard system + + :raises: :py:exc:`~pypot.dynamixel.io.DxlError` if the port is already used. + + """ + self._known_models = {} + self._known_mode = {} + + self._sync_read = use_sync_read + self._error_handler = error_handler_cls() if error_handler_cls else None + self._convert = convert + + self._serial_lock = threading.Lock() + + self.open(port, baudrate, timeout) + + def __enter__(self): + return self + + def __del__(self): + self.close() + + def __exit__(self, exc_type, exc_value, traceback): + self.close() + + def __repr__(self): + return ('').format(self=self) + + def open(self, port, baudrate=1000000, timeout=0.05): + """ Opens a new serial communication (closes the previous communication if needed). + + :raises: :py:exc:`~pypot.dynamixel.io.DxlError` if the port is already used. + + """ + self._open(port, baudrate, timeout) + logger.info("Opening port '%s'", self.port, + extra={'port': port, + 'baudrate': baudrate, + 'timeout': timeout}) + + def _open(self, port, baudrate, timeout, max_recursion=500): + # Tries to connect to port until it succeeds to ping any motor on the bus. + # This is used to circumvent a bug with the driver for the USB2AX on Mac. + # Warning: If no motor is connected on the bus, this will run forever!!! + import platform + # import time + import pypot.utils.pypot_time as time + + for i in range(max_recursion): + self._known_models.clear() + self._known_mode.clear() + + with self._serial_lock: + self.close(_force_lock=True) + + if port in self.__used_ports: + logging.warn('Another instance of pypot is using the port {}. This might be an issue in Jupyter Notebook, in that case restart the kernel.'.format(port)) + + # Dirty walkaround to fix a strange bug. + # Observed with the USB2AX on Linux with pyserial 2.7 + # We have to first open/close the port in order to make it work + # at 1Mbauds + if platform.system() == 'Linux' and self._sync_read: + self._serial = serial.Serial(port, 9600) + self._serial.close() + + self._serial = serial.Serial(port, baudrate, timeout=timeout, write_timeout=timeout) + self.__used_ports.add(port) + + if (platform.system() == 'Darwin' and + self._protocol.name == 'v1' and self._sync_read): + if not self.ping(self._protocol.DxlBroadcast): + self.close() + continue + else: + time.sleep(self.timeout) + self.flush() + break + else: + raise DxlError('could not connect to the port {}'.format(self.port)) + + def close(self, _force_lock=False): + """ Closes the serial communication if opened. """ + if not self.closed: + with self.__force_lock(_force_lock) or self._serial_lock: + self._serial.close() + if self.port in self.__used_ports: self.__used_ports.remove(self.port) + + logger.info("Closing port '%s'", self.port, + extra={'port': self.port, + 'baudrate': self.baudrate, + 'timeout': self.timeout}) + + def flush(self, _force_lock=False): + """ Flushes the serial communication (both input and output). """ + if self.closed: + raise DxlError('attempt to flush a closed serial communication') + + with self.__force_lock(_force_lock) or self._serial_lock: + self._serial.flushInput() + self._serial.flushOutput() + + def __force_lock(self, condition): + return with_True() if condition else False + + # MARK: Properties of the serial communication + + @property + def port(self): + """ Port used by the :class:`~pypot.dynamixel.io.DxlIO`. If set, will re-open a new connection. """ + return self._serial.port + + @port.setter + def port(self, value): + self.open(value, self.baudrate, self.timeout) + + @property + def baudrate(self): + """ Baudrate used by the :class:`~pypot.dynamixel.io.DxlIO`. If set, will re-open a new connection. """ + return self._serial.baudrate + + @baudrate.setter + def baudrate(self, value): + self.open(self.port, value, self.timeout) + + @property + def timeout(self): + """ Timeout used by the :class:`~pypot.dynamixel.io.DxlIO`. If set, will re-open a new connection. """ + return self._serial.timeout + + @timeout.setter + def timeout(self, value): + self.open(self.port, self.baudrate, value) + + @property + def closed(self): + """ Checks if the connection is closed. """ + return not (hasattr(self, '_serial') and self._serial.isOpen()) + + # MARK: - Motor discovery + + def ping(self, id): + """ Pings the motor with the specified id. + + .. note:: The motor id should always be included in [0, 253]. 254 is used for broadcast. + + """ + pp = self._protocol.DxlPingPacket(id) + + try: + self._send_packet(pp, error_handler=None) + return True + except DxlTimeoutError: + return False + + def scan(self, ids=range(254)): + """ Pings all ids within the specified list, by default it finds all the motors connected to the bus. """ + return [id for id in ids if self.ping(id)] + + # MARK: - Specific Getter / Setter + + def get_model(self, ids): + """ Gets the model for the specified motors. """ + to_get_ids = [i for i in ids if i not in self._known_models] + models = [dxl_to_model(m) for m in self._get_model(to_get_ids, convert=False)] + self._known_models.update(zip(to_get_ids, models)) + + return tuple(self._known_models[id] for id in ids) + + def change_id(self, new_id_for_id): + """ Changes the id of the specified motors (each id must be unique on the bus). """ + if len(set(new_id_for_id.values())) < len(new_id_for_id): + raise ValueError('each id must be unique.') + + for new_id in new_id_for_id.values(): + if self.ping(new_id): + raise ValueError('id {} is already used.'.format(new_id)) + + self._change_id(new_id_for_id) + + for motor_id, new_id in new_id_for_id.items(): + if motor_id in self._known_models: + self._known_models[new_id] = self._known_models[motor_id] + del self._known_models[motor_id] + if motor_id in self._known_mode: + self._known_mode[new_id] = self._known_mode[motor_id] + del self._known_mode[motor_id] + + def change_baudrate(self, baudrate_for_ids): + """ Changes the baudrate of the specified motors. """ + self._change_baudrate(baudrate_for_ids) + + for motor_id in baudrate_for_ids: + if motor_id in self._known_models: + del self._known_models[motor_id] + if motor_id in self._known_mode: + del self._known_mode[motor_id] + + def get_status_return_level(self, ids, **kwargs): + """ Gets the status level for the specified motors. """ + convert = kwargs['convert'] if 'convert' in kwargs else self._convert + srl = [] + for id in ids: + try: + srl.extend(self._get_status_return_level((id, ), + error_handler=None, convert=convert)) + except DxlTimeoutError as e: + if self.ping(id): + srl.append('never' if convert else 0) + else: + if self._error_handler: + self._error_handler.handle_timeout(e) + return () + else: + raise e + + return tuple(srl) + + def set_status_return_level(self, srl_for_id, **kwargs): + """ Sets status return level to the specified motors. """ + convert = kwargs['convert'] if 'convert' in kwargs else self._convert + if convert: + srl_for_id = dict(zip(srl_for_id.keys(), + [('never', 'read', 'always').index(s) for s in srl_for_id.values()])) + self._set_status_return_level(srl_for_id, convert=False) + + def switch_led_on(self, ids): + """ Switches on the LED of the motors with the specified ids. """ + self._set_LED(dict(zip(ids, itertools.repeat(True)))) + + def switch_led_off(self, ids): + """ Switches off the LED of the motors with the specified ids. """ + self._set_LED(dict(zip(ids, itertools.repeat(False)))) + + def enable_torque(self, ids): + """ Enables torque of the motors with the specified ids. """ + self._set_torque_enable(dict(zip(ids, itertools.repeat(True)))) + + def disable_torque(self, ids): + """ Disables torque of the motors with the specified ids. """ + self._set_torque_enable(dict(zip(ids, itertools.repeat(False)))) + + def get_pid_gain(self, ids, **kwargs): + """ Gets the pid gain for the specified motors. """ + return tuple([tuple(reversed(t)) for t in self._get_pid_gain(ids, **kwargs)]) + + def set_pid_gain(self, pid_for_id, **kwargs): + """ Sets the pid gain to the specified motors. """ + pid_for_id = dict(zip(pid_for_id.keys(), + [tuple(reversed(t)) for t in pid_for_id.values()])) + self._set_pid_gain(pid_for_id, **kwargs) + + # MARK: - Generic Getter / Setter + + def get_control_table(self, ids, **kwargs): + """ Gets the full control table for the specified motors. + + ..note:: This function requires the model for each motor to be known. Querring this additional information might add some extra delay. + + """ + error_handler = kwargs['error_handler'] if ('error_handler' in kwargs) else self._error_handler + convert = kwargs['convert'] if ('convert' in kwargs) else self._convert + + bl = ('goal position speed load', 'present position speed load') + controls = [c for c in self._AbstractDxlIO__controls if c.name not in bl] + + res = [] + + for id, model in zip(ids, self.get_model(ids)): + controls = [c for c in controls if model in c.models] + + controls = sorted(controls, key=lambda c: c.address) + + address = controls[0].address + length = controls[-1].address + controls[-1].nb_elem * controls[-1].length + + rp = self._protocol.DxlReadDataPacket(id, address, length) + sp = self._send_packet(rp, error_handler=error_handler) + + d = OrderedDict() + for c in controls: + v = dxl_decode_all(sp.parameters[c.address:c.address + c.nb_elem * c.length], c.nb_elem) + d[c.name] = c.dxl_to_si(v, model) if convert else v + + res.append(d) + + return tuple(res) + + @classmethod + def _generate_accessors(cls, control): + cls.__controls.append(control) + + if control.access in (_DxlAccess.readonly, _DxlAccess.readwrite): + def my_getter(self, ids, **kwargs): + return self._get_control_value(control, ids, **kwargs) + + func_name = control.getter_name if control.getter_name else 'get_{}'.format(control.name.replace(' ', '_')) + func_name = '_{}'.format(func_name) if hasattr(cls, func_name) else func_name + my_getter.__doc__ = 'Gets {} from the specified motors.'.format(control.name) + my_getter.__name__ = func_name + setattr(cls, func_name, my_getter) + + if control.access in (_DxlAccess.writeonly, _DxlAccess.readwrite): + def my_setter(self, value_for_id, **kwargs): + self._set_control_value(control, value_for_id, **kwargs) + + func_name = control.setter_name if control.setter_name else 'set_{}'.format(control.name.replace(' ', '_')) + func_name = '_{}'.format(func_name) if hasattr(cls, func_name) else func_name + my_setter.__doc__ = 'Sets {} to the specified motors.'.format(control.name) + my_setter.__name__ = func_name + setattr(cls, func_name, my_setter) + + def _get_control_value(self, control, ids, **kwargs): + if not ids: + return () + + error_handler = kwargs['error_handler'] if ('error_handler' in kwargs) else self._error_handler + convert = kwargs['convert'] if ('convert' in kwargs) else self._convert + + if self._sync_read and len(ids) > 1: + rp = self._protocol.DxlSyncReadPacket(ids, control.address, + control.length * control.nb_elem) + + with self._serial_lock: + sp = self._send_packet(rp, + error_handler=error_handler, + _force_lock=True) + if not sp: + return () + + if self._protocol.name == 'v1': + values = sp.parameters + + elif self._protocol.name == 'v2': + values = list(sp.parameters) + for i in range(len(ids) - 1): + try: + sp = self.__real_read(rp, _force_lock=True) + except (DxlTimeoutError, DxlCommunicationError): + return () + values.extend(sp.parameters) + + if len(values) < len(ids): + return () + + else: + values = [] + for motor_id in ids: + rp = self._protocol.DxlReadDataPacket(motor_id, control.address, control.length * control.nb_elem) + sp = self._send_packet(rp, error_handler=error_handler) + + if not sp: + return () + + values.extend(sp.parameters) + + values = list(zip(*([iter(values)] * control.length * control.nb_elem))) + values = [dxl_decode_all(value, control.nb_elem) for value in values] + + if not values: + return () + + # when using SYNC_READ instead of getting a timeout + # a non existing motor will "return" the maximum value + if self._sync_read and self._protocol.name == 'v1': + max_val = 2 ** (8 * control.length) - 1 + if max_val in (itertools.chain(*values) if control.nb_elem > 1 else values): + lost_ids = [] + for i, v in enumerate(itertools.chain(*values) if control.nb_elem > 1 else values): + if v == max_val: + lost_ids.append(ids[i // control.nb_elem]) + e = DxlTimeoutError(self, rp, list(set(lost_ids))) + if self._error_handler: + self._error_handler.handle_timeout(e) + return () + else: + raise e + + if convert: + models = self.get_model(ids) + if not models: + return () + values = [control.dxl_to_si(v, m) for v, m in zip(values, models)] + + return tuple(values) + + def _set_control_value(self, control, value_for_id, **kwargs): + if not value_for_id: + return + + convert = kwargs['convert'] if ('convert' in kwargs) else self._convert + + if convert: + models = self.get_model(list(value_for_id.keys())) + if not models: + return + + value_for_id = dict(zip(value_for_id.keys(), + map(control.si_to_dxl, value_for_id.values(), models))) + + data = [] + for motor_id, value in value_for_id.items(): + data.extend(itertools.chain((motor_id, ), + dxl_code_all(value, control.length, control.nb_elem))) + + wp = self._protocol.DxlSyncWritePacket(control.address, control.length * control.nb_elem, data) + self._send_packet(wp, wait_for_status_packet=False) + + # MARK: - Send/Receive packet + def __real_send(self, instruction_packet, wait_for_status_packet, _force_lock): + if self.closed: + raise DxlError('try to send a packet on a closed serial communication') + + logger.debug('Sending %s', instruction_packet, + extra={'port': self.port, + 'baudrate': self.baudrate, + 'timeout': self.timeout}) + + with self.__force_lock(_force_lock) or self._serial_lock: + self.flush(_force_lock=True) + + data = instruction_packet.to_string() + try: + nbytes = self._serial.write(data) + except serial.serialutil.SerialTimeoutException: + nbytes = 0 + + if len(data) != nbytes: + raise DxlCommunicationError(self, + 'instruction packet not entirely sent', + instruction_packet) + + if not wait_for_status_packet: + return + + status_packet = self.__real_read(instruction_packet, _force_lock=True) + + logger.debug('Receiving %s', status_packet, + extra={'port': self.port, + 'baudrate': self.baudrate, + 'timeout': self.timeout}) + + return status_packet + + def __real_read(self, instruction_packet, _force_lock): + with self.__force_lock(_force_lock) or self._serial_lock: + data = self._serial.read(self._protocol.DxlPacketHeader.length) + if not data: + raise DxlTimeoutError(self, instruction_packet, instruction_packet.id) + + try: + header = self._protocol.DxlPacketHeader.from_string(data) + data += self._serial.read(header.packet_length) + status_packet = self._protocol.DxlStatusPacket.from_string(data) + + except ValueError: + msg = 'could not parse received data {}'.format(bytearray(data)) + raise DxlCommunicationError(self, msg, instruction_packet) + + return status_packet + + def _send_packet(self, + instruction_packet, wait_for_status_packet=True, + error_handler=None, + _force_lock=False): + + if not error_handler: + return self.__real_send(instruction_packet, wait_for_status_packet, _force_lock) + + try: + sp = self.__real_send(instruction_packet, wait_for_status_packet, _force_lock) + + if sp and sp.error: + errors = decode_error(sp.error) + for e in errors: + handler_name = 'handle_{}'.format(e.lower().replace(' ', '_')) + f = operator.methodcaller(handler_name, instruction_packet) + f(error_handler) + + return sp + + except DxlTimeoutError as e: + error_handler.handle_timeout(e) + + except DxlCommunicationError as e: + error_handler.handle_communication_error(e) + + +# MARK: - Dxl Errors +class DxlError(Exception): + """ Base class for all errors encountered using :class:`~pypot.dynamixel.io.DxlIO`. """ + pass + + +class DxlCommunicationError(DxlError): + """ Base error for communication error encountered when using :class:`~pypot.dynamixel.io.DxlIO`. """ + def __init__(self, dxl_io, message, instruction_packet): + self.dxl_io = dxl_io + self.message = message + self.instruction_packet = instruction_packet + + def __str__(self): + return '{self.message} after sending {self.instruction_packet}'.format(self=self) + + +class DxlTimeoutError(DxlCommunicationError): + """ Timeout error encountered when using :class:`~pypot.dynamixel.io.DxlIO`. """ + def __init__(self, dxl_io, instruction_packet, ids): + DxlCommunicationError.__init__(self, dxl_io, 'timeout occured', instruction_packet) + self.ids = ids + + def __str__(self): + return 'motors {} did not respond after sending {}'.format(self.ids, self.instruction_packet) + + +@contextmanager +def with_True(): + yield True diff --git a/pypot-master/pypot-master/pypot/dynamixel/io/io.py b/pypot-master/pypot-master/pypot/dynamixel/io/io.py new file mode 100644 index 0000000..75e54b5 --- /dev/null +++ b/pypot-master/pypot-master/pypot/dynamixel/io/io.py @@ -0,0 +1,279 @@ +import itertools + +from .abstract_io import (AbstractDxlIO, _DxlControl, DxlCommunicationError, + _DxlAccess, DxlTimeoutError) +from .. import conversion as conv +from ..protocol import v1 as v1 + + +class DxlIO(AbstractDxlIO): + _protocol = v1 + + def factory_reset(self): + """ Reset all motors on the bus to their factory default settings. """ + # Recent firmwares can't send the reset packet to broadcast, so the motor won't reply + for id in range(253): + try: + self._send_packet(self._protocol.DxlResetPacket(id)) + except (DxlTimeoutError, DxlCommunicationError): + pass + else: + break + + def get_control_mode(self, ids): + """ Gets the mode ('joint' or 'wheel') for the specified motors. """ + to_get_ids = [id for id in ids if id not in self._known_mode] + limits = self.get_angle_limit(to_get_ids, convert=False) + modes = ['wheel' if limit == (0, 0) else 'joint' for limit in limits] + + self._known_mode.update(zip(to_get_ids, modes)) + + return tuple(self._known_mode[id] for id in ids) + + def set_wheel_mode(self, ids): + """ Sets the specified motors to wheel mode. """ + self.set_control_mode(dict(zip(ids, itertools.repeat('wheel')))) + + def set_joint_mode(self, ids): + """ Sets the specified motors to joint mode. """ + self.set_control_mode(dict(zip(ids, itertools.repeat('joint')))) + + def set_control_mode(self, mode_for_id): + models = [] + for m in self.get_model(list(mode_for_id.keys())): + if m.startswith('MX'): + models += ['MX'] + elif m.startswith('SR'): + models += ['SR'] + elif m.startswith('EX'): + models += ['EX'] + else: + models += ['*'] + + pos_max = [conv.position_range[m][0] for m in models] + limits = ((0, 0) if mode == 'wheel' else (0, pos_max[i] - 1) + for i, mode in enumerate(mode_for_id.values())) + + self._set_angle_limit(dict(zip(mode_for_id.keys(), limits)), convert=False) + self._known_mode.update(mode_for_id.items()) + + def set_angle_limit(self, limit_for_id, **kwargs): + """ Sets the angle limit to the specified motors. """ + convert = kwargs['convert'] if 'convert' in kwargs else self._convert + + if 'wheel' in self.get_control_mode(list(limit_for_id.keys())): + raise ValueError('can not change the angle limit of a motor in wheel mode') + + if (0, 0) in limit_for_id.values(): + raise ValueError('can not set limit to (0, 0)') + + self._set_angle_limit(limit_for_id, convert=convert) + +# MARK: - Generate the accessors + + +def _add_control(name, + address, length=2, nb_elem=1, + access=_DxlAccess.readwrite, + models=set(conv.dynamixelModels.values()), + dxl_to_si=lambda val, model: val, + si_to_dxl=lambda val, model: val, + getter_name=None, + setter_name=None): + + control = _DxlControl(name, + address, length, nb_elem, + access, + models, + dxl_to_si, si_to_dxl, + getter_name, setter_name) + + DxlIO._generate_accessors(control) + + +_add_control('model', + address=0x00, + access=_DxlAccess.readonly, + dxl_to_si=conv.dxl_to_model) + +_add_control('firmware', + address=0x02, length=1, + access=_DxlAccess.readonly) + +_add_control('id', + address=0x03, length=1, + access=_DxlAccess.writeonly, + setter_name='change_id') + +_add_control('baudrate', + address=0x04, length=1, + access=_DxlAccess.writeonly, + setter_name='change_baudrate', + si_to_dxl=conv.baudrate_to_dxl) + +_add_control('return delay time', + address=0x05, length=1, + dxl_to_si=conv.dxl_to_rdt, + si_to_dxl=conv.rdt_to_dxl) + +_add_control('angle limit', + address=0x06, nb_elem=2, + dxl_to_si=lambda value, model: (conv.dxl_to_degree(value[0], model), + conv.dxl_to_degree(value[1], model)), + si_to_dxl=lambda value, model: (conv.degree_to_dxl(value[0], model), + conv.degree_to_dxl(value[1], model))) + +_add_control('drive mode', + address=0x0A, length=1, + access=_DxlAccess.readwrite, + models=('MX-106', ), + dxl_to_si=conv.dxl_to_drive_mode, + si_to_dxl=conv.drive_mode_to_dxl) + +_add_control('highest temperature limit', + address=0x0B, length=1, + dxl_to_si=conv.dxl_to_temperature, + si_to_dxl=conv.temperature_to_dxl) + +_add_control('voltage limit', + address=0x0C, length=1, nb_elem=2, + dxl_to_si=lambda value, model: (conv.dxl_to_voltage(value[0], model), + conv.dxl_to_voltage(value[1], model)), + si_to_dxl=lambda value, model: (conv.voltage_to_dxl(value[0], model), + conv.voltage_to_dxl(value[1], model))) + +_add_control('max torque', + address=0x0E, + dxl_to_si=conv.dxl_to_torque, + si_to_dxl=conv.torque_to_dxl) + +_add_control('status return level', + address=0x10, length=1, + dxl_to_si=conv.dxl_to_status, + si_to_dxl=conv.status_to_dxl) + +_add_control('alarm LED', + address=0x11, length=1, + dxl_to_si=conv.dxl_to_alarm, + si_to_dxl=conv.alarm_to_dxl) + +_add_control('alarm shutdown', + address=0x12, length=1, + dxl_to_si=conv.dxl_to_alarm, + si_to_dxl=conv.alarm_to_dxl) + +_add_control('torque_enable', + address=0x18, length=1, + dxl_to_si=conv.dxl_to_bool, + si_to_dxl=conv.bool_to_dxl, + getter_name='is_torque_enabled', + setter_name='_set_torque_enable') + +_add_control('LED', + address=0x19, length=1, + dxl_to_si=conv.dxl_to_bool, + si_to_dxl=conv.bool_to_dxl, + setter_name='_set_LED', + getter_name='is_led_on') + +_add_control('pid gain', + address=0x1A, length=1, nb_elem=3, + models=('MX-12', 'MX-28', 'MX-64', 'MX-106'), + dxl_to_si=conv.dxl_to_pid, + si_to_dxl=conv.pid_to_dxl) + +_add_control('compliance margin', + address=0x1A, length=1, nb_elem=2, + models=('AX-12', 'AX-18', 'RX-24', 'RX-28', 'RX-64')) + +_add_control('compliance slope', + address=0x1C, length=1, nb_elem=2, + models=('AX-12', 'AX-18', 'RX-24', 'RX-28', 'RX-64')) + +_add_control('goal position', + address=0x1E, + dxl_to_si=conv.dxl_to_degree, + si_to_dxl=conv.degree_to_dxl) + +_add_control('moving speed', + address=0x20, + dxl_to_si=conv.dxl_to_speed, + si_to_dxl=conv.speed_to_dxl) + +_add_control('torque limit', + address=0x22, + dxl_to_si=conv.dxl_to_torque, + si_to_dxl=conv.torque_to_dxl) + +_add_control('goal position speed load', + address=0x1E, nb_elem=3, + dxl_to_si=lambda value, model: (conv.dxl_to_degree(value[0], model), + conv.dxl_to_speed(value[1], model), + conv.dxl_to_load(value[2], model)), + si_to_dxl=lambda value, model: (conv.degree_to_dxl(value[0], model), + conv.speed_to_dxl(value[1], model), + conv.torque_to_dxl(value[2], model))) + +_add_control('present position', + address=0x24, + access=_DxlAccess.readonly, + dxl_to_si=conv.dxl_to_degree) + +_add_control('present speed', + address=0x26, + access=_DxlAccess.readonly, + dxl_to_si=conv.dxl_to_speed) + +_add_control('present load', + address=0x28, + access=_DxlAccess.readonly, + dxl_to_si=conv.dxl_to_load) + +_add_control('present position speed load', + address=0x24, nb_elem=3, + access=_DxlAccess.readonly, + dxl_to_si=lambda value, model: (conv.dxl_to_degree(value[0], model), + conv.dxl_to_speed(value[1], model), + conv.dxl_to_load(value[2], model))) + +_add_control('present voltage', + address=0x2A, length=1, + access=_DxlAccess.readonly, + dxl_to_si=conv.dxl_to_voltage) + +_add_control('present temperature', + address=0x2B, length=1, + access=_DxlAccess.readonly, + dxl_to_si=conv.dxl_to_temperature) + +_add_control('moving', + address=0x2E, length=1, + access=_DxlAccess.readonly, + dxl_to_si=conv.dxl_to_bool, + getter_name='is_moving') + +_add_control('punch', + address=0x30, length=2, + models=('AX-12', 'AX-18', 'RX-24', 'RX-28', 'RX-64')) + +_add_control('present current', + address=0x44, + access=_DxlAccess.readonly, + models=('MX-64', 'MX-106', 'SR-RH4D',), + dxl_to_si=conv.dxl_to_current) + +_add_control('force control enable', + address=0x46, length=1, + models=('SR-RH4D',), + dxl_to_si=conv.dxl_to_bool, + si_to_dxl=conv.bool_to_dxl) + +_add_control('goal force', + address=0x47, + models=('SR-RH4D',)) + +_add_control('goal acceleration', + address=0x49, length=1, + models=('MX-12, MX-28', 'MX-64', 'MX-106'), + dxl_to_si=conv.dxl_to_acceleration, + si_to_dxl=conv.acceleration_to_dxl) diff --git a/pypot-master/pypot-master/pypot/dynamixel/io/io_320.py b/pypot-master/pypot-master/pypot/dynamixel/io/io_320.py new file mode 100644 index 0000000..c56baf7 --- /dev/null +++ b/pypot-master/pypot-master/pypot/dynamixel/io/io_320.py @@ -0,0 +1,248 @@ +from itertools import repeat + +from .abstract_io import (AbstractDxlIO, _DxlControl, _DxlAccess, + DxlTimeoutError, DxlCommunicationError) +from .. import conversion as conv +from ..protocol import v2 as v2 + + +class Dxl320IO(AbstractDxlIO): + _protocol = v2 + + def set_wheel_mode(self, ids): + self.set_control_mode(dict(zip(ids, repeat('wheel')))) + + def set_joint_mode(self, ids): + self.set_control_mode(dict(zip(ids, repeat('joint')))) + + def get_goal_position_speed_load(self, ids): + a = self._get_goal_pos_speed(ids) + b = self.get_torque_limit(ids) + + return list(zip(*list(zip(*a)) + [b])) + + def set_goal_position_speed_load(self, value_for_ids): + values = list(zip(*list(value_for_ids.values()))) + + self._set_goal_pos_speed(dict(zip(value_for_ids.keys(), + zip(*(values[0], values[1]))))) + + self.set_torque_limit(dict(zip(value_for_ids.keys(), values[2]))) + + def factory_reset(self, ids, except_ids=False, except_baudrate_and_ids=False): + """ Reset all motors on the bus to their factory default settings. """ + + mode = (0x02 if except_baudrate_and_ids else + 0x01 if except_ids else 0xFF) + + for id in ids: + try: + self._send_packet(self._protocol.DxlResetPacket(id, mode)) + + except (DxlTimeoutError, DxlCommunicationError): + pass + +# TODO: +# * error + +# MARK: - Generate the accessors + + +controls = { + # EEPROM + 'model': { + 'address': 0x00, + 'access': _DxlAccess.readonly, + 'dxl_to_si': conv.dxl_to_model + }, + 'firmware': { + 'address': 0x02, + 'length': 1, + 'access': _DxlAccess.readonly + }, + 'id': { + 'address': 0x03, + 'length': 1, + 'access': _DxlAccess.writeonly, + 'setter_name': 'change_id' + }, + 'baudrate': { + 'address': 0x04, + 'length': 1, + 'access': _DxlAccess.writeonly, + 'setter_name': 'change_baudrate', + 'si_to_dxl': conv.baudrate_to_dxl + }, + 'return delay time': { + 'address': 0x05, + 'length': 1, + 'dxl_to_si': conv.dxl_to_rdt, + 'si_to_dxl': conv.rdt_to_dxl + }, + 'angle limit': { + 'address': 0x06, + 'nb_elem': 2, + 'dxl_to_si': lambda value, model: (conv.dxl_to_degree(value[0], model), + conv.dxl_to_degree(value[1], model)), + 'si_to_dxl': lambda value, model: (conv.degree_to_dxl(value[0], model), + conv.degree_to_dxl(value[1], model)) + }, + 'control mode': { + 'address': 0x0B, + 'length': 1, + 'dxl_to_si': conv.dxl_to_control_mode, + 'si_to_dxl': conv.control_mode_to_dxl, + }, + 'highest temperature limit': { + 'address': 0x0C, + 'length': 1, + 'dxl_to_si': conv.dxl_to_temperature, + 'si_to_dxl': conv.temperature_to_dxl + }, + 'voltage limit': { + 'address': 0x0D, + 'length': 1, + 'nb_elem': 2, + 'dxl_to_si': lambda value, model: (conv.dxl_to_voltage(value[0], model), + conv.dxl_to_voltage(value[1], model)), + 'si_to_dxl': lambda value, model: (conv.voltage_to_dxl(value[0], model), + conv.voltage_to_dxl(value[1], model)) + }, + 'max torque': { + 'address': 0x0F, + 'dxl_to_si': conv.dxl_to_torque, + 'si_to_dxl': conv.torque_to_dxl + }, + 'status return level': { + 'address': 0x11, + 'length': 1, + 'dxl_to_si': conv.dxl_to_status, + 'si_to_dxl': conv.status_to_dxl + }, + 'alarm shutdown': { + 'address': 0x12, + 'length': 1, + 'dxl_to_si': conv.dxl_to_alarm, + 'si_to_dxl': conv.alarm_to_dxl + }, + # RAM + 'torque_enable': { + 'address': 0x18, + 'length': 1, + 'dxl_to_si': conv.dxl_to_bool, + 'si_to_dxl': conv.bool_to_dxl, + 'getter_name': 'is_torque_enabled', + 'setter_name': '_set_torque_enable' + }, + 'LED': { + 'address': 0x19, + 'length': 1, + 'dxl_to_si': conv.dxl_to_bool, + 'si_to_dxl': conv.bool_to_dxl, + 'setter_name': '_set_LED', + 'getter_name': 'is_led_on' + }, + 'LED color': { + 'address': 0x19, + 'length': 1, + 'dxl_to_si': conv.dxl_to_led_color, + 'si_to_dxl': conv.led_color_to_dxl, + }, + 'pid gain': { + 'address': 0x1B, + 'length': 1, + 'nb_elem': 3, + 'dxl_to_si': conv.dxl_to_pid, + 'si_to_dxl': conv.pid_to_dxl + }, + 'goal position': { + 'address': 0x1E, + 'dxl_to_si': conv.dxl_to_degree, + 'si_to_dxl': conv.degree_to_dxl + }, + 'moving speed': { + 'address': 0x20, + 'dxl_to_si': conv.dxl_to_speed, + 'si_to_dxl': conv.speed_to_dxl + }, + 'torque limit': { + 'address': 0x23, + 'dxl_to_si': conv.dxl_to_torque, + 'si_to_dxl': conv.torque_to_dxl + }, + 'goal position speed': { + 'address': 0x1E, + 'nb_elem': 2, + 'dxl_to_si': lambda value, model: (conv.dxl_to_degree(value[0], model), + conv.dxl_to_speed(value[1], model)), + 'si_to_dxl': lambda value, model: (conv.degree_to_dxl(value[0], model), + conv.speed_to_dxl(value[1], model)), + 'getter_name': '_get_goal_pos_speed', + 'setter_name': '_set_goal_pos_speed' + }, + 'present position': { + 'address': 0x25, + 'access': _DxlAccess.readonly, + 'dxl_to_si': conv.dxl_to_degree + }, + 'present speed': { + 'address': 0x27, + 'access': _DxlAccess.readonly, + 'dxl_to_si': conv.dxl_to_speed + }, + 'present load': { + 'address': 0x29, + 'access': _DxlAccess.readonly, + 'dxl_to_si': conv.dxl_to_load + }, + 'present position speed load': { + 'address': 0x25, + 'nb_elem': 3, + 'access': _DxlAccess.readonly, + 'dxl_to_si': lambda value, model: (conv.dxl_to_degree(value[0], model), + conv.dxl_to_speed(value[1], model), + conv.dxl_to_load(value[2], model)) + }, + 'present voltage': { + 'address': 0x2D, + 'length': 1, + 'access': _DxlAccess.readonly, + 'dxl_to_si': conv.dxl_to_voltage + }, + 'present temperature': { + 'address': 0x2E, + 'length': 1, + 'access': _DxlAccess.readonly, + 'dxl_to_si': conv.dxl_to_temperature + }, + 'moving': { + 'address': 0x31, + 'length': 1, + 'access': _DxlAccess.readonly, + 'dxl_to_si': conv.dxl_to_bool, + 'getter_name': 'is_moving' + } +} + + +def _add_control(name, + address, length=2, nb_elem=1, + access=_DxlAccess.readwrite, + models=['XL-320', ], + dxl_to_si=lambda val, model: val, + si_to_dxl=lambda val, model: val, + getter_name=None, + setter_name=None): + + control = _DxlControl(name, + address, length, nb_elem, + access, + models, + dxl_to_si, si_to_dxl, + getter_name, setter_name) + + Dxl320IO._generate_accessors(control) + + +for name, args in controls.items(): + _add_control(name, **args) diff --git a/pypot-master/pypot-master/pypot/dynamixel/io/io_xl330.py b/pypot-master/pypot-master/pypot/dynamixel/io/io_xl330.py new file mode 100644 index 0000000..26abe9d --- /dev/null +++ b/pypot-master/pypot-master/pypot/dynamixel/io/io_xl330.py @@ -0,0 +1,214 @@ +import pypot.dynamixel.conversion as conv +from pypot.dynamixel.io.abstract_io import AbstractDxlIO, _DxlAccess, _DxlControl +from pypot.dynamixel.protocol import v2 as v2 + +max_pos = 4096 +max_deg = 360 +max_current = 1750 + + +def dxl_to_degree(value, model): + return round(((max_deg * float(value)) / (max_pos - 1)) - (max_deg / 2), 2) + + +def dxl_to_current(value, model): + if value > 0x7FFF: + value = value - 65536 + # value = value >> 1 + # print("{0:b}".format(value)) + return value + + +def degree_to_dxl(value, model): + pos = int(round((max_pos - 1) * ((max_deg / 2 + float(value)) / max_deg), 0)) + pos = min(max(pos, 0), max_pos - 1) + + return pos + + +def dxl_to_velocity(value, model): + if value > 2 ** (4 * 8 - 1): + value = value - 2 ** (4 * 8) + return value + + +def baudrate_to_dxl(value, model): + current_baudrates = {0: 9600.0, 1: 57600.0, 2: 115200.0, 3: 1000000.0, 4: 2000000.0} + + for k, v in current_baudrates.items(): + if (abs(v - value) / float(value)) < 0.05: + return k + raise ValueError( + "incorrect baudrate {} (possible values {})".format( + value, list(current_baudrates.values()) + ) + ) + + +class DxlXL330IO(AbstractDxlIO): + _protocol = v2 + + +controls = { + # EEPROM + "model": { + "address": 0x00, + "access": _DxlAccess.readonly, + "dxl_to_si": conv.dxl_to_model, + }, + "id": { + "address": 0x07, + "length": 1, + "access": _DxlAccess.writeonly, + "setter_name": "change_id", + }, + "baudrate": { + "address": 0x08, + "length": 1, + "access": _DxlAccess.writeonly, + "setter_name": "change_baudrate", + "si_to_dxl": baudrate_to_dxl, + }, + "return delay time": { + "address": 0x09, + "length": 1, + "dxl_to_si": conv.dxl_to_rdt, + "si_to_dxl": conv.rdt_to_dxl, + }, + "control mode": { + "address": 0x10, + "length": 1, + }, + "operating mode": { + "address": 0xB, + "length": 1, + }, + "highest temperature limit": { + "address": 0x1F, + "length": 1, + "dxl_to_si": conv.dxl_to_temperature, + "si_to_dxl": conv.temperature_to_dxl, + }, + "voltage limit": { + "address": 0x20, + "length": 1, + "nb_elem": 2, + "dxl_to_si": lambda value, model: ( + conv.dxl_to_voltage(value[0], model), + conv.dxl_to_voltage(value[1], model), + ), + "si_to_dxl": lambda value, model: ( + conv.voltage_to_dxl(value[0], model), + conv.voltage_to_dxl(value[1], model), + ), + }, + "current limit": { + "address": 0x26, + "length": 2, + }, + "angle limit": { + "address": 0x30, + "nb_elem": 2, + "length": 4, + "dxl_to_si": lambda value, model: ( + dxl_to_degree(value[0], model), + dxl_to_degree(value[1], model), + ), + "si_to_dxl": lambda value, model: ( + degree_to_dxl(value[0], model), + degree_to_dxl(value[1], model), + ), + }, + "pwm slope": { + "address": 0x3E, + "length": 1, + }, + # RAM + "torque_enable": { + "address": 0x40, + "length": 1, + "dxl_to_si": conv.dxl_to_bool, + "si_to_dxl": conv.bool_to_dxl, + "getter_name": "is_torque_enabled", + "setter_name": "_set_torque_enable", + }, + "LED": { + "address": 0x41, + "length": 1, + "dxl_to_si": conv.dxl_to_bool, + "si_to_dxl": conv.bool_to_dxl, + "setter_name": "_set_LED", + "getter_name": "is_led_on", + }, + "pid gain": { + "address": 0x50, + "length": 2, + "nb_elem": 3, + # "dxl_to_si": conv.dxl_to_pid, + # "si_to_dxl": conv.pid_to_dxl, + }, + "goal position": { + "address": 0x74, + "length": 4, + "dxl_to_si": dxl_to_degree, + "si_to_dxl": degree_to_dxl, + }, + "present velocity": { + "address": 0x80, + "length": 4, + "access": _DxlAccess.readonly, + "dxl_to_si": dxl_to_velocity, + }, + "present position": { + "address": 0x84, + "length": 4, + "access": _DxlAccess.readonly, + "dxl_to_si": dxl_to_degree, + }, + "present current": { + "address": 0x7E, + "length": 2, + "access": _DxlAccess.readonly, + "dxl_to_si": dxl_to_current, + }, + "goal current": { + "address": 0x66, + "length": 2, + "access": _DxlAccess.readonly, + "dxl_to_si": dxl_to_current, + }, +} + + +def _add_control( + name, + address, + length=2, + nb_elem=1, + access=_DxlAccess.readwrite, + models=[ + "XL-330", + ], + dxl_to_si=lambda val, model: val, + si_to_dxl=lambda val, model: val, + getter_name=None, + setter_name=None, +): + control = _DxlControl( + name, + address, + length, + nb_elem, + access, + models, + dxl_to_si, + si_to_dxl, + getter_name, + setter_name, + ) + + DxlXL330IO._generate_accessors(control) + + +for name, args in controls.items(): + _add_control(name, **args) diff --git a/pypot-master/pypot-master/pypot/dynamixel/io/io_xm430.py b/pypot-master/pypot-master/pypot/dynamixel/io/io_xm430.py new file mode 100644 index 0000000..2335c08 --- /dev/null +++ b/pypot-master/pypot-master/pypot/dynamixel/io/io_xm430.py @@ -0,0 +1,188 @@ +from pypot.dynamixel.io.abstract_io import AbstractDxlIO, _DxlAccess, _DxlControl +from pypot.dynamixel.protocol import v2 as v2 +import pypot.dynamixel.conversion as conv + + +class DxlXM430IO(AbstractDxlIO): + _protocol = v2 + + +def baudrate_to_dxl(value, model): + current_baudrates = {0: 9600.0, 1: 57600.0, 2: 115200.0, 3: 1000000.0, 4: 2000000.0} + + for k, v in current_baudrates.items(): + if (abs(v - value) / float(value)) < 0.05: + return k + raise ValueError( + "incorrect baudrate {} (possible values {})".format( + value, list(current_baudrates.values()) + ) + ) + + +controls = { + # EEPROM + "model": { + "address": 0x00, + "access": _DxlAccess.readonly, + "dxl_to_si": conv.dxl_to_model, + }, + "id": { + "address": 0x07, + "length": 1, + "access": _DxlAccess.writeonly, + "setter_name": "change_id", + }, + "baudrate": { + "address": 0x08, + "length": 1, + "access": _DxlAccess.writeonly, + "setter_name": "change_baudrate", + "si_to_dxl": baudrate_to_dxl, + }, + "return delay time": { + "address": 0x09, + "length": 1, + "dxl_to_si": conv.dxl_to_rdt, + "si_to_dxl": conv.rdt_to_dxl, + }, + "drive mode": { + "address": 10, + "length": 1, + }, + "operating mode": { + "address": 11, + "length": 1, + }, + "highest temperature limit": { + "address": 31, + "length": 1, + "dxl_to_si": conv.dxl_to_temperature, + "si_to_dxl": conv.temperature_to_dxl, + }, + "max voltage limit": { + "address": 32, + "length": 2, + "dxl_to_si": conv.dxl_to_voltage, + "si_to_dxl": conv.voltage_to_dxl, + }, + "min voltage limit": { + "address": 34, + "length": 2, + "dxl_to_si": conv.dxl_to_voltage, + "si_to_dxl": conv.voltage_to_dxl, + }, + + "current limit": { + "address": 38, + "length": 2, + }, + "max angle limit": { + "address": 48, + "length": 4, + "dxl_to_si": conv.dxl_to_degree, + "si_to_dxl": conv.degree_to_dxl, + }, + "min angle limit": { + "address": 52, + "length": 4, + "dxl_to_si": conv.dxl_to_degree, + "si_to_dxl": conv.degree_to_dxl, + }, + + "pwm slope": { + "address": 0x3E, + "length": 1, + }, + + # RAM + "torque_enable": { + "address": 64, + "length": 1, + "dxl_to_si": conv.dxl_to_bool, + "si_to_dxl": conv.bool_to_dxl, + "getter_name": "is_torque_enabled", + "setter_name": "_set_torque_enable", + }, + "LED": { + "address": 65, + "length": 1, + "dxl_to_si": conv.dxl_to_bool, + "si_to_dxl": conv.bool_to_dxl, + "setter_name": "_set_LED", + "getter_name": "is_led_on", + }, + "dip gain": { + "address": 80, + "length": 2, + "nb_elem": 3, + # "dxl_to_si": conv.dxl_to_pid, + # "si_to_dxl": conv.pid_to_dxl, + }, + "goal position": { + "address": 116, + "length": 4, + "dxl_to_si": conv.dxl_to_degree, + "si_to_dxl": conv.degree_to_dxl, + }, + "present velocity": { + "address": 128, + "length": 4, + "access": _DxlAccess.readonly, + }, + "present position": { + "address": 132, + "length": 4, + "access": _DxlAccess.readonly, + "dxl_to_si": conv.dxl_to_degree, + }, + "present current": { + "address": 126, + "length": 2, + "access": _DxlAccess.readonly, + }, + "goal current": { + "address": 102, + "length": 2, + "access": _DxlAccess.readonly, + }, + "present temperature": { + "address": 146, + "length": 1, + "access": _DxlAccess.readonly, + }, +} + + +def _add_control( + name, + address, + length=2, + nb_elem=1, + access=_DxlAccess.readwrite, + models=[ + "XM-430", + ], + dxl_to_si=lambda val, model: val, + si_to_dxl=lambda val, model: val, + getter_name=None, + setter_name=None, +): + control = _DxlControl( + name, + address, + length, + nb_elem, + access, + models, + dxl_to_si, + si_to_dxl, + getter_name, + setter_name, + ) + + DxlXM430IO._generate_accessors(control) + + +for name, args in controls.items(): + _add_control(name, **args) diff --git a/pypot-master/pypot-master/pypot/dynamixel/motor.py b/pypot-master/pypot-master/pypot/dynamixel/motor.py new file mode 100644 index 0000000..051d703 --- /dev/null +++ b/pypot-master/pypot-master/pypot/dynamixel/motor.py @@ -0,0 +1,407 @@ +import numpy +import logging + +from collections import defaultdict + +import pypot.utils.pypot_time as time + +from ..robot.motor import Motor + +from ..utils import SyncEvent +from ..utils.trajectory import GotoMinJerk, GotoLinear +from ..utils.stoppablethread import StoppableLoopThread + + +logger = logging.getLogger(__name__) + + +class DxlRegister(object): + def __init__(self, rw=False): + self.rw = rw + + def __get__(self, instance, owner): + if instance._read_synchronous[self.label]: + sync = instance._read_synced[self.label] + + if not sync.is_recent: + sync.request() + + value = instance.__dict__.get(self.label, 0) + + return value + + def __set__(self, instance, value): + if not self.rw: + raise AttributeError("can't set attribute") + + logger.debug("Setting '%s.%s' to %s", + instance.name, self.label, value) + instance.__dict__[self.label] = value + + if instance._write_synchronous[self.label]: + sync = instance._write_synced[self.label] + sync.request() + + +class DxlOrientedRegister(DxlRegister): + def __get__(self, instance, owner): + value = DxlRegister.__get__(self, instance, owner) + return (value if instance.direct else -value) + + def __set__(self, instance, value): + value = value if instance.direct else -value + DxlRegister.__set__(self, instance, value) + + +class DxlPositionRegister(DxlOrientedRegister): + def __get__(self, instance, owner): + value = DxlOrientedRegister.__get__(self, instance, owner) + return value - instance.offset + + def __set__(self, instance, value): + value = value + instance.offset + DxlOrientedRegister.__set__(self, instance, value) + + +class RegisterOwner(type): + def __new__(cls, name, bases, attrs): + for n, v in attrs.items(): + if isinstance(v, DxlRegister): + v.label = n + attrs['registers'].append(n) + return super(RegisterOwner, cls).__new__(cls, name, bases, attrs) + + +class DxlMotor(Motor, metaclass=RegisterOwner): + """ High-level class used to represent and control a generic dynamixel motor. + + This class provides all level access to (see :attr:`~pypot.dynamixel.motor.DxlMotor.registers` for an exhaustive list): + * motor id + * motor name + * motor model + * present position/speed/load + * goal position/speed/load + * compliant + * motor orientation and offset + * angle limit + * temperature + * voltage + + This class represents a generic robotis motor and you define your own subclass for specific motors (see :class:`~pypot.dynamixel.motor.DxlMXMotor` or :class:`~pypot.dynamixel.motor.DxlAXRXMotor`). + + Those properties are synchronized with the real motors values thanks to a :class:`~pypot.dynamixel.controller.DxlController`. + + """ + + registers = Motor.registers + ['registers', + 'goal_speed', + 'compliant', 'safe_compliant', + 'angle_limit'] + + id = DxlRegister() + name = DxlRegister() + model = DxlRegister() + + present_position = DxlPositionRegister() + goal_position = DxlPositionRegister(rw=True) + present_speed = DxlOrientedRegister() + moving_speed = DxlOrientedRegister(rw=True) + present_load = DxlOrientedRegister() + torque_limit = DxlRegister(rw=True) + + lower_limit = DxlPositionRegister() + upper_limit = DxlPositionRegister() + present_voltage = DxlRegister() + present_temperature = DxlRegister() + + def __init__(self, id, name=None, model='', + direct=True, offset=0.0, + broken=False, + angle_limit=None): + self.__dict__['id'] = id + + name = name if name is not None else 'motor_{}'.format(id) + self.__dict__['name'] = name + + self.__dict__['model'] = model + self.__dict__['direct'] = direct + self.__dict__['offset'] = offset + + self.__dict__['compliant'] = True + + self._safe_compliance = SafeCompliance(self) + self.goto_behavior = 'dummy' + self.compliant_behavior = 'dummy' + + self._broken = broken + + self._read_synchronous = defaultdict(lambda: False) + self._read_synced = defaultdict(SyncEvent) + + self._write_synchronous = defaultdict(lambda: False) + self._write_synced = defaultdict(SyncEvent) + + if angle_limit is not None: + self.__dict__['lower_limit'], self.__dict__['upper_limit'] = angle_limit + + def __repr__(self): + return ('').format(self=self) + + @property + def goal_speed(self): + """ Goal speed (in degrees per second) of the motor. + + This property can be used to control your motor in speed. Setting a goal speed will automatically change the moving speed and sets the goal position as the angle limit. + + .. note:: The motor will turn until reaching the angle limit. But this is not a wheel mode, so the motor will stop at its limits. + + """ + return numpy.sign(self.goal_position) * self.moving_speed + + @goal_speed.setter + def goal_speed(self, value): + if abs(value) < numpy.finfo(numpy.float).eps: + self.goal_position = self.present_position + + else: + # 0.7 corresponds approx. to the min speed that will be converted into 0 + # and as 0 corresponds to setting the max speed, we have to check this case + value = numpy.sign(value) * 0.7 if abs(value) < 0.7 else value + + self.goal_position = numpy.sign(value) * self.max_pos + self.moving_speed = abs(value) + + @property + def compliant_behavior(self): + return self._compliant_behavior + + @compliant_behavior.setter + def compliant_behavior(self, value): + if value not in ('dummy', 'safe'): + raise ValueError('Wrong compliant type! It should be either "dummy" or "safe".') + + if hasattr(self, '_compliant_behavior') and self._compliant_behavior == value: + return + + self._compliant_behavior = value + + # Start the safe compliance behavior when the motor should be compliant + if value == 'safe' and self.compliant: + self._safe_compliance.start() + + if value == 'dummy': + use_safe = self._safe_compliance.started + if use_safe: + self._safe_compliance.stop() + self.compliant = self.compliant or use_safe + + @property + def compliant(self): + return bool(self.__dict__['compliant']) + + @compliant.setter + def compliant(self, is_compliant): + if self._safe_compliance.started and is_compliant: + return + + if self.compliant_behavior == 'dummy': + self._set_compliancy(is_compliant) + + elif self.compliant_behavior == 'safe': + if is_compliant: + self._safe_compliance.start() + elif self._safe_compliance.started: + self._safe_compliance.stop() + + def _set_compliancy(self, is_compliant): + # Change the goal_position only if you switch from compliant to not compliant mode + if not is_compliant and self.compliant: + self.goal_position = self.present_position + self.__dict__['compliant'] = is_compliant + + @property + def angle_limit(self): + return self.lower_limit, self.upper_limit + + @angle_limit.setter + def angle_limit(self, limits): + self.lower_limit, self.upper_limit = limits + + @property + def goto_behavior(self): + return self._default_goto_behavior + + @goto_behavior.setter + def goto_behavior(self, value): + if value not in ('dummy', 'minjerk', 'linear'): + raise ValueError('Wrong compliant type! It should be either "dummy", "minjerk" or "linear".') + self._default_goto_behavior = value + + def goto_position(self, position, duration, control=None, wait=False): + """ Automatically sets the goal position and the moving speed to reach the desired position within the duration. """ + + if control is None: + control = self.goto_behavior + + if control == 'minjerk': + goto_min_jerk = GotoMinJerk(self, position, duration) + goto_min_jerk.start() + + if wait: + goto_min_jerk.wait_to_stop() + + elif control == 'dummy': + dp = abs(self.present_position - position) + speed = (dp / float(duration)) if duration > 0 else 0 + + self.moving_speed = speed + self.goal_position = position + + if wait: + time.sleep(duration) + + elif control == 'linear': + goto_linear = GotoLinear(self, position, duration) + goto_linear.start() + + if wait: + goto_linear.wait_to_stop() + + +class DxlAXRXMotor(DxlMotor): + """ This class represents the AX robotis motor. + + This class adds access to: + * compliance margin/slope (see the robotis website for details) + + """ + registers = list(DxlMotor.registers) + + compliance_margin = DxlRegister(rw=True) + compliance_slope = DxlRegister(rw=True) + + def __init__(self, id, name=None, model='', + direct=True, offset=0.0, broken=False, + angle_limit=None): + DxlMotor.__init__(self, id, name, model, + direct, offset, broken, + angle_limit) + self.max_pos = 150 + + +class DxlMXMotor(DxlMotor): + """ This class represents the RX and MX robotis motor. + + This class adds access to: + * PID gains (see the robotis website for details) + + """ + registers = list(DxlMotor.registers) + + pid = DxlRegister(rw=True) + + def __init__(self, id, name=None, model='', + direct=True, offset=0.0, broken=False, + angle_limit=None): + """ This class represents the RX and MX robotis motor. + + This class adds access to: + * PID gains (see the robotis website for details) + + """ + DxlMotor.__init__(self, id, name, model, + direct, offset, broken, + angle_limit) + self.max_pos = 180 + + +class DxlMX64106Motor(DxlMXMotor): + """ This class represents the MX-64 and MX-106 robotis motor. + + This class adds access to: + * present current + + """ + + registers = list(DxlMXMotor.registers) + + present_current = DxlRegister() + + def __init__(self, id, name=None, model='', + direct=True, offset=0.0, broken=False, + angle_limit=None): + """ This class represents the RX and MX robotis motor. + + This class adds access to: + * PID gains (see the robotis website for details) + + """ + DxlMotor.__init__(self, id, name, model, + direct, offset, broken, + angle_limit) + self.max_pos = 180 + + +class DxlXL320Motor(DxlMXMotor): + registers = list(DxlMXMotor.registers) + + led = DxlRegister(rw=True) + control_mode = DxlRegister(rw=True) + + """ This class represents the XL-320 robotis motor. """ + def __init__(self, id, name=None, model='XL-320', + direct=True, offset=0.0, broken=False, + angle_limit=None): + DxlMXMotor.__init__(self, id, name, model, + direct, offset, broken, + angle_limit) + self.max_pos = 150 + + +class DxlSRMotor(DxlMotor): + """ This class represents the robotis motor found in the seed robotics hand. + + This class adds access to: + * force control enable + * goal force + * present current + + """ + registers = list(DxlMotor.registers) + + force_control_enable = DxlRegister(rw=True) + goal_force = DxlRegister(rw=True) + present_current = DxlRegister() + + def __init__(self, id, name=None, model='', + direct=True, offset=0.0, broken=False, + angle_limit=None): + """ This class represents the robotis motor found in the seed robotics hand. + + This class adds access to: + * PID gains (see the robotis website for details) + * force control enable + * goal force + + """ + DxlMotor.__init__(self, id, name, model, + direct, offset, broken, + angle_limit) + self.max_pos = 180 + + +class SafeCompliance(StoppableLoopThread): + """ This class creates a controller to active compliance only if the current motor position is included in the angle limit, else the compliance is turned off. """ + + def __init__(self, motor, frequency=50): + StoppableLoopThread.__init__(self, frequency) + + self.motor = motor + + def update(self): + self.motor._set_compliancy((min(self.motor.angle_limit) < self.motor.present_position < max(self.motor.angle_limit))) + + def teardown(self): + self.motor._set_compliancy(False) diff --git a/pypot-master/pypot-master/pypot/dynamixel/protocol/__init__.py b/pypot-master/pypot-master/pypot/dynamixel/protocol/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pypot-master/pypot-master/pypot/dynamixel/protocol/v1.py b/pypot-master/pypot-master/pypot/dynamixel/protocol/v1.py new file mode 100644 index 0000000..313a9da --- /dev/null +++ b/pypot-master/pypot-master/pypot/dynamixel/protocol/v1.py @@ -0,0 +1,183 @@ +# -*- coding: utf-8 -*- + +import numpy +import itertools + +from collections import namedtuple + +name = 'v1' + +DxlBroadcast = 254 + + +class DxlInstruction(object): + PING = 0x01 + READ_DATA = 0x02 + WRITE_DATA = 0x03 + RESET = 0x06 + SYNC_WRITE = 0x83 + SYNC_READ = 0x84 + + +# MARK: - Packet Header + +class DxlPacketHeader(namedtuple('DxlPacketHeader', ('id', 'packet_length'))): + """ This class represents the header of a Dxl Packet. + + They are constructed as follows [0xFF, 0xFF, ID, LENGTH] where: + * ID represents the ID of the motor who received (resp. sent) the intruction (resp. status) packet. + * LENGTH represents the length of the rest of the packet + + """ + length = 4 + marker = bytearray((0xFF, 0xFF)) + + @classmethod + def from_string(cls, data): + header = bytearray(data) + + if len(header) != cls.length or header[:len(cls.marker)] != cls.marker: + raise ValueError('try to parse corrupted data ({})'.format(header)) + + return cls(header[2], header[3]) + + +# MARK: - Instruction Packet + +class DxlInstructionPacket(namedtuple('DxlInstructionPacket', + ('id', 'instruction', 'parameters'))): + """ This class is used to represent a dynamixel instruction packet. + + An instruction packet is constructed as follows: + [0xFF, 0xFF, ID, LENGTH, INSTRUCTION, PARAM 1, PARAM 2, ..., PARAM N, CHECKSUM] + + (for more details see http://support.robotis.com/en/product/dxl_main.htm) + + """ + def to_array(self): + return bytearray(itertools.chain(DxlPacketHeader.marker, + (self.id, self.length, self.instruction), + self.parameters, + (self.checksum, ))) + + def to_string(self): + return bytes(self.to_array()) + + @property + def length(self): + return len(self.parameters) + 2 + + @property + def checksum(self): + return int(255 - ((self.id + self.length + self.instruction + + sum(self.parameters)) % 256)) + + +class DxlPingPacket(DxlInstructionPacket): + """ This class is used to represent ping packet. """ + def __new__(cls, id): + return DxlInstructionPacket.__new__(cls, id, DxlInstruction.PING, ()) + + def __repr__(self): + return 'DxlPingPacket(id={})'.format(self.id) + + +class DxlResetPacket(DxlInstructionPacket): + """ This class is used to represent reset packet. """ + def __new__(cls, id=DxlBroadcast): + return DxlInstructionPacket.__new__(cls, id, + DxlInstruction.RESET, ()) + + +class DxlReadDataPacket(DxlInstructionPacket): + """ This class is used to represent read data packet (to read value). """ + def __new__(cls, id, address, length): + return DxlInstructionPacket.__new__(cls, id, + DxlInstruction.READ_DATA, + (address, length)) + + def __repr__(self): + return ('DxlReadDataPacket(id={}, address={}' + ', length={})'.format(self.id, + self.parameters[0], + self.parameters[1])) + + +class DxlSyncReadPacket(DxlInstructionPacket): + """ This class is used to represent sync read packet (to synchronously read values). """ + def __new__(cls, ids, address, length): + return DxlInstructionPacket.__new__(cls, DxlBroadcast, + DxlInstruction.SYNC_READ, + tuple(itertools.chain((address, length), + ids))) + + def __repr__(self): + return ('DxlSyncReadDataPacket(ids={}, ' + 'address={}, length={})'.format(self.parameters[2:], + self.parameters[0], + self.parameters[1])) + + +class DxlWriteDataPacket(DxlInstructionPacket): + """ This class is used to represent write data packet (to write value). """ + def __new__(cls, id, address, coded_value): + return DxlInstructionPacket.__new__(cls, id, + DxlInstruction.WRITE_DATA, + tuple(itertools.chain((address,), + coded_value))) + + def __repr__(self): + return ('DxlWriteDataPacket(id={}, ' + 'address={}, value={})'.format(self.id, + self.parameters[0], + self.parameters[1:])) + + +class DxlSyncWritePacket(DxlInstructionPacket): + """ This class is used to represent sync write packet (to synchronously write values). """ + def __new__(cls, address, length, id_value_couples): + return DxlInstructionPacket.__new__(cls, DxlBroadcast, + DxlInstruction.SYNC_WRITE, + tuple(itertools.chain((address, length), + id_value_couples))) + + def __repr__(self): + address = self.parameters[0] + length = self.parameters[1] + + a = numpy.array(self.parameters[2:]).reshape((-1, length + 1)) + ids = a[:, 0] + values = [tuple(v) for v in a[:, 1:]] + + return ('DxlSyncWriteDataPacket(ids={}, ' + 'address={}, length={}, values={})'.format(ids, + address, + length, + values)) + + +# MARK: - Status Packet +class DxlStatusPacket(namedtuple('DxlStatusPacket', ('id', 'error', 'parameters'))): + """ This class is used to represent a dynamixel status packet. + + A status packet is constructed as follows: + [0xFF, 0xFF, ID, LENGTH, ERROR, PARAM 1, PARAM 2, ..., PARAM N, CHECKSUM] + + (for more details see http://support.robotis.com/en/product/dxl_main.htm) + + """ + @classmethod + def from_string(cls, data): + packet = bytearray(data) + + header = DxlPacketHeader.from_string(packet[:4]) + + if len(packet) != DxlPacketHeader.length + header.packet_length \ + or cls._checksum(packet) != packet[-1]: + raise ValueError('try to parse corrupted data ({})'.format(packet)) + + return cls(header.id, packet[4], tuple(packet[5:-1])) + + @classmethod + def _checksum(cls, packet): + return int(255 - (sum(packet[2:-1]) % 256)) diff --git a/pypot-master/pypot-master/pypot/dynamixel/protocol/v2.py b/pypot-master/pypot-master/pypot/dynamixel/protocol/v2.py new file mode 100644 index 0000000..713e7ad --- /dev/null +++ b/pypot-master/pypot-master/pypot/dynamixel/protocol/v2.py @@ -0,0 +1,233 @@ +import numpy +import itertools + +from collections import namedtuple + +from ..conversion import dxl_code, dxl_decode + +name = 'v2' + +DxlBroadcast = 254 + + +class DxlInstruction(object): + PING = 0x01 + READ_DATA = 0x02 + WRITE_DATA = 0x03 + RESET = 0x06 + SYNC_READ = 0x82 + SYNC_WRITE = 0x83 + + +# MARK: - Packet Header + +class DxlPacketHeader(namedtuple('DxlPacketHeader', ('id', 'packet_length'))): + """ This class represents the header of a Dxl Packet. + + They are constructed as follows [0xFF, 0xFF, 0xFD, 0x00, ID, LEN_L, LEN_H] where: + * ID represents the ID of the motor who received (resp. sent) the intruction (resp. status) packet. + * LEN_L, LEN_H represents the length of the rest of the packet + + """ + length = 7 + marker = bytearray((0xFF, 0xFF, 0xFD, 0x00)) + + @classmethod + def from_string(cls, data): + header = bytearray(data) + + if len(header) != cls.length or header[:len(cls.marker)] != cls.marker: + raise ValueError('try to parse corrupted data ({})'.format(header)) + + return cls(header[4], dxl_decode((header[5], header[6]))) + + +# MARK: - Instruction Packet + +class DxlInstructionPacket(namedtuple('DxlInstructionPacket', + ('id', 'instruction', 'parameters'))): + """ This class is used to represent a dynamixel instruction packet. + + An instruction packet is constructed as follows: + [0xFF, 0xFF, 0xFD, 0x00, ID, LEN_L, LEN_H, INST, PARAM 1, PARAM 2, ..., PARAM N, CRC_L, CRC_H] + + (for more details see http://support.robotis.com/en/product/dxl_main.htm) + + """ + def _buff(self): + return bytearray(itertools.chain(DxlPacketHeader.marker, + (self.id, ), + dxl_code(self.length, 2), + (self.instruction, ), + self.parameters)) + + def to_array(self): + return self._buff() + bytearray(dxl_code(self.checksum, 2)) + + def to_string(self): + return bytes(self.to_array()) + + @property + def length(self): + return len(self.parameters) + 3 + + @property + def checksum(self): + return crc16(self._buff(), 5 + self.length) + + +class DxlPingPacket(DxlInstructionPacket): + """ This class is used to represent ping packet. """ + def __new__(cls, id): + return DxlInstructionPacket.__new__(cls, id, DxlInstruction.PING, ()) + + def __repr__(self): + return 'DxlPingPacket(id={})'.format(self.id) + + +class DxlResetPacket(DxlInstructionPacket): + """ This class is used to represent factory reset packet. """ + def __new__(cls, id, mode): + return DxlInstructionPacket.__new__(cls, id, + DxlInstruction.RESET, (mode, )) + + +class DxlReadDataPacket(DxlInstructionPacket): + """ This class is used to represent read data packet (to read value). """ + def __new__(cls, id, address, length): + return DxlInstructionPacket.__new__(cls, id, + DxlInstruction.READ_DATA, + list(dxl_code(address, 2)) + + list(dxl_code(length, 2))) + + def __repr__(self): + return 'DxlReadDataPacket(id={}, address={}, length={})'.format( + self.id, + dxl_decode(list(reversed(self.parameters[0:2]))), + dxl_decode(list(reversed(self.parameters[2:4])))) + + +class DxlSyncReadPacket(DxlInstructionPacket): + """ This class is used to represent sync read packet (to synchronously read values). """ + def __new__(cls, ids, address, length): + return DxlInstructionPacket.__new__(cls, DxlBroadcast, + DxlInstruction.SYNC_READ, + list(dxl_code(address, 2)) + + list(dxl_code(length, 2)) + + list(ids)) + + def __repr__(self): + return ('DxlSyncReadDataPacket(ids={}, ' + 'address={}, length={})'.format(self.parameters[4:], + dxl_decode(self.parameters[0:2]), + dxl_decode(self.parameters[2:4]))) + + +class DxlWriteDataPacket(DxlInstructionPacket): + """ This class is used to represent write data packet (to write value). """ + def __new__(cls, id, address, coded_value): + return DxlInstructionPacket.__new__(cls, id, + DxlInstruction.WRITE_DATA, + list(dxl_code(address, 2)) + + list(coded_value)) + + def __repr__(self): + return ('DxlWriteDataPacket(id={}, address={}, value={})'.format( + self.id, + dxl_decode(self.parameters[0:2]), + tuple(self.parameters[2:]))) + + +class DxlSyncWritePacket(DxlInstructionPacket): + """ This class is used to represent sync write packet (to synchronously write values). """ + def __new__(cls, address, length, id_value_couples): + return DxlInstructionPacket.__new__(cls, DxlBroadcast, + DxlInstruction.SYNC_WRITE, + list(itertools.chain(dxl_code(address, 2), + dxl_code(length, 2), + id_value_couples))) + + def __repr__(self): + address = dxl_decode(self.parameters[0:2]) + length = dxl_decode(self.parameters[2:4]) + + a = numpy.array(self.parameters[4:]).reshape((-1, length + 1)) + ids = a[:, 0] + values = [tuple(v) for v in a[:, 1:]] + + return ('DxlSyncWriteDataPacket(ids={}, ' + 'address={}, length={}, values={})'.format(ids, + address, + length, + values)) + + +# MARK: - Status Packet +class DxlStatusPacket(namedtuple('DxlStatusPacket', ('id', 'error', 'parameters'))): + """ This class is used to represent a dynamixel status packet. + + A status packet is constructed as follows: + [0xFF, 0xFF, 0xFD, 0x00, ID, LEN_L, LEN_H, 0x55, ERROR, PARAM 1, PARAM 2, ..., PARAM N, CRC_L, CRC_H] + + (for more details see http://support.robotis.com/en/product/dxl_main.htm) + + """ + @classmethod + def from_string(cls, data): + packet = bytearray(data) + + header = DxlPacketHeader.from_string(packet[:DxlPacketHeader.length]) + + if (len(packet) != DxlPacketHeader.length + header.packet_length or + cls._checksum(packet) != packet[-2:]): + raise ValueError('try to parse corrupted data ({})'.format(packet)) + + return cls(header.id, packet[8], tuple(packet[9:-2])) + + @classmethod + def _checksum(cls, packet): + return bytearray(dxl_code(crc16(packet[:-2], len(packet) - 2), 2)) + + +def crc16(data_blk, data_blk_size, crc_accum=0): + for j in range(data_blk_size): + i = ((crc_accum >> 8) ^ data_blk[j]) & 0xFF + crc_accum = ((crc_accum << 8) ^ crc_table[i]) % (2 ** 16) + + return crc_accum + + +crc_table = [ + 0x0000, 0x8005, 0x800F, 0x000A, 0x801B, 0x001E, 0x0014, 0x8011, + 0x8033, 0x0036, 0x003C, 0x8039, 0x0028, 0x802D, 0x8027, 0x0022, + 0x8063, 0x0066, 0x006C, 0x8069, 0x0078, 0x807D, 0x8077, 0x0072, + 0x0050, 0x8055, 0x805F, 0x005A, 0x804B, 0x004E, 0x0044, 0x8041, + 0x80C3, 0x00C6, 0x00CC, 0x80C9, 0x00D8, 0x80DD, 0x80D7, 0x00D2, + 0x00F0, 0x80F5, 0x80FF, 0x00FA, 0x80EB, 0x00EE, 0x00E4, 0x80E1, + 0x00A0, 0x80A5, 0x80AF, 0x00AA, 0x80BB, 0x00BE, 0x00B4, 0x80B1, + 0x8093, 0x0096, 0x009C, 0x8099, 0x0088, 0x808D, 0x8087, 0x0082, + 0x8183, 0x0186, 0x018C, 0x8189, 0x0198, 0x819D, 0x8197, 0x0192, + 0x01B0, 0x81B5, 0x81BF, 0x01BA, 0x81AB, 0x01AE, 0x01A4, 0x81A1, + 0x01E0, 0x81E5, 0x81EF, 0x01EA, 0x81FB, 0x01FE, 0x01F4, 0x81F1, + 0x81D3, 0x01D6, 0x01DC, 0x81D9, 0x01C8, 0x81CD, 0x81C7, 0x01C2, + 0x0140, 0x8145, 0x814F, 0x014A, 0x815B, 0x015E, 0x0154, 0x8151, + 0x8173, 0x0176, 0x017C, 0x8179, 0x0168, 0x816D, 0x8167, 0x0162, + 0x8123, 0x0126, 0x012C, 0x8129, 0x0138, 0x813D, 0x8137, 0x0132, + 0x0110, 0x8115, 0x811F, 0x011A, 0x810B, 0x010E, 0x0104, 0x8101, + 0x8303, 0x0306, 0x030C, 0x8309, 0x0318, 0x831D, 0x8317, 0x0312, + 0x0330, 0x8335, 0x833F, 0x033A, 0x832B, 0x032E, 0x0324, 0x8321, + 0x0360, 0x8365, 0x836F, 0x036A, 0x837B, 0x037E, 0x0374, 0x8371, + 0x8353, 0x0356, 0x035C, 0x8359, 0x0348, 0x834D, 0x8347, 0x0342, + 0x03C0, 0x83C5, 0x83CF, 0x03CA, 0x83DB, 0x03DE, 0x03D4, 0x83D1, + 0x83F3, 0x03F6, 0x03FC, 0x83F9, 0x03E8, 0x83ED, 0x83E7, 0x03E2, + 0x83A3, 0x03A6, 0x03AC, 0x83A9, 0x03B8, 0x83BD, 0x83B7, 0x03B2, + 0x0390, 0x8395, 0x839F, 0x039A, 0x838B, 0x038E, 0x0384, 0x8381, + 0x0280, 0x8285, 0x828F, 0x028A, 0x829B, 0x029E, 0x0294, 0x8291, + 0x82B3, 0x02B6, 0x02BC, 0x82B9, 0x02A8, 0x82AD, 0x82A7, 0x02A2, + 0x82E3, 0x02E6, 0x02EC, 0x82E9, 0x02F8, 0x82FD, 0x82F7, 0x02F2, + 0x02D0, 0x82D5, 0x82DF, 0x02DA, 0x82CB, 0x02CE, 0x02C4, 0x82C1, + 0x8243, 0x0246, 0x024C, 0x8249, 0x0258, 0x825D, 0x8257, 0x0252, + 0x0270, 0x8275, 0x827F, 0x027A, 0x826B, 0x026E, 0x0264, 0x8261, + 0x0220, 0x8225, 0x822F, 0x022A, 0x823B, 0x023E, 0x0234, 0x8231, + 0x8213, 0x0216, 0x021C, 0x8219, 0x0208, 0x820D, 0x8207, 0x0202 +] diff --git a/pypot-master/pypot-master/pypot/dynamixel/syncloop.py b/pypot-master/pypot-master/pypot/dynamixel/syncloop.py new file mode 100644 index 0000000..6b12541 --- /dev/null +++ b/pypot-master/pypot-master/pypot/dynamixel/syncloop.py @@ -0,0 +1,119 @@ +from ..robot.controller import MotorsController + +from .controller import (DxlController, + PosSpeedLoadDxlController, + AngleLimitRegisterController) + + +class MetaDxlController(MotorsController): + """ Synchronizes the reading/writing of :class:`~pypot.dynamixel.motor.DxlMotor` with the real motors. + + This class handles synchronization loops that automatically read/write values from the "software" :class:`~pypot.dynamixel.motor.DxlMotor` with their "hardware" equivalent. Those loops shared a same :class:`~pypot.dynamixel.io.DxlIO` connection to avoid collision in the bus. Each loop run within its own thread as its own frequency. + + .. warning:: As all the loop attached to a controller shared the same bus, you should make sure that they can run without slowing down the other ones. + + """ + def __init__(self, io, motors, controllers): + MotorsController.__init__(self, io, motors, 1.) + self.controllers = controllers + + def setup(self): + """ Starts all the synchronization loops. """ + [c.start() for c in self.controllers] + [c.wait_to_start() for c in self.controllers] + + def update(self): + pass + + def teardown(self): + """ Stops the synchronization loops. """ + [c.stop() for c in self.controllers] + + +class BaseDxlController(MetaDxlController): + """ Implements a basic controller that synchronized the most frequently used values. + + More precisely, this controller: + * reads the present position, speed, load at 50Hz + * writes the goal position, moving speed and torque limit at 50Hz + * writes the pid gains (or compliance margin and slope) at 10Hz + * reads the present voltage and temperature at 1Hz + + """ + def __init__(self, io, motors): + controllers = [ + PosSpeedLoadDxlController(io, motors, 50.), + + AngleLimitRegisterController(io, motors, 10., False), + DxlController(io, motors, 1., False, 'get', 'present_voltage'), + DxlController(io, motors, 1., False, 'get', 'present_temperature') + ] + + pid_motors = [m for m in motors + if (m.model.startswith('MX') or \ + m.model.startswith('XL-320'))] + if pid_motors: + controllers.insert(0, DxlController(io, pid_motors, 10., False, + 'set', 'pid_gain', 'pid')) + + force_control_motors = [m for m in motors if m.model.startswith('SR')] + + if force_control_motors: + controllers.insert(0, DxlController(io, force_control_motors, 10., False, + 'set', 'force_control_enable', 'force_control_enable')) + controllers.insert(0, DxlController(io, force_control_motors, 10., False, + 'set', 'goal_force', 'goal_force')) + + current_motors = [m for m in motors + if (m.model.startswith('MX-64') or \ + m.model.startswith('MX-106') or \ + m.model.startswith('SR'))] + + if current_motors: + controllers.insert(0, DxlController(io, current_motors, 10., False, + 'get', 'present_current', 'present_current')) + + margin_slope_motors = [m for m in motors + if (m.model.startswith('AX') or + m.model.startswith('RX'))] + if margin_slope_motors: + controllers.append(DxlController(io, margin_slope_motors, 10, False, + 'set', 'compliance_margin')) + controllers.append(DxlController(io, margin_slope_motors, 10, False, + 'set', 'compliance_slope')) + + MetaDxlController.__init__(self, io, motors, controllers) + + +class LightDxlController(MetaDxlController): + def __init__(self, io, motors): + controllers = [ + PosSpeedLoadDxlController(io, motors, 50.), + + AngleLimitRegisterController(io, motors, 10., True), + DxlController(io, motors, 10., True, 'get', 'present_voltage'), + DxlController(io, motors, 10., True, 'get', 'present_temperature') + ] + + pid_motors = [m for m in motors + if (m.model.startswith('MX') or + m.model.startswith('XL-320'))] + if pid_motors: + controllers.insert(0, DxlController(io, pid_motors, 10., True, + 'set', 'pid_gain', 'pid')) + + margin_slope_motors = [m for m in motors + if (m.model.startswith('AX') or + m.model.startswith('RX'))] + if margin_slope_motors: + controllers.append(DxlController(io, margin_slope_motors, 10., True, + 'set', 'compliance_margin')) + controllers.append(DxlController(io, margin_slope_motors, 10., True, + 'set', 'compliance_slope')) + + led_motors = [m for m in motors if m.model.startswith('XL-320')] + if led_motors: + controllers.append(DxlController(io, led_motors, 5., False, + 'set', 'LED_color', 'led')) + + MetaDxlController.__init__(self, io, motors, controllers) diff --git a/pypot-master/pypot-master/pypot/kinematics.py b/pypot-master/pypot-master/pypot/kinematics.py new file mode 100644 index 0000000..67aea3a --- /dev/null +++ b/pypot-master/pypot-master/pypot/kinematics.py @@ -0,0 +1,214 @@ +import numpy + +from collections import namedtuple + +""" +This module can be used to compute the forward and inverse kinematics for a chain of revolute joints. +It has been largerly inspired by the Matlab Robotics Toolbox. + +""" + + +class Link(namedtuple('Link', ('theta', 'd', 'a', 'alpha'))): + """ Link object as defined by the standard DH representation. + + This representation is based on the following information: + :param float theta: angle about previous z from old x to new x + :param float d: offset along previous z to the common normal + :param float a: offset along previous to the common normal + :param float alpha: angle about common normal, from old z axis to new z axis + + .. note:: We are only considering revolute joint. + + Please refer to http://en.wikipedia.org/wiki/Denavit-Hartenberg_parameters for more details. + + """ + + def get_transformation_matrix(self, theta): + """ Computes the homogeneous transformation matrix for this link. """ + ct = numpy.cos(theta + self.theta) + st = numpy.sin(theta + self.theta) + ca = numpy.cos(self.alpha) + sa = numpy.sin(self.alpha) + + return numpy.matrix(((ct, -st * ca, st * sa, self.a * ct), + (st, ct * ca, -ct * sa, self.a * st), + (0, sa, ca, self.d), + (0, 0, 0, 1))) + + +class Chain(namedtuple('Chain', ('links', 'base', 'tool'))): + """ Chain of Link that can be used to perform forward and inverse kinematics. + + :param list links: list of Link that compose the chain + :param base: the base homogeneous transformation matrix + :param tool: the end tool homogeneous transformation matrix + + """ + def __new__(cls, links, base=numpy.identity(4), tool=numpy.identity(4)): + return super(Chain, cls).__new__(cls, links, base, tool) + + def forward_kinematics(self, q): + """ Computes the homogeneous transformation matrix of the end effector of the chain. + + :param vector q: vector of the joint angles (theta 1, theta 2, ..., theta n) + + """ + q = numpy.array(q).flatten() + + if len(q) != len(self.links): + raise ValueError('q must contain as element as the number of links') + + tr = self.base.copy() + + l = [] + + for link, theta in zip(self.links, q): + tr = tr * link.get_transformation_matrix(theta) + + l.append(tr) + + tr = tr * self.tool + l.append(tr) + return tr, numpy.asarray(l) + + def inverse_kinematics(self, end_effector_transformation, + q=None, + max_iter=1000, tolerance=0.05, + mask=numpy.ones(6), + use_pinv=False): + """ Computes the joint angles corresponding to the end effector transformation. + + :param end_effector_transformation: the end effector homogeneous transformation matrix + :param vector q: initial estimate of the joint angles + :param int max_iter: maximum number of iteration + :param float tolerance: tolerance before convergence + :param mask: specify the cartesian DOF that will be ignore (in the case of a chain with less than 6 joints). + :rtype: vector of the joint angles (theta 1, theta 2, ..., theta n) + + """ + if q is None: + q = numpy.zeros((len(self.links), 1)) + q = numpy.matrix(q.reshape(-1, 1)) + + best_e = numpy.ones(6) * numpy.inf + best_q = None + alpha = 1.0 + + for _ in range(max_iter): + e = numpy.multiply(transform_difference(self.forward_kinematics(q)[0], end_effector_transformation), mask) + d = numpy.linalg.norm(e) + + if d < numpy.linalg.norm(best_e): + best_e = e.copy() + best_q = q.copy() + alpha *= 2.0 ** (1.0 / 8.0) + else: + q = best_q.copy() + e = best_e.copy() + alpha *= 0.5 + + if use_pinv: + dq = numpy.linalg.pinv(self._jacob0(q)) * e.reshape((-1, 1)) + else: + dq = self._jacob0(q).T * e.reshape((-1, 1)) + q += alpha * dq + + # d = numpy.linalg.norm(dq) + if d < tolerance: + return q + + else: + raise ValueError('could not converge d={}'.format(numpy.linalg.norm(best_e))) + + def _jacob0(self, q): + Jn = self._jacobn(q) + Rn = rotation_from_transf(self.forward_kinematics(q)[0]) + + return numpy.concatenate((numpy.concatenate((Rn, numpy.zeros((3, 3))), axis=1), + numpy.concatenate((numpy.zeros((3, 3)), Rn), 1))) * Jn + + def _jacobn(self, q): + q = numpy.array(q).flatten() + U = self.tool.copy() + J = numpy.matrix([[]] * 6) + + for link, theta in reversed(zip(self.links, q)): + U = link.get_transformation_matrix(theta) * U + + d = numpy.matrix((-U[0, 0] * U[1, 3] + U[1, 0] * U[0, 3], + -U[0, 1] * U[1, 3] + U[1, 1] * U[0, 3], + -U[0, 2] * U[1, 3] + U[1, 2] * U[0, 3])) + delta = U[2, 0:3] + + J = numpy.concatenate((numpy.concatenate((d, delta), axis=1).T, J), axis=1) + + return J + + +# MARK: - Utility functions + +def transform_difference(t1, t2): + t1 = numpy.array(t1) + t2 = numpy.array(t2) + + return numpy.concatenate(((t2[0:3, 3] - t1[0:3, 3]).reshape(3), + 0.5 * (numpy.cross(t1[0:3, 0], t2[0:3, 0]) + \ + numpy.cross(t1[0:3, 1], t2[0:3, 1]) + \ + numpy.cross(t1[0:3, 2], t2[0:3, 2])).reshape(3))) + + +def rotation_from_transf(tm): + return tm[0:3, 0:3] + + +def translation_from_transf(tm): + return numpy.array(tm[0:3, 3]).reshape(3) + + +def components_from_transf(tm): + return rotation_from_transf(tm), translation_from_transf(tm) + + +def transf_from_components(R, T): + return numpy.matrix(numpy.vstack((numpy.hstack((R, T.reshape(3, 1))), + (0, 0, 0, 1)))) + + +def transl(x, y, z): + M = numpy.matrix(numpy.identity(4)) + M[0:3, 3] = numpy.matrix([x, y, z]).T + return M + + +def trotx(theta): + ct = numpy.cos(theta) + st = numpy.sin(theta) + + R = numpy.matrix(((1, 0, 0), + (0, ct, -st), + (0, st, ct))) + + return transf_from_components(R, numpy.zeros(3)) + + +def troty(theta): + ct = numpy.cos(theta) + st = numpy.sin(theta) + + R = numpy.matrix(((ct, 0, st), + (0, 1, 0), + (-st, 0, ct))) + + return transf_from_components(R, numpy.zeros(3)) + + +def trotz(theta): + ct = numpy.cos(theta) + st = numpy.sin(theta) + + R = numpy.matrix(((ct, -st, 0), + (st, ct, 0), + (0, 0, 1))) + + return transf_from_components(R, numpy.zeros(3)) diff --git a/pypot-master/pypot-master/pypot/primitive/__init__.py b/pypot-master/pypot-master/pypot/primitive/__init__.py new file mode 100644 index 0000000..25f306a --- /dev/null +++ b/pypot-master/pypot-master/pypot/primitive/__init__.py @@ -0,0 +1 @@ +from .primitive import Primitive, LoopPrimitive diff --git a/pypot-master/pypot-master/pypot/primitive/manager.py b/pypot-master/pypot-master/pypot/primitive/manager.py new file mode 100644 index 0000000..3811be8 --- /dev/null +++ b/pypot-master/pypot-master/pypot/primitive/manager.py @@ -0,0 +1,81 @@ +import logging +import numpy + +from collections import defaultdict +from functools import partial +from threading import Lock + +from ..utils.stoppablethread import StoppableLoopThread + + +logger = logging.getLogger(__name__) + + +class PrimitiveManager(StoppableLoopThread): + """ Combines all :class:`~pypot.primitive.primitive.Primitive` orders and affect them to the real motors. + + At a predefined frequency, the manager gathers all the orders sent by the primitive to the "fake" motors, combined them thanks to the filter function and affect them to the "real" motors. + + .. note:: The primitives are automatically added (resp. removed) to the manager when they are started (resp. stopped). + + """ + def __init__(self, motors, freq=50, filter=partial(numpy.mean, axis=0)): + """ + :param motors: list of real motors used by the attached primitives + :type motors: list of :class:`~pypot.dynamixel.motor.DxlMotor` + :param int freq: update frequency + :param func filter: function used to combine the different request (default mean) + + """ + StoppableLoopThread.__init__(self, freq) + + self._prim = [] + self._motors = motors + self._filter = filter + + self.syncing = Lock() + + def add(self, p): + """ Add a primitive to the manager. The primitive automatically attached itself when started. """ + self._prim.append(p) + + def remove(self, p): + """ Remove a primitive from the manager. The primitive automatically remove itself when stopped. """ + self._prim.remove(p) + + @property + def primitives(self): + """ List of all attached :class:`~pypot.primitive.primitive.Primitive`. """ + return self._prim + + def update(self): + """ Combined at a predefined frequency the request orders and affect them to the real motors. """ + with self.syncing: + for m in self._motors: + to_set = defaultdict(list) + + for p in self._prim: + for key, val in getattr(p.robot, m.name)._to_set.items(): + to_set[key].append(val) + + for key, val in to_set.items(): + if key == 'led': + colors = set(val) + if len(colors) > 1: + colors -= {'off'} + filtred_val = colors.pop() + else: + filtred_val = self._filter(val) + + logger.debug('Combined %s.%s from %s to %s', + m.name, key, val, filtred_val) + setattr(m, key, filtred_val) + + [p._synced.set() for p in self._prim] + + def stop(self): + """ Stop the primitive manager. """ + for p in self.primitives[:]: + p.stop() + + StoppableLoopThread.stop(self) diff --git a/pypot-master/pypot-master/pypot/primitive/move.py b/pypot-master/pypot-master/pypot/primitive/move.py new file mode 100644 index 0000000..9bc8a31 --- /dev/null +++ b/pypot-master/pypot-master/pypot/primitive/move.py @@ -0,0 +1,215 @@ + + +import json +import time +import logging +import numpy as np + +from .primitive import LoopPrimitive +from pypot.utils.interpolation import KDTreeDict +logger = logging.getLogger(__name__) + + +class Move(object): + + """ Simple class used to represent a movement. + + This class simply wraps a sequence of positions of specified motors. The sequence must be recorded at a predefined frequency. This move can be recorded through the :class:`~pypot.primitive.move.MoveRecorder` class and played thanks to a :class:`~pypot.primitive.move.MovePlayer`. + + """ + + def __init__(self, freq): + self._framerate = freq + self._timed_positions = KDTreeDict() + + def __repr__(self): + return ''.format(self.framerate, + len(self.positions())) + + def __getitem__(self, i): + return list(self._timed_positions.items())[i] + + @property + def framerate(self): + return self._framerate + + def add_position(self, pos, time): + """ Add a new position to the movement sequence. + + Each position is typically stored as a dict of (time, (motor_name,motor_position)). + """ + self._timed_positions[time] = pos + + def iterpositions(self): + """ Returns an iterator on the stored positions. """ + return self._timed_positions.items() + + def positions(self): + """ Returns a copy of the stored positions. """ + return self._timed_positions + + def plot(self, ax): + pos = self.positions() + + if not pos: + return + + motors = list(pos[0].keys()) + + n = len(pos) + t = np.linspace(0, n / self.framerate, n) + pos = self.positions() + + p = {} + for name in motors: + p[name] = [] + + for tt in t: + for k, v in pos[float(tt)].items(): + p[k].append(v[0]) + + for name in motors: + ax.plot(t, p[name]) + + ax.legend(motors) + ax.set_xlabel('Time (in s)') + ax.set_ylabel('Position (in degree)') + + def save(self, file): + """ Saves the :class:`~pypot.primitive.move.Move` to a json file. + + .. note:: The format used to store the :class:`~pypot.primitive.move.Move` is extremely verbose and should be obviously optimized for long moves. + """ + d = { + 'framerate': self.framerate, + 'positions': self._timed_positions, + } + json.dump(d, file, indent=2) + + @classmethod + def create(cls, d): + """ Create a :class:`~pypot.primitive.move.Move` from a dictionary. """ + move = cls(d['framerate']) + move._timed_positions.update(d['positions']) + return move + + @classmethod + def load(cls, file): + """ Loads a :class:`~pypot.primitive.move.Move` from a json file. """ + d = json.load(file) + return cls.create(d) + + @classmethod + def loads(cls, str): + """ Loads a :class:`~pypot.primitive.move.Move` from a json string. """ + d = json.loads(str) + return cls.create(d) + + +class MoveRecorder(LoopPrimitive): + + """ Primitive used to record a :class:`~pypot.primitive.move.Move`. + + The recording can be :meth:`~pypot.primitive.primitive.Primitive.start` and :meth:`~pypot.primitive.primitive.Primitive.stop` by using the :class:`~pypot.primitive.primitive.LoopPrimitive` methods. + + .. note:: Re-starting the recording will create a new :class:`~pypot.primitive.move.Move` losing all the previously stored data. + + """ + + def __init__(self, robot, freq, tracked_motors): + LoopPrimitive.__init__(self, robot, freq) + self.freq = freq + self.tracked_motors = list(map(self.get_mockup_motor, tracked_motors)) + self._move = Move(self.freq) + + def setup(self): + self._move = Move(self.freq) + + def update(self): + position = dict([(m.name, (m.present_position, m.present_speed)) + for m in self.tracked_motors]) + self._move.add_position(position, self.elapsed_time) + + @property + def move(self): + """ Returns the currently recorded :class:`~pypot.primitive.move.Move`. """ + return self._move + + def add_tracked_motors(self, tracked_motors): + """Add new motors to the recording""" + new_mockup_motors = list(map(self.get_mockup_motor, tracked_motors)) + self.tracked_motors = list(set(self.tracked_motors + new_mockup_motors)) + + +class MovePlayer(LoopPrimitive): + + """ Primitive used to play a :class:`~pypot.primitive.move.Move`. + + The playing can be :meth:`~pypot.primitive.primitive.Primitive.start` and :meth:`~pypot.primitive.primitive.Primitive.stop` by using the :class:`~pypot.primitive.primitive.LoopPrimitive` methods. + + .. warning:: the primitive is run automatically the same framerate than the move record. + The play_speed attribute change only time lockup/interpolation + """ + + def __init__(self, robot, move=None, play_speed=1.0, move_filename=None, start_max_speed=50, **kwargs): + self.move = move + self.backwards = False + if move_filename is not None: + with open(move_filename, 'r') as f: + self.move = Move.load(f) + self.play_speed = play_speed if play_speed != 0 and isinstance(play_speed, float) else 1.0 + framerate = self.move.framerate if self.move is not None else 50.0 + self.start_max_speed = start_max_speed if start_max_speed != 0 else np.inf + for key, value in kwargs.items(): + setattr(self, key, value) + LoopPrimitive.__init__(self, robot, framerate) + + def setup(self): + if self.move is None: + raise AttributeError("Attribute move is not defined") + self.period = 1.0 / self.move.framerate + self.positions = self.move.positions() + self.__duration = self.duration() + if self.play_speed < 0: + self.play_speed = - self.play_speed + self.backwards = not self.backwards + if self.play_speed == 0: + self.play_speed = 1.0 + + # Quick fix for limiting too fast movements at the play start + max_goto_time = 0 + if self.backwards: + position = self.positions[self.__duration] + else: + position = self.positions[0] + for motor, value in position.items(): + motor = getattr(self.robot, motor) + motor.compliant = False + delta_angle = abs(motor.present_position - value[0]) + if delta_angle > 5: + goto_time = delta_angle / self.start_max_speed + motor.goto_position(value[0], goto_time) + max_goto_time = goto_time if goto_time > max_goto_time else max_goto_time + + time.sleep(max_goto_time) + + def update(self): + if self.elapsed_time < self.__duration: + if self.backwards: + position = self.positions[(self.__duration - self.elapsed_time) * self.play_speed] + else: + position = self.positions[self.elapsed_time * self.play_speed] + + for motor, value in position.items(): + # TODO: Ask pierre if its not a fgi to turn off the compliance + getattr(self.robot, motor).compliant = False + getattr(self.robot, motor).goal_position = value[0] + else: + self.stop() + + def duration(self): + + if self.move is not None: + return (len(self.move.positions()) / self.move.framerate) / self.play_speed + else: + return 1.0 diff --git a/pypot-master/pypot-master/pypot/primitive/primitive.py b/pypot-master/pypot-master/pypot/primitive/primitive.py new file mode 100644 index 0000000..da13fb4 --- /dev/null +++ b/pypot-master/pypot-master/pypot/primitive/primitive.py @@ -0,0 +1,301 @@ +import sys + +import numpy +import logging +import threading + +from collections import deque + +from ..utils import pypot_time as time + +from ..utils.stoppablethread import StoppableThread, make_update_loop +from ..utils.trajectory import GotoMinJerk + +logger = logging.getLogger(__name__) + + +class Primitive(StoppableThread): + """ A Primitive is an elementary behavior that can easily be combined to create more complex behaviors. + + A primitive is basically a thread with access to a "fake" robot to ensure a sort of sandboxing. More precisely, it means that the primitives will be able to: + + * request values from the real robot (motor values, sensors or attached primitives) + * request modification of motor values (those calls will automatically be combined among all primitives by the :class:`~pypot.primitive.manager.PrimitiveManager`). + + The syntax of those requests directly match the equivalent code that you could write from the :class:`~pypot.robot.robot.Robot`. For instance you can write:: + + class MyPrimitive(Primitive): + def run(self): + while True: + for m in self.robot.motors: + m.goal_position = m.present_position + 10 + + time.sleep(1) + + .. warning:: In the example above, while it seems that you are setting a new goal_position, you are only requesting it. In particular, another primitive could request another goal_position and the result will be the combination of both request. For example, if you have two primitives: one setting the goal_position to 10 and the other setting the goal_position to -20, the real goal_position will be set to -5 (by default the mean of all request is used, see the :class:`~pypot.primitive.manager.PrimitiveManager` class for details). + + Primitives were developed to allow for the creation of complex behaviors such as walking. You could imagine - and this is what is actually done on the Poppy robot - having one primitive for the walking gait, another for the balance and another for handling falls. + + .. note:: This class should always be extended to define your particular behavior in the :meth:`~pypot.primitive.primitive.Primitive.run` method. + + """ + methods = ['start', 'stop', 'pause', 'resume'] + properties = [] + + def __init__(self, robot): + """ At instantiation, it automatically transforms the :class:`~pypot.robot.robot.Robot` into a :class:`~pypot.primitive.primitive.MockupRobot`. + + .. warning:: You should not directly pass motors as argument to the primitive. If you need to, use the method :meth:`~pypot.primitive.primitive.Primitive.get_mockup_motor` to transform them into "fake" motors. See the :ref:`write_own_prim` section for details. + + """ + StoppableThread.__init__(self, + setup=self._prim_setup, + target=self._prim_run, + teardown=self._prim_teardown) + + self.robot = MockupRobot(robot) + + self._synced = threading.Event() + + def _prim_setup(self): + logger.info("Primitive %s setup.", self) + + for m in self.robot.motors: + m._to_set.clear() + + self.robot._primitive_manager.add(self) + self.setup() + + self.t0 = time.time() + + def setup(self): + """ Setup methods called before the run loop. + + You can override this method to setup the environment needed by your primitive before the run loop. This method will be called every time the primitive is started/restarted. + """ + pass + + def _prim_run(self): + self.run() + + def run(self): + """ Run method of the primitive thread. You should always overwrite this method. + + .. warning:: You are responsible of handling the :meth:`~pypot.utils.stoppablethread.StoppableThread.should_stop`, :meth:`~pypot.utils.stoppablethread.StoppableThread.should_pause` and :meth:`~pypot.utils.stoppablethread.StoppableThread.wait_to_resume` methods correctly so the code inside your run function matches the desired behavior. You can refer to the code of the :meth:`~pypot.utils.stoppablethread.StoppableLoopThread.run` method of the :class:`~pypot.primitive.primitive.LoopPrimitive` as an example. + + After termination of the run function, the primitive will automatically be removed from the list of active primitives of the :class:`~pypot.primitive.manager.PrimitiveManager`. + + """ + pass + + def _prim_teardown(self): + logger.info("Primitive %s teardown.", self) + self.teardown() + + # Forces a last synced to make sure that all values sent + # Within the primitives will be sent to the motors. + self._synced.clear() + self._synced.wait() + + self.robot._primitive_manager.remove(self) + + def teardown(self): + """ Tear down methods called after the run loop. + + You can override this method to clean up the environment needed by your primitive. This method will be called every time the primitive is stopped. + + """ + pass + + @property + def elapsed_time(self): + """ Elapsed time (in seconds) since the primitive runs. """ + return time.time() - self.t0 + + # MARK: - Start/Stop handling + def start(self): + """ Start or restart (the :meth:`~pypot.primitive.primitive.Primitive.stop` method will automatically be called) the primitive. """ + if not self.robot._primitive_manager.running: + raise RuntimeError('Cannot run a primitive when the sync is stopped!') + + StoppableThread.start(self) + self.wait_to_start() + + logger.info("Primitive %s started.", self) + + def stop(self, wait=True): + """ Requests the primitive to stop. """ + logger.info("Primitive %s stopped.", self) + StoppableThread.stop(self, wait) + + def is_alive(self): + """ Determines whether the primitive is running or not. + + The value will be true only when the :meth:`~pypot.utils.stoppablethread.StoppableThread.run` function is executed. + + """ + return self.running + + def get_mockup_motor(self, motor): + """ Gets the equivalent :class:`~pypot.primitive.primitive.MockupMotor`. """ + return next((m for m in self.robot.motors if m.name == motor.name), None) + + # Utility function to try to help to better control + # the synchronization and merging process of primitives + # This is clearly a patch before a better definition of primitives. + + @property + def being_synced(self): + return self.robot._primitive_manager.syncing + + def affect_once(self, motor, register, value): + with self.being_synced: + setattr(motor, register, value) + + self._synced.clear() + self._synced.wait() + + del motor._to_set[register] + + +class LoopPrimitive(Primitive): + """ Simple primitive that call an update method at a predefined frequency. + + You should write your own subclass where you only defined the :meth:`~pypot.primitive.primitive.LoopPrimitive.update` method. + + """ + def __init__(self, robot, freq): + Primitive.__init__(self, robot) + # self._period = 1.0 / freq + self.period = 1.0 / freq + self._recent_updates = deque([], 11) + + @property + def recent_update_frequencies(self): + """ Returns the 10 most recent update frequencies. + + The given frequencies are computed as short-term frequencies! + The 0th element of the list corresponds to the most recent frequency. + """ + return list(reversed([(1.0 / p) for p in numpy.diff(self._recent_updates)])) + + def run(self): + """ Calls the :meth:`~pypot.utils.stoppablethread.StoppableLoopThread.update` method at a predefined frequency (runs until stopped). """ + make_update_loop(self, self._wrapped_update) + + def _wrapped_update(self): + logger.debug('LoopPrimitive %s updated.', self) + self._recent_updates.append(time.time()) + self.update() + + def update(self): + """ Update methods that will be called at a predefined frequency. """ + raise NotImplementedError + + +class MockupRobot(object): + """ Fake :class:`~pypot.robot.robot.Robot` used by the :class:`~pypot.primitive.primitive.Primitive` to ensure sandboxing. """ + def __init__(self, robot): + self._robot = robot + self._motors = [] + + for a in robot.alias: + setattr(self, a, []) + + for m in robot.motors: + mockup_motor = MockupMotor(m) + self._motors.append(mockup_motor) + setattr(self, m.name, mockup_motor) + + for a in [a for a in robot.alias if m in getattr(robot, a)]: + getattr(self, a).append(mockup_motor) + + def __getattr__(self, attr): + return getattr(self._robot, attr) + + def goto_position(self, position_for_motors, duration, control=None, wait=False): + for i, (motor_name, position) in enumerate(position_for_motors.items()): + w = False if i < len(position_for_motors) - 1 else wait + + m = getattr(self, motor_name) + m.goto_position(position, duration, control, wait=w) + + @property + def motors(self): + """ List of all attached :class:`~pypot.primitive.primitive.MockupMotor`. """ + return self._motors + + def power_max(self): + for m in self.motors: + m.compliant = False + m.moving_speed = 0 + m.torque_limit = 100.0 + + +class MockupMotor(object): + """ Fake Motor used by the primitive to ensure sandboxing: + + * the read instructions are directly delegate to the real motor + * the write instructions are stored as request waiting to be combined by the primitive manager. + + """ + def __init__(self, motor): + object.__setattr__(self, '_m', motor) + object.__setattr__(self, '_to_set', {}) + + def __getattr__(self, attr): + return getattr(self._m, attr) + + def __setattr__(self, attr, val): + if attr == 'goal_speed': + MockupMotor.goal_speed.fset(self, val) + else: + self._to_set[attr] = val + logger.debug("Setting MockupMotor '%s.%s' to %s", + self.name, attr, val) + + def goto_position(self, position, duration, control=None, wait=False): + """ Automatically sets the goal position and the moving speed to reach the desired position within the duration. """ + + if control is None: + control = self.goto_behavior + + if control == 'minjerk': + goto_min_jerk = GotoMinJerk(self, position, duration) + goto_min_jerk.start() + if wait: + goto_min_jerk.wait_to_stop() + + elif control == 'dummy': + dp = abs(self.present_position - position) + speed = (dp / float(duration)) if duration > 0 else numpy.inf + + self.moving_speed = speed + self.goal_position = position + + if wait: + time.sleep(duration) + + @property + def goal_speed(self): + """ Goal speed (in degrees per second) of the motor. + + This property can be used to control your motor in speed. Setting a goal speed will automatically change the moving speed and sets the goal position as the angle limit. + + .. note:: The motor will turn until reaching the angle limit. But this is not a wheel mode, so the motor will stop at its limits. + + """ + return numpy.sign(self.goal_position) * self.moving_speed + + @goal_speed.setter + def goal_speed(self, value): + if abs(value) < sys.float_info.epsilon: + self.goal_position = self.present_position + + else: + # 0.7 corresponds approx. to the min speed that will be converted into 0 + # and as 0 corresponds to setting the max speed, we have to check this case + value = numpy.sign(value) * 0.7 if abs(value) < 0.7 else value + + self.goal_position = numpy.sign(value) * self.max_pos + self.moving_speed = abs(value) diff --git a/pypot-master/pypot-master/pypot/primitive/utils.py b/pypot-master/pypot-master/pypot/primitive/utils.py new file mode 100644 index 0000000..ccc927a --- /dev/null +++ b/pypot-master/pypot-master/pypot/primitive/utils.py @@ -0,0 +1,137 @@ +import numpy + +from copy import deepcopy +from collections import defaultdict + +from .primitive import Primitive, LoopPrimitive + + +class Sinus(LoopPrimitive): + """ Apply a sinus on the motor specified as argument. Parameters (amp, offset and phase) should be specified in degree. """ + properties = LoopPrimitive.properties + ['frequency', 'amplitude', 'offset', 'phase'] + + def __init__(self, robot, refresh_freq, + motor_list, + amp=1, freq=0.5, offset=0, phase=0): + + LoopPrimitive.__init__(self, robot, refresh_freq) + + self._freq = freq + self._amp = amp + self._offset = offset + self._phase = phase + + self.motor_list = [self.get_mockup_motor(m) for m in motor_list] + + def update(self): + """ Compute the sin(t) where t is the elapsed time since the primitive has been started. """ + pos = self._amp * numpy.sin(self._freq * 2.0 * numpy.pi * self.elapsed_time + + self._phase * numpy.pi / 180.0) + self._offset + + for m in self.motor_list: + m.goal_position = pos + + @property + def frequency(self): + return self._freq + + @frequency.setter + def frequency(self, new_freq): + self._freq = new_freq + + @property + def amplitude(self): + return self._amp + + @amplitude.setter + def amplitude(self, new_amp): + self._amp = new_amp + + @property + def offset(self): + return self._offset + + @offset.setter + def offset(self, new_offset): + self._offset = new_offset + + @property + def phase(self): + return self._phase + + @phase.setter + def phase(self, new_phase): + self._phase = new_phase + + +class Cosinus(Sinus): + """ Apply a cosinus on the motor specified as argument. Parameters (amp, offset and phase) should be specified in degree. """ + + def __init__(self, robot, refresh_freq, + motor_list, + amp=1, freq=0.5, offset=0, phase=0): + + Sinus.__init__(self, robot, refresh_freq, + motor_list, + amp, freq, offset, phase=(numpy.pi / 2 + phase)) + + +class PositionWatcher(LoopPrimitive): + def __init__(self, robot, refresh_freq, watched_motors): + LoopPrimitive.__init__(self, robot, refresh_freq) + + self._pos = defaultdict(list) + self.watched_motors = watched_motors + self._duration = 0. + + @property + def record_positions(self): + return deepcopy(self._pos) + + def setup(self): + self._pos.clear() + + def update(self): + for m in self.watched_motors: + self._pos[m.name].append(m.present_position) + + self._duration = self.elapsed_time + + def plot(self, ax): + for m, pos in self._pos.items(): + t = numpy.linspace(0, self._duration, len(pos)) + ax.plot(t, pos) + ax.set_ylabel('position (in deg)') + ax.set_xlabel('time (in s)') + ax.legend(list(self._pos.keys()), loc='best') + + +class SimplePosture(Primitive): + def __init__(self, robot, duration): + Primitive.__init__(self, robot) + + self.duration = duration + + def setup(self): + self._speeds = {m: m.moving_speed for m in self.robot.motors} + + if hasattr(self, 'leds'): + for m, c in self.leds.items(): + m.led = c + + def run(self): + if not hasattr(self, 'target_position'): + raise NotImplementedError('You have to define "target_position" first!') + + for m in self.robot.motors: + m.compliant = False + + self.robot.goto_position(self.target_position, self.duration, wait=True) + + def teardown(self): + for m, s in self._speeds.items(): + m.moving_speed = s + + if hasattr(self, 'leds'): + for m, c in self.leds.items(): + m.led = 'off' diff --git a/pypot-master/pypot-master/pypot/robot/__init__.py b/pypot-master/pypot-master/pypot/robot/__init__.py new file mode 100644 index 0000000..98d789f --- /dev/null +++ b/pypot-master/pypot-master/pypot/robot/__init__.py @@ -0,0 +1,12 @@ +from .robot import Robot +from .config import from_config, from_json, use_dummy_robot + +try: + from .remote import from_remote +except ImportError: + pass + +try: + from ..vrep import from_vrep +except (ImportError, OSError): + pass diff --git a/pypot-master/pypot-master/pypot/robot/config.py b/pypot-master/pypot-master/pypot/robot/config.py new file mode 100644 index 0000000..7eb812a --- /dev/null +++ b/pypot-master/pypot-master/pypot/robot/config.py @@ -0,0 +1,377 @@ +""" +The config module allows the definition of the structure of your robot. + +Configuration are written as Python dictionary so you can define/modify them programmatically. You can also import them form file such as JSON formatted file. In the configuration you have to define: + +* controllers: For each defined controller, you can specify the port name, the attached motors and the synchronization mode. +* motors: You specify all motors belonging to your robot. You have to define their id, type, orientation, offset and angle_limit. +* motorgroups: It allows to define alias of group of motors. They can be nested. + +""" +import logging +import numpy +import time +import json + +from collections import OrderedDict + +import pypot.sensor +import pypot.dynamixel +import pypot.dynamixel.io +import pypot.dynamixel.error +import pypot.dynamixel.motor +import pypot.dynamixel.syncloop + +from .robot import Robot +from .controller import DummyController + + +# This logger should always provides the config as extra +logger = logging.getLogger(__name__) + + +def from_config(config, strict=True, sync=True, use_dummy_io=False, **extra): + """ Returns a :class:`~pypot.robot.robot.Robot` instance created from a configuration dictionnary. + + :param dict config: robot configuration dictionary + :param bool strict: make sure that all ports, motors are availaible. + :param bool sync: choose if automatically starts the synchronization loops + + For details on how to write such a configuration dictionnary, you should refer to the section :ref:`config_file`. + + """ + logger.info('Loading config... ', extra={'config': config}) + + alias = config['motorgroups'] + + # Instatiate the different motor controllers + controllers = [] + for c_name, c_params in config['controllers'].items(): + motor_names = sum([_motor_extractor(alias, name) + for name in c_params['attached_motors']], []) + + attached_motors = [motor_from_confignode(config, name) + for name in motor_names] + + # at least one of the motor is set as broken + if [m for m in attached_motors if m._broken]: + strict = False + + attached_ids = [m.id for m in attached_motors] + if not use_dummy_io: + dxl_io = dxl_io_from_confignode(config, c_params, attached_ids, strict) + + check_motor_eprom_configuration(config, dxl_io, motor_names) + + logger.info('Instantiating controller on %s with motors %s', + dxl_io.port, motor_names, + extra={'config': config}) + + syncloop = (c_params['syncloop'] if 'syncloop' in c_params + else 'BaseDxlController') + SyncLoopCls = getattr(pypot.dynamixel.syncloop, syncloop) + + c = SyncLoopCls(dxl_io, attached_motors) + controllers.append(c) + else: + controllers.append(DummyController(attached_motors)) + + try: + robot = Robot(motor_controllers=controllers, sync=sync) + except RuntimeError: + for c in controllers: + c.io.close() + + raise + + make_alias(config, robot) + + # Create all sensors and attached them + try: + if 'sensors' in config and not use_dummy_io: + sensors = [] + for s_name in config['sensors'].keys(): + if s_name in extra and extra[s_name] == 'dummy': + config['sensors'][s_name]['type'] = 'Dummy{}'.format(s_name.capitalize()) + + sensor = sensor_from_confignode(config, s_name, robot) + setattr(robot, s_name, sensor) + sensors.append(sensor) + robot.sensors.append(sensor) + + [s.start() for s in sensors if hasattr(s, 'start')] + + # If anything goes wrong when adding sensors + # We have to make sure we close the robot properly + # Otherwise trying to open it again will fail. + except Exception: + robot.close() + raise + + logger.info('Loading complete!', + extra={'config': config}) + + return robot + + +def motor_from_confignode(config, motor_name): + params = config['motors'][motor_name] + + type = params['type'] + if type == 'XL-320': + MotorCls = pypot.dynamixel.motor.DxlXL320Motor + elif type == 'MX-64' or type == 'MX-106': + MotorCls = pypot.dynamixel.motor.DxlMX64106Motor + elif type.startswith('MX'): + MotorCls = pypot.dynamixel.motor.DxlMXMotor + elif type.startswith('AX') or type.startswith('RX'): + MotorCls = pypot.dynamixel.motor.DxlAXRXMotor + elif type.startswith('SR'): + MotorCls = pypot.dynamixel.motor.DxlSRMotor + + broken = 'broken' in params and params['broken'] + + if 'wheel_mode' in params and params['wheel_mode']: + params['angle_limit'] = (0, 0) + + m = MotorCls(id=params['id'], + name=motor_name, + model=type, + direct=True if params['orientation'] == 'direct' else False, + offset=params['offset'], + broken=broken, + angle_limit=params['angle_limit']) + + logger.info("Instantiating motor '%s' id=%d direct=%s offset=%s", + m.name, m.id, m.direct, m.offset, + extra={'config': config}) + + return m + + +def sensor_from_confignode(config, s_name, robot): + args = config['sensors'][s_name] + cls_name = args.pop("type") + + if 'need_robot' in args and args.pop('need_robot'): + args['robot'] = robot + + SensorCls = getattr(pypot.sensor, cls_name) + return SensorCls(name=s_name, **args) + + +def dxl_io_from_confignode(config, c_params, ids, strict): + port = c_params['port'] + + if port == 'auto': + port = pypot.dynamixel.find_port(ids, strict) + logger.info('Found port {} for ids {}'.format(port, ids)) + + sync_read = c_params['sync_read'] + + if sync_read == 'auto': + # USB Vendor Product ID "VID:PID=0403:6001" for USB2Dynamixel + # USB Vendor Product ID "VID:PID=16d0:06a7" for USBAX + vendor_pid = pypot.dynamixel.get_port_vendor_info(port) + sync_read = ('PID=0403:6001' in vendor_pid and c_params['protocol'] == 2 or + 'PID=16d0:06a7' in vendor_pid) + logger.info('sync_read is {}. Vendor pid = {}'.format(sync_read, vendor_pid)) + + handler = pypot.dynamixel.error.BaseErrorHandler + + DxlIOCls = (pypot.dynamixel.io.Dxl320IO + if 'protocol' in c_params and c_params['protocol'] == 2 + else pypot.dynamixel.io.DxlIO) + + dxl_io = DxlIOCls(port=port, + use_sync_read=sync_read, + error_handler_cls=handler) + + try: + found_ids = dxl_io.scan(ids) + except pypot.dynamixel.io.DxlError: + dxl_io.close() + found_ids = [] + + if ids != found_ids: + missing_ids = tuple(set(ids) - set(found_ids)) + msg = 'Could not find the motors {} on bus {}.'.format(missing_ids, + dxl_io.port) + logger.warning(msg) + + if strict: + dxl_io.close() + raise pypot.dynamixel.io.DxlError(msg) + + return dxl_io + + +def check_motor_eprom_configuration(config, dxl_io, motor_names): + """ Change the angles limits depanding on the robot configuration ; + Check if the return delay time is set to 0. + """ + changed_angle_limits = {} + changed_return_delay_time = {} + + for name in motor_names: + m = config['motors'][name] + id = m['id'] + + try: + old_limits = dxl_io.get_angle_limit((id, ))[0] + old_return_delay_time = dxl_io.get_return_delay_time((id, ))[0] + except IndexError: # probably a broken motor so we just skip + continue + + if old_return_delay_time != 0: + logger.warning("Return delay time of %s changed from %s to 0", + name, old_return_delay_time) + changed_return_delay_time[id] = 0 + + new_limits = m['angle_limit'] + if 'wheel_mode' in m and m['wheel_mode']: + dxl_io.set_wheel_mode([m['id']]) + time.sleep(0.5) + else: + # TODO: we probably need a better fix for this. + # dxl_io.set_joint_mode([m['id']]) + + d = numpy.linalg.norm(numpy.asarray(new_limits) - numpy.asarray(old_limits)) + if d > 1: + logger.warning("Limits of '%s' changed from %s to %s", + name, old_limits, new_limits, + extra={'config': config}) + changed_angle_limits[id] = new_limits + + if changed_angle_limits: + dxl_io.set_angle_limit(changed_angle_limits) + time.sleep(0.5) + + if changed_return_delay_time: + dxl_io.set_return_delay_time(changed_return_delay_time) + time.sleep(0.5) + + +def instatiate_motors(config): + motors = [] + + for m_name, m_params in config['motors']: + MotorCls = pypot.dynamixel.motor.DxlAXRXMotor + if m_params['type'].startswith('MX-64') or m_params['type'].startswith('MX-106'): + MotorCls = pypot.dynamixel.motor.DxlMX64106Motor + elif m_params['type'].startswith('MX'): + MotorCls = pypot.dynamixel.motor.DxlMXMotor + elif m_params['type'].startswith('SR'): + MotorCls = pypot.dynamixel.DxlSRMotor + + m = MotorCls(id=m_params['id'], + name=m_name, + direct=True if m_params['orientation'] == 'direct' else False, + offset=m_params['offset']) + + motors.append(m) + + logger.info("Instantiating motor '%s' id=%d direct=%s offset=%s", + m.name, m.id, m.direct, m.offset, + extra={'config': config}) + + return motors + + +def make_alias(config, robot): + alias = config['motorgroups'] + + # Create the alias for the motorgroups + for alias_name in alias: + motors = [getattr(robot, name) for name in _motor_extractor(alias, alias_name)] + setattr(robot, alias_name, motors) + robot.alias.append(alias_name) + + logger.info("Creating alias '%s' for motors %s", + alias_name, [motor.name for motor in motors], + extra={'config': config}) + + +def from_json(json_file, sync=True, strict=True, use_dummy_io=False, **extra): + """ Returns a :class:`~pypot.robot.robot.Robot` instance created from a JSON configuration file. + + For details on how to write such a configuration file, you should refer to the section :ref:`config_file`. + + """ + with open(json_file) as f: + config = json.load(f, object_pairs_hook=OrderedDict) + + return from_config(config, sync=sync, strict=strict, use_dummy_io=use_dummy_io, **extra) + + +def use_dummy_robot(json_file): + return from_json(json_file, use_dummy_io=True) + + +def _motor_extractor(alias, name): + motors = [] + + if name not in alias: + return [name] + + for key in alias[name]: + motors += _motor_extractor(alias, key) if key in alias else [key] + return motors + + +ergo_robot_config = { + 'controllers': { + 'my_dxl_controller': { + 'sync_read': False, + 'attached_motors': ['base', 'tip'], + 'port': 'auto' + } + }, + 'motorgroups': { + 'base': ['m1', 'm2', 'm3'], + 'tip': ['m4', 'm5', 'm6'] + }, + 'motors': { + 'm5': { + 'orientation': 'indirect', + 'type': 'MX-28', + 'id': 15, + 'angle_limit': [-90.0, 90.0], + 'offset': 0.0 + }, + 'm4': { + 'orientation': 'direct', + 'type': 'MX-28', + 'id': 14, + 'angle_limit': [-90.0, 90.0], + 'offset': 0.0 + }, + 'm6': { + 'orientation': 'indirect', + 'type': 'MX-28', + 'id': 16, + 'angle_limit': [-90.0, 90.0], + 'offset': 0.0 + }, + 'm1': { + 'orientation': 'direct', + 'type': 'MX-28', 'id': 11, + 'angle_limit': [-90.0, 90.0], + 'offset': 0.0 + }, + 'm3': { + 'orientation': 'indirect', + 'type': 'MX-28', + 'id': 13, + 'angle_limit': [-90.0, 90.0], + 'offset': 0.0 + }, + 'm2': { + 'orientation': 'indirect', + 'type': 'MX-28', + 'id': 12, + 'angle_limit': [-90.0, 90.0], + 'offset': 0.0 + } + } +} diff --git a/pypot-master/pypot-master/pypot/robot/controller.py b/pypot-master/pypot-master/pypot/robot/controller.py new file mode 100644 index 0000000..d952b33 --- /dev/null +++ b/pypot-master/pypot-master/pypot/robot/controller.py @@ -0,0 +1,110 @@ +import time + +from math import copysign + +from ..utils.stoppablethread import StoppableLoopThread + + +class AbstractController(StoppableLoopThread): + """ Abstract class for motor/sensor controller. + + The controller role is to synchronize the reading/writing of a set of instances with their "hardware" equivalent through an :class:`~pypot.robot.io.AbstractIO` object. It is defined as a :class:`~pypot.utils.stoppablethread.StoppableLoopThread` where each loop update synchronizes values from the "software" objects with their "hardware" equivalent. + + To define your Controller, you need to define the :meth:`~pypot.utils.stoppablethread.StoppableLoopThread.update` method. This method will be called at the predefined frequency. An exemple of how to do it can be found in :class:`~pypot.dynamixel.controller.BaseDxlController`. + + """ + def __init__(self, io, sync_freq): + """ + :param io: IO used to communicate with the hardware motors + :type io: :class:`~pypot.robot.io.AbstractIO` + :param float sync_freq: synchronization frequency + + """ + StoppableLoopThread.__init__(self, sync_freq) + + self.io = io + + def start(self): + StoppableLoopThread.start(self) + self.wait_to_start() + + def close(self): + """ Cleans and closes the controller. """ + self.stop() + + if self.io is not None: + self.io.close() + + +class MotorsController(AbstractController): + """ Abstract class for motors controller. + + The controller synchronizes the reading/writing of a set of motor instances with their "hardware". Each update loop synchronizes values from the "software" :class:`~pypot.dynamixel.motor.DxlMotor` with their "hardware" equivalent. + + """ + def __init__(self, io, motors, sync_freq=50): + """ + :param io: IO used to communicate with the hardware motors + :type io: :class:`~pypot.robot.io.AbstractIO` + :param list motors: list of motors attached to the controller + :param float sync_freq: synchronization frequency + + """ + AbstractController.__init__(self, io, sync_freq) + + self.motors = motors + + +class DummyController(MotorsController): + def __init__(self, motors): + MotorsController.__init__(self, None, motors) + + self.max_speed = 360.0 # degree per second. + + def setup(self): + self.last_update = time.time() + + for m in self.motors: + m.__dict__['moving_speed'] = 0.0 + m.__dict__['present_position'] = 0.0 + m.__dict__['goal_position'] = 0.0 + + def update(self): + delta_t = time.time() - self.last_update + + for m in self.motors: + # acceleration infinite, present_speed always equal moving_speed + delta_pos = m.__dict__['goal_position'] - m.__dict__['present_position'] # degree + + # degree par second, assumed absolute + speed = (m.__dict__['moving_speed'] + if m.__dict__['moving_speed'] != 0.0 else + self.max_speed) + + delta_pos_effective = copysign(speed * delta_t, delta_pos) + + if abs(delta_pos_effective) >= abs(delta_pos): + m.__dict__['present_position'] = m.__dict__['goal_position'] + else: + m.__dict__['present_position'] += delta_pos_effective + + self.last_update = time.time() + + +class SensorsController(AbstractController): + """ Abstract class for sensors controller. + + The controller frequently pulls new data from a "real" sensor and updates its corresponding software instance. + + """ + def __init__(self, io, sensors, sync_freq=50.): + """ + :param io: IO used to communicate with the hardware motors + :type io: :class:`~pypot.robot.io.AbstractIO` + :param list sensors: list of sensors attached to the controller + :param float sync_freq: synchronization frequency + + """ + AbstractController.__init__(self, io, sync_freq) + + self.sensors = sensors diff --git a/pypot-master/pypot-master/pypot/robot/io.py b/pypot-master/pypot-master/pypot/robot/io.py new file mode 100644 index 0000000..4e67171 --- /dev/null +++ b/pypot-master/pypot-master/pypot/robot/io.py @@ -0,0 +1,10 @@ +from abc import ABCMeta, abstractmethod + + +class AbstractIO(object, metaclass=ABCMeta): + """ AbstractIO class which handles communication with "hardware" motors. """ + + @abstractmethod + def close(self): + """ Clean and close the IO connection. """ + pass diff --git a/pypot-master/pypot-master/pypot/robot/motor.py b/pypot-master/pypot-master/pypot/robot/motor.py new file mode 100644 index 0000000..c8b2a3b --- /dev/null +++ b/pypot-master/pypot-master/pypot/robot/motor.py @@ -0,0 +1,11 @@ +class Motor(object): + """ Purely abstract class representing any motor object. """ + + registers = [] + + def __init__(self, name): + self._name = name + + @property + def name(self): + return self._name diff --git a/pypot-master/pypot-master/pypot/robot/remote.py b/pypot-master/pypot-master/pypot/robot/remote.py new file mode 100644 index 0000000..e0b8f6d --- /dev/null +++ b/pypot-master/pypot-master/pypot/robot/remote.py @@ -0,0 +1,68 @@ +import zerorpc + + +class RemoteRobotClient(object): + """ Remote Access to a Robot through the REST API. + + This RemoteRobot gives you access to motors and alias. + For each motor you can read/write all of their registers. + + You also have access to primitives. + More specifically you can start/stop them. + + """ + def __init__(self, host, port): + client = zerorpc.Client() + client.connect('tcp://{}:{}'.format(host, port)) + + self.motors = [] + + for name in client.get_motors_list(): + class Register(object): + def __init__(self, motorname, regname): + self.motorname = motorname + self.regname = regname + + def __get__(self, instance, owner): + return client.get_register_value(self.motorname, self.regname) + + def __set__(self, instance, value): + client.set_register_value(self.motorname, self.regname, value) + + class Motor(object): + def __repr__(self): + return ('').format(self=self) + + for reg in client.get_registers_list(name): + setattr(Motor, reg.decode(), Register(name, reg)) + + m = Motor() + setattr(self, m.name, m) + self.motors.append(m) + + for alias in client.get_motors_alias(): + motors = [getattr(self, name) for name in client.get_motors_list(alias)] + setattr(self, alias, motors) + + class Primitive(object): + def __init__(self, name): + self.name = name + + def start(self): + client.start_primitive(self.name) + + def stop(self): + client.stop_primitive(self.name) + + self.primitives = [] + for p in client.get_primitives_list(): + prim = Primitive(p) + setattr(self, p.decode(), prim) + self.primitives.append(prim) + + +def from_remote(host, port): + """ Remote access to a Robot through the REST API. """ + return RemoteRobotClient(host, port) diff --git a/pypot-master/pypot-master/pypot/robot/robot.py b/pypot-master/pypot-master/pypot/robot/robot.py new file mode 100644 index 0000000..a462dca --- /dev/null +++ b/pypot-master/pypot-master/pypot/robot/robot.py @@ -0,0 +1,187 @@ +import logging + +from ..primitive.manager import PrimitiveManager + + +logger = logging.getLogger(__name__) + + +class Robot(object): + """ This class is used to regroup all motors and sensors of your robots. + + Most of the time, you do not want to directly instantiate this class, but you rather want to use a factory which creates a robot instance - e.g. from a python dictionnary (see :ref:`config_file`). + + This class encapsulates the different controllers (such as dynamixel ones) that automatically synchronize the virtual sensors/effectors instances held by the robot class with the real devices. By doing so, each sensor/effector can be synchronized at a different frequency. + + This class also provides a generic motors accessor in order to (more or less) easily extends this class to other types of motor. + + """ + def __init__(self, motor_controllers=[], sensor_controllers=[], sync=True): + """ + :param list motor_controllers: motors controllers to attach to the robot + :param list sensor_controllers: sensors controllers to attach to the robot + :param bool sync: choose if automatically starts the synchronization loops + + """ + self._motors = [] + self._sensors = [] + self.alias = [] + + self._controllers = sensor_controllers + motor_controllers + + for controller in motor_controllers: + for m in controller.motors: + setattr(self, m.name, m) + + self._motors.extend(controller.motors) + + for controller in sensor_controllers: + for s in controller.sensors: + setattr(self, s.name, s) + + self._sensors.extend(controller.sensors) + + self._attached_primitives = {} + self._primitive_manager = PrimitiveManager(self.motors) + + self._syncing = False + if sync: + self.start_sync() + + def close(self): + """ Cleans the robot by stopping synchronization and all controllers.""" + self.stop_sync() + [c.io.close() for c in self._controllers if c.io is not None] + + def __repr__(self): + return ''.format(self.motors) + + def start_sync(self): + """ Starts all the synchonization loop (sensor/effector controllers). """ + if self._syncing: + return + + [c.start() for c in self._controllers] + [c.wait_to_start() for c in self._controllers] + self._primitive_manager.start() + self._primitive_manager._running.wait() + + self._syncing = True + + logger.info('Starting robot synchronization.') + + def stop_sync(self): + """ Stops all the synchonization loop (sensor/effector controllers). """ + if not self._syncing: + return + + if self._primitive_manager.running: + self._primitive_manager.stop() + + [c.stop() for c in self._controllers] + [s.close() for s in self.sensors if hasattr(s, 'close')] + + self._syncing = False + + logger.info('Stopping robot synchronization.') + + def attach_primitive(self, primitive, name): + setattr(self, name, primitive) + self._attached_primitives[name] = primitive + primitive.name = name + + logger.info("Attaching primitive '%s' to the robot.", name) + + @property + def motors(self): + """ Returns all the motors attached to the robot. """ + return self._motors + + @property + def sensors(self): + """ Returns all the sensors attached to the robot. """ + return self._sensors + + @property + def active_primitives(self): + """ Returns all the primitives currently running on the robot. """ + return self._primitive_manager._prim + + @property + def primitives(self): + """ Returns all the primitives name attached to the robot. """ + return list(self._attached_primitives.values()) + + @property + def compliant(self): + """ Returns a list of all the compliant motors. """ + return [m for m in self.motors if m.compliant] + + @compliant.setter + def compliant(self, is_compliant): + """ Switches all motors to compliant (resp. non compliant) mode. """ + for m in self.motors: + m.compliant = is_compliant + + def goto_position(self, position_for_motors, duration, control=None, wait=False): + """ Moves a subset of the motors to a position within a specific duration. + + :param dict position_for_motors: which motors you want to move {motor_name: pos, motor_name: pos,...} + :param float duration: duration of the move + :param str control: control type ('dummy', 'minjerk') + :param bool wait: whether or not to wait for the end of the move + + .. note::In case of dynamixel motors, the speed is automatically adjusted so the goal position is reached after the chosen duration. + + """ + for i, (motor_name, position) in enumerate(position_for_motors.items()): + w = False if i < len(position_for_motors) - 1 else wait + + m = getattr(self, motor_name) + m.goto_position(position, duration, control, wait=w) + + def power_up(self): + """ Changes all settings to guarantee the motors will be used at their maximum power. """ + for m in self.motors: + m.compliant = False + m.moving_speed = 0 + m.torque_limit = 100.0 + + def to_config(self): + """ Generates the config for the current robot. + + .. note:: The generated config should be used as a basis and must probably be modified. + + """ + from ..dynamixel.controller import DxlController + + dxl_controllers = [c for c in self._controllers + if isinstance(c, DxlController)] + + config = {} + + config['controllers'] = {} + for i, c in enumerate(dxl_controllers): + name = 'dxl_controller_{}'.format(i) + config['controllers'][name] = { + 'port': c.io.port, + 'sync_read': c.io._sync_read, + 'attached_motors': [m.name for m in c.motors], + } + + config['motors'] = {} + for m in self.motors: + config['motors'][m.name] = { + 'id': m.id, + 'type': m.model, + 'offset': m.offset, + 'orientation': 'direct' if m.direct else 'indirect', + 'angle_limit': m.angle_limit, + } + + if m.angle_limit == (0, 0): + config['motors']['wheel_mode'] = True + + config['motorgroups'] = {} + + return config diff --git a/pypot-master/pypot-master/pypot/robot/sensor.py b/pypot-master/pypot-master/pypot/robot/sensor.py new file mode 100644 index 0000000..1da0e5c --- /dev/null +++ b/pypot-master/pypot-master/pypot/robot/sensor.py @@ -0,0 +1,39 @@ +from numpy import array, zeros + + +class Sensor(object): + """ Purely abstract class representing any sensor object. """ + registers = [] + + def __init__(self, name): + self._name = name + + @property + def name(self): + return self._name + + +class ObjectTracker(Sensor): + registers = Sensor.registers + ['position', 'orientation'] + + def __init__(self, name): + Sensor.__init__(self, name) + + self._pos = zeros(3) + self._ori = zeros(3) + + @property + def position(self): + return self._pos + + @position.setter + def position(self, new_pos): + self._pos = array(new_pos) + + @property + def orientation(self): + return self._pos + + @orientation.setter + def orientation(self, new_ori): + self._ori = array(new_ori) diff --git a/pypot-master/pypot-master/pypot/sensor/__init__.py b/pypot-master/pypot-master/pypot/sensor/__init__.py new file mode 100644 index 0000000..c0700a3 --- /dev/null +++ b/pypot-master/pypot-master/pypot/sensor/__init__.py @@ -0,0 +1,5 @@ +from .depth import * +from .camera import * +from .contact import * +from .imagefeature import * +from .arduino import * diff --git a/pypot-master/pypot-master/pypot/sensor/arduino/__init__.py b/pypot-master/pypot-master/pypot/sensor/arduino/__init__.py new file mode 100644 index 0000000..b9240ba --- /dev/null +++ b/pypot-master/pypot-master/pypot/sensor/arduino/__init__.py @@ -0,0 +1,5 @@ +try: + from .arduino_sensor import ArduinoSensor + +except ImportError: + pass diff --git a/pypot-master/pypot-master/pypot/sensor/arduino/arduino_sensor.py b/pypot-master/pypot-master/pypot/sensor/arduino/arduino_sensor.py new file mode 100644 index 0000000..d98ce36 --- /dev/null +++ b/pypot-master/pypot-master/pypot/sensor/arduino/arduino_sensor.py @@ -0,0 +1,54 @@ +import serial +import json + +from ...robot.sensor import Sensor +from ...utils import StoppableLoopThread + + +class ArduinoSensor(Sensor): + """ Give access to arduino sensor. + + Here it is an example of the arduino code to retrieve the time: + + unsigned long time; + void setup() { + Serial.begin(1000000); + } + void loop() { + // prints fixed data in json format + Serial.print("{\"Day\":\"monday\","); + Serial.print("\"Time\":"); + time = millis(); + // prints time since program started + Serial.print(time); + Serial.println("}"); + // wait 20 ms to send the data at 50 Hz + delay(0.02); + } + + Be careful to not set the sync_freq of your controller + slower than the data comes from your arduino (here 50 Hz). + + """ + def __init__(self, name, port, baud, sync_freq=50.0): + Sensor.__init__(self, name) + self.port = port + self.baud = baud + self._controller = StoppableLoopThread(sync_freq, update=self.update) + + def start(self): + self._ser = serial.Serial(self.port, self.baud) + self._line = '' + self._controller.start() + + def close(self): + self._controller.stop() + self._ser.close() + + def update(self): + while self._ser.inWaiting() > 0: + self._line = self._ser.readline().decode() + try: + self.sensor_dict = json.loads(self._line) + except ValueError: + pass diff --git a/pypot-master/pypot-master/pypot/sensor/camera/__init__.py b/pypot-master/pypot-master/pypot/sensor/camera/__init__.py new file mode 100644 index 0000000..f5ccfb7 --- /dev/null +++ b/pypot-master/pypot-master/pypot/sensor/camera/__init__.py @@ -0,0 +1,9 @@ +from ...robot.controller import SensorsController + +from .dummy import DummyCamera + + +try: + from .opencvcam import OpenCVCamera +except ImportError: + pass diff --git a/pypot-master/pypot-master/pypot/sensor/camera/abstractcam.py b/pypot-master/pypot-master/pypot/sensor/camera/abstractcam.py new file mode 100644 index 0000000..1b219f6 --- /dev/null +++ b/pypot-master/pypot-master/pypot/sensor/camera/abstractcam.py @@ -0,0 +1,52 @@ +import time + +from threading import Thread + +from ...robot.sensor import Sensor + + +class AbstractCamera(Sensor): + registers = Sensor.registers + ['frame', 'resolution', 'fps'] + + def __init__(self, name, resolution, fps): + Sensor.__init__(self, name) + + self._res, self._fps = resolution, fps + self._last_frame = self._grab_and_process() + + self.running = True + self._processing = Thread(target=self._process_loop) + self._processing.daemon = True + self._processing.start() + + @property + def frame(self): + return self._last_frame + + def post_processing(self, image): + return image + + def grab(self): + raise NotImplementedError + + def _grab_and_process(self): + return self.post_processing(self.grab()) + + def _process_loop(self): + period = 1.0 / self.fps + + while self.running: + self._last_frame = self._grab_and_process() + time.sleep(period) + + @property + def resolution(self): + return list(reversed(self.frame.shape[:2])) + + @property + def fps(self): + return self._fps + + def close(self): + self.running = False + self._processing.join() diff --git a/pypot-master/pypot-master/pypot/sensor/camera/dummy.py b/pypot-master/pypot-master/pypot/sensor/camera/dummy.py new file mode 100644 index 0000000..4c0ca81 --- /dev/null +++ b/pypot-master/pypot-master/pypot/sensor/camera/dummy.py @@ -0,0 +1,14 @@ +import numpy + +from .abstractcam import AbstractCamera + + +class DummyCamera(AbstractCamera): + def __init__(self, name, resolution, fps, **extra): + AbstractCamera.__init__(self, name, resolution, fps) + + def grab(self): + if not hasattr(self, '_frame'): + self._frame = numpy.zeros(list(self._res) + [3], dtype=numpy.uint8) + + return self._frame diff --git a/pypot-master/pypot-master/pypot/sensor/camera/opencvcam.py b/pypot-master/pypot-master/pypot/sensor/camera/opencvcam.py new file mode 100644 index 0000000..5323717 --- /dev/null +++ b/pypot-master/pypot-master/pypot/sensor/camera/opencvcam.py @@ -0,0 +1,34 @@ +import cv2 + +from .abstractcam import AbstractCamera + + +class OpenCVCamera(AbstractCamera): + registers = AbstractCamera.registers + ['index'] + + def __init__(self, name, index, fps, resolution=None): + self._index = index + self.capture = cv2.VideoCapture(self.index) + if not self.capture.isOpened(): + raise ValueError('Can not open camera device {}. You should start your robot with argument camera=\'dummy\'. E.g. p = PoppyErgoJr(camera=\'dummy\')'.format(index)) + + if resolution is not None: + self.capture.set(cv2.CAP_PROP_FRAME_WIDTH, resolution[0]) + self.capture.set(cv2.CAP_PROP_FRAME_HEIGHT, resolution[1]) + + AbstractCamera.__init__(self, name, resolution, fps) + + @property + def index(self): + return self._index + + def grab(self): + rval, frame = self.capture.read() + if not rval: + raise EnvironmentError('Can not grab image from the camera!') + + return frame + + def close(self): + AbstractCamera.close(self) + self.capture.release() diff --git a/pypot-master/pypot-master/pypot/sensor/contact/__init__.py b/pypot-master/pypot-master/pypot/sensor/contact/__init__.py new file mode 100644 index 0000000..311dba8 --- /dev/null +++ b/pypot-master/pypot-master/pypot/sensor/contact/__init__.py @@ -0,0 +1,4 @@ +try: + from .contact import ContactSensor +except ImportError: + pass diff --git a/pypot-master/pypot-master/pypot/sensor/contact/contact.py b/pypot-master/pypot-master/pypot/sensor/contact/contact.py new file mode 100644 index 0000000..0db9d40 --- /dev/null +++ b/pypot-master/pypot-master/pypot/sensor/contact/contact.py @@ -0,0 +1,25 @@ +import RPi.GPIO as GPIO + +from ...robot.sensor import Sensor + + +class ContactSensor(Sensor): + """ Gives access to a micro switch sensor. """ + registers = Sensor.registers + ['contact'] + + def __init__(self, name, gpio_data, gpio_vcc=None): + Sensor.__init__(self, name) + + self._pin = gpio_data + GPIO.setmode(GPIO.BCM) + GPIO.setwarnings(False) + GPIO.setup(self._pin, GPIO.IN) + + if gpio_vcc is not None: + self._vcc = gpio_vcc + GPIO.setup(self._vcc, GPIO.OUT) + GPIO.output(self._vcc, GPIO.HIGH) + + @property + def contact(self): + return GPIO.input(self._pin) != 0 diff --git a/pypot-master/pypot-master/pypot/sensor/depth/__init__.py b/pypot-master/pypot-master/pypot/sensor/depth/__init__.py new file mode 100644 index 0000000..d05e127 --- /dev/null +++ b/pypot-master/pypot-master/pypot/sensor/depth/__init__.py @@ -0,0 +1,5 @@ +try: + from .sonar import SonarSensor + +except ImportError: + pass diff --git a/pypot-master/pypot-master/pypot/sensor/depth/sonar.py b/pypot-master/pypot-master/pypot/sensor/depth/sonar.py new file mode 100644 index 0000000..fe22e49 --- /dev/null +++ b/pypot-master/pypot-master/pypot/sensor/depth/sonar.py @@ -0,0 +1,134 @@ + + +import time +import numpy + +from collections import deque + +from ...robot.sensor import Sensor +from ...utils import StoppableLoopThread +from ...utils.i2c_controller import I2cController + + +class SonarSensor(Sensor): + """ Give access to ultrasonic I2C modules SRF-02 in a *pypot way* + + It provides one register: distance (in meters). + + """ + registers = Sensor.registers + ['distance'] + + def __init__(self, name, i2c_pin, address, sync_freq=50.0): + Sensor.__init__(self, name) + + self._d = numpy.nan + + self._sonar = Sonar(i2c_pin, [address]) + + self._controller = StoppableLoopThread(sync_freq, update=self.update) + self._controller.start() + + def close(self): + self._controller.stop() + + def update(self): + self._sonar.update() + self.distance = self._sonar.data[0] + + @property + def distance(self): + return self._d + + @distance.setter + def distance(self, d): + self._d = d / 100 + + +class Sonar(object): + """ Give access to ultrasonic I2C modules SRF-02 connected with I2C pin of your board. + To get more information, go to http://www.robot-electronics.co.uk/htm/srf02techI2C.htm + + Example: + + > i2c = smbus.SMBus(1) + > sonar = Sonar(i2c, addresses=[0x70, 0x71, 0x72]) + > + """ + + def __init__(self, pin_number, addresses=[0x70]): + """ 0x70 is the default address for the SRF-02 I2C module. """ + + self.i2c = I2cController(pin_number) + self.addresses = addresses + + self.data = None + + self._raw_data_queues = [deque([], 5) for _ in addresses] + + self.results_type = {'inches': 0x50, + 'centimeters': 0x51, + 'microseconds': 0x52} + + self.__errors = 0 + + def update(self): + self.ping() + time.sleep(0.065) + self.data = self._filter(self.read()) + return self.data + + def ping(self): + for addr in self.addresses: + self._ping(addr) + + def read(self, reg=2): + return [self._read(addr, reg) for addr in self.addresses] + + def _filter(self, data): + """ Apply a filter to reduce noisy data. + + Return the median value of a heap of data. + + """ + filtered_data = [] + for queue, data in zip(self._raw_data_queues, data): + queue.append(data) + filtered_data.append(numpy.median(queue)) + + return filtered_data + + def _ping(self, address, data=None): + d = data if data is not None else self.results_type['centimeters'] + + while True: + try: + self.i2c.write_byte_data(address, 0, d) + break + except IOError: + time.sleep(0.005) + self.__errors += 1 + + def _read(self, address, reg=2): + while True: + try: + return int(self.i2c.read_word_data(address, reg)) / 256 + except IOError: + time.sleep(0.005) + self.__errors += 1 + + +if __name__ == '__main__': + import smbus + + from pylab import plot + + i2c = smbus.SMBus(1) + sonar = Sonar(i2c) + + d = [] + t = [time.time()] + for _ in range(1000): + sonar.update() + d.append(sonar.data[0]) + t.append(time.time() - t[0]) + plot(t[1:], d) diff --git a/pypot-master/pypot-master/pypot/sensor/imagefeature/__init__.py b/pypot-master/pypot-master/pypot/sensor/imagefeature/__init__.py new file mode 100644 index 0000000..eb779e3 --- /dev/null +++ b/pypot-master/pypot-master/pypot/sensor/imagefeature/__init__.py @@ -0,0 +1,14 @@ +try: + from .marker import MarkerDetector +except ImportError: + pass + +try: + from .blob import BlobDetector +except ImportError: + pass + +try: + from .face import FaceDetector +except ImportError: + pass diff --git a/pypot-master/pypot-master/pypot/sensor/imagefeature/blob.py b/pypot-master/pypot-master/pypot/sensor/imagefeature/blob.py new file mode 100644 index 0000000..bf3b8ef --- /dev/null +++ b/pypot-master/pypot-master/pypot/sensor/imagefeature/blob.py @@ -0,0 +1,82 @@ +import cv2 + +from numpy import ones, uint8, concatenate + +from ...robot.controller import SensorsController +from ...robot.sensor import Sensor + + +class Blob(Sensor): + registers = Sensor.registers + ['center', 'radius'] + + def __init__(self, x, y, radius): + self.center = x, y + self.radius = radius + + def draw(self, img, color=(255, 0, 0), thickness=3): + cv2.circle(img, self.center, self.radius, color, thickness) + + @property + def json(self): + return {"center": self.center, "radius": self.radius} + + +class BlobDetector(SensorsController): + channels = { + 'R': 2, 'G': 1, 'B': 0, + 'H': 0, 'S': 1, 'V': 2 + } + + def __init__(self, robot, name, cameras, freq, filters): + SensorsController.__init__(self, None, [], freq) + + self.name = name + + self._robot = robot + self._names = cameras + self._blobs = [] + self.filters = filters + + def detect_blob(self, img, filters): + """ + "filters" must be something similar to: + filters = { + 'R': (150, 255), # (min, max) + 'S': (150, 255), + } + + """ + acc_mask = ones(img.shape[:2], dtype=uint8) * 255 + + rgb = img.copy() + hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) + + for c, (min, max) in filters.items(): + img = rgb if c in 'RGB' else hsv + + mask = img[:, :, self.channels[c]] + mask[mask < min] = 0 + mask[mask > max] = 0 + + acc_mask &= mask + + kernel = ones((5, 5), uint8) + acc_mask = cv2.dilate(cv2.erode(acc_mask, kernel), kernel) + + circles = cv2.HoughCircles(acc_mask, cv2.HOUGH_GRADIENT, 3, img.shape[0] / 5.) + return circles.reshape(-1, 3) if circles is not None else [] + + def update(self): + if not hasattr(self, 'cameras'): + self.cameras = [getattr(self._robot, c) for c in self._names] + + self._blobs = concatenate([self.detect_blob(c.frame, self.filters) + for c in self.cameras]) + + @property + def blobs(self): + return [Blob(*b) for b in self._blobs] + + @property + def registers(self): + return ['blobs'] diff --git a/pypot-master/pypot-master/pypot/sensor/imagefeature/face.py b/pypot-master/pypot-master/pypot/sensor/imagefeature/face.py new file mode 100644 index 0000000..e01c786 --- /dev/null +++ b/pypot-master/pypot-master/pypot/sensor/imagefeature/face.py @@ -0,0 +1,57 @@ +import cv2 + +from numpy import mean, concatenate + +from ...robot.controller import SensorsController +from ...robot.sensor import Sensor + + +class Face(Sensor): + registers = Sensor.registers + ['center', 'rect'] + + def __init__(self, rect): + x, y, w, h = rect + self.center = mean([[x, x + w], [y, y + h]], axis=1) + self.rect = rect + + def draw(self, img, color=(255, 0, 0), thickness=3): + x, y, w, h = self.rect + cv2.rectangle(img, (x, y), (x + w, y + h), color, thickness) + + @property + def json(self): + return {"center": self.center, "rect": self.rect} + + +class FaceDetector(SensorsController): + def __init__(self, robot, name, cameras, freq, + cascade='/home/coyote/dev/opencv-3.0.0/data/haarcascades/haarcascade_frontalface_alt.xml'): + SensorsController.__init__(self, None, [], freq) + + self.name = name + + self._robot = robot + self._names = cameras + self._faces = [] + + self.cascade = cv2.CascadeClassifier(cascade) + + def detect_face(self, img): + rects = self.cascade.detectMultiScale(img, scaleFactor=1.3, + minNeighbors=4, + minSize=(20, 20)) + return rects + + def update(self): + if not hasattr(self, 'cameras'): + self.cameras = [getattr(self._robot, c) for c in self._names] + + self._faces = concatenate([self.detect_face(c.frame) for c in self.cameras]) + + @property + def faces(self): + return [Face(f) for f in self._faces] + + @property + def registers(self): + return ['faces'] diff --git a/pypot-master/pypot-master/pypot/sensor/imagefeature/marker.py b/pypot-master/pypot-master/pypot/sensor/imagefeature/marker.py new file mode 100644 index 0000000..336607a --- /dev/null +++ b/pypot-master/pypot-master/pypot/sensor/imagefeature/marker.py @@ -0,0 +1,64 @@ +from multiprocessing import Process, Queue + +from hampy import detect_markers + +from ...robot.controller import SensorsController +from ...robot.sensor import Sensor + + +class Marker(Sensor): + registers = Sensor.registers + ['position', 'id'] + + def __init__(self, marker): + Sensor.__init__(self, 'marker_{}'.format(marker.id)) + + self.position = marker.normalized_center + self.id = marker.id + + self._marker = marker + + def __getattr__(self, attr): + return getattr(self._marker, attr) + + @property + def json(self): + return {"id": self.id, "position": self.position} + + +class MarkerDetector(SensorsController): + def __init__(self, robot, name, cameras, freq, multiprocess=True): + SensorsController.__init__(self, None, [], freq) + + self.name = name + + self._robot = robot + self._names = cameras + + self.detect = (lambda img: self._bg_detection(img) + if multiprocess else list(detect_markers(img))) + + def update(self): + if not hasattr(self, 'cameras'): + self.cameras = [getattr(self._robot, c) for c in self._names] + + self._markers = sum([self.detect(c.frame) for c in self.cameras], []) + self.sensors = [Marker(m) for m in self._markers] + + @property + def markers(self): + return self.sensors + + @property + def registers(self): + return ['markers'] + + def _detect(self, q, img): + q.put(list(detect_markers(img))) + + def _bg_detection(self, img): + if not hasattr(self, 'q'): + self.q = Queue() + + p = Process(target=self._detect, args=(self.q, img)) + p.start() + return self.q.get() diff --git a/pypot-master/pypot-master/pypot/sensor/kinect/__init__.py b/pypot-master/pypot-master/pypot/sensor/kinect/__init__.py new file mode 100644 index 0000000..b9a418e --- /dev/null +++ b/pypot-master/pypot-master/pypot/sensor/kinect/__init__.py @@ -0,0 +1,4 @@ +try: + from .sensor import KinectSensor +except ImportError: + pass diff --git a/pypot-master/pypot-master/pypot/sensor/kinect/sensor.py b/pypot-master/pypot-master/pypot/sensor/kinect/sensor.py new file mode 100644 index 0000000..58f9a1d --- /dev/null +++ b/pypot-master/pypot-master/pypot/sensor/kinect/sensor.py @@ -0,0 +1,110 @@ +""" +This code has been developed by Baptiste Busch: https://github.com/buschbapti + +This module allows you to retrieve Skeleton information from a Kinect device. +It is only the client side of a zmq client/server application. + +The server part can be found at: https://bitbucket.org/buschbapti/kinectserver/src +It used the Microsoft Kinect SDK and thus only work on Windows. + +Of course, the client side can be used on any platform. + +""" + +import zmq +import numpy +import threading + +from collections import namedtuple + +from ...utils import Point3D, Point2D, Quaternion + +torso_joints = ('hip_center', 'spine', 'shoulder_center', 'head') +left_arm_joints = ('shoulder_left', 'elbow_left', 'wrist_left', 'hand_left') +right_arm_joints = ('shoulder_right', 'elbow_right', 'wrist_right', 'hand_right') +left_leg_joints = ('hip_left', 'knee_left', 'ankle_left', 'foot_left') +right_leg_joints = ('hip_right', 'knee_right', 'ankle_right', 'foot_right') +skeleton_joints = torso_joints + left_arm_joints + right_arm_joints + left_leg_joints + right_leg_joints + + +class Skeleton(namedtuple('Skeleton', ('timestamp', 'user_id') + skeleton_joints)): + joints = skeleton_joints + + +Joint = namedtuple('Joint', ('position', 'orientation', 'pixel_coordinate')) + + +class KinectSensor(object): + def __init__(self, addr, port): + self._lock = threading.Lock() + self._skeleton = {} + + self.context = zmq.Context() + self.sub_skel = self.context.socket(zmq.SUB) + self.sub_skel.connect('tcp://{}:{}'.format(addr, port)) + self.sub_skel.setsockopt(zmq.SUBSCRIBE, '') + + t = threading.Thread(target=self.get_skeleton) + t.daemon = True + t.start() + + def remove_user(self, user_index): + with self._lock: + del self._skeleton[user_index] + + def remove_all_users(self): + with self._lock: + self._skeleton = {} + + @property + def tracked_skeleton(self): + with self._lock: + return self._skeleton + + @tracked_skeleton.setter + def tracked_skeleton(self, skeleton): + with self._lock: + self._skeleton[skeleton.user_id] = skeleton + + def get_skeleton(self): + while True: + md = self.sub_skel.recv_json() + msg = self.sub_skel.recv() + skel_array = numpy.fromstring(msg, dtype=float, sep=",") + skel_array = skel_array.reshape(md['shape']) + + nb_joints = md['shape'][0] + joints = [] + for i in range(nb_joints): + x, y, z, w = skel_array[i][0:4] + position = Point3D(x / w, y / w, z / w) + pixel_coord = Point2D(*skel_array[i][4:6]) + orientation = Quaternion(*skel_array[i][6:10]) + joints.append(Joint(position, orientation, pixel_coord)) + + self.tracked_skeleton = Skeleton(md['timestamp'], md['user_index'], *joints) + + def run(self): + cv2.startWindowThread() + while True: + img = numpy.zeros((480, 640, 3)) + skeleton = kinect.tracked_skeleton + if skeleton: + for user, skel in skeleton.items(): + for joint_name in skel.joints: + x, y = getattr(skel, joint_name).pixel_coordinate + pt = (int(x), int(y)) + cv2.circle(img, pt, 5, (255, 255, 255), thickness=-1) + kinect.remove_all_users() + cv2.imshow('Skeleton', img) + cv2.waitKey(50) + + self.sub_skel.close() + self.context.term() + + +if __name__ == '__main__': + import cv2 + + kinect = KinectSensor('193.50.110.177', 9999) + kinect.run() diff --git a/pypot-master/pypot-master/pypot/sensor/optibridge.py b/pypot-master/pypot-master/pypot/sensor/optibridge.py new file mode 100644 index 0000000..192b10b --- /dev/null +++ b/pypot-master/pypot-master/pypot/sensor/optibridge.py @@ -0,0 +1,57 @@ +import zmq +import time +import pickle +import threading + +from . import optitrack + + +class OptiBridgeServer(threading.Thread): + def __init__(self, bridge_host, bridge_port, + opti_addr, opti_port, obj_name): + threading.Thread.__init__(self) + self.daemon = True + + c = zmq.Context() + self.s = c.socket(zmq.PUB) + self.s.bind('tcp://{}:{}'.format(bridge_host, bridge_port)) + + self.optitrack = optitrack.OptiTrackClient(opti_addr, opti_port, obj_name) + self.optitrack.start() + + self.obj_name = obj_name + + def run(self): + while True: + self.s.send(pickle.dumps(self.optitrack.recent_tracked_objects)) + time.sleep(0.02) + + +class OptiTrackClient(threading.Thread): + def __init__(self, bridge_host, bridge_port, obj_name): + threading.Thread.__init__(self) + self.daemon = True + + c = zmq.Context() + self.s = c.socket(zmq.SUB) + self.s.connect('tcp://{}:{}'.format(bridge_host, bridge_port)) + self.s.setsockopt(zmq.SUBSCRIBE, '') + + self.obj_name = obj_name + self._tracked_obj = {} + + def run(self): + while True: + d = pickle.loads(self.s.recv()) + self._tracked_obj = { + k: d[k] + for k in [k for k in list(d.keys()) if k in self.obj_name] + } + + @property + def tracked_objects(self): + return self._tracked_obj + + @property + def recent_tracked_objects(self): + return self.tracked_objects diff --git a/pypot-master/pypot-master/pypot/sensor/optitrack.py b/pypot-master/pypot-master/pypot/sensor/optitrack.py new file mode 100644 index 0000000..4b84d99 --- /dev/null +++ b/pypot-master/pypot-master/pypot/sensor/optitrack.py @@ -0,0 +1,83 @@ +import time +import numpy +import datetime +import threading + +from collections import namedtuple + + +TrackedObject = namedtuple('TrackedObject', ('position', 'quaternion', 'orientation', 'timestamp')) + + +def quat2euler(q): + qx, qy, qz, qw = q + sqx, sqy, sqz, sqw = q ** 2 + invs = 1.0 / (sqx + sqy + sqz + sqw) + + yaw = numpy.arctan2(2.0 * (qx * qz + qy * qw) * invs, (sqx - sqy - sqz + sqw) * invs) + pitch = -numpy.arcsin(2.0 * (qx * qy - qz * qw) * invs) + roll = numpy.arctan2(2.0 * (qy * qz + qx * qw) * invs, (-sqx + sqy - sqz + sqw) * invs) + + return numpy.array((yaw, pitch, roll)) + + +try: + import vrpn + + class OptiTrackClient(threading.Thread): + """ Retrieves position, orientation, and timestamp of each tracked object. + + The position is expressed in meters (X is left, Y is up, and Z is depth). + The orientation is expressed in radians (yaw, pitch, roll). + + """ + def __init__(self, addr, port, obj_names): + threading.Thread.__init__(self) + self.daemon = True + + self.trackers = [] + for obj in obj_names: + t = vrpn.receiver.Tracker('{}@{}:{}'.format(obj, addr, port)) + t.register_change_handler(obj, self.handler, 'position') + self.trackers.append(t) + + self._tracked_objects = {} + + @property + def tracked_objects(self): + return self._tracked_objects + + @property + def recent_tracked_objects(self): + """ Only returns the objects that have been tracked less than 20ms ago. """ + dt = 0.02 + f = lambda name: (datetime.datetime.now() - self.tracked_objects[name].timestamp).total_seconds() + return dict([(k, v) for k, v in self.tracked_objects.items() if f(k) < dt]) + + def handler(self, obj, data): + self.tracked_objects[obj] = TrackedObject(numpy.array(*data['position']), + numpy.array(data['quaternion']), + quat2euler(numpy.array(data['quaternion'])), + datetime.datetime.now()) + + def serve_forever(self): + self.start() + + while True: + try: + self.join(timeout=1.0) + except KeyboardInterrupt: + break + + def run(self): + while True: + for t in self.trackers: + t.mainloop() + time.sleep(1.0 / 120) + +except ImportError: + pass + +if __name__ == '__main__': + c = OptiTrackClient('193.50.110.176', 3883, ('obj_1', )) + c.serve_forever() diff --git a/pypot-master/pypot-master/pypot/server/__init__.py b/pypot-master/pypot-master/pypot/server/__init__.py new file mode 100644 index 0000000..05663b0 --- /dev/null +++ b/pypot-master/pypot-master/pypot/server/__init__.py @@ -0,0 +1,19 @@ +try: + from .httpserver import HTTPRobotServer +except ImportError: + pass + +try: + from .zmqserver import ZMQRobotServer +except ImportError: + pass + +try: + from .server import RemoteRobotServer +except ImportError: + pass + +try: + from .ws import WsRobotServer +except ImportError: + pass diff --git a/pypot-master/pypot-master/pypot/server/httpserver.py b/pypot-master/pypot-master/pypot/server/httpserver.py new file mode 100644 index 0000000..e92e6ed --- /dev/null +++ b/pypot-master/pypot-master/pypot/server/httpserver.py @@ -0,0 +1,1136 @@ +import json +import socket +import errno +import numpy +import logging + +from tornado.ioloop import IOLoop +from tornado.web import RequestHandler +from tornado.web import Application + +from .server import AbstractServer + +logger = logging.getLogger(__name__) + + +class MyJSONEncoder(json.JSONEncoder): + """ JSONEncoder which tries to call a json property before using the encoding default function. """ + + def default(self, obj): + if hasattr(obj, 'json'): + return obj.json + + if isinstance(obj, numpy.ndarray): + return list(obj) + + if isinstance(obj, numpy.integer): + return int(obj) + + return json.JSONEncoder.default(self, obj) + + +class PoppyRequestHandler(RequestHandler): + """Custom request handler. + + Automatically sets CORS and cache headers, and manages + every OPTIONS request.""" + + def set_default_headers(self): + self.set_header('Cache-control', 'no-store') + self.set_header('Access-Control-Allow-Origin', '*') + self.set_header('Access-Control-Allow-Headers', 'Origin, Accept, Content-Type, X-Requested-With, X-CSRF-Token') + self.set_header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS') + + def options(self, *args, **kwargs): + self.set_status(204) + + def write_json(self, obj): + self.write(json.dumps(obj, cls=MyJSONEncoder)) + + +# region Miscellaneous Handlers + +class LocalIp(PoppyRequestHandler): + """ API REST Request Handler for request: + GET /ip.json + """ + + def get(self): + import socket + + def find_local_ip(): + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + s.connect(("8.8.8.8", 80)) + local_ip = s.getsockname()[0] + s.close() + return local_ip + + try: + ip = find_local_ip() + self.set_status(200) + self.write_json({ + "ip": ip + }) + except socket.error as e: + self.set_status(404) + self.write_json({ + "error": "Cannot find ip of your Poppy Robot", + "tip": "Poppy is unable to resolve its ip. Try to resolve it using ifconfig / ipconfig.", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + + +class IndexHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + GET /robot.json + """ + def get(self): + out = { + 'motors': [], + 'primitives': [] + } + for m in self.restful_robot.get_motors_list('motors'): + motor = {} + for r in self.restful_robot.get_motor_registers_list(m): + try: + motor[r] = self.restful_robot.get_motor_register_value(m, r) + except AttributeError: + pass + out['motors'].append(motor) + + running_primitives = self.restful_robot.get_running_primitives_list() + for prim in self.restful_robot.get_primitives_list(): + primitive = { + 'primitive': prim, + 'running': prim in running_primitives, + 'properties': [], + # XXX pas de self en param ? + 'methods': self.restful_robot.get_primitive_methods_list(prim) + } + for prop in self.restful_robot.get_primitive_properties_list(prim): + primitive['properties'].append({ + 'property': prop, + 'value': self.restful_robot.get_primitive_property(prim, prop) + }) + out['primitives'].append(primitive) + self.set_status(200) + self.write_json(out) + + +class PathsUrl(PoppyRequestHandler): + """ API REST Request Handler for request: + GET / + """ + @staticmethod + def has_method(class_obj, method_name): + return method_name in class_obj.__dict__ + + def get(self): + out = 'All url paths available:
' + get = '
Get method url:
' + post = '
Post method url:
' + for url in url_paths: + tmp = url[0] + tmp = tmp.replace('\\', '') + tmp = tmp.replace('?', '') + tmp = tmp.replace('<', '<') + tmp = tmp.replace('>', '>') + tmp = tmp.replace('(P', '') + tmp = tmp.replace('[a-zA-Z0-9_]+)', '') + if self.has_method(url[1], 'get'): + get += tmp + '
' + if self.has_method(url[1], 'post'): + post += tmp + '
' + out += get + out += post + self.set_status(200) + self.write(out) + + +# endregion + +# region Motors Handlers + +class MotorsListHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + GET /motors/list.json + GET /motors//list.json + """ + + def get(self, alias='motors'): + try: + motors = self.restful_robot.get_motors_list(alias) + self.set_status(200) + self.write_json({ + alias: motors + }) + except AttributeError as e: + self.set_status(404) + self.write_json({ + "error": "Alias '{}' does not exist.".format(alias), + "tip": "You can find the list of aliases with /motors/aliases/list.json", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + + +class MotorsAliasesListHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + GET /motors/aliases/list.json + """ + + def get(self): + aliases = self.restful_robot.get_motors_alias() + self.set_status(200) + self.write_json({ + "aliases": aliases + }) + + +class MotorRegistersListHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + GET /motors//registers/list.json + """ + + def get(self, motor_name): + try: + self.set_status(200) + self.write_json({ + 'registers': self.restful_robot.get_motor_registers_list(motor_name) + }) + except AttributeError as e: + # required motor does not exist + self.set_status(404) + self.write_json({ + "error": "Motor '{}' does not exist.".format(motor_name), + "tip": "You can find the list of motors with /motors/list.json", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + + +class MotorRegisterHandler(PoppyRequestHandler): + """ API REST Request Handler for requests: + GET /motors//registers//value.json + POST /motors//registers//value.json + new_value + """ + + def get(self, motor_name, register_name): + try: + self.set_status(200) + self.write_json({ + register_name: self.restful_robot.get_motor_register_value(motor_name, register_name) + }) + except AttributeError as e: + # either motor given does not exist or the motor does not have the required register. + self.set_status(404) + self.write_json({ + "error": "Either motor '{}' or register '{}' does not exist. Or you want to change a read-only register" + " value".format(motor_name, register_name), + "tip": "You can find the list of motors with /motors/list.json and their registers with " + "/motors//registers/list.json", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + + def post(self, motor_name, register_name): + try: + data = json.loads(self.request.body.decode()) + except json.decoder.JSONDecodeError as jsDE: + self.set_status(400) + self.write_json({ + "error": "Data given is not valid.", + "tip": "{}".format(" ".join(jsDE.args)) + }) + return # we have to stop the function if data isn't well defined + try: + self.restful_robot.set_motor_register_value(motor_name, register_name, data) + self.set_status(202) + self.write_json({ + register_name: data + }) + except AttributeError as e: + # either motor given does not exist or the motor does not have the required register. + self.set_status(404) + self.write_json({ + "error": "Either motor '{}' or register '{}' does not exist.".format(motor_name, register_name), + "tip": "You can find the list of motors with /motors/list.json and their registers with " + "/motors//registers/list.json", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + + +class RegisterValuesHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + GET /motors/registers//list.json + """ + + def get(self, register_name): + try: + register_values = {} + for m in self.restful_robot.get_motors_list('motors'): + value = self.restful_robot.get_motor_register_value(m, register_name) + register_values[m] = value + self.set_status(200) + self.write_json({ + register_name: register_values + }) + except AttributeError as e: + # motor does not have the required register. + self.set_status(404) + self.write_json({ + "error": "A motor does not have the register '{}'.".format(register_name), + "tip": "You can find the list of the registers of a motor with /motors//registers/list.json", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + + +# endregion + +# region Goto Handlers + +class MotorsGotoHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + POST /motors/goto.json + motors & their positions & duration & wait + """ + + def post(self): + try: + data = json.loads(self.request.body.decode()) + motors = list(map(str, data["motors"])) # motors field is a list + positions = list(map(float, data["positions"])) # positions field is a list + duration = float(data["duration"]) # duration is a str or a float + if duration <= 0: + raise ValueError("Duration should be > 0") + wait = bool(str(data["wait"]) in {'true', 'True', '1'}) + if len(motors) != len(positions): + raise IndexError("There is not the same amount of motors and positions") + except (ValueError, IndexError, AttributeError, KeyError) as e: + self.set_status(400) + self.write_json({ + "error": "Cannot read data given.", + "tip": 'Four fields are required in this post request. "motors" is a list of motor names (given as ' + 'strings). "positions" is a list of angles for motors (given as strings or floats). ' + '"duration" is the time in seconds to do the move, given as string or float."wait" is a boolean.' + ' Example: "{"motors": ["m1","m2"], "positions": [90, 0]}', + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + return # we have to stop the function if data isn't well defined + try: + self.restful_robot.set_goto_positions_for_motors(motors, positions, duration, wait=wait) + self.set_status(202) + motor_positions = {} + for m, motors in enumerate(motors): + motor_positions[motors] = positions[m] + self.write_json({ + "motors": motor_positions, + "duration": duration, + "waiting": wait + }) + except AttributeError as e: + self.set_status(404) + self.write_json({ + "error": "One of the motors given does not exist.", + "tip": "You can find the list of motors with /motors/list.json", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + + +class MotorGotoHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + POST /motors//goto.json + position & duration & wait + """ + + def post(self, motor_name): + try: + data = json.loads(self.request.body.decode()) + position = float(data["position"]) + duration = float(data["duration"]) + if duration <= 0: + raise ValueError("Duration should be > 0") + wait = bool(str(data["wait"]) in {'true', 'True', '1'}) + except (ValueError, AttributeError, KeyError) as e: + self.set_status(400) + self.write_json({ + "error": "Cannot read data given.", + "tip": 'Three fields are required in this post request. "position" a angle for the motor, given as ' + 'string or float. "duration" is the time in seconds to do the move, given as string or float.' + '"wait" is a boolean. Example: "{"motor": "m1", "position": 90, duration: 3, wait: "true"}', + "details": "{}: {}".format(type(e).__name__, " ".join(e.args)) + }) + return # we have to stop the function if data isn't well defined + try: + self.restful_robot.set_goto_position_for_motor(motor_name, position, duration, wait=wait) + self.set_status(202) + self.write_json({ + "motors": { + motor_name: position + }, + "duration": duration, + "waiting": wait + }) + except AttributeError as e: + self.set_status(404) + self.write_json({ + "error": "Motor '{}' does not exist.".format(motor_name), + "tip": "You can find the list of motors with /motors/list.json", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + + +# endregion + +# region Sensors Handlers + +class SensorsListHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + GET /sensors/list.json + """ + + def get(self): + self.write_json({ + "sensors": self.restful_robot.get_sensors_list() + }) + + +class SensorRegistersListHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + GET /sensors//registers/list.json + """ + + def get(self, sensor_name): + try: + self.set_status(200) + self.write_json({ + 'registers': self.restful_robot.get_sensors_registers_list(sensor_name) + }) + except AttributeError as e: + # required sensor does not exist + self.set_status(404) + self.write_json({ + "error": "Sensor '{}' does not exist.".format(sensor_name), + "tip": "You can find the list of sensors with /sensors/list.json", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + + +class SensorRegisterHandler(PoppyRequestHandler): + """ API REST Request Handler for requests: + GET /sensors//registers//value.json + POST /sensors//registers//value.json + new_value + """ + + def get(self, sensor_name, register_name): + try: + self.set_status(200) + self.write_json({ + register_name: self.restful_robot.get_sensor_register_value(sensor_name, register_name) + }) + except AttributeError as e: + # either sensor given does not exist or the sensor does not have the required register. + self.set_status(404) + self.write_json({ + "error": "Either sensor '{}' or register '{}' does not exist.".format(sensor_name, register_name), + "tip": "You can find the list of sensors with /sensors/list.json and their registers with " + "/sensors//registers/list.json", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + + def post(self, sensor_name, register_name): + try: + data = json.loads(self.request.body.decode()) + except json.decoder.JSONDecodeError as jsDE: + self.set_status(404) + self.write_json({ + "error": "Data given is not valid.", + "tip": "{}".format(" ".join(jsDE.args)) + }) + return # we have to stop the function if data isn't well defined + try: + self.restful_robot.set_sensor_register_value(sensor_name, register_name, data) + self.set_status(202) + self.write_json({ + register_name: data + }) + except AttributeError as e: + # either sensor given does not exist or the sensor does not have the required register. + self.set_status(404) + self.write_json({ + "error": "Either sensor '{}' or register '{}' does not exist. Or you want to change a read-only register" + " value".format(sensor_name, register_name), + "tip": "You can find the list of sensors with /sensors/list.json and their registers with " + "/sensors//registers/list.json", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + + +class CameraHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + GET /sensors/camera/frame.png + """ + + def get(self): + try: + frame = self.restful_robot.getFrameFromCamera() + self.set_status(200) + self.set_header('Content-type', 'image/png') + self.write(frame) + except AttributeError as e: + # Camera is not available. + self.set_status(404) + self.write_json({ + "error": "No camera was found.", + "tip": "Verify your camera is well plugged. On http://poppy.local/logs, verify camera is enabled. If " + "you are simulating a Poppy robot, you will unfortunately not be able to use the camera", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + +class MarkerDetectorHandler(PoppyRequestHandler): + """ API REST Request Handler for requests: + GET /sensors/code/list.json + GET /sensors/code/.json + """ + + def get(self, code_name): + try: + self.set_status(200) + if code_name == 'list': + self.write_json({ + "codes": self.restful_robot.markers_list() + }) + else: + self.write_json({ + "found": self.restful_robot.detect_marker(code_name) + }) + except AttributeError as e: + # QRcode is not implemented + self.set_status(404) + self.write_json({ + "error": "Code detection has been removed from robot", + "tip": "Add marker_detector in software/poppy_ergo_jr/configuration/poppy_ergo_jr.json", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + except KeyError as e: + # Code asked is not defined + self.set_status(404) + self.write_json({ + "error": "The code you asked for does not exist", + "tip": "All preset codes are caribou, tetris and lapin/rabbit", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + +# endregion + +# region Moves Handlers + +class ListRecordedMovesHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + GET /records/list.json + """ + + def get(self): + self.set_status(200) + self.write_json({ + "moves": self.restful_robot.get_available_record_list() + }) + + +class RecordMoveHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + POST /records//record.json [+ motors] (optional) + """ + + def post(self, move_name): + try: + data = json.loads(self.request.body.decode()) + motors = data["motors"] + except json.decoder.JSONDecodeError: # body is empty + motors = self.restful_robot.get_motors_list('motors') + except AttributeError as e: + self.set_status(404) + self.write_json({ + "error": "Cannot read data given.", + "tip": "Motors should be given with json format either as a string, with motor names separated by a " + "comma (,), or as a list. Example: {'motors': 'm1,m2'} or {'motors': ['m1', 'm2']} ", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + return # we have to stop the function if data isn't well defined + if motors: + # Recording only the moves of the motors given + try: + # transforms a string separated by semi-colons to a list + if isinstance(motors, str): + motors = motors.split(',') + self.restful_robot.start_move_recorder(move_name, motors) + except AttributeError as e: + self.set_status(404) + self.write_json({ + "error": "At least one of the motors given could not be found.", + "tip": "Motors should be given with json format either as a string, with motor names separated by " + 'a comma (,), or as a list. Example: {"motors": "m1,m2"} or {"motors": ["m1", "m2"]}', + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + return # we have to stop the function if data isn't well defined + else: + self.restful_robot.start_move_recorder(move_name) + self.set_status(202) + self.write_json({ + move_name: "recording" + }) + + +class SaveMoveHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + POST /records//save.json + """ + + def post(self, move_name): + # No data is required + try: + self.restful_robot.stop_move_recorder(move_name) + self.set_status(202) + self.write_json({ + move_name: "saved" + }) + except AttributeError as e: + self.set_status(404) + self.write_json({ + "error": "The move you want to save is not being recorded.", + "tip": "Start by recording a move with /records//record.json", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + + +class MoveHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + GET records//value.json + """ + + def get(self, move_name): + try: + self.set_status(200) + info = self.restful_robot.get_move_recorder(move_name) + self.write_json({ + move_name: info, + "length": len(info) + }) + except FileNotFoundError as e: + self.set_status(404) + self.write_json({ + "error": "The move you want to play does not exist.", + "tip": "Start by recording a move with /records//record.json", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + + +class PlayMoveHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + POST /records//play.json + speed + """ + + def post(self, move_name): + try: + data = json.loads(self.request.body.decode()) + speed = data["speed"] + speed = float(speed) + opposite_direction = False # play move forward by default + + if speed < 0: + # if speed is negative, then play move backwards + opposite_direction = True + speed = abs(speed) + except (KeyError, json.decoder.JSONDecodeError) as jde: # speed field is missing + self.set_status(400) + self.write_json({ + "error": "speed field is missing.", + "tip": 'Speed value should be given with json format as a string, and with a minus sign (-) if you ' + 'want to play the move backwards. Example: {"speed": "-1.0"}', + "details": "{}".format(" ".join(jde.args)) + }) + return # we have to stop the function if data isn't well defined + except AttributeError as e: + self.set_status(404) + self.write_json({ + "error": "Cannot read data given.", + "tip": 'Speed value should be given with json format as a string, and with a minus sign (-) if you ' + 'want to play the move backwards. Example: {"speed": "-1.0"}', + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + return # we have to stop the function if data isn't well defined + + try: + self.restful_robot.start_move_player(move_name, speed=speed, backwards=opposite_direction) + self.set_status(202) + self.write_json({ + move_name: "started replay" + }) + except FileNotFoundError as e: + self.set_status(404) + self.write_json({ + "error": "The move you want to play does not exist.", + "tip": "Start by recording a move with /records//record.json", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + + +class StopMoveHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + POST /records//stop.json + """ + + def post(self, move_name): + try: + # No data is required + self.restful_robot.stop_primitive('_{}_player'.format(move_name)) + self.set_status(202) + self.write_json({ + move_name: "stopped" + }) + except AttributeError as e: + self.set_status(400) + self.write_json({ + "error": "The move you want to stop has not started.", + "tip": "Start by playing a move with /records//play.json", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + + +class DeleteMoveHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + POST /records//delete.json + """ + + def post(self, move_name): + # No data is required + success = self.restful_robot.remove_move_record(move_name) + if success: + self.set_status(202) + self.write_json({ + move_name: "deleted" + }) + else: + self.set_status(404) + self.write_json({ + "error": "The move you want to delete does not exist.", + "tip": "Start by recording a move with /records//record.json", + "details": "No file {}.record was found".format(move_name) + }) + + +# endregion + +# region Primitives Handlers + +class PrimitivesListHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + GET /primitives/list.json + """ + + def get(self): + self.set_status(200) + self.write_json({ + "primitives": self.restful_robot.get_primitives_list() + }) + + +class RunningPrimitivesListHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + GET /primitives/running/list.json + """ + + def get(self): + self.set_status(200) + self.write_json({ + "running_primitives": self.restful_robot.get_running_primitives_list() + }) + + +class StartPrimitiveHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + GET /primitives//start.json + """ + + def get(self, primitive_name): + try: + self.restful_robot.start_primitive(primitive_name) + self.set_status(202) + self.write_json({ + primitive_name: "started" + }) + except AttributeError as e: + # Primitive does not exist + self.set_status(404) + self.write_json({ + "error": "Primitive '{}' does not exist".format(primitive_name), + "tip": "You can find the list of the primitives with /primitives/list.json", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + + +class StopPrimitiveHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + GET /primitives//stop.json + """ + + def get(self, primitive_name): + try: + self.restful_robot.stop_primitive(primitive_name) + self.set_status(202) + self.write_json({ + primitive_name: "stopped" + }) + except AttributeError as e: + # Primitive does not exist + self.set_status(404) + self.write_json({ + "error": "Primitive '{}' does not exist".format(primitive_name), + "tip": "You can find the list of the primitives with /primitives/list.json", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + + +class PausePrimitiveHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + GET /primitives//pause.json + """ + + def get(self, primitive_name): + try: + self.restful_robot.pause_primitive(primitive_name) + self.set_status(202) + self.write_json({ + primitive_name: 'paused' + }) + except AttributeError as e: + # Primitive does not exist + self.set_status(404) + self.write_json({ + "error": "Primitive '{}' does not exist".format(primitive_name), + "tip": "You can find the list of the primitives with /primitives/list.json", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + + +class ResumePrimitiveHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + GET /primitives//resume.json + """ + + def get(self, primitive_name): + try: + self.restful_robot.resume_primitive(primitive_name) + self.set_status(202) + self.write_json({ + primitive_name: 'resumed' + }) + except AttributeError as e: + # Primitive does not exist + self.set_status(404) + self.write_json({ + "error": "Primitive '{}' does not exist".format(primitive_name), + "tip": "You can find the list of the primitives with /primitives/list.json", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + + +class PrimitivePropertiesListHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + GET /primitives//properties/list.json + """ + + def get(self, primitive_name): + try: + self.set_status(200) + self.write_json({ + 'property': self.restful_robot.get_primitive_properties_list(primitive_name) + }) + except AttributeError as e: + # Primitive does not exist + self.set_status(404) + self.write_json({ + "error": "Primitive '{}' does not exist".format(primitive_name), + "tip": "You can find the list of the primitives with /primitives/list.json", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + + +class PrimitivePropertyHandler(PoppyRequestHandler): + def get(self, primitive_name, prop): + response = self.restful_robot.get_primitive_property(primitive_name, prop) + self.write_json({ + '{}.{}'.format(primitive_name, prop): response + }) + + def post(self, primitive_name, prop): + data = json.loads(self.request.body.decode()) + self.restful_robot.set_primitive_property(primitive_name, prop, data) + self.set_status(204) + + +class ListPrimitiveMethodsHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + GET /primitives//methods/list.json + """ + + def get(self, primitive_name): + try: + self.set_status(200) + self.write_json({ + 'methods': self.restful_robot.get_primitive_methods_list(primitive_name) + }) + except AttributeError as e: + self.set_status(404) + self.write_json({ + "error": "Primitive '{}' does not exist".format(primitive_name), + "tip": "You can find the list of the primitives with /primitives/list.json", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + + +class CallPrimitiveMethodHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + POST /primitives//methods//args.json + """ + + def post(self, primitive_name, method_name): + try: + data = json.loads(self.request.body.decode()) + response = self.restful_robot.call_primitive_method(primitive_name, method_name, data) + self.write_json({ + '{}:{}'.format(primitive_name, method_name): response + }) + except AttributeError as e: + self.set_status(404) + self.write_json({ + "error": "Primitive '{}' does not exist".format(primitive_name), + "tip": "You can find the list of the primitives with /primitives/list.json", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + + +# endregion + +# region IK Handlers + +# Chain name(s) for +# * Ergo Jr is 'chain' (https://github.com/poppy-project/poppy-ergo-jr/blob/47dd208ab256a526fbd89653b3f4f996ca503a65/software/poppy_ergo_jr/poppy_ergo_jr.py#L27) +# * Torso are 'l_arm_chain' and 'r_arm_chain' (https://github.com/poppy-project/poppy-torso/blob/f1de072c88e7d6e0702664aec5028fb8266d37a4/software/poppy_torso/poppy_torso.py#L39) +# * Humanoid do not have IK chains yet. + +class IKValueHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + GET /ik//value.json + It returns the xyz coordinates of the effector and the list [Rx.x, Rx.y, Rx.z], which is the transformation along X + axis. Those values may not readable by a humain. The goal is to replace 'rot' values by roll, pitch and yaw. + """ + + def get(self, chain_name): + try: + self.set_status(200) + ans = self.restful_robot.ik_endeffector(chain_name) + # Prints a curl command which instructs the robot to reach the current position. + # command = "curl -X POST \\\n\t-H 'Content-Type: application/json' \\\n\t-d '{\"xyz\": \"" + ans[0] +\ + # "\", \"xyz\": \"" + ans[1] + "\", \"duration\":\"3\", \"wait\":\"True\"}'" \ + # "\\\n\thttp://localhost\\:8080/ik/chain/goto.json " + # print(command) + self.write_json({ + "xyz": ans[0], + "rot": ans[1], + }) + except AttributeError as e: + # chain given does not exist. + self.set_status(404) + self.write_json({ + "error": "Chain '{}' does not exist for this robot".format(chain_name), + "tip": "The Ergo's Chain names are 'chain', the Torso's are 'l_arm_chain' and 'l_arm_chain' and the" + " Humanoid has none.", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + except Exception as ex: + template = "An exception of type {0} occured. Arguments:\n{1}" + message = template.format(type(ex).__name__, " ".join(ex.args)) + self.set_status(400) + self.write_json({"error": message}) + + +class IKGotoHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + GET /ik//goto.json + duration, [x,y,z], [, wait][, rotation] + IK is not operational. You may encounter difficulties while requesting an orientation AND a position. + Orientation will take priority over position. + """ + + def post(self, chain_name): + try: + data = json.loads(self.request.body.decode()) + duration = float(data["duration"]) # in seconds + wait = data["wait"] if "wait" in data else False # wait is set to False if not defined + + # position: list [x, y, z] + xyz = list(map(float, str(data["xyz"]).split(","))) if "xyz" in data else None + + # rotation: list [TransformXAxis.x, TransformXAxis.y, TransformXAxis.z] + rot = list(map(float, str(data["rot"]).split(","))) if "rot" in data else None + + # roll/pitch/yaw: list [roll, pitch, yaw] + rpy = list(map(float, str(data["rpy"]).split(","))) if "rpy" in data else None + if rpy: + # When rpy is defined, it overwrites the value of rotation + # The function ik_rpy converts a list of rpy into a 3x3 rotation matrix + rot = self.restful_robot.ik_rpy(chain_name, *rpy) + + print("/!\\ IK Post method has some problems with orientation. It will prioritize orientation over position.") + # goto requested position. Returned value is the real position (cartesian + rotation) of the end effector + pose = self.restful_robot.ik_goto(chain_name, xyz, rot, duration, wait) + + self.set_status(200) + self.write_json({ + "xyz": pose[0], + "rot": pose[1] + }) + except AttributeError as e: + # chain given does not exist. + self.set_status(404) + self.write_json({ + "error": "Chain '{}' does not exist for this robot".format(chain_name), + "tip": "The Ergo's Chain names are 'chain', the Torso's are 'l_arm_chain' and 'l_arm_chain' and the" + " Humanoid has none.", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + except KeyError as e: + # A parameter is missing + self.set_status(400) + self.write_json({ + "error": "A '{}' occured. A parameter must be missing".format(type(e).__name__), + "tip": "Parameters are: duration, xyz | rot | rpy, [wait=False]. You can cumulate xyz, rot and rpy inputs.", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + except ValueError as e: + # Cant compute IK + self.set_status(403) + self.write_json({ + "error": "Cant compute IK for chain '{}'.".format(chain_name), + "tip": "Parameters are: duration, xyz | rot | rpy, [wait=False]. You can cumulate xyz, rot and rpy inputs.", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + except Exception as ex: + template = "An exception of type {0} occured. Arguments:\n{1}" + message = template.format(type(ex).__name__, " ".join(list(map(str, ex.args)))) + self.set_status(400) + self.write_json({"error": message}) + + +class IKRPYHandler(PoppyRequestHandler): + """ API REST Request Handler for request: + GET /ik//rpy.json + r, p, y + It is mainly used for debug, it may be removed when IK is operationnal + """ + + def get(self, chain_name): + try: + data = json.loads(self.request.body.decode()) + r = float(data["r"]) + p = float(data["p"]) + y = float(data["y"]) + self.set_status(200) + self.write_json({ + "rpy": self.restful_robot.ik_rpy(chain_name, r, p, y) + }) + except AttributeError as e: + # chain given does not exist. + self.set_status(404) + self.write_json({ + "error": "Chain '{}' does not exist for this robot".format(chain_name), + "tip": "The Ergo's Chain names are 'chain', the Torso's are 'l_arm_chain' and 'l_arm_chain' and the" + " Humanoid has none.", + "details": "{}".format(" ".join(list(map(str, e.args)))) + }) + except Exception as ex: + template = "An exception of type {0} occured. Arguments:\n{1}" + message = template.format(type(ex).__name__, " ".join(ex.args)) + self.set_status(400) + self.write_json({"error": message}) + + +# endregion + + +url_paths = [ + # Miscellaneous + (r'/', PathsUrl), + (r'/robot\.json', IndexHandler), + (r'/ip\.json', LocalIp), + + # Motors + (r'/motors/list\.json', MotorsListHandler), + (r'/motors/aliases/list\.json', MotorsAliasesListHandler), + (r'/motors/(?P[a-zA-Z0-9_]+)/?list\.json', MotorsListHandler), + (r'/motors/(?P[a-zA-Z0-9_]+)/registers/list\.json', MotorRegistersListHandler), + (r'/motors/(?P[a-zA-Z0-9_]+)/registers/(?P[a-zA-Z0-9_]+)/value\.json', + MotorRegisterHandler), + (r'/motors/registers/(?P[a-zA-Z0-9_]+)/list\.json', RegisterValuesHandler), + (r'/motors/(?P[a-zA-Z0-9_]+)/goto\.json', MotorGotoHandler), + (r'/motors/goto\.json', MotorsGotoHandler), + + # Sensors + (r'/sensors/list\.json', SensorsListHandler), + (r'/sensors/(?P[a-zA-Z0-9_]+)/registers/list\.json', SensorRegistersListHandler), + (r'/sensors/(?P[a-zA-Z0-9_]+)/registers/(?P[a-zA-Z0-9_]+)/value\.json', + SensorRegisterHandler), + (r'/sensors/camera/frame\.png', CameraHandler), + (r'/sensors/code/(?P[a-zA-Z0-9_]+)\.json', MarkerDetectorHandler), + + # Moves + (r'/records/list\.json', ListRecordedMovesHandler), + (r'/records/(?P[a-zA-Z0-9_]+)/value\.json', MoveHandler), + (r'/records/(?P[a-zA-Z0-9_]+)/record\.json', RecordMoveHandler), + (r'/records/(?P[a-zA-Z0-9_]+)/save\.json', SaveMoveHandler), + (r'/records/(?P[a-zA-Z0-9_]+)/play\.json', PlayMoveHandler), + (r'/records/(?P[a-zA-Z0-9_]+)/stop\.json', StopMoveHandler), + (r'/records/(?P[a-zA-Z0-9_]+)/delete\.json', DeleteMoveHandler), + + # Primitives + (r'/primitives/list\.json', PrimitivesListHandler), + (r'/primitives/running/list\.json', RunningPrimitivesListHandler), + (r'/primitives/(?P[a-zA-Z0-9_]+)/start\.json', StartPrimitiveHandler), + (r'/primitives/(?P[a-zA-Z0-9_]+)/stop\.json', StopPrimitiveHandler), + (r'/primitives/(?P[a-zA-Z0-9_]+)/pause\.json', PausePrimitiveHandler), + (r'/primitives/(?P[a-zA-Z0-9_]+)/resume\.json', ResumePrimitiveHandler), + (r'/primitives/(?P[a-zA-Z0-9_]+)/properties/list\.json', PrimitivePropertiesListHandler), + (r'/primitives/(?P[a-zA-Z0-9_]+)/properties/(?P[a-zA-Z0-9_]+)/value\.json', + PrimitivePropertyHandler), + (r'/primitives/(?P[a-zA-Z0-9_]+)/methods/list\.json', ListPrimitiveMethodsHandler), + (r'/primitives/(?P[a-zA-Z0-9_]+)/methods/(?P[a-zA-Z0-9_]+)/args\.json', + CallPrimitiveMethodHandler), + + # Ik + (r'/ik/(?P[a-zA-Z0-9_]+)/value\.json', IKValueHandler), + (r'/ik/(?P[a-zA-Z0-9_]+)/goto\.json', IKGotoHandler), + (r'/ik/(?P[a-zA-Z0-9_]+)/rpy\.json', IKRPYHandler) +] + + +class HTTPRobotServer(AbstractServer): + """Refer to the REST API for an exhaustive list of the possible routes.""" + + def __init__(self, robot, host='0.0.0.0', port='8080', cross_domain_origin='*', **kwargs): + AbstractServer.__init__(self, robot, host, port) + + def make_app(self): + PoppyRequestHandler.restful_robot = self.restful_robot + return Application(url_paths) + + def run(self, **kwargs): + """ Start the tornado server, run forever""" + + try: + loop = IOLoop() + app = self.make_app() + app.listen(self.port) + loop.start() + + except socket.error as sErr: + # Re raise the socket error if not "[Errno 98] Address already in use" + if sErr.errno != errno.EADDRINUSE: + raise sErr + else: + logger.warning( + 'The webserver port {} is already used. May be the HttpRobotServer is already running or another ' + 'software is using this port.'.format(self.port)) diff --git a/pypot-master/pypot-master/pypot/server/rest.py b/pypot-master/pypot-master/pypot/server/rest.py new file mode 100644 index 0000000..0f9a896 --- /dev/null +++ b/pypot-master/pypot-master/pypot/server/rest.py @@ -0,0 +1,273 @@ +import os +from numpy import round +import cv2 # for camera frame + +from operator import attrgetter +from pypot.primitive.move import MovePlayer, MoveRecorder, Move +from pathlib import Path + + +class RESTRobot(object): + """ REST API for a Robot. + + Through the REST API you can currently access: + * the motors list (and the aliases) + * the registers list for a specific motor + * read/write a value from/to a register of a specific motor + + * the sensors list + * the registers list for a specific motor + * read/write a value from/to a register of a specific motor + + * the primitives list (and the active) + * start/stop primitives + """ + + def __init__(self, robot): + self.robot = robot + self.moves_path = Path(".") + + # Access motor related values + + def get_motors_list(self, alias='motors'): + return [m.name for m in getattr(self.robot, alias)] + + def get_motor_registers_list(self, motor): + return self._get_register_value(motor, 'registers') + + # alias to above method + def get_registers_list(self, motor): + return self.get_motor_registers_list(motor) + + def get_motor_register_value(self, motor, register): + return self._get_register_value(motor, register) + + # alias to above method + def get_register_value(self, motor, register): + return self.get_motor_register_value(motor, register) + + def set_motor_register_value(self, motor, register, value): + self._set_register_value(motor, register, value) + + # alias to above method + def set_register_value(self, motor, register, value): + self.set_motor_register_value(motor, register, value) + + def get_motors_alias(self): + return self.robot.alias + + def set_goto_position_for_motor(self, motor, position, duration, wait=False): + m = getattr(self.robot, motor) + m.goto_position(position, duration, wait=wait) + + def set_goto_positions_for_motors(self, motors, positions, duration, control=None, wait=False): + for i, motor_name in enumerate(motors): + w = False if i < len(motors) - 1 else wait + m = getattr(self.robot, motor_name) + m.goto_position(positions[i], duration, control, wait=w) + + # Access sensor related values + + def get_sensors_list(self): + return [s.name for s in self.robot.sensors] + + def get_sensors_registers_list(self, sensor): + return self._get_register_value(sensor, 'registers') + + def get_sensor_register_value(self, sensor, register): + return self._get_register_value(sensor, register) + + def set_sensor_register_value(self, sensor, register, value): + return self._set_register_value(sensor, register, value) + + # Access primitive related values + + def get_primitives_list(self): + return [p.name for p in self.robot.primitives] + + def get_running_primitives_list(self): + return [p.name for p in self.robot.active_primitives if hasattr(p, 'name')] + + def start_primitive(self, primitive): + self._call_primitive_method(primitive, 'start') + + def stop_primitive(self, primitive): + self._call_primitive_method(primitive, 'stop') + + def pause_primitive(self, primitive): + self._call_primitive_method(primitive, 'pause') + + def resume_primitive(self, primitive): + self._call_primitive_method(primitive, 'resume') + + def get_primitive_properties_list(self, primitive): + return getattr(self.robot, primitive).properties + + def get_primitive_property(self, primitive, property): + return self._get_register_value(primitive, property) + + def set_primitive_property(self, primitive, property, value): + self._set_register_value(primitive, property, value) + + def get_primitive_methods_list(self, primitive): + return getattr(self.robot, primitive).methods + + def call_primitive_method(self, primitive, method, kwargs): + self._call_primitive_method(primitive, method, **kwargs) + + def _set_register_value(self, object, register, value): + o = getattr(self.robot, object) + getattr(o, register) # does register exists ? + setattr(o, register, value) + + def _get_register_value(self, object, register): + return attrgetter('{}.{}'.format(object, register))(self.robot) + + def _call_primitive_method(self, primitive, method_name, *args, **kwargs): + p = getattr(self.robot, primitive) + f = getattr(p, method_name) + return f(*args, **kwargs) + + # TODO (Theo) : change names with a dic instead of ugly format + def start_move_recorder(self, move_name, motors_name=None): + if not hasattr(self.robot, '_{}_recorder'.format(move_name)): + if motors_name is not None: + motors = [getattr(self.robot, m) for m in motors_name] + else: + motors = getattr(self.robot, 'motors') + recorder = MoveRecorder(self.robot, 50, motors) + self.robot.attach_primitive(recorder, '_{}_recorder'.format(move_name)) + recorder.start() + else: + recorder = getattr(self.robot, '_{}_recorder'.format(move_name)) + recorder.start() + + def attach_move_recorder(self, move_name, motors_name): + motors = [getattr(self.robot, m) for m in motors_name] + recorder = MoveRecorder(self.robot, 50, motors) + self.robot.attach_primitive(recorder, '_{}_recorder'.format(move_name)) + + def get_move_recorder_motors(self, move_name): + try: + recorder = getattr(self.robot, '_{}_recorder'.format(move_name)) + return [str(m.name) for m in recorder.tracked_motors] + except AttributeError: + return None + + def get_move_recorder(self, move_name): + try: + recorder = getattr(self.robot, '_{}_recorder'.format(move_name)) + move = recorder.move + return move.positions() + except AttributeError: + raise FileNotFoundError('I was not able to find _{}_recorder'.format(move_name)) + + def stop_move_recorder(self, move_name): + """Allow more easily than stop_primitive() to save in a filename the recorded move""" + recorder = getattr(self.robot, '_{}_recorder'.format(move_name)) + recorder.stop() + + with open(self.moves_path.joinpath("{}.record".format(move_name)), 'w') as f: + recorder.move.save(f) + + # Stop player if running : to discuss + # Recording a playing move can produce strange outputs, but could be a good feature + try: + player = getattr(self.robot, '_{}_player'.format(move_name)) + if player.running: + player.stop() + except AttributeError: + pass + + def start_move_player(self, move_name, speed=1.0, backwards=False): + """Move player need to have a move file + in the working directory to play it""" + + # check if running + try: + player = getattr(self.robot, '_{}_player'.format(move_name)) + if player.running: + return + except AttributeError: + pass + + # if not running, override the play primitive + + with open(self.moves_path.joinpath("{}.record".format(move_name))) as f: + loaded_move = Move.load(f) + player = MovePlayer(self.robot, loaded_move, play_speed=speed, backwards=backwards) + self.robot.attach_primitive(player, '_{}_player'.format(move_name)) + + player.start() + return player.duration() + + def get_available_record_list(self): + """Get list of json recorded movement files""" + return [f.stem for f in self.moves_path.glob('*.record') if f.is_file()] + + def remove_move_record(self, move_name): + """Remove the json recorded movement file""" + try: + os.remove(self.moves_path.joinpath("{}.record".format(move_name))) + return True + except FileNotFoundError: + return False + + def getFrameFromCamera(self): + """Gets and encodes the camera frame to .png format""" + _, img = cv2.imencode('.png', self.robot.camera.frame) + return img.tobytes() + + def markers_list(self): + """Gives the ids of all readable markers in front of the camera""" + detected_markers = self.robot.marker_detector.markers + return [m.id for m in detected_markers] + + def detect_marker(self, marker): + """Returns a boolean depending on whether the name of the qrcode given in parameter is visible by the camera""" + markers = { + 'tetris': [112259237], + 'caribou': [221052793], + 'lapin': [44616414], + 'rabbit': [44616414], + } + detected_markers_ids = self.markers_list() + return any([m in markers[marker] for m in detected_markers_ids]) + + # IK + def ik_endeffector(self, chain): + """ + Gives position & orientation of the end effector + :param chain: name of the IK chain + :return: tuple of strings for position & orientation ("x,y,z", "Rx.x,Rx.y,Rx.z") + """ + c = getattr(self.robot, chain) + position = ','.join(map(str, list(round(c.position, 4)))) + orientation = ','.join(map(str, list(round(c.orientation, 4)))) + return position, orientation + + def ik_goto(self, chain, xyz, rot, duration, wait=False): + """ + goto a position defined by a xyz and/or an orientation + :param chain: name of the IK chain + :param xyz: cartesian coordinates (list of floats, in m) + :param rot: [Rx.x, Rx.y, Rx.z] (see https://www.brainvoyager.com/bv/doc/UsersGuide/CoordsAndTransforms/SpatialTransformationMatrices.html) + :param duration: duration of the movement (float, in s) + :param wait: do we wait the end of the move before giving the answer ? (boolean) + :return: Gives position & orientation of the end effector after the move + """ + c = getattr(self.robot, chain) + c.goto(xyz, rot, duration, wait) + return self.ik_endeffector(chain) + + def ik_rpy(self, chain, roll, pitch, yaw): + """ + Gives the 3x3 affine rotation matrix corresponding the rpy values given. + :param chain: name of the IK chain + :param roll: float, -pi to pi + :param pitch: float, -pi to pi + :param yaw: float, -pi to pi + :return: 3x3 affine rotation matrix + """ + c = getattr(self.robot, chain) + return c.rpy_to_rotation_matrix(roll, pitch, yaw) diff --git a/pypot-master/pypot-master/pypot/server/server.py b/pypot-master/pypot-master/pypot/server/server.py new file mode 100644 index 0000000..7d3ae67 --- /dev/null +++ b/pypot-master/pypot-master/pypot/server/server.py @@ -0,0 +1,27 @@ +from .rest import RESTRobot + +import logging + +logger = logging.getLogger(__name__) + + +class AbstractServer(object): + def __init__(self, robot, host, port): + self.restful_robot = RESTRobot(robot) + self.host, self.port = host, port + + def run(self): + raise NotImplementedError + + +class RemoteRobotServer(AbstractServer): + def run(self): + try: + import zerorpc + server = zerorpc.Server(self.restful_robot) + server.bind('tcp://{}:{}'.format(self.host, self.port)) + server.run() + except ImportError: + logger.warning(("Warning: The Python module 'zerorpc' is not installed. " + "Therefore the feature RemoteRobotServer is disabled. " + "On most systems this module can be installed with the command 'pip install zerorpc'.")) diff --git a/pypot-master/pypot-master/pypot/server/snap.py b/pypot-master/pypot-master/pypot/server/snap.py new file mode 100644 index 0000000..2729e93 --- /dev/null +++ b/pypot-master/pypot-master/pypot/server/snap.py @@ -0,0 +1,440 @@ +import os +import re +import sys +import numpy +import cv2 +import errno +import shutil +import bottle +import socket +import logging +import datetime + +from tornado.wsgi import WSGIContainer +from tornado.httpserver import HTTPServer +from tornado.ioloop import IOLoop + +from bottle import request +from bottle import response + +from contextlib import closing +from ast import literal_eval as make_tuple + +from .server import AbstractServer +from ..utils.appdirs import user_data_dir + + +logger = logging.getLogger(__name__) + +if sys.version_info < (3, 2): + import cgi + escape = cgi.escape +else: + import html + escape = html.escape + + +def get_snap_user_projects_directory(): + snap_user_projects_directory = user_data_dir('pypot', 'SnapRobotServer') + if not os.path.exists(snap_user_projects_directory): + os.makedirs(snap_user_projects_directory) + return snap_user_projects_directory + + +def find_local_ip(host=None): + # see here: http://stackoverflow.com/questions/166506/ + try: + if host is None: + host = socket.gethostname() + + if 'local' not in host: + host += '.local' + + try: + ips = [ip for ip in socket.gethostbyname_ex(host)[2] + if not ip.startswith('127.')] + if len(ips): + return ips[0] + except socket.gaierror: + logger.debug('socket gaierror with hostname {}'.format(host)) + pass + + # If the above method fails (depending on the system) + # Tries to ping google DNS instead (need a internet connexion) + try: + with closing(socket.socket()) as s: + s.settimeout(1) + s.connect(('8.8.8.8', 53)) + return s.getsockname()[0] + except socket.timeout: + logger.debug('socket timeout') + pass + + except IOError as e: + # network unreachable + # error no 10065 = WSAESERVERUNREACH Windows Network unreachable + if e.errno == errno.ENETUNREACH or e.errno == 10065: + logger.debug('network unreachable') + pass + else: + raise + return '127.0.0.1' + + +def set_snap_server_variables(host, port, snap_extension='.xml', path=None): + """ Change dynamically port and host variable in xml Snap! project file""" + + localdir = os.getcwd() + if path is None: + os.chdir(os.path.dirname(os.path.realpath(__file__))) + else: + os.chdir(path) + xml_files = [f for f in os.listdir('.') if f.endswith(snap_extension)] + for filename in xml_files: + with open(filename, 'r') as xf: + xml = xf.read() + # Change host variable + xml = re.sub(r'''[\s\S]*?<\/l><\/variable>''', + '''{}'''.format(host), xml) + # Change host argument of "set $robot host" + xml = re.sub(r'''[\s\S]*?<\/l>''', + '''{}'''.format(host), xml) + # Change port variable + xml = re.sub(r'''[\s\S]*?<\/l><\/variable>''', + '''{}'''.format(port), xml) + + with open(filename, 'w') as xf: + xf.write(xml) + os.chdir(localdir) + + +class EnableCors(object): + + """Enable CORS (Cross-Origin Resource Sharing) headers""" + name = 'enable_cors' + api = 2 + + def __init__(self, origin='*'): + self.origin = origin + + def apply(self, fn, context): + def _enable_cors(*args, **kwargs): + response.set_header('Access-Control-Allow-Origin', self.origin) + response.set_header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS') + response.set_header('Access-Control-Allow-Headers', 'Origin, Accept, Content-Type, X-Requested-With, X-CSRF-Token') + + if request.method != 'OPTIONS': + # actual request; reply with the actual response + return fn(*args, **kwargs) + + return _enable_cors + + +class CacheBuster(object): + """Add response headers to disable cache""" + + name = 'cache_buster' + api = 2 + + def apply(self, fn, context): + def _ext(*args, **kwargs): + response.set_header('Cache-control', 'no-store') + return fn(*args, **kwargs) + + return _ext + + +class SnapRobotServer(AbstractServer): + + def __init__(self, robot, host='0.0.0.0', port='6969', quiet=True): + AbstractServer.__init__(self, robot, host, port) + self.quiet = quiet + self.app = bottle.Bottle() + self.app.install(EnableCors()) + self.app.install(CacheBuster()) + + rr = self.restful_robot + + # Copy Snap files from system directory to user directory. It avoids + # right issue while PyPot is installed from pip in an admin directory + snap_system_projects_directory = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'snap_projects') + xml_files = [os.path.join(snap_system_projects_directory, f) + for f in os.listdir(snap_system_projects_directory) if f.endswith('.xml')] + for xml_file in xml_files: + dst = os.path.join(get_snap_user_projects_directory(), os.path.basename(xml_file)) + logger.info('Copy snap project from {}, to {}'.format(xml_file, dst)) + shutil.copyfile(xml_file, dst) + + set_snap_server_variables(find_local_ip(), port, path=get_snap_user_projects_directory()) + + @self.app.get('/') + def get_sitemap(): + out='All url paths available:
' + out+='
'.join([escape(r.rule.format()) for r in self.app.routes]) + return out + + @self.app.get('/motors/') + def get_motors(alias): + return '/'.join(rr.get_motors_list(alias)) + + @self.app.get('/motor//get/') + def get_motor_register(motor, register): + return str(rr.get_motor_register_value(motor, register)) + + @self.app.get('/motors/get/positions') + def get_motors_positions(): + get_pos = lambda m: rr.get_motor_register_value( + m, 'present_position') + msg = '/'.join('{}'.format(get_pos(m)) + for m in rr.get_motors_list()) + msg = ';'.join('{}'.format(get_pos(m)) + for m in rr.get_motors_list()) + return msg + + @self.app.get('/motors/alias') + def get_robot_aliases(): + return '/'.join('{}'.format(alias) for alias in rr.get_motors_alias()) + + @self.app.get('/motors//get/') + def get_motors_registers(motors, register): + """ Allow getting of motors register with a single http request + Be careful: with a lot of motors, it could overlap the GET max + lentgh of your web browser + """ + motors = motors.split(';') + return ';'.join(str(rr.get_register_value(m, register)) for m in motors) + + @self.app.get('/motors/set/goto/') + def set_motors_goto(motors_position_duration): + """ Allow lot of motors position settings with a single http request + Be careful: with a lot of motors, it could overlap the GET max + lentgh of your web browser + """ + for m_settings in motors_position_duration.split(';'): + settings = m_settings.split(':') + rr.set_goto_position_for_motor(settings[0], float(settings[1]), float(settings[2])) + return 'Done!' + + @self.app.get('/motors/set/registers/') + def set_motors_registers(motors_register_value): + """ Allow lot of motors register settings with a single http request + Be careful: with a lot of motors, it could overlap the GET max + lentgh of your web browser + """ + for m_settings in motors_register_value.split(';'): + motor, register, value = m_settings.split(':') + if register not in ('led'): + value = make_tuple(value) + rr.set_motor_register_value(motor, register, value) + return 'Done!' + + # TODO: delete ? + @self.app.get('/motors/set/positions/') + def set_motors_positions(positions): + positions = [float(s) for s in positions[:-1].split(';')] + for m, p in zip(rr.get_motors_list(), positions): + rr.set_motor_register_value(m, 'goal_position', p) + return 'Done!' + + @self.app.get('/motor//set//') + def set_reg(motor, register, value): + if register not in ('led'): + value = make_tuple(value) + rr.set_motor_register_value(motor, register, value) + return 'Done!' + + @self.app.get('/motor//goto//') + def set_goto(motor, position, duration): + rr.set_goto_position_for_motor( + motor, float(position), float(duration)) + return 'Done!' + + @self.app.get('/snap-blocks.xml') + def get_pypot_snap_blocks(): + with open(os.path.join(get_snap_user_projects_directory(), 'pypot-snap-blocks.xml')) as f: + return f.read() + + @self.app.get('/snap/') + def get_snap_projects(project): + with open(os.path.join(get_snap_user_projects_directory(), + '{}.xml'.format(project))) as f: + return f.read() + + @self.app.get('/ip/') + @self.app.get('/ip/') + def get_ip(host=None): + return find_local_ip(host) + + @self.app.get('/reset-simulation') + def reset_simulation(): + if hasattr(robot, 'reset_simulation'): + robot.reset_simulation() + return 'Done!' + + @self.app.get('/primitives') + def get_primitives(): + return '/'.join(rr.get_primitives_list()) + + @self.app.get('/primitives/running') + def get_running_primitives(): + return '/'.join(rr.get_running_primitives_list()) + + @self.app.get('/primitive//start') + def start_primitive(primitive): + rr.start_primitive(primitive) + return 'Done!' + + @self.app.get('/primitive//stop') + def stop_primitive(primitive): + rr.stop_primitive(primitive) + return 'Done!' + + @self.app.get('/primitive//pause') + def pause_primitive(primitive): + rr.pause_primitive(primitive) + return 'Done!' + + @self.app.get('/primitive//resume') + def resume_primitive(primitive): + rr.resume_primitive(primitive) + return 'Done!' + + @self.app.get('/primitive//properties') + def get_primitive_properties_list(primitive): + return '/'.join(rr.get_primitive_properties_list(primitive)) + + @self.app.get('/primitive//get/') + def get_primitive_property(primitive, property): + return rr.get_primitive_property(primitive, property) + + @self.app.get('/primitive//set//') + def set_primitive_property(primitive, property, value): + return rr.set_primitive_property(primitive, property, value) + + @self.app.get('/primitive//methodes') + def get_primitive_methodes_list(primitive): + return '/'.join(rr.get_primitive_methods_list(primitive)) + + @self.app.get('/primitive//call//') + @self.app.get('/primitive//call/') + def call_primitive_methode(primitive, method, args=None): + if args is not None: + kwargs = dict(item.split(":") for item in args.split(";")) + else: + kwargs = {} + return rr._call_primitive_method(primitive, method, **kwargs) + + # Hacks (no restful) to record movements + @self.app.get('/primitive/MoveRecorder//start') + def start_move_recorder(move_name): + rr.start_move_recorder(move_name) + return 'Done!' + + @self.app.get('/primitive/MoveRecorder//stop') + def stop_move_recorder(move_name): + rr.stop_move_recorder(move_name) + return 'Done!' + + @self.app.get('/primitive/MoveRecorder//attach/') + def attach_move_recorder(move_name, motors): + rr.attach_move_recorder(move_name, motors.split(';')) + return 'Done!' + + @self.app.get('/primitive/MoveRecorder//get_motors') + def get_move_recorder_motors(move_name): + motors = rr.get_move_recorder_motors(move_name) + return '/'.join(motors) if motors is not None else 'None' + + @self.app.get('/primitive/MoveRecorder//start/') + def start_move_recorder_with_motors(move_name, motors): + # raise DeprecationWarning + rr.start_move_recorder(move_name, motors.split(';')) + return 'Done!' + + @self.app.get('/primitive/MoveRecorder//remove') + def remove_move_record(move_name): + rr.remove_move_record(move_name) + return 'Done!' + + @self.app.get('/primitive/MoveRecorder') + def get_available_records(): + return '/'.join(rr.get_available_record_list()) + + @self.app.get('/primitive/MovePlayer') + def get_available_records2(): + return '/'.join(rr.get_available_record_list()) + + @self.app.get('/primitive/MovePlayer//start') + def start_move_player(move_name): + return str(rr.start_move_player(move_name)) + + @self.app.get('/primitive/MovePlayer//start/') + def start_move_player_with_speed(move_name, move_speed): + return str(rr.start_move_player(move_name, float(move_speed))) + + @self.app.get('/primitive/MovePlayer//start//backwards') + def start_move_player_backwards_with_speed(move_name, move_speed): + return str(rr.start_move_player(move_name, float(move_speed), backwards=True)) + + @self.app.get('/primitive/MovePlayer//stop') + def stop_move_player(move_name): + rr.stop_primitive('_{}_player'.format(move_name)) + return 'Done!' + + @self.app.get('/detect/') + def detect_marker(marker): + markers = { + 'tetris': [112259237], + 'caribou': [221052793], + 'lapin': [44616414], + 'rabbit': [44616414], + } + try: + detected = rr.robot.marker_detector.markers + return str(any([m.id in markers[marker] for m in detected])) + except AttributeError: + return 'Error: marker detector is not activated' + + @self.app.get('/frame.png') + def frame(): + _, img = cv2.imencode('.png', rr.robot.camera.frame) + response.set_header('Content-type', 'image/png') + return img.tobytes() + @self.app.get('/frame.png/saved_in_my_documents') + def save_frame(): + _, img = cv2.imencode('.png', rr.robot.camera.frame) + #os.makedirs("pictures_path", exist_ok=True) + cv2.imwrite("{}.png".format(datetime.datetime.now()),img) + response.set_header('Content-type', 'image/png') + return img.tobytes() + + @self.app.get('/ik//endeffector') + def ik_endeffector(chain): + c = getattr(rr.robot, chain) + pos = list(numpy.round(c.position, 4)) + return ','.join(map(str, pos)) + + @self.app.get('/ik//goto////') + def ik_goto(chain, x, y, z, duration): + c = getattr(rr.robot, chain) + c.goto([x, y, z], duration, wait=False) + return 'Done !' + + def run(self, quiet=None, server=''): + """ Start the tornado server, run forever. + 'quiet' and 'server' arguments are no longer used, they are keep only for backward compatibility + """ + + try: + loop = IOLoop() + http_server = HTTPServer(WSGIContainer(self.app)) + http_server.listen(self.port) + loop.start() + + except socket.error as serr: + # Re raise the socket error if not "[Errno 98] Address already in use" + if serr.errno != errno.EADDRINUSE: + raise serr + else: + logger.warning("""The webserver port {} is already used. +The SnapRobotServer is maybe already run or another software use this port.""".format(self.port)) diff --git a/pypot-master/pypot-master/pypot/server/snap_projects/blocs de base Poppy_FR.xml b/pypot-master/pypot-master/pypot/server/snap_projects/blocs de base Poppy_FR.xml new file mode 100644 index 0000000..cb89020 --- /dev/null +++ b/pypot-master/pypot-master/pypot/server/snap_projects/blocs de base Poppy_FR.xml @@ -0,0 +1,26 @@ +data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAADo0lEQVR4Xu3VwYtNcRjG8fc4dWsWrNzF3ShlMcVKKG5KWcxiMhtZyEJqSmEnFlMW05QspkEh2VGT1ETchbKREhI7lrK8kyJjccuNOTILf8LvOc/re/6B5/09z6dO1TRNE3w0IGqgAqCoeWI3GgAgEKQNAFBaP+EAxIC0AQBK6yccgBiQNgBAaf2EAxAD0gYAKK2fcABiQNoAAKX1Ew5ADEgbAKC0fsIBiAFpAwCU1k84ADEgbQCA0voJByAGpA0AUFo/4QDEgLQBAErrJxyAGJA2AEBp/YQDEAPSBgAorZ9wAGJA2gAApfUTDkAMSBsAoLR+wgGIAWkDAJTWTzgAMSBtAIDS+gkHIAakDQBQWj/hAMSAtAEASusnHIAYkDYAQGn9hAMQA9IGACitn3AAYkDaAACl9RMOQAxIGwCgtH7CAYgBaQMAlNZPOAAxIG0AgNL6CQcgBqQNAFBaP+EAxIC0AQBK6yccgBiQNgBAaf2EAxAD0gYAKK2fcABiQNoAAKX1Ew5ADEgbAKC0fsIBiAFpAwCU1k84ADEgbQCA0voJByAGpA0AUFo/4QDEgLQBAIrqHw6H0ev1ROntiQWgYIvxeByPry3EsYsLgvR2RQJQsMeTO1fjw2A55gbvBOntigSgYI/5Qzti0+qnmPv4K+q6FlzQnkgAFt7i/ZtX8XK2H1UV8WP7vmh+juLL129x4Ox8HD81W/gafRwAC29w9/zJWHt271/q2sTWmL7+MHbvP1j4knbEAbDgDqPRKJb2bI4t9fpG6vpkP07cehTdbrfgFe2KAmDBPQa3F+PzzQvxu4mYOHImTl++EdXff/F//AGw4PiX+tui/r4a00srsXdqpmBye6MAWGib1y+ex9sr52Jq8UFM7txVKLX9MQAstNHTlftxeOZodDqdQokeMQD02CntlQBMO63HwwDosVPaKwGYdlqPhwHQY6e0VwIw7bQeDwOgx05prwRg2mk9HgZAj53SXgnAtNN6PAyAHjulvRKAaaf1eBgAPXZKeyUA007r8TAAeuyU9koApp3W42EA9Ngp7ZUATDutx8MA6LFT2isBmHZaj4cB0GOntFcCMO20Hg8DoMdOaa8EYNppPR4GQI+d0l4JwLTTejwMgB47pb0SgGmn9XgYAD12SnslANNO6/EwAHrslPZKAKad1uNhAPTYKe2VAEw7rcfDAOixU9orAZh2Wo+HAdBjp7RXAjDttB4PA6DHTmmvBGDaaT0e9gcB/CS3My03OwAAAABJRU5ErkJggg==data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAOhUlEQVR4Xu3VwQkAAAjEMN1/abewn7jAQRC64wgQIECAAIF3gX1fNEiAAAECBAiMAHsCAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQIHLFxAWmhEwHPAAAAAElFTkSuQmCC<#1>Context >> a CommandBlockMorph ("script variables %scriptVars...") a VariableFrame {}Context >> a CommandBlockMorph ("script variables %scriptVars...") a VariableFrame {}Context >> a CommandBlockMorph ("script variables %scriptVars...") a VariableFrame {}Done les noms des moteurs faisant partie d’un groupe donné. Le bloc "tous les groupes de moteurs” permet de connaître le nom des groupes de moteurs

nom_du_groupeRenvoie une liste avec le nom de tous les moteurs du robot.
Donne la position de tous les moteurs du robot.
110i
Donner la valeur du registre défini (position, vitesse, charge, …) d’un ou de plusieurs moteurs. La zone saisie “nom_du_moteur” peut accepter : - un nom de moteur (ex : m1) - plusieurs noms de moteurs séparés avec des espaces (ex : m1 m2 m4) - une liste de moteur comme le bloc "all motors" ou le bloc “liste __”
present_positionposition=present_position +vitesse=present_speed +charge (force)=present_load +temperature=present_temperature +tension=present_voltage +lednom_du_moteurm1
Renvoie l'index d'un nom de moteur. La zone saisie “nom_du_moteur” peut accepter : - un nom de moteur (ex : m1)
nom_du_moteuri1Le moteur < > n'est pas dans les moteurs disponibles de votre robot:
Retourne l’URL du robot. Utile pour une utilisation interne seulement.
Mettre un ou plusieurs moteurs en mode compliant/libre ou rigide/commandé. Les moteurs sont manipulables à la main dans le mode compliant/libre, mais ils doivent être en mode rigide/commandé pour être contrôlé avec l’application Snap! La zone saisie “nom_du_moteur” peut accepter : - un nom de moteur (ex : m1) - plusieurs noms de moteurs séparés avec des espaces (ex : m1 m2 m4) - une liste de moteur comme le bloc "all motors" ou le bloc “liste __”
activeractiver +desactivernom_du_moteur
Mettre un ou plusieurs moteurs dans une position (angle en degrée) en un temps donné. La zone saisie “nom_du_moteur” peut accepter : - un nom de moteur (ex : m1) - plusieurs noms de moteurs séparés avec des espaces (ex : m1 m2 m4) - une liste de moteur comme le bloc "all motors" ou le bloc “liste __” “Attendre” peut être considéré comme Vrai ou Faux. - Si c’est Vrai, l’action se lancera à la suite de l’action précédente. - Si c’est Faux, l’action se lancera en même temps que l’action précédente.
nom_du_moteur02mi1querry_URL/motors/set/goto/:;#1#2:
Redémarrer le logiciel robot
robotrobot +simulation
Retourne la liste de tous les mouvements enregistrés
Take any number of input lists, and create a new list containing the items of the input lists. So APPEND [A B] [C D] where the [,,,] are lists reports the list [A B C D] not [[A B] [C D]].
11111
Reports a new list containing the items of the input list, but in the opposite order.
1inputresult
Reports a new list whose items are the same as in the input list, except that if two or more equal items appear in the input list, only the last one is kept in the result.
1
Reports a sorted version of the list in its first input slot, using the comparison function in the second input slot. For a list of numbers, using < as the comparison function will sort from low to high; using > will sort from high to low.
1even itemsmerge11#1#2
Mettre la valeur d’un registre (position, vitesse, couple max, …) d’un ou de plusieurs moteurs La zone saisie “nom_du_moteur” peut accepter : - un nom de moteur (ex : m1) - plusieurs noms de moteurs séparés avec des espaces (ex : m1 m2 m4) - une liste de moteur comme le bloc "all motors" ou le bloc “liste __”
le_registreposition=goal_position +vitesse=moving_speed +couple max(%)=torque_limit +compliant (0 ou 1)=compliant +led (enter color)=lednom_du_moteurvaleur(s)mledcompliant/motors/set/registers/::;#1#2::
Donner la liste de tous les comportements intégrés / ceux en cours.
toustous +actifs
Jouer un mouvement que vous avez enregistré (il faut indiquer le nom exact du mouvement) et indiquer la vitesse (1 est la vitesse normale) Ce bloc peut être imbriqué dans le bloc “concurrent” et dans le bloc “séquence”.
nom_du_mouvement1
Tous les blocs passés en entrée seront exécutés les uns à la suite des autres. Tous les mouvements se lancent dans l’ordre défini. Vous pouvez utiliser ce bloc pour jouer plusieurs mouvement séquentiellement.
Tous les blocs passés en entrée seront exécutés de façon parallèle. Vous pouvez utiliser ce bloc pour jouer simultanément des mouvements enregistrés
iterator1
1datamapmany1data lists
1
1
1
Takes any number of numbers as inputs (use the left and right arrowheads to adjust the number of input slots) and reports the result of adding them all, so ISUM (4) (100) (8)) reports 112.
1
Takes any number of numbers as inputs (use the left and right arrowheads to adjust the number of input slots) and reports the result of multiplying them all, so (PRODUCT (4) (100) (8)) reports 3200.
1
Takes any number of Boolean (true/false) inputs (use the left and right arrowheads to adjust the number of input slots) and reports TRUE only if all of the inputs are TRUE, otherwise FALSE. Like AND but for multiple inputs.
1
Takes any number of Boolean (true/false) inputs (use the left and right arrowheads to adjust the number of input slots) and reports TRUE if at least one input is TRUE, otherwise FALSE.
1
Arrêter l’enregistrement en cours et sauvegarder le mouvement. Attention, vous devez avoir préalablement enregistré un mouvement avec le bloc "créer & lancer enregistrement du mouvement __ avec moteur(s) __”.
nom_du_mouvement
Arrêter un mouvement qui est en train d’être joué.
nom_du_mouvement
Works as the map block (see map help), but it proceeds iterations concurently.
1
Jouer un mouvement simultanément (peut-être intégré à un bloc “concurrent” ) La zone de saisie peut être : - le nom du moteur - un bloc de type reporter comme “sequence” et “concurrent”
itemtmp_reporterTODO : understand why a sequential input blocks return items on a list rather than separated with whitespace
Jouer des mouvements séquentiellement (peut-être attaché à un bloc “séquence”). La zone de saisie peut être : - le nom du moteur ou - un bloc de type reporter comme “sequence” et “concurrent”
1
Donner la liste de tous les groupes de moteurs.
Return a sublist which contains items in the interval of 2 input numbers. Original list is not modified.
0elem1
Jouer un mouvement à l’envers à une vitesse donnée.
nom_du_mouvement1
Cliquez sur ce bloc pour vérifier que vous êtes bien connecté à votre robot
Return the index of a item in a list
i10
3.5031
Démarrer / Arrêter / Mettre en pause / Recommencer un comportement intégré dans le robot. Cela peut être une position, un mouvement, une boucle d’un moteur sensoriel, ...
démarrerdémarrer +arrêter +pause +recommencernom_du_comportement
Obtenez toutes les méthodes ou propriétées du comportement. C'est un bloc avancé.
méthodesméthodes=methodes +propriétes=propertiesnom_du_comportement
Définir que le robot est …. La zone de saisie accepte : - nom_du_robot.local (ex : poppy.local si votre robot s’appelle “Poppy”) ou - l’adresse IP du robot (ex : 123.124.145.176). Ce bloc permet de connecter l’application Snap! à votre robot.
0.1Votre robot est inaccessible
Jouer un mouvement que vous avez enregistré (il faut indiquer le nom exact du mouvement) et indiquer la vitesse (1 est la vitesse normale).
nom_du_mouvement1
Activer/désactiver les Leds du/des moteur(s) et choisissez la couleur de votre choix La zone saisie “nom_du_moteur” peut accepter : - un nom de moteur (ex : m1) - plusieurs noms de moteurs séparés avec des espaces (ex : m1 m2 m4) - une liste de moteur comme le bloc "all motors" ou le bloc “liste __”
nom_du_moteurrougeLED étteinte=off +rouge +vert +jaune +bleu +rose +cyan +blanc
Retourne un booléen (vrai/faux) selon si la carte sélectionnée est détectée par le robot.
cariboucaribou +tetris +lapin
Jouer un mouvement à l’envers à une vitesse donnée.
nom_du_mouvement1
Créer et démarrer l’enregistrement d’un mouvement des moteurs définis effectué par démonstration. La zone saisie “nom_du_moteur” peut accepter : - un nom de moteur (ex : m1) - plusieurs noms de moteurs séparés avec des espaces (ex : m1 m2 m4) - une liste de moteur comme le bloc "all motors" ou le bloc “liste __”
nom_du_mouvementnom_du_moteurmdesactiver/primitive/MoveRecorder//start/;#1#2
192.168.2.26969-1.61-53.8110.7-0.1564.3732.99mouvement 1 \ No newline at end of file diff --git a/pypot-master/pypot-master/pypot/server/snap_projects/legacy_projects/poppy-ergo-jr-lib.xml b/pypot-master/pypot-master/pypot/server/snap_projects/legacy_projects/poppy-ergo-jr-lib.xml new file mode 100644 index 0000000..a43712c --- /dev/null +++ b/pypot-master/pypot-master/pypot/server/snap_projects/legacy_projects/poppy-ergo-jr-lib.xml @@ -0,0 +1,3 @@ +
5
caribou +tetris +lapin
For internal use only
\ No newline at end of file diff --git a/pypot-master/pypot-master/pypot/server/snap_projects/legacy_projects/pypot-snap-record-orchestration-demo.xml b/pypot-master/pypot-master/pypot/server/snap_projects/legacy_projects/pypot-snap-record-orchestration-demo.xml new file mode 100644 index 0000000..e567aab --- /dev/null +++ b/pypot-master/pypot-master/pypot/server/snap_projects/legacy_projects/pypot-snap-record-orchestration-demo.xml @@ -0,0 +1,8 @@ +data:image/png;base64,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data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAOhUlEQVR4Xu3VwQkAAAjEMN1/abewn7jAQRC64wgQIECAAIF3gX1fNEiAAAECBAiMAHsCAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQIHLFxAWmhEwHPAAAAAElFTkSuQmCCHere is a little tutorial to recording moves, and how to combinate many moves together. Start by reading the comment block, and execute each block one per one. If you have questions just ask it on poppy forum : forum.poppy-project.orgNow you will see how to record many motors at once.You know how to record and replay a move. Let's play with nested records orchestration.This block is not specified to records. You can put in any reporter block and it will execute them sequentialy, one after the other. To add as many block as you want uin inputs, you have to click on the right arrow.In the same way of blocks "sequential ..." and "play sequentialy moves ...", there is a "concurent" and a "play concurently moves ..."You can now mix concurent and sequential play.my first record1my second record1Here, the second record will be play, and at the same time the first record and the second record will be play one after the orther.Bigger experiment and more miore complicated to read and understand. Don't feel silly if you don't undestand evrything, it is more a demonstration than a lesson. It will record each motor, one after another in separated move files. Each move filename is "move_" + name of the recorded motor. After that, you will be able to play sequentialy and concurently any moves combination.All reports input are run concurently. You can use this block to play concurently many recorded move<#1>Context >> a CommandBlockMorph ("script variables %scriptVars...") a VariableFrame {}Context >> a CommandBlockMorph ("script variables %scriptVars...") a VariableFrame {}Context >> a CommandBlockMorph ("script variables %scriptVars...") a VariableFrame {}Return a list of motors which are grouped in the input alias
arms
Return a list of all available motors
Return a list of all motors present positions, in the order of "$robot all motors" block list. Usefull for some advanced programs.
110i
Get the present position (angle) of the defined <motor>
motor_name
Get a defined <register> <value> of one motor. Example of some registers : torque_limit, angle_limit, present_temperature, present_position... For more informations about registers, look at the online documentation : http://$robot-project.github.io/pypot/
motor_name
Return the index of a motor name in the "$robot all motors" block list
i1
For internal use only
Compliance property make motors activly become soft and movable. You need to activate the compliance if you want to record a movement by demonstration. The motor(s) input can accept : - string of a motor name - string of many motors separed with spaces - a Snap! list of motors like the reporter block "$robot all motors"
compliantcompliant +not compliant
set motor to the desired position (angle) in the desired time. The motor(s) input can accept : - string of a motor name - string of many motors separed with spaces - a Snap! list of motors like the reporter block "$robot all motors"
00mi1/motors/set/goto/:;#1#2:
Reset the simulation in V-rep. It is usefull if you have connection issues with V-rep.
robotrobot +simulation
Return a list of all previous records filename.
Take any number of input lists, and create a new list containing the items of the input lists. So APPEND [A B] [C D] where the [,,,] are lists reports the list [A B C D] not [[A B] [C D]].
11111
Reports a new list containing the items of the input list, but in the opposite order.
1inputresult
Reports a new list whose items are the same as in the input list, except that if two or more equal items appear in the input list, only the last one is kept in the result.
1
Reports a sorted version of the list in its first input slot, using the comparison function in the second input slot. For a list of numbers, using < as the comparison function will sort from low to high; using > will sort from high to low.
1even itemsmerge11#1#2
Set a defined <value> to a defined <register> of one or many motors. Example of some registers : torque_limit, angle_limit, safe_compliant, compliant... For more informations about registers, look at the online documentation : http://$robot-project.github.io/pypot/ The motor(s) input can accept : - string of a motor name - string of many motors separed with spaces - a Snap! list of motors like the reporter block "$robot all motors"
m/motors/set/registers/::;#1#2::
allall +running
Play the movement of a previous recorded move. The <record_name> input is the name of a .record filename which should be in the same directory where you started the web server (with the command "$robot-snap $robot-ergo" for example). You can change the play speed with the <speed> input.
move name1ugly wait to stop feature. TODO : change with a looking at running primitive
All reports input are run concurently. You can use this block to play concurently many recorded move
iterator1
1datamapmany1data lists
1
1
1
Takes any number of numbers as inputs (use the left and right arrowheads to adjust the number of input slots) and reports the result of adding them all, so ISUM (4) (100) (8)) reports 112.
1
Takes any number of numbers as inputs (use the left and right arrowheads to adjust the number of input slots) and reports the result of multiplying them all, so (PRODUCT (4) (100) (8)) reports 3200.
1
Takes any number of Boolean (true/false) inputs (use the left and right arrowheads to adjust the number of input slots) and reports TRUE only if all of the inputs are TRUE, otherwise FALSE. Like AND but for multiple inputs.
1
Takes any number of Boolean (true/false) inputs (use the left and right arrowheads to adjust the number of input slots) and reports TRUE if at least one input is TRUE, otherwise FALSE.
1
Start recording the desired move record. Be careful, you must have previously defined a move record with the "create move ... with motor(s) ..." block
move name
Define a move record with the desired motors. The <record_name> input is used to store the recorded move. The move is stored in the directory where you started the web server (with the command "$robot-snap $robot-ergo" for example), and can be replayed even if you close Snap! The motor(s) input can accept : - string of a motor name - string of many motors separed with spaces - a Snap! list of motors like the reporter block "$robot all motors" If the motor(s) input is empty, all motors will be recorded.
move name21add comment here...m/primitive/MoveRecorder//attach/;#1#2
Stop recording the desired move record. Be careful, you must have previously defined a move record with the "create move ... with motor(s) ..." block
move name
move name
Works as the map block (see map help), but it proceeds iterations concurently.
1
Play previous recorded move concurently. Inputs can be : * move name (string) * many moves name separated by whitespace * any reporter block, like sequential or play sequentialy
itemtmp_reporterTODO : understand why a sequential input blocks return items on a list rather than separated with whitespace
Play previous recorded moves sequentialy. Inputs can be : * move name (string) * many moves name separated by whitespace * any reporter block like concurent or play concurently
1
Return a list of all aliases. Alias is a keyword for representing many motors at once.
Return a sublist which contains items in the interval of 2 input numbers. Original list is not modified.
0elem1
Play in reverse the movement of a previous recorded move. The <record_name> input is the name of a .record filename which should be in the same directory where you started the web server (with the command "$robot-snap $robot-ergo" for example). You can change the play speed with the <speed> input.
move name1ugly wait to stop feature. TODO : change with a looking at running primitive
Return the index of a item in a list
i10
3.5031
startstart +stop +pause +resume
methodesmethodes +properties
192.168.1.136969move_m1move_m2move_m3move_m4move_m5move_m6abs_zbust_ybust_xhead_zhead_yl_shoulder_yl_shoulder_xl_arm_zl_elbow_yr_shoulder_yr_shoulder_xr_arm_zr_elbow_y
diff --git a/pypot-master/pypot-master/pypot/server/snap_projects/poppy-base_demo_FR.xml b/pypot-master/pypot-master/pypot/server/snap_projects/poppy-base_demo_FR.xml new file mode 100644 index 0000000..895f8a3 --- /dev/null +++ b/pypot-master/pypot-master/pypot/server/snap_projects/poppy-base_demo_FR.xml @@ -0,0 +1,26 @@ +data:image/png;base64,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data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAOhUlEQVR4Xu3VwQkAAAjEMN1/abewn7jAQRC64wgQIECAAIF3gX1fNEiAAAECBAiMAHsCAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQIHLFxAWmhEwHPAAAAAElFTkSuQmCCCe projet permet de commencer à contrôler votre robot Poppy. Il fournit des raccourcis clavier pour accéder aux comportements de base de votre robot (commandé, libre, position de base, enregistrement par démonstration, ...). Cliquez sur un bloc pour l'exécuter. Si les blocs sont regroupés, ils seront exécutés séquentiellement. Les groupes de blocs sont indépendants et sont exécutés simultanément. Pour supprimer un bloc dans l'espace de travail, faites-le glisser dans la colonne de gauche. Pour prendre un nouveau bloc, faites-le glisser de la colonne de gauche vers l'espace de travail. Vous pouvez trouver tous les blocs liés au robot Poppy en utilisant le mot-clé "robot" (clic droit -> "chercher des blocs" dans la colonne de gauche). Pour lire la description d'un bloc : clic droit sur le bloc de votre choix ==> AideEnregistrez une position: vous pouvez enregistrer un mouvement dans l'ordinateur du robot avec des blocs d'enregistrement, mais vous pouvez simplement prendre une capture de la position du robot actuelle du robot. Pour cela, vous devez créer une variable: cliquez sur la section "Variables" dans la colonne de gauche, et cliquez sur "créer une variable". Vous allez chercher la position de chaque moteur et l'enregistrer dans cette variable. Vous pouvez afficher la variable dans la zone sprite (coin droit) si la case à cocher de la variable est cochée dans la section «variables». Pour revenir à cette position, vous devez utiliser le bloc "mettre moteur(s) ... en position .. en ..3" passer les positions enregistrées dans la zone de saisie. Attention, cette position est SEULEMENT enregistrée dans votre projet Snap!Vous pouvez activer un comportement qui est de base intégrée au robot. Ces comportements dépendent du robot (Poppy Ergo Jr, Poppy Torso ou Poppy Humanoid).Exemple avec le robot Poppy Ergo Jr : Le robot Ergo Jr danse pendant 10 secondesExemple avec le robot Poppy Torso Il commence un comportement de «respiration» pendant 10 secondes Le robot Poppy Ergo Jr est capable de mesurer en temps réel la position de ses moteurs. Ainsi lorsqu’on les fait bouger manuellement, il peut enregistrer les mouvements effectués pour les reproduire. Suivez les 4 étapes ci-dessous pour enregistrer et reproduire un mouvement :<#1>Context >> a CommandBlockMorph ("script variables %scriptVars...") a VariableFrame {}Context >> a CommandBlockMorph ("script variables %scriptVars...") a VariableFrame {}Context >> a CommandBlockMorph ("script variables %scriptVars...") a VariableFrame {}Done les noms des moteurs faisant partie d’un groupe donné. Le bloc "tous les groupes de moteurs” permet de connaître le nom des groupes de moteurs
nom_du_groupe
Renvoie une liste avec le nom de tous les moteurs du robot.
Donne la position de tous les moteurs du robot.
110i
Donner la valeur du registre défini (position, vitesse, charge, …) d’un ou de plusieurs moteurs. La zone saisie “nom_du_moteur” peut accepter : - un nom de moteur (ex : m1) - plusieurs noms de moteurs séparés avec des espaces (ex : m1 m2 m4) - une liste de moteur comme le bloc "all motors" ou le bloc “liste __”
positionposition=present_position +vitesse=present_speed +charge (force)=present_load +temperature=present_temperature +tension=present_voltage +lednom_du_moteurm1
Renvoie l'index d'un nom de moteur. La zone saisie “nom_du_moteur” peut accepter : - un nom de moteur (ex : m1)
nom_du_moteuri1Le moteur < > n'est pas dans les moteurs disponibles de votre robot:
Retourne l’URL du robot. Utile pour une utilisation interne seulement.
Mettre un ou plusieurs moteurs en mode compliant/libre ou rigide/commandé. Les moteurs sont manipulables à la main dans le mode compliant/libre, mais ils doivent être en mode rigide/commandé pour être contrôlé avec l’application Snap! La zone saisie “nom_du_moteur” peut accepter : - un nom de moteur (ex : m1) - plusieurs noms de moteurs séparés avec des espaces (ex : m1 m2 m4) - une liste de moteur comme le bloc "all motors" ou le bloc “liste __”
nom_du_moteurlibrecommandé +libre
Mettre un ou plusieurs moteurs dans une position (angle en degrée) en un temps donné. La zone saisie “nom_du_moteur” peut accepter : - un nom de moteur (ex : m1) - plusieurs noms de moteurs séparés avec des espaces (ex : m1 m2 m4) - une liste de moteur comme le bloc "all motors" ou le bloc “liste __” “Attendre” peut être considéré comme Vrai ou Faux. - Si c’est Vrai, l’action se lancera à la suite de l’action précédente. - Si c’est Faux, l’action se lancera en même temps que l’action précédente.
nom_du_moteur02mi1querry_URL/motors/set/goto/:;#1#2:
Redémarrer le logiciel robot
robotrobot +simulation
Retourne la liste de tous les mouvements enregistrés
Take any number of input lists, and create a new list containing the items of the input lists. So APPEND [A B] [C D] where the [,,,] are lists reports the list [A B C D] not [[A B] [C D]].
11111
Reports a new list containing the items of the input list, but in the opposite order.
1inputresult
Reports a new list whose items are the same as in the input list, except that if two or more equal items appear in the input list, only the last one is kept in the result.
1
Reports a sorted version of the list in its first input slot, using the comparison function in the second input slot. For a list of numbers, using < as the comparison function will sort from low to high; using > will sort from high to low.
1even itemsmerge11#1#2
Mettre la valeur d’un registre (position, vitesse, couple max, …) d’un ou de plusieurs moteurs La zone saisie “nom_du_moteur” peut accepter : - un nom de moteur (ex : m1) - plusieurs noms de moteurs séparés avec des espaces (ex : m1 m2 m4) - une liste de moteur comme le bloc "all motors" ou le bloc “liste __”
le_registreposition=goal_position +vitesse=moving_speed +couple max(%)=torque_limit +compliant (0 ou 1)=compliant +led (enter color)=lednom_du_moteurvaleur(s)mledcompliant/motors/set/registers/::;#1#2::
Donner la liste de tous les comportements intégrés / ceux en cours.
toustous +actifs
Jouer un mouvement que vous avez enregistré (il faut indiquer le nom exact du mouvement) et indiquer la vitesse (1 est la vitesse normale) Ce bloc peut être imbriqué dans le bloc “concurrent” et dans le bloc “séquence”.
nom_du_mouvement1
Tous les blocs passés en entrée seront exécutés les uns à la suite des autres. Tous les mouvements se lancent dans l’ordre défini. Vous pouvez utiliser ce bloc pour jouer plusieurs mouvement séquentiellement.
Tous les blocs passés en entrée seront exécutés de façon parallèle. Vous pouvez utiliser ce bloc pour jouer simultanément des mouvements enregistrés
iterator1
1datamapmany1data lists
1
1
1
Takes any number of numbers as inputs (use the left and right arrowheads to adjust the number of input slots) and reports the result of adding them all, so ISUM (4) (100) (8)) reports 112.
1
Takes any number of numbers as inputs (use the left and right arrowheads to adjust the number of input slots) and reports the result of multiplying them all, so (PRODUCT (4) (100) (8)) reports 3200.
1
Takes any number of Boolean (true/false) inputs (use the left and right arrowheads to adjust the number of input slots) and reports TRUE only if all of the inputs are TRUE, otherwise FALSE. Like AND but for multiple inputs.
1
Takes any number of Boolean (true/false) inputs (use the left and right arrowheads to adjust the number of input slots) and reports TRUE if at least one input is TRUE, otherwise FALSE.
1
Créer et démarrer l’enregistrement d’un mouvement des moteurs définis effectué par démonstration. La zone saisie “nom_du_moteur” peut accepter : - un nom de moteur (ex : m1) - plusieurs noms de moteurs séparés avec des espaces (ex : m1 m2 m4) - une liste de moteur comme le bloc "all motors" ou le bloc “liste __”
nom_du_mouvementnom_du_moteurmcompliant/primitive/MoveRecorder//start/;#1#2
Arrêter l’enregistrement en cours et sauvegarder le mouvement. Attention, vous devez avoir préalablement enregistré un mouvement avec le bloc "créer & lancer enregistrement du mouvement __ avec moteur(s) __”.
nom_du_mouvement
Arrêter un mouvement qui est en train d’être joué.
nom_du_mouvement
Works as the map block (see map help), but it proceeds iterations concurently.
1
Jouer un mouvement simultanément (peut-être intégré à un bloc “concurrent” ) La zone de saisie peut être : - le nom du moteur - un bloc de type reporter comme “sequence” et “concurrent”
itemtmp_reporterTODO : understand why a sequential input blocks return items on a list rather than separated with whitespace
Jouer des mouvements séquentiellement (peut-être attaché à un bloc “séquence”). La zone de saisie peut être : - le nom du moteur ou - un bloc de type reporter comme “sequence” et “concurrent”
1
Donner la liste de tous les groupes de moteurs.
Return a sublist which contains items in the interval of 2 input numbers. Original list is not modified.
0elem1
Jouer un mouvement à l’envers à une vitesse donnée.
nom_du_mouvement1
Cliquez sur ce bloc pour vérifier que vous êtes bien connecté à votre robot
Return the index of a item in a list
i10
3.5031
Démarrer / Arrêter / Mettre en pause / Recommencer un comportement intégré dans le robot. Cela peut être une position, un mouvement, une boucle d’un moteur sensoriel, ...
démarrerdémarrer +arrêter +pause +recommencernom_du_comportement
Obtenez toutes les méthodes ou propriétées du comportement. C'est un bloc avancé.
méthodesméthodes=methodes +propriétes=propertiesnom_du_comportement
Définir que le robot est …. La zone de saisie accepte : - nom_du_robot.local (ex : poppy.local si votre robot s’appelle “Poppy”) ou - l’adresse IP du robot (ex : 123.124.145.176). Ce bloc permet de connecter l’application Snap! à votre robot.
0.1Votre robot est inaccessible
Jouer un mouvement que vous avez enregistré (il faut indiquer le nom exact du mouvement) et indiquer la vitesse (1 est la vitesse normale).
nom_du_mouvement1
Activer/désactiver les Leds du/des moteur(s) et choisissez la couleur de votre choix La zone saisie “nom_du_moteur” peut accepter : - un nom de moteur (ex : m1) - plusieurs noms de moteurs séparés avec des espaces (ex : m1 m2 m4) - une liste de moteur comme le bloc "all motors" ou le bloc “liste __”
nom_du_moteuroffoff +rouge +vert +jaune +bleu +rose +cyan +blanc
Retourne un booléen (vrai/faux) selon si la carte sélectionnée est détectée par le robot.
cariboucaribou +tetris +lapin
Jouer un mouvement à l’envers à une vitesse donnée.
nom_du_mouvement1
poppy.local6969-0.15-49.1245.89-20.97-42.9670.23mouvement 1
\ No newline at end of file diff --git a/pypot-master/pypot-master/pypot/server/snap_projects/poppy-demo-project.xml b/pypot-master/pypot-master/pypot/server/snap_projects/poppy-demo-project.xml new file mode 100644 index 0000000..7d13136 --- /dev/null +++ b/pypot-master/pypot-master/pypot/server/snap_projects/poppy-demo-project.xml @@ -0,0 +1,24 @@ +data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAAD80lEQVR4nO3ST2ibdRzH8YdRENZ582iRSgXZomW9eKwnYQi77trevAiCUGvpynD1UGil0cTLwFNBRUl7CG0XpI0MG2KTVBKEZKfdbNnWtTzpn2Tr8/HgGumpw8Z+CHu/4MvzPPDwPF9+vANJKhaLWl9fV61Ws0ypVFIqlRJePkE+n1e1WlWtVjv12mg0lL7xmh59+nrbpv7kUev7iUTCfR44Z0E2m1WlUlG5XNalS5c0PDysZDKp0dFRjY+PK5lMqqurS5VKRYXcPYUjPTravK/974YUhY+1F/+w9Xy0eV8HP3yivdlrahZ+UmP1W9W/uKpof0fhrXcV1R/r2YOCnv6ZUdQ8VDjSo2h/p/X/crnsPg+csyCXy6lQKKhYLKq3t1cDAwMaHBzU0NCQEomE+vr61N3drY2NDa3/9qvCkR4dzI8rah5o75vrihr7refja7T3ROHNy2qsJnX08IHqt/oV7W5qb/aaomdN6ejoRIDH/y8UCu7zwDkLlpaWlMvltLa2pmq1qmKxqHK5rN3dXVWrVdXrdZVKJeXzef3+PMDDpSmFY2/pcGFc4Vjfv8/Pr9HThsKxvn9mtFeH6UmFn7+pw4UJHcx9pHDiisKJy60Aj/+fy+Xc54FzFiwuLiqbzb7QrN5NKxzpOX0+e+PF3hvp0c7Dv1rfHxsbc58HzlkgSel0WqlUSplM5tRZWVlp62QyGc3Pz2t6etp9FjAIjm+iKLIOXk7B6a8A/x8ChBUBwooAYUWAsCJAWBEgrAgQVgQIKwKEFQHCigBhRYCwIkBYESCsCBBWBAgrAoQVAcKKAGFFgLAiQFgRIKwIEFYECCsChBUBwooAYUWAsCJAWBEgrAgQVgQIKwKEFQHCigBhRYCwIkBYESCsCBBWBAgrAoQVAcKKAGFFgLAiQFgRIKwIEFYECCsChBUBwooAYUWAsCJAWBEgrAiwTVaWF90rdCQCbJPb/RfdK3QkAmyDO19/pXgsULPZdK/ScQiwDW5ffVXxWKDU93O698uy7i78rOXUj+61OgIBntH29rbiseDETH/wtnutjkGAZzR5/b0T8c18POReqaMQ4BnNxC4oHgs0+84F/ZFfc6/TcQjwDBJTXyoeC3Tzyiuq1+vudToSAZ7BZP9Fzdx4371GRyPA/2hra0tz8Sn3Gh2PAGFFgLAiQFgRIKwIEFYECCsChBUBwooAYUWAsCJAWBEgrAgQVgQIKwKEFQHCigBhRYCwIkBYESCsCBBWBAgrAoQVAcKKAGFFgLAiQFgRIKwIEFYECCsChBUBwooAYUWAsCJAWBEgrAgQVgQIKwKEFQHCigBhRYCwIkBYESCsCBBWBAgrAoTV30QP0m46I8EDAAAAAElFTkSuQmCCdata:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAACtUlEQVR4nO3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+Bo3+AAF/RMkcAAAAAElFTkSuQmCCFor a Poppy Torso It starts a "breathing" beaviour for 10 secondsFor a Poppy Ergo Jr. It starts a dance for 10 secondsYou can start directly high level behavious. These behaviours depends on the robot (Poppy Ergo Jr, Poppy Torso or Poppy Humanoid). You can record a movement by demonstration. You have to press 'r', 's', and 'p' to respectively Record, Save and Play. The movement is recorded is the robot computer, NOT in the Snap project.This Project is a perfect starter to control your Poppy robot. It provides keyboard shortcuts to acces to basic comportment of your robot (stiff, compliant, default position, record by demonstration, ...). Click on a a block to execute it. if blocks are grouped, they wil be executed sequentially. Groups of blocks are independants and are executed concurently. To delete a block in the workspace, drag & drop it to the left column. To take a new block, drag & drop it from the left column to the workspace. You can find every blocks related to Poppy robot with searching "robot" (right click -> 'find blocks' in the left column).Record a position: You can record a movement in the robot computer with record blocks, but you can simply take a snapshot of the instant position of the robot. For that, you have to create a variable: 'Variables" section in the left column, and "make a variable". You will fetch the position of every motors and save it in that variable. You can display the variable in the sprite area (right corner) if the checkbox of the variable is checked in the 'variables" section. To go again to this position, you have to use the block "set positions ... of motors ... in ..." and pass the recorded positions in input. Carefull, this position is ONLY saved in your Snap project<#1>Context >> a CommandBlockMorph ("script variables %scriptVars...") a VariableFrame {}Context >> a CommandBlockMorph ("script variables %scriptVars...") a VariableFrame {}Context >> a CommandBlockMorph ("script variables %scriptVars...") a VariableFrame {}Return a list of motors which are grouped in the input alias
group_name
Return a list of all available motors
Return a list of all motors present positions, in the order of "$robot all motors" block list. Usefull for some advanced programs.
110i
Return the index of a motor name in the "$robot all motors" block list
motor_namei1Motor < > is not in the available motors of your robot :
For internal use only
Compliance property make motors activly become soft and movable. You need to activate the compliance if you want to record a movement by demonstration. The motor(s) input can accept : - string of a motor name - string of many motors separed with spaces - a Snap! list of motors like the reporter block "$robot all motors"
motor_namecompliantcompliant +stiff
set motor to the desired position (angle) in the desired time. The motor(s) input can accept : - string of a motor name - string of many motors separed with spaces - a Snap! list of motors like the reporter block "$robot all motors"
0motor_name2mi1querry_URL/motors/set/goto/:;#1#2:
Reset the simulation in V-rep. It is usefull if you have connection issues with V-rep.
robotrobot +simulation
Return a list of all previous records filename.
Take any number of input lists, and create a new list containing the items of the input lists. So APPEND [A B] [C D] where the [,,,] are lists reports the list [A B C D] not [[A B] [C D]].
11111
Reports a new list containing the items of the input list, but in the opposite order.
1inputresult
Reports a new list whose items are the same as in the input list, except that if two or more equal items appear in the input list, only the last one is kept in the result.
1
Reports a sorted version of the list in its first input slot, using the comparison function in the second input slot. For a list of numbers, using < as the comparison function will sort from low to high; using > will sort from high to low.
1even itemsmerge11#1#2
Set a defined <value> to a defined <register> of one or many motors. Example of some registers : torque_limit, angle_limit, safe_compliant, compliant... For more informations about registers, look at the online documentation : http://$robot-project.github.io/pypot/ The motor(s) input can accept : - string of a motor name - string of many motors separed with spaces - a Snap! list of motors like the reporter block "$robot all motors"
position=goal_position +speed=moving_speed +max torque(%)=torque_limit +compliancy(True or False)=compliantmotor_namevalue(s)m/motors/set/registers/::;#1#2::
allall +running
Play the movement of a previous recorded move. The <record_name> input is the name of a .record filename which should be in the same directory where you started the web server (with the command "$robot-snap $robot-ergo" for example). You can change the play speed with the <speed> input.
move_name1ugly wait to stop feature. TODO : change with a looking at running primitive
All reports input are run concurently. You can use this block to play concurently many recorded move
iterator1
1datamapmany1data lists
1
1
1
Takes any number of numbers as inputs (use the left and right arrowheads to adjust the number of input slots) and reports the result of adding them all, so ISUM (4) (100) (8)) reports 112.
1
Takes any number of numbers as inputs (use the left and right arrowheads to adjust the number of input slots) and reports the result of multiplying them all, so (PRODUCT (4) (100) (8)) reports 3200.
1
Takes any number of Boolean (true/false) inputs (use the left and right arrowheads to adjust the number of input slots) and reports TRUE only if all of the inputs are TRUE, otherwise FALSE. Like AND but for multiple inputs.
1
Takes any number of Boolean (true/false) inputs (use the left and right arrowheads to adjust the number of input slots) and reports TRUE if at least one input is TRUE, otherwise FALSE.
1
Create and start the record of a defininied move.. The <record_name> input is used to store the recorded move. The move is stored in the directory where you started the web server (with the command "$robot-snap $robot-ergo" for example), and can be replayed even if you close Snap! The motor(s) input can accept : - string of a motor name - string of many motors separed with spaces - a Snap! list of motors like the reporter block "$robot all motors" If the motor(s) input is empty, all motors will be recorded.
move_namemcompliant/primitive/MoveRecorder//start/;#1#2
Stop recording the desired move record. Be careful, you must have previously defined a move record with the "create move ... with motor(s) ..." block
move_name
move_name
Works as the map block (see map help), but it proceeds iterations concurently.
1
Play previous recorded move concurently. Inputs can be : * move name (string) * many moves name separated by whitespace * any reporter block, like sequential or play sequentialy
itemtmp_reporterTODO : understand why a sequential input blocks return items on a list rather than separated with whitespace
Play previous recorded moves sequentialy. Inputs can be : * move name (string) * many moves name separated by whitespace * any reporter block like concurent or play concurently
1
Return a list of all aliases. Alias is a keyword for representing many motors at once.
Return a sublist which contains items in the interval of 2 input numbers. Original list is not modified.
0elem1
Play in reverse the movement of a previous recorded move. The <record_name> input is the name of a .record filename which should be in the same directory where you started the web server (with the command "$robot-snap $robot-ergo" for example). You can change the play speed with the <speed> input.
move_name1ugly wait to stop feature. TODO : change with a looking at running primitive
Return the index of a item in a list
i10
3.5031
startstart +stop +pause +resume
methodesmethodes +properties
0.1Your robot host is unreacheble
Play the movement of a previous recorded move. The <record_name> input is the name of a .record filename which should be in the same directory where you started the web server (with the command "$robot-snap $robot-ergo" for example). You can change the play speed with the <speed> input.
move_name1ugly wait to stop feature. TODO : change with a looking at running primitive
Modify the color of the LED of one or many motors. It works only with Poppy Ergo Jr.
motor_nameoffoff +red +green +yellow +blue +pink +cyan +white
Detect if a Poppy "Qrcode" is present. It works only with Poppy Ergo Jr. The camera need to be activated.
cariboucaribou +tetris +rabbit
Get a defined <register> <value> of one motor. Example of some registers : torque_limit, angle_limit, present_temperature, present_position... For more informations about registers, look at the online documentation : http://$robot-project.github.io/pypot/
present_positionposition=present_position +speed=present_speed +load (force)=present_load +temperature=present_temperature +voltage=present_voltagemotor_namem1
poppy.local696900
diff --git a/pypot-master/pypot-master/pypot/server/snap_projects/pypot-snap-blocks.xml b/pypot-master/pypot-master/pypot/server/snap_projects/pypot-snap-blocks.xml new file mode 100644 index 0000000..3733629 --- /dev/null +++ b/pypot-master/pypot-master/pypot/server/snap_projects/pypot-snap-blocks.xml @@ -0,0 +1,24 @@ +data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAADyUlEQVR4nO3Sz2vbdRzH8a9QvbQMQY+W0REvtXas/0DPQ/DgxaPpRTwKSlZDV4Z4EWq3YuKl4MmDIKQ7hBZzaCNiQ8yPQoKQ7LSbhW2s5Zu0Sbt8Xx5cI/XSHdbvK7DnA958v1/48v2++fAMJKlWq6lSqajdblumXq8rl8sJr56gXC6r1Wqp3W5feO33+8p//LYef/HOS5vO08fD72cyGfd5IGZBsVhUs9lUo9HQxMSEFhYWlM1mtbi4qKWlJWWzWY2NjanZbKpa+l1halKD/Qc6+jGpKHyi7toHw+fB/gMd//y5uvdu6qT6i/o7P6jz9Q1FRwcK78wq6jzRs4dVnf5VUHTSU5iaVHR0MPx/o9FwnwdiFpRKJVWrVdVqNU1NTWlubk7z8/NKJpPKZDJKJBIaHx/X3t6eKn/8pjA1qeONJUUnx+p+/6Gi/tHw+ewadZ8qvD2t/k5Wg0cP1blzXdHhvrr3bip6diINBucCPPt/tVp1nwdiFmxtbalUKml3d1etVku1Wk2NRkOHh4dqtVrqdDqq1+sql8v683mAva1vFabfVe/+ksJ04r/n59fotK8wnfh3FqfUy3+j8Ktr6t1f1vFPnylcfk/h8vQwwLP/l0ol93kgZsHm5qaKxeILzc6veYWpyYvn1tUXey81qYNHfw+/n06n3eeBmAWSlM/nlcvlVCgULpzt7e2XOoVCQRsbG1pZWXGfBQyCs5soiqyDV1Nw8SvA5SFAWBEgrAgQVgQIKwKEFQHCigBhRYCwIkBYESCsCBBWBAgrAoQVAcKKAGFFgLAiQFgRIKwIEFYECCsChBUBwooAYUWAsCJAWBEgrAgQVgQIKwKEFQHCigBhRYCwIkBYESCsCBBWBAgrAoQVAcKKAGFFgLAiQFgRIKwIEFYECCsChBUBwooAYUWAsCJAWBEgrAgQVgQIKwKEFQHCigBhRYCwIkBYESCsCBBWBAgrAozR7RtvulcYOQQYk/X1da3NcNz/x4nEZHX2da3NBOqEoXuVkUKAMVmbCc7N3etvuFcaCQQYg+T0W+fi+2j2qnulkUGAMbg789owvr1qxb3OSCHAS7a6ujqM7/T01L3OyCHAS/bd+2P6cuaKe42RRYCX7Nann7hXGGkECCsChBUBwooAYUWAsCJAWBEgrAgQVgQIKwKEFQHCigBhRYCwIkBYESCsCBBWBAgrAoQVAcKKAGFFgLAiQFgRIKwIEFYECCsChBUBwooAYUWAsCJAWBEgrAgQVgQIKwKEFQHCigBhRYCwIkBYESCsCBBWBAgrAoTVP0fP1TX1oxtUAAAAAElFTkSuQmCCdata:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAACtUlEQVR4nO3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+Bo3+AAF/RMkcAAAAAElFTkSuQmCC<#1>Context >> a CommandBlockMorph ("script variables %scriptVars...") a VariableFrame {}Context >> a CommandBlockMorph ("script variables %scriptVars...") a VariableFrame {}Context >> a CommandBlockMorph ("script variables %scriptVars...") a VariableFrame {}Return a list of motors which are grouped in the input alias
group_name
Return a list of all available motors
Return a list of all motors present positions, in the order of "$robot all motors" block list. Usefull for some advanced programs.
110i
Get a defined <register> <value> of one motor. Example of some registers : torque_limit, angle_limit, present_temperature, present_position... For more informations about registers, look at the online documentation : http://$robot-project.github.io/pypot/
present_positionposition=present_position +speed=present_speed +load (force)=present_load +temperature=present_temperature +voltage=present_voltagemotor_namem1
Return the index of a motor name in the "$robot all motors" block list
motor_namei1Motor < > is not in the available motors of your robot :
For internal use only
Compliance property make motors activly become soft and movable. You need to activate the compliance if you want to record a movement by demonstration. The motor(s) input can accept : - string of a motor name - string of many motors separed with spaces - a Snap! list of motors like the reporter block "$robot all motors"
motor_namecompliantcompliant +stiff
set motor to the desired position (angle) in the desired time. The motor(s) input can accept : - string of a motor name - string of many motors separed with spaces - a Snap! list of motors like the reporter block "$robot all motors"
0motor_name2mi1querry_URL/motors/set/goto/:;#1#2:
Reset the simulation in V-rep. It is usefull if you have connection issues with V-rep.
robotrobot +simulation
Return a list of all previous records filename.
Take any number of input lists, and create a new list containing the items of the input lists. So APPEND [A B] [C D] where the [,,,] are lists reports the list [A B C D] not [[A B] [C D]].
11111
Reports a new list containing the items of the input list, but in the opposite order.
1inputresult
Reports a new list whose items are the same as in the input list, except that if two or more equal items appear in the input list, only the last one is kept in the result.
1
Reports a sorted version of the list in its first input slot, using the comparison function in the second input slot. For a list of numbers, using < as the comparison function will sort from low to high; using > will sort from high to low.
1even itemsmerge11#1#2
Set a defined <value> to a defined <register> of one or many motors. Example of some registers : torque_limit, angle_limit, safe_compliant, compliant... For more informations about registers, look at the online documentation : http://$robot-project.github.io/pypot/ The motor(s) input can accept : - string of a motor name - string of many motors separed with spaces - a Snap! list of motors like the reporter block "$robot all motors"
position=goal_position +speed=moving_speed +max torque(%)=torque_limit +compliancy(True or False)=compliantmotor_namevalue(s)m/motors/set/registers/::;#1#2::
allall +running
Play the movement of a previous recorded move. The <record_name> input is the name of a .record filename which should be in the same directory where you started the web server (with the command "$robot-snap $robot-ergo" for example). You can change the play speed with the <speed> input.
move_name1ugly wait to stop feature. TODO : change with a looking at running primitive
All reports input are run concurently. You can use this block to play concurently many recorded move
iterator1
1datamapmany1data lists
1
1
1
Takes any number of numbers as inputs (use the left and right arrowheads to adjust the number of input slots) and reports the result of adding them all, so ISUM (4) (100) (8)) reports 112.
1
Takes any number of numbers as inputs (use the left and right arrowheads to adjust the number of input slots) and reports the result of multiplying them all, so (PRODUCT (4) (100) (8)) reports 3200.
1
Takes any number of Boolean (true/false) inputs (use the left and right arrowheads to adjust the number of input slots) and reports TRUE only if all of the inputs are TRUE, otherwise FALSE. Like AND but for multiple inputs.
1
Takes any number of Boolean (true/false) inputs (use the left and right arrowheads to adjust the number of input slots) and reports TRUE if at least one input is TRUE, otherwise FALSE.
1
Create and start the record of a defininied move.. The <record_name> input is used to store the recorded move. The move is stored in the directory where you started the web server (with the command "$robot-snap $robot-ergo" for example), and can be replayed even if you close Snap! The motor(s) input can accept : - string of a motor name - string of many motors separed with spaces - a Snap! list of motors like the reporter block "$robot all motors" If the motor(s) input is empty, all motors will be recorded.
move_namemcompliant/primitive/MoveRecorder//start/;#1#2
Stop recording the desired move record. Be careful, you must have previously defined a move record with the "create move ... with motor(s) ..." block
move_name
move_name
Works as the map block (see map help), but it proceeds iterations concurently.
1
Play previous recorded move concurently. Inputs can be : * move name (string) * many moves name separated by whitespace * any reporter block, like sequential or play sequentialy
itemtmp_reporterTODO : understand why a sequential input blocks return items on a list rather than separated with whitespace
Play previous recorded moves sequentialy. Inputs can be : * move name (string) * many moves name separated by whitespace * any reporter block like concurent or play concurently
1
Return a list of all aliases. Alias is a keyword for representing many motors at once.
Return a sublist which contains items in the interval of 2 input numbers. Original list is not modified.
0elem1
Play in reverse the movement of a previous recorded move. The <record_name> input is the name of a .record filename which should be in the same directory where you started the web server (with the command "$robot-snap $robot-ergo" for example). You can change the play speed with the <speed> input.
move_name1ugly wait to stop feature. TODO : change with a looking at running primitive
Return the index of a item in a list
i10
3.5031
startstart +stop +pause +resume
methodesmethodes +properties
0.1Your robot host is unreacheble
Play the movement of a previous recorded move. The <record_name> input is the name of a .record filename which should be in the same directory where you started the web server (with the command "$robot-snap $robot-ergo" for example). You can change the play speed with the <speed> input.
move_name1ugly wait to stop feature. TODO : change with a looking at running primitive
motor_nameoffoff +red +green +yellow +blue +pink +cyan +white
cariboucaribou +tetris +lapin
poppy.local6969
diff --git a/pypot-master/pypot-master/pypot/server/ws.py b/pypot-master/pypot-master/pypot/server/ws.py new file mode 100644 index 0000000..e53331f --- /dev/null +++ b/pypot-master/pypot-master/pypot/server/ws.py @@ -0,0 +1,97 @@ + + +import time +import json + +from threading import Timer + +from tornado.ioloop import IOLoop +from tornado.websocket import WebSocketHandler +from tornado.web import Application + +from .server import AbstractServer + + +class RepeatedTimer(object): + def __init__(self, interval, function, *args, **kwargs): + self._timer = None + self.interval = interval + self.function = function + self.args = args + self.kwargs = kwargs + self.is_running = False + self.start() + + def _run(self): + self.is_running = False + self.function(*self.args, **self.kwargs) + self.start() + + def start(self): + if not self.is_running: + self._timer = Timer(self.interval, self._run) + self._timer.start() + self.is_running = True + + def stop(self): + self._timer.cancel() + self.is_running = False + + +class WsSocketHandler(WebSocketHandler): + time_step = 1 / 30 + + def check_origin(self, origin): + return True + + def open(self): + if not self.quiet: + print('WebSocket connection open.') + + self.rt = RepeatedTimer(self.time_step, self.publish_robot_state) + + def on_close(self): + if not self.quiet: + print('WebSocket connection closed: {0}'.format(self.close_reason)) + self.rt.stop() + + def on_message(self, message): + if not self.quiet: + print('{}: Received {}'.format(time.time(), message)) + + self.handle_command(json.loads(message)) + + def publish_robot_state(self): + state = { + m.name: { + 'present_position': m.present_position, + 'present_speed': m.present_speed, + 'present_load': m.present_load, + 'led': m.led, + 'present_temperature': m.present_temperature, + } + for m in self.robot.motors + } + self.write_message(json.dumps(state)) + + def handle_command(self, command): + for motor, values in command.items(): + m = getattr(self.robot, motor) + + for register, value in values.items(): + setattr(m, register, value) + + +class WsRobotServer(AbstractServer): + def __init__(self, robot, host='0.0.0.0', port='9009', quiet=True): + AbstractServer.__init__(self, robot, host, port) + WsSocketHandler.robot = robot + WsSocketHandler.quiet = quiet + + def run(self): + loop = IOLoop() + app = Application([ + (r'/', WsSocketHandler) + ]) + app.listen(self.port) + loop.start() diff --git a/pypot-master/pypot-master/pypot/server/zmqserver.py b/pypot-master/pypot-master/pypot/server/zmqserver.py new file mode 100644 index 0000000..1454594 --- /dev/null +++ b/pypot-master/pypot-master/pypot/server/zmqserver.py @@ -0,0 +1,49 @@ +import zmq +import json +import logging + +from .server import AbstractServer + + +logger = logging.getLogger(__name__) + + +class ZMQRobotServer(AbstractServer): + def __init__(self, robot, host, port): + """ A ZMQServer allowing remote access of a robot instance. + + The server used the REQ/REP zmq pattern. You should always first send a request and then read the answer. + + """ + AbstractServer.__init__(self, robot, host, port) + + c = zmq.Context() + self.socket = c.socket(zmq.REP) + self.socket.bind('tcp://{}:{}'.format(self.host, self.port)) + + logger.info('Starting ZMQServer on tcp://%s:%s', self.host, self.port) + + def run(self): + """ Run an infinite REQ/REP loop. """ + while True: + req = self.socket.recv_json() + + try: + answer = self.handle_request(req) + self.socket.send(json.dumps(answer)) + + except (AttributeError, TypeError) as e: + self.socket.send_json({'error': str(e)}) + + def handle_request(self, request): + meth_name, kwargs = request['robot'].popitem() + meth = getattr(self.restful_robot, meth_name) + + for key in ('value', 'args'): + if key in kwargs: + kwargs[key] = json.loads(kwargs[key]) + + ret = meth(**kwargs) + ret = {} if ret is None else ret + + return ret diff --git a/pypot-master/pypot-master/pypot/tools/__init__.py b/pypot-master/pypot-master/pypot/tools/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pypot-master/pypot-master/pypot/tools/dxlconfig.py b/pypot-master/pypot-master/pypot/tools/dxlconfig.py new file mode 100644 index 0000000..234ca28 --- /dev/null +++ b/pypot-master/pypot-master/pypot/tools/dxlconfig.py @@ -0,0 +1,173 @@ +#!/usr/bin/env python + + + +""" + +Dynamixel Motor configuration. + +First, it runs a factory reset. And then apply the configuration given as parameter. + +*** WARNING: Make sure only motor is connected to the bus! Otherwise they will ALL be reset to their factory settings. *** + +Examples: +dxlconfig --type=MX-28 --id=23 --angle-limit=(-100, 100) --zeroposition --port=/dev/ttyAMA0 +dxlconfig --help + +""" + +import sys +import time + +from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter + +from pypot.dynamixel.conversion import dynamixelModels +from pypot.dynamixel import DxlIO, Dxl320IO, get_available_ports +from pypot.utils import flushed_print as print + + +def check(pred, msg): + if not pred: + print(msg) + print('Exiting now...') + sys.exit(1) + + +def main(): + available_ports = get_available_ports() + default_port = available_ports[0] if available_ports else None + parser = ArgumentParser(description='Configuration tool for dynamixel motors ' + 'WARNING: ONLY ONE MOTOR SHOULD BE ' + 'CONNECTED TO THE BUS WHEN CONFIGURING!', + formatter_class=ArgumentDefaultsHelpFormatter) + + parser.add_argument('--id', type=int, required=True, + help='Chosen motor id.') + parser.add_argument('--type', type=str, required=True, + choices=list(dynamixelModels.values()), + help='Type of the motor to configure.') + parser.add_argument('--port', type=str, + choices=available_ports + ['auto'], default=default_port, + help='Serial port connected to the motor.') + parser.add_argument('--return-delay-time', type=int, + help='Set new return delay time.') + parser.add_argument('--wheel-mode', type=bool, default=False, + help='Set wheel mode.') + parser.add_argument('--angle-limit', type=float, nargs=2, + help='Set new angle limit.') + parser.add_argument('--goto-zero', action='store_true', + help='Go to zero position after configuring the motor') + parser.add_argument('--timeout', type=int, default=2, + help='Timeout for the motor config (seconds)') + args = parser.parse_args() + + check(1 <= args.id <= 253, + 'Motor id must be in range [1:253]') + + check(available_ports, + 'Could not find an available serial port!') + + protocol = 2 if args.type in 'XL-320' else 1 + serial_port = default_port if args.port == "auto" else args.port + DxlIOPort = DxlIO if protocol == 1 else Dxl320IO + + # Factory Reset + print('Factory reset, you must see the motor LED flickering 4 times') + if protocol == 1: + print("Using protocol 1...") + for br in [57600, 1000000]: + with DxlIO(serial_port, baudrate=br, timeout=0.01) as io: + io.factory_reset() + else: + print("Using protocol 2...") + with Dxl320IO(serial_port, baudrate=1000000, timeout=0.01) as io: + io.factory_reset(ids=list(range(253))) + print('Done!') + + factory_baudrate = 57600 if args.type.startswith('MX') else 1000000 + + # Wait for the motor to "reboot..." + for _ in range(10): + with DxlIOPort(serial_port, baudrate=factory_baudrate, timeout=args.timeout) as io: + if io.ping(1): + break + + time.sleep(.5) + else: + print('Could not communicate with the motor...') + print('Make sure one (and only one) is connected and try again') + print('If the issue persists, use Dynamixel wizard to attempt a firmware recovery') + sys.exit(1) + + # Switch to 1M bauds + if args.type.startswith('MX') or args.type.startswith('SR'): + print('Changing to 1M bauds...') + with DxlIO(serial_port, baudrate=factory_baudrate, timeout=args.timeout) as io: + io.change_baudrate({1: 1000000}) + + time.sleep(.5) + print('Done!') + + # Change id + print('Changing id to {}...'.format(args.id)) + if args.id != 1: + with DxlIOPort(serial_port, timeout=args.timeout) as io: + io.change_id({1: args.id}) + + time.sleep(.5) + check(io.ping(args.id), + 'Could not change id to {}'.format(args.id)) + print('Done!') + + # Set return delay time + if args.return_delay_time is not None: + print('Changing return delay time to {}...'.format(args.return_delay_time)) + with DxlIOPort(serial_port, timeout=args.timeout) as io: + io.set_return_delay_time({args.id: args.return_delay_time}) + + time.sleep(.5) + check(io.get_return_delay_time([args.id])[0] == args.return_delay_time, + 'Could not set return delay time to {}'.format(args.return_delay_time)) + print('Done!') + + # Set wheel Mode + if args.wheel_mode == True: + print('Set wheel mode') + with DxlIOPort(serial_port, timeout=args.timeout) as io: + io.set_control_mode({args.id :'wheel'}) + + time.sleep(.5) + check(io.get_control_mode([args.id])[0] == 'wheel', + 'Could not set wheel Mode') + print('Done!') + + + # Set Angle Limit + if args.angle_limit is not None: + print('Changing angle limit to {}...'.format(args.angle_limit)) + with DxlIOPort(serial_port, timeout=args.timeout) as io: + io.set_angle_limit({args.id: args.angle_limit}) + + time.sleep(.5) + check(all(map(lambda p1, p2: abs(p1 - p2) < 1., + io.get_angle_limit([args.id])[0], + args.angle_limit)), + 'Could not change angle limit to {}'.format(args.angle_limit)) + print('Done!') + + # GOTO ZERO + if args.goto_zero: + print('Going to position 0...') + with DxlIOPort(serial_port, timeout=args.timeout) as io: + io.set_moving_speed({args.id: 100.0}) + io.set_goal_position({args.id: 0.0}) + + time.sleep(2.0) + check(abs(io.get_present_position([args.id])[0]) < 5, + 'Could not go to 0 position') + + print('Done!') + + +if __name__ == '__main__': + main() diff --git a/pypot-master/pypot-master/pypot/utils/__init__.py b/pypot-master/pypot-master/pypot/utils/__init__.py new file mode 100644 index 0000000..b69410f --- /dev/null +++ b/pypot-master/pypot-master/pypot/utils/__init__.py @@ -0,0 +1,58 @@ +from collections import namedtuple +from operator import attrgetter +from threading import Event + +from .stoppablethread import StoppableThread, StoppableLoopThread +from .pypot_time import time +from .flushed_print import flushed_print + +Point2D = namedtuple('Point2D', ('x', 'y')) +Point3D = namedtuple('Point3D', ('x', 'y', 'z')) +Point = Point3D + +Vector3D = namedtuple('Vector3D', ('x', 'y', 'z')) +Vector = Vector3D + +Quaternion = namedtuple('Quaternion', ('x', 'y', 'z', 'w')) + + +def attrsetter(item): + def resolve_attr(obj, attr): + if not attr: + return obj + for name in attr.split('.'): + obj = getattr(obj, name) + return obj + + def g(obj, value): + var_path, _, var_name = item.rpartition('.') + setattr(resolve_attr(obj, var_path), var_name, value) + + return g + + +class SyncEvent(object): + def __init__(self, period=.1): + self._event = Event() + self._needed = False + + self._last_sync = 0. + self.period = period + + def request(self): + self._needed = True + self._event.wait() + self._event.clear() + + def done(self): + self._event.set() + self._last_sync = time() + self._needed = False + + @property + def is_recent(self): + return (time() - self._last_sync) < self.period + + @property + def needed(self): + return self._needed and not self.is_recent diff --git a/pypot-master/pypot-master/pypot/utils/appdirs.py b/pypot-master/pypot-master/pypot/utils/appdirs.py new file mode 100644 index 0000000..9038b17 --- /dev/null +++ b/pypot-master/pypot-master/pypot/utils/appdirs.py @@ -0,0 +1,566 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (c) 2005-2010 ActiveState Software Inc. +# Copyright (c) 2013 Eddy Petrișor + +"""Utilities for determining application-specific dirs. + +See for details and usage. +""" +import sys +import os +# Dev Notes: +# - MSDN on where to store app data files: +# http://support.microsoft.com/default.aspx?scid=kb;en-us;310294#XSLTH3194121123120121120120 +# - Mac OS X: http://developer.apple.com/documentation/MacOSX/Conceptual/BPFileSystem/index.html +# - XDG spec for Un*x: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html + +__version_info__ = (1, 4, 1) +__version__ = '.'.join(map(str, __version_info__)) + + +if sys.platform.startswith('java'): + import platform + os_name = platform.java_ver()[3][0] + if os_name.startswith('Windows'): # "Windows XP", "Windows 7", etc. + system = 'win32' + elif os_name.startswith('Mac'): # "Mac OS X", etc. + system = 'darwin' + else: # "Linux", "SunOS", "FreeBSD", etc. + # Setting this to "linux2" is not ideal, but only Windows or Mac + # are actually checked for and the rest of the module expects + # *sys.platform* style strings. + system = 'linux2' +else: + system = sys.platform + + +def user_data_dir(appname=None, appauthor=None, version=None, roaming=False): + r"""Return full path to the user-specific data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + + for a discussion of issues. + + Typical user data directories are: + Mac OS X: ~/Library/Application Support/ + Unix: ~/.local/share/ # or in $XDG_DATA_HOME, if defined + Win XP (not roaming): C:\Documents and Settings\\Application Data\\ + Win XP (roaming): C:\Documents and Settings\\Local Settings\Application Data\\ + Win 7 (not roaming): C:\Users\\AppData\Local\\ + Win 7 (roaming): C:\Users\\AppData\Roaming\\ + + For Unix, we follow the XDG spec and support $XDG_DATA_HOME. + That means, by default "~/.local/share/". + """ + if system == "win32": + if appauthor is None: + appauthor = appname + const = roaming and "CSIDL_APPDATA" or "CSIDL_LOCAL_APPDATA" + path = os.path.normpath(_get_win_folder(const)) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + elif system == 'darwin': + path = os.path.expanduser('~/Library/Application Support/') + if appname: + path = os.path.join(path, appname) + else: + path = os.getenv('XDG_DATA_HOME', os.path.expanduser("~/.local/share")) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def site_data_dir(appname=None, appauthor=None, version=None, multipath=False): + """Return full path to the user-shared data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "multipath" is an optional parameter only applicable to *nix + which indicates that the entire list of data dirs should be + returned. By default, the first item from XDG_DATA_DIRS is + returned, or '/usr/local/share/', + if XDG_DATA_DIRS is not set + + Typical user data directories are: + Mac OS X: /Library/Application Support/ + Unix: /usr/local/share/ or /usr/share/ + Win XP: C:\Documents and Settings\All Users\Application Data\\ + Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.) + Win 7: C:\ProgramData\\ # Hidden, but writeable on Win 7. + + For Unix, this is using the $XDG_DATA_DIRS[0] default. + + WARNING: Do not use this on Windows. See the Vista-Fail note above for why. + """ + if system == "win32": + if appauthor is None: + appauthor = appname + path = os.path.normpath(_get_win_folder("CSIDL_COMMON_APPDATA")) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + elif system == 'darwin': + path = os.path.expanduser('/Library/Application Support') + if appname: + path = os.path.join(path, appname) + else: + # XDG default for $XDG_DATA_DIRS + # only first, if multipath is False + path = os.getenv('XDG_DATA_DIRS', + os.pathsep.join(['/usr/local/share', '/usr/share'])) + pathlist = [ + os.path.expanduser( + x.rstrip( + os.sep)) for x in path.split( + os.pathsep)] + if appname: + if version: + appname = os.path.join(appname, version) + pathlist = [os.sep.join([x, appname]) for x in pathlist] + + if multipath: + path = os.pathsep.join(pathlist) + else: + path = pathlist[0] + return path + + if appname and version: + path = os.path.join(path, version) + return path + + +def user_config_dir(appname=None, appauthor=None, version=None, roaming=False): + r"""Return full path to the user-specific config dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "roaming" (boolean, default False) can be set True to use the Windows + roaming appdata directory. That means that for users on a Windows + network setup for roaming profiles, this user data will be + sync'd on login. See + + for a discussion of issues. + + Typical user data directories are: + Mac OS X: same as user_data_dir + Unix: ~/.config/ # or in $XDG_CONFIG_HOME, if defined + Win *: same as user_data_dir + + For Unix, we follow the XDG spec and support $XDG_CONFIG_HOME. + That means, by deafult "~/.config/". + """ + if system in ["win32", "darwin"]: + path = user_data_dir(appname, appauthor, None, roaming) + else: + path = os.getenv('XDG_CONFIG_HOME', os.path.expanduser("~/.config")) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def site_config_dir( + appname=None, appauthor=None, version=None, multipath=False): + """Return full path to the user-shared data dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "multipath" is an optional parameter only applicable to *nix + which indicates that the entire list of config dirs should be + returned. By default, the first item from XDG_CONFIG_DIRS is + returned, or '/etc/xdg/', if XDG_CONFIG_DIRS is not set + + Typical user data directories are: + Mac OS X: same as site_data_dir + Unix: /etc/xdg/ or $XDG_CONFIG_DIRS[i]/ for each value in + $XDG_CONFIG_DIRS + Win *: same as site_data_dir + Vista: (Fail! "C:\ProgramData" is a hidden *system* directory on Vista.) + + For Unix, this is using the $XDG_CONFIG_DIRS[0] default, if multipath=False + + WARNING: Do not use this on Windows. See the Vista-Fail note above for why. + """ + if system in ["win32", "darwin"]: + path = site_data_dir(appname, appauthor) + if appname and version: + path = os.path.join(path, version) + else: + # XDG default for $XDG_CONFIG_DIRS + # only first, if multipath is False + path = os.getenv('XDG_CONFIG_DIRS', '/etc/xdg') + pathlist = [ + os.path.expanduser( + x.rstrip( + os.sep)) for x in path.split( + os.pathsep)] + if appname: + if version: + appname = os.path.join(appname, version) + pathlist = [os.sep.join([x, appname]) for x in pathlist] + + if multipath: + path = os.pathsep.join(pathlist) + else: + path = pathlist[0] + return path + + +def user_cache_dir(appname=None, appauthor=None, version=None, opinion=True): + r"""Return full path to the user-specific cache dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "opinion" (boolean) can be False to disable the appending of + "Cache" to the base app data dir for Windows. See + discussion below. + + Typical user cache directories are: + Mac OS X: ~/Library/Caches/ + Unix: ~/.cache/ (XDG default) + Win XP: C:\Documents and Settings\\Local Settings\Application Data\\\Cache + Vista: C:\Users\\AppData\Local\\\Cache + + On Windows the only suggestion in the MSDN docs is that local settings go in + the `CSIDL_LOCAL_APPDATA` directory. This is identical to the non-roaming + app data dir (the default returned by `user_data_dir` above). Apps typically + put cache data somewhere *under* the given dir here. Some examples: + ...\Mozilla\Firefox\Profiles\\Cache + ...\Acme\SuperApp\Cache\1.0 + OPINION: This function appends "Cache" to the `CSIDL_LOCAL_APPDATA` value. + This can be disabled with the `opinion=False` option. + """ + if system == "win32": + if appauthor is None: + appauthor = appname + path = os.path.normpath(_get_win_folder("CSIDL_LOCAL_APPDATA")) + if appname: + if appauthor is not False: + path = os.path.join(path, appauthor, appname) + else: + path = os.path.join(path, appname) + if opinion: + path = os.path.join(path, "Cache") + elif system == 'darwin': + path = os.path.expanduser('~/Library/Caches') + if appname: + path = os.path.join(path, appname) + else: + path = os.getenv('XDG_CACHE_HOME', os.path.expanduser('~/.cache')) + if appname: + path = os.path.join(path, appname) + if appname and version: + path = os.path.join(path, version) + return path + + +def user_log_dir(appname=None, appauthor=None, version=None, opinion=True): + r"""Return full path to the user-specific log dir for this application. + + "appname" is the name of application. + If None, just the system directory is returned. + "appauthor" (only used on Windows) is the name of the + appauthor or distributing body for this application. Typically + it is the owning company name. This falls back to appname. You may + pass False to disable it. + "version" is an optional version path element to append to the + path. You might want to use this if you want multiple versions + of your app to be able to run independently. If used, this + would typically be ".". + Only applied when appname is present. + "opinion" (boolean) can be False to disable the appending of + "Logs" to the base app data dir for Windows, and "log" to the + base cache dir for Unix. See discussion below. + + Typical user cache directories are: + Mac OS X: ~/Library/Logs/ + Unix: ~/.cache//log # or under $XDG_CACHE_HOME if defined + Win XP: C:\Documents and Settings\\Local Settings\Application Data\\\Logs + Vista: C:\Users\\AppData\Local\\\Logs + + On Windows the only suggestion in the MSDN docs is that local settings + go in the `CSIDL_LOCAL_APPDATA` directory. (Note: I'm interested in + examples of what some windows apps use for a logs dir.) + + OPINION: This function appends "Logs" to the `CSIDL_LOCAL_APPDATA` + value for Windows and appends "log" to the user cache dir for Unix. + This can be disabled with the `opinion=False` option. + """ + if system == "darwin": + path = os.path.join( + os.path.expanduser('~/Library/Logs'), + appname) + elif system == "win32": + path = user_data_dir(appname, appauthor, version) + version = False + if opinion: + path = os.path.join(path, "Logs") + else: + path = user_cache_dir(appname, appauthor, version) + version = False + if opinion: + path = os.path.join(path, "log") + if appname and version: + path = os.path.join(path, version) + return path + + +class AppDirs(object): + + """Convenience wrapper for getting application dirs.""" + + def __init__(self, appname, appauthor=None, version=None, roaming=False, + multipath=False): + self.appname = appname + self.appauthor = appauthor + self.version = version + self.roaming = roaming + self.multipath = multipath + + @property + def user_data_dir(self): + return user_data_dir(self.appname, self.appauthor, + version=self.version, roaming=self.roaming) + + @property + def site_data_dir(self): + return site_data_dir(self.appname, self.appauthor, + version=self.version, multipath=self.multipath) + + @property + def user_config_dir(self): + return user_config_dir(self.appname, self.appauthor, + version=self.version, roaming=self.roaming) + + @property + def site_config_dir(self): + return site_config_dir(self.appname, self.appauthor, + version=self.version, multipath=self.multipath) + + @property + def user_cache_dir(self): + return user_cache_dir(self.appname, self.appauthor, + version=self.version) + + @property + def user_log_dir(self): + return user_log_dir(self.appname, self.appauthor, + version=self.version) + + +# internal support stuff + +def _get_win_folder_from_registry(csidl_name): + """This is a fallback technique at best. I'm not sure if using the + registry for this guarantees us the correct answer for all CSIDL_* + names. + """ + import winreg + + shell_folder_name = { + "CSIDL_APPDATA": "AppData", + "CSIDL_COMMON_APPDATA": "Common AppData", + "CSIDL_LOCAL_APPDATA": "Local AppData", + }[csidl_name] + + key = winreg.OpenKey( + winreg.HKEY_CURRENT_USER, + r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" + ) + dir, type = winreg.QueryValueEx(key, shell_folder_name) + return dir + + +def _get_win_folder_with_pywin32(csidl_name): + from win32com.shell import shellcon, shell + dir = shell.SHGetFolderPath(0, getattr(shellcon, csidl_name), 0, 0) + # Try to make this a unicode path because SHGetFolderPath does + # not return unicode strings when there is unicode data in the + # path. + try: + dir = str(dir) + + # Downgrade to short path name if have highbit chars. See + # . + has_high_char = False + for c in dir: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + try: + import win32api + dir = win32api.GetShortPathName(dir) + except ImportError: + pass + except UnicodeError: + pass + return dir + + +def _get_win_folder_with_ctypes(csidl_name): + import ctypes + + csidl_const = { + "CSIDL_APPDATA": 26, + "CSIDL_COMMON_APPDATA": 35, + "CSIDL_LOCAL_APPDATA": 28, + }[csidl_name] + + buf = ctypes.create_unicode_buffer(1024) + ctypes.windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf) + + # Downgrade to short path name if have highbit chars. See + # . + has_high_char = False + for c in buf: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + buf2 = ctypes.create_unicode_buffer(1024) + if ctypes.windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024): + buf = buf2 + + return buf.value + + +def _get_win_folder_with_jna(csidl_name): + import array + from com.sun import jna + from com.sun.jna.platform import win32 + + buf_size = win32.WinDef.MAX_PATH * 2 + buf = array.zeros('c', buf_size) + shell = win32.Shell32.INSTANCE + shell.SHGetFolderPath( + None, + getattr( + win32.ShlObj, + csidl_name), + None, + win32.ShlObj.SHGFP_TYPE_CURRENT, + buf) + dir = jna.Native.toString(buf.tostring()).rstrip("\0") + + # Downgrade to short path name if have highbit chars. See + # . + has_high_char = False + for c in dir: + if ord(c) > 255: + has_high_char = True + break + if has_high_char: + buf = array.zeros('c', buf_size) + kernel = win32.Kernel32.INSTANCE + if kernel.GetShortPathName(dir, buf, buf_size): + dir = jna.Native.toString(buf.tostring()).rstrip("\0") + + return dir + +if system == "win32": + try: + import win32com.shell + _get_win_folder = _get_win_folder_with_pywin32 + except ImportError: + try: + from ctypes import windll + _get_win_folder = _get_win_folder_with_ctypes + except ImportError: + try: + import com.sun.jna + _get_win_folder = _get_win_folder_with_jna + except ImportError: + _get_win_folder = _get_win_folder_from_registry + + +# self test code + +if __name__ == "__main__": + appname = "MyApp" + appauthor = "MyCompany" + + props = ("user_data_dir", "site_data_dir", + "user_config_dir", "site_config_dir", + "user_cache_dir", "user_log_dir") + + print("-- app dirs %s --" % __version__) + + print("-- app dirs (with optional 'version')") + dirs = AppDirs(appname, appauthor, version="1.0") + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (without optional 'version')") + dirs = AppDirs(appname, appauthor) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (without optional 'appauthor')") + dirs = AppDirs(appname) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) + + print("\n-- app dirs (with disabled 'appauthor')") + dirs = AppDirs(appname, appauthor=False) + for prop in props: + print("%s: %s" % (prop, getattr(dirs, prop))) diff --git a/pypot-master/pypot-master/pypot/utils/flushed_print.py b/pypot-master/pypot-master/pypot/utils/flushed_print.py new file mode 100644 index 0000000..478d27c --- /dev/null +++ b/pypot-master/pypot-master/pypot/utils/flushed_print.py @@ -0,0 +1,11 @@ + +import sys + + +def flushed_print(*args, **kwargs): + """ + Use to replace print(*args, flush=True) that doesn't exist for python<3.3 + """ + print(*args, **kwargs) + file = kwargs.get('file', sys.stdout) + file.flush() if file is not None else sys.stdout.flush() diff --git a/pypot-master/pypot-master/pypot/utils/i2c_controller.py b/pypot-master/pypot-master/pypot/utils/i2c_controller.py new file mode 100644 index 0000000..3b84304 --- /dev/null +++ b/pypot-master/pypot-master/pypot/utils/i2c_controller.py @@ -0,0 +1,29 @@ +import smbus +import threading + + +class I2cController(object): + used_bus = {} + + def __init__(self, pin_number): + if pin_number not in I2cController.used_bus: + I2cController.used_bus[pin_number] = smbus.SMBus(pin_number) + + self.bus = I2cController.used_bus[pin_number] + self.lock = threading.Lock() + + def read_byte_data(self, addr, cmd): + with self.lock: + return self.bus.read_byte_data(addr, cmd) + + def write_byte_data(self, addr, cmd, val): + with self.lock: + return self.bus.write_byte_data(addr, cmd, val) + + def read_word_data(self, addr, cmd): + with self.lock: + return self.bus.read_word_data(addr, cmd) + + def write_word_data(self, addr, cmd, val): + with self.lock: + return self.bus.write_word_data(addr, cmd, val) diff --git a/pypot-master/pypot-master/pypot/utils/interpolation.py b/pypot-master/pypot-master/pypot/utils/interpolation.py new file mode 100644 index 0000000..2ee8002 --- /dev/null +++ b/pypot-master/pypot-master/pypot/utils/interpolation.py @@ -0,0 +1,114 @@ +from scipy.spatial import cKDTree +from scipy.interpolate import interp1d +import numpy as np + + +class KDTreeDict(dict): + + def __init__(self, gen_tree_on_add=False, distance_upper_bound=0.2, k_neighbors=2): + super(KDTreeDict, self).__init__() + self.gen_tree_on_add = gen_tree_on_add + self.distance_upper_bound = distance_upper_bound + self.k_neighbors = k_neighbors + self.__keys = [] + self.__tree = None + self.__stale = False + + def __setitem__(self, key, val): + + if not isinstance(key, tuple): + _key = (key,) + if _key not in self.__keys: + self.__keys.append(_key) + self.__stale = True + if self.gen_tree_on_add: + self.generate_tree() + super(KDTreeDict, self).__setitem__(key, val) + + def __getitem__(self, key): + # if not isinstance(key, tuple): + # key = (key,) + return super(KDTreeDict, self).__getitem__(key) + + + def __len__(self): + return len(self.__keys) + + def update(self, *args, **kwargs): + if len(args) > 1: + raise TypeError("update expected at most 1 arguments, got %d" % len(args)) + other = dict(*args, **kwargs) + for key in other: + self[key] = other[key] + + def generate_tree(self): + self.__tree = cKDTree(self.__keys) + self.__stale = False + + def nearest_keys(self, key): + """Find the nearest_keys (l2 distance) as strings thanks to a cKDTree query""" + if not isinstance(key, tuple): + _key = (key,) + if self.__stale: + self.generate_tree() + d, idx = self.__tree.query( + _key, self.k_neighbors, distance_upper_bound=self.distance_upper_bound) + + try: + return [self.__keys[id][0] for id in idx if id < len(self.__keys)] + except TypeError: + # if k_neighbors = 1 query is not returnng arrays + return self.__keys[idx] + + def interpolate_motor_positions(self, input_key, nearest_keys): + """ + Process linear interpolation to estimate current speed and position of motors + Method specific to the :meth:~pypot.primitive.move.Move.position() structure + it is a KDTreeDict[timestamp] = {dict[motor]=(position,speed)} + + :param input_key: string of a float as returned by cKDTree.query() + :param nearest_keys: 2-tuples of strings of a float as returned by cKDTree.query() + """ + + # WARNING: input_key and nearest_keys are string encoding floats as returned by cKDTree + # TODO: to be rewrited with more style (map ?) + + if len(nearest_keys) == 1: + return self[nearest_keys[0]] + elif len(nearest_keys) == 0: + raise KeyError('key {} exceed distance_upper_bound {}'.format( + input_key, self.distance_upper_bound)) + elif len(nearest_keys) != 2: + raise NotImplementedError("interpolation works only for k_neighbors = 2") + elif nearest_keys[0] == nearest_keys[1]: + # Bug from nearest key ? + return self[nearest_keys[0]] + # Problem if ValueError: A value in x_new is above the interpolation range. + else: + float_nearest_keys = [float(k) for k in nearest_keys] + float_input_key = float(input_key) + if float_input_key < min(float_nearest_keys): + return self[min(float_nearest_keys)] + elif float_input_key > max(float_nearest_keys): + return self[max(float_nearest_keys)] + else: + interpolated_positions = {} + for (k, v), (k2, v2) in zip(self[nearest_keys[0]].items(), self[nearest_keys[1]].items()): + if k == k2: + x = np.array(float_nearest_keys) + y_pos = np.array([v[0], v2[0]]) + y_speed = np.array([v[1], v2[1]]) + f_pos = interp1d(x, y_pos, bounds_error=False) + f_speed = interp1d(x, y_speed, bounds_error=False) + + pos = f_pos(float_input_key) + speed = f_speed(float_input_key) + interpolated_positions[k] = (pos, speed) + else: + raise IndexError("key are not identics. Motor added during the record ?") + return interpolated_positions + + def __missing__(self, key): + if key is None: + raise SyntaxError('invalid syntax, you must provide a key') + return self.interpolate_motor_positions(key, self.nearest_keys(key)) diff --git a/pypot-master/pypot-master/pypot/utils/pypot_time.py b/pypot-master/pypot-master/pypot/utils/pypot_time.py new file mode 100644 index 0000000..ce293e6 --- /dev/null +++ b/pypot-master/pypot-master/pypot/utils/pypot_time.py @@ -0,0 +1,12 @@ +import time as system_time + + +def time(): + return system_time.time() + + +def sleep(t): + if t > 10: + print('WARNING: big sleep', t) + t = 0.1 + system_time.sleep(t) diff --git a/pypot-master/pypot-master/pypot/utils/stoppablethread.py b/pypot-master/pypot-master/pypot/utils/stoppablethread.py new file mode 100644 index 0000000..8ad250f --- /dev/null +++ b/pypot-master/pypot-master/pypot/utils/stoppablethread.py @@ -0,0 +1,209 @@ +import threading + +from . import pypot_time as time + + +class StoppableThread(object): + """ Stoppable version of python Thread. + + This class provides the following mechanism on top of "classical" python Thread: + * you can stop the thread (if you defined your run method accordingly). + * you can restart a thread (stop it and re-run it) + * you can pause/resume a thread + + .. warning:: It is up to the subclass to correctly respond to the stop, pause/resume signals (see :meth:`~pypot.utils.stoppablethread.StoppableThread.run` for details). + + """ + def __init__(self, setup=None, target=None, teardown=None): + """ + :param func setup: specific setup function to use (otherwise self.setup) + :param func target: specific target function to use (otherwise self.run) + :param func teardown: specific teardown function to use (otherwise self.teardown) + + """ + self._started = threading.Event() + self._running = threading.Event() + self._resume = threading.Event() + + self._setup = self.setup if setup is None else setup + self._target = self.run if target is None else target + self._teardown = self.teardown if teardown is None else teardown + self._crashed = False + + def start(self): + """ Start the run method as a new thread. + + It will first stop the thread if it is already running. + + """ + if self.running: + self.stop() + + self._thread = threading.Thread(target=self._wrapped_target) + self._thread.daemon = True + self._thread.start() + + def stop(self, wait=True): + """ Stop the thread. + + More precisely, sends the stopping signal to the thread. It is then up to the run method to correctly responds. + + """ + if self.started: + self._running.clear() + self._resume.set() + + # We cannot wait for ourself + if wait and (threading.current_thread() != self._thread): + while self._thread.is_alive(): + self._running.clear() + self._resume.set() + self._thread.join(timeout=1.0) + + self._started.clear() + self._resume.clear() + + def join(self): + """ Wait for the thread termination. """ + if not self.started: + raise RuntimeError('cannot join thread before it is started') + self._thread.join() + + @property + def running(self): + """ Whether the thread is running. """ + return self._running.is_set() + + @property + def started(self): + """ Whether the thread has been started. """ + return self._started.is_set() + + def wait_to_start(self, allow_failure=False): + """ Wait for the thread to actually starts. """ + self._started.wait() + + if self._crashed and not allow_failure: + self._thread.join() + raise RuntimeError('Setup failed, see {} Traceback' + 'for details.'.format(self._thread.name)) + + def should_stop(self): + """ Signals if the thread should be stopped or not. """ + return not self.running + + def wait_to_stop(self): + """ Wait for the thread to terminate. """ + if not self.started: + self.wait_to_start() + self.join() + + def setup(self): + """ Setup method call just before the run. """ + pass + + def run(self): + """ Run method of the thread. + + .. note:: In order to be stoppable (resp. pausable), this method has to check the running property - as often as possible to improve responsivness - and terminate when :meth:`~pypot.utils.stoppablethread.StoppableThread.should_stop` (resp. :meth:`~pypot.utils.stoppablethread.StoppableThread.should_pause`) becomes True. + For instance:: + + while self.should_stop(): + do_atom_work() + ... + + """ + pass + + def teardown(self): + """ Teardown method call just after the run. """ + pass + + def _wrapped_target(self): + try: + self._setup() + + self._started.set() + self._resume.set() + + self._running.set() + self._target() + self._running.clear() + + self._teardown() + # In case something goes wrong within the thread + # we try/catch the exceptions + # clear all Condition locks (to avoid blocking main thread) + # and re-raise exception for backtrace + except Exception: + self._crashed = True + self._started.set() + self._running.clear() + self._resume.clear() + raise + + def should_pause(self): + """ Signals if the thread should be paused or not. """ + return self.paused + + @property + def paused(self): + return not self._resume.is_set() + + def pause(self): + """ Requests the thread to pause. """ + self._resume.clear() + + def resume(self): + """ Requests the thread to resume. """ + self._resume.set() + + def wait_to_resume(self): + """ Waits until the thread is resumed. """ + self._resume.wait() + + +def make_update_loop(thread, update_func): + """ Makes a run loop which calls an update function at a predefined frequency. """ + while not thread.should_stop(): + if thread.should_pause(): + thread.wait_to_resume() + + start = time.time() + if hasattr(thread, '_updated'): + thread._updated.clear() + update_func() + if hasattr(thread, '_updated'): + thread._updated.set() + end = time.time() + + dt = thread.period - (end - start) + + if dt > 0: + time.sleep(dt) + + +class StoppableLoopThread(StoppableThread): + """ LoopThread calling an update method at a pre-defined frequency. + + .. note:: This class does not mean to be accurate. The given frequency will be approximately followed - depending for instance on CPU load - and only reached if the update method takes less time than the chosen loop period. + + """ + def __init__(self, frequency, update=None): + """ + :params float frequency: called frequency of the :meth:`~pypot.stoppablethread.StoppableLoopThread.update` method + + """ + StoppableThread.__init__(self) + + self.period = 1.0 / frequency + self._update = self.update if update is None else update + self._updated = threading.Event() + + def run(self): + """ Called the update method at the pre-defined frequency. """ + make_update_loop(self, self._update) + + def update(self): + """ Update method called at the pre-defined frequency. """ + pass diff --git a/pypot-master/pypot-master/pypot/utils/trajectory.py b/pypot-master/pypot-master/pypot/utils/trajectory.py new file mode 100644 index 0000000..fa09fa6 --- /dev/null +++ b/pypot-master/pypot-master/pypot/utils/trajectory.py @@ -0,0 +1,109 @@ + + +import numpy +import collections.abc + +import pypot.utils.pypot_time as time +from ..utils.stoppablethread import StoppableLoopThread + + +class MinimumJerkTrajectory(object): + def __init__(self, initial, final, duration, init_vel=0.0, init_acc=0.0, final_vel=0.0, final_acc=0.0): + self.initial = initial + self.final = final + self.duration = duration + self.init_vel = init_vel + self.init_acc = init_acc + self.final_vel = final_vel + self.final_acc = final_acc + + self.durations = [0, duration] + self.finals = [final] + + self.compute() + + def compute(self): # N'Guyen's magic + a0 = self.initial + a1 = self.init_vel + a2 = self.init_acc / 2.0 + d = lambda x: self.duration ** x + + A = numpy.array([[d(3), d(4), d(5)], [3 * d(2), 4 * d(3), 5 * d(4)], [6 * d(1), 12 * d(2), 20 * d(3)]]) + B = numpy.array([self.final - a0 - (a1 * d(1)) - (a2 * d(2)), self.final_vel - a1 - (2 * a2 * d(1)), self.final_acc - (2 * a2)]) + X = numpy.linalg.solve(A, B) + + self.other_gen = None + + self._mylambda = lambda x: a0 + a1 * x + a2 * x ** 2 + X[0] * x ** 3 + X[1] * x ** 4 + X[2] * x ** 5 + + self._generators = [self._mylambda] + + def get_value(self, t): + return self._mygenerator[-1](t) + + def domain(self, x): + if not isinstance(x, collections.abc.Iterable): + x = numpy.array([x]) + + return numpy.array([ + self.durations[0] <= xi < self.durations[1] + for xi in x + ]) + + def test_domain(self, x): + return [((numpy.array(x) >= self.durations[i])) for i in range(len(self.durations) - 1)] + + def fix_input(self, x): + return x if isinstance(x, collections.abc.Iterable) else numpy.array([0, x]) + + def get_generator(self): + return lambda x: numpy.piecewise(x, self.domain(x), [self._generators[j] for j in range(len(self._generators))] + [self.finals[-1]]) + + +class GotoMinJerk(StoppableLoopThread): + def __init__(self, motor, position, duration, frequency=50): + StoppableLoopThread.__init__(self, frequency) + + self.motor = motor + self.goal = position # dict { 'motor1_name': x1, 'motor2_name': x2 } + self.duration = duration # seconds + + def setup(self): + if self.duration < numpy.finfo(float).eps: + self.motor.goal_position = self.goal + self.stop() + else: + self.trajs = MinimumJerkTrajectory(self.motor.present_position, self.goal, self.duration).get_generator() + self.t0 = time.time() + + def update(self): + if numpy.finfo(float).eps < self.duration > self.elapsed_time: + self.motor.goal_position = self.trajs(self.elapsed_time) + else: + self.stop(wait=False) + + @property + def elapsed_time(self): + return time.time() - self.t0 + + +class GotoLinear(StoppableLoopThread): + def __init__(self, motor, position, duration, frequency=50): + StoppableLoopThread.__init__(self, frequency) + + self.motor = motor + + nb_step = round(duration * frequency) + start = motor.goal_position + end = position + + self.positions = numpy.linspace(start, end, nb_step + 1)[1:] + self.positions = iter(self.positions) + + def update(self): + try: + p = next(self.positions) + self.motor.goal_position = p + + except StopIteration: + self.stop(wait=False) diff --git a/pypot-master/pypot-master/pypot/vpl/__init__.py b/pypot-master/pypot-master/pypot/vpl/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pypot-master/pypot-master/pypot/vpl/download.py b/pypot-master/pypot-master/pypot/vpl/download.py new file mode 100644 index 0000000..bae350d --- /dev/null +++ b/pypot-master/pypot-master/pypot/vpl/download.py @@ -0,0 +1,67 @@ +import sys +import tempfile +from wget import download +from urllib.error import URLError +from zipfile import ZipFile +from pathlib import Path + +def get_pypot_datadir(app_name="pypot"): + """ + Returns pypot's directory for peristent data. + Attempt creation if create==True. + + # linux: ~/.local/share + # macOS: ~/Library/Application Support + # windows: C:/Users//AppData/Roaming + """ + home = Path.home() + + if sys.platform == "win32": + data_dir = home / "AppData/Roaming" + elif sys.platform == "linux": + data_dir = home / ".local/share" + elif sys.platform == "darwin": + data_dir = home / "Library/Application Support" + else: + raise ValueError("Can't find the user data directory of your platform '{}'".format(sys.platform)) + + #app_name = app_name if version is None else app_name + "-" + str(version) + pypot_dir = data_dir / app_name + return pypot_dir + + +def download_vpl_interactively(vpl_app_name, vpl_app_url, extract=False): + """ + Download the specified Visual Programming langage web app and returns its path. + If it couldn't be downloaded, return None + """ + pypot_datadir = get_pypot_datadir() + vpl_dir = pypot_datadir / vpl_app_name + actual_vpl_dir = vpl_dir / vpl_app_name if extract else vpl_dir + + if vpl_dir.is_dir(): + return actual_vpl_dir + else: + while True: + response = input("This is the first time you are launching {}, it needs to be downloaded first. Proceed? [Y/n] ".format(vpl_app_name)) + if response.lower() in ["y", ""]: + try: + vpl_dir.mkdir(parents=True) + except FileExistsError: + pass + print("Downloading...") + try: + downloaded_app = download(vpl_app_url, tempfile.gettempdir()) + except URLError as e: + print("Cannot download the {} app from {}: {}".format(vpl_app_name, vpl_app_url, str(e)), file=sys.stderr) + else: + try: + with ZipFile(downloaded_app, 'r') as archive: + archive.extractall(vpl_dir) + except FileNotFoundError: + print("Couldn't extract {} from zipfile".format(vpl_app_name)) + else: + return actual_vpl_dir + else: + print("Download aborted by user", file=sys.stderr) + return None diff --git a/pypot-master/pypot-master/pypot/vpl/scratch.py b/pypot-master/pypot-master/pypot/vpl/scratch.py new file mode 100644 index 0000000..fb3b5b7 --- /dev/null +++ b/pypot-master/pypot-master/pypot/vpl/scratch.py @@ -0,0 +1,13 @@ +from .download import download_vpl_interactively + +# Scratch latest release download to local data directory in userspace +VPL_APP_URL = "https://github.com/poppy-project/scratch-poppy/releases/latest/download/scratch-application.zip" +VPL_APP_NAME = "scratch-application" +VPL_EXTRACT_ZIP_ROOT = True + +def download_scratch_interactively(): + """ + Download the Scratch v1.0-beta Programming language web app and returns its path. + If it couldn't be downloaded, return None + """ + return download_vpl_interactively(VPL_APP_NAME, VPL_APP_URL, VPL_EXTRACT_ZIP_ROOT) diff --git a/pypot-master/pypot-master/pypot/vpl/snap.py b/pypot-master/pypot-master/pypot/vpl/snap.py new file mode 100644 index 0000000..02171dc --- /dev/null +++ b/pypot-master/pypot-master/pypot/vpl/snap.py @@ -0,0 +1,13 @@ +from .download import download_vpl_interactively + +# Snap 5.4.5 application download to local data directory in userspace +VPL_APP_URL = "https://codeload.github.com/jmoenig/Snap/zip/v5.4.5" +VPL_APP_NAME = "Snap-5.4.5" +VPL_EXTRACT_ZIP_ROOT = True + +def download_snap_interactively(): + """ + Download the Snap 5.4.5 Programming langage web app and returns its path. + If it couldn't be downloaded, return None + """ + return download_vpl_interactively(VPL_APP_NAME, VPL_APP_URL, VPL_EXTRACT_ZIP_ROOT) diff --git a/pypot-master/pypot-master/pypot/vrep/__init__.py b/pypot-master/pypot-master/pypot/vrep/__init__.py new file mode 100644 index 0000000..1564a18 --- /dev/null +++ b/pypot-master/pypot-master/pypot/vrep/__init__.py @@ -0,0 +1,176 @@ +import json +import logging + +from functools import partial +from collections import OrderedDict + +from .io import (VrepIO, close_all_connections, + VrepIOError, VrepConnectionError) + +from .controller import VrepController, VrepObjectTracker +from .controller import VrepCollisionTracker, VrepCollisionDetector + +from ..robot import Robot +from ..robot.sensor import ObjectTracker +from ..robot.config import motor_from_confignode, make_alias + + +import pypot.utils.pypot_time as pypot_time +import time as sys_time + +logger = logging.getLogger(__name__) + + +class vrep_time(): + def __init__(self, vrep_io): + self.io = vrep_io + + def get_time(self, trial=0): + t = self.io.get_simulation_current_time() + + if t == 0: + sys_time.sleep(.5) + return self.get_time(trial + 1) + + if trial > 10: + raise EnvironmentError('Could not get current simulation time. Make sure the V-REP simulation is running. And that you have added the "time" child script to your scene.') + + return t + + def sleep(self, t): + if t > 1000: # That's probably due to an error in get_time + logger.warning('Big vrep sleep: {}'.format(t)) + t = 1 + + t0 = self.get_time() + while (self.get_time() - t0) < t: + if self.get_time() < t0: + break + sys_time.sleep(0.01) + + +def from_vrep(config, vrep_host='127.0.0.1', vrep_port=19997, scene=None, + tracked_objects=[], tracked_collisions=[], + id=None, shared_vrep_io=None): + """ Create a robot from a V-REP instance. + + :param config: robot configuration (either the path to the json or directly the dictionary) + :type config: str or dict + :param str vrep_host: host of the V-REP server + :param int vrep_port: port of the V-REP server + :param str scene: path to the V-REP scene to load and start + :param list tracked_objects: list of V-REP dummy object to track + :param list tracked_collisions: list of V-REP collision to track + :param int id: robot id in simulator (useful when using a scene with multiple robots) + :param vrep_io: use an already connected VrepIO (useful when using a scene with multiple robots) + :type vrep_io: :class:`~pypot.vrep.io.VrepIO` + + This function tries to connect to a V-REP instance and expects to find motors with names corresponding as the ones found in the config. + + .. note:: The :class:`~pypot.robot.robot.Robot` returned will also provide a convenience reset_simulation method which resets the simulation and the robot position to its intial stance. + + .. note:: Using the same configuration, you should be able to switch from a real to a simulated robot just by switching from :func:`~pypot.robot.config.from_config` to :func:`~pypot.vrep.from_vrep`. + For instance:: + + import json + + with open('my_config.json') as f: + config = json.load(f) + + from pypot.robot import from_config + from pypot.vrep import from_vrep + + real_robot = from_config(config) + simulated_robot = from_vrep(config, '127.0.0.1', 19997, 'poppy.ttt') + + """ + if shared_vrep_io is None: + vrep_io = VrepIO(vrep_host, vrep_port) + else: + vrep_io = shared_vrep_io + + vreptime = vrep_time(vrep_io) + pypot_time.time = vreptime.get_time + pypot_time.sleep = vreptime.sleep + + if isinstance(config, str): + with open(config) as f: + config = json.load(f, object_pairs_hook=OrderedDict) + + motors = [motor_from_confignode(config, name) + for name in config['motors'].keys()] + + vc = VrepController(vrep_io, scene, motors, id=id) + vc._init_vrep_streaming() + + sensor_controllers = [] + + if tracked_objects: + sensors = [ObjectTracker(name) for name in tracked_objects] + vot = VrepObjectTracker(vrep_io, sensors) + sensor_controllers.append(vot) + + if tracked_collisions: + sensors = [VrepCollisionDetector(name) for name in tracked_collisions] + vct = VrepCollisionTracker(vrep_io, sensors) + sensor_controllers.append(vct) + + robot = Robot(motor_controllers=[vc], + sensor_controllers=sensor_controllers) + + for m in robot.motors: + m.goto_behavior = 'minjerk' + + init_pos = {m: m.goal_position for m in robot.motors} + + make_alias(config, robot) + + def start_simu(): + vrep_io.start_simulation() + + for m, p in init_pos.items(): + m.goal_position = p + + vc.start() + + if tracked_objects: + vot.start() + + if tracked_collisions: + vct.start() + + while vrep_io.get_simulation_current_time() < 1.: + sys_time.sleep(0.1) + + def stop_simu(): + if tracked_objects: + vot.stop() + + if tracked_collisions: + vct.stop() + + vc.stop() + vrep_io.stop_simulation() + + def reset_simu(): + stop_simu() + sys_time.sleep(0.5) + start_simu() + + robot.start_simulation = start_simu + robot.stop_simulation = stop_simu + robot.reset_simulation = reset_simu + + def current_simulation_time(robot): + return robot._controllers[0].io.get_simulation_current_time() + Robot.current_simulation_time = property(lambda robot: current_simulation_time(robot)) + + def get_object_position(robot, object, relative_to_object=None): + return vrep_io.get_object_position(object, relative_to_object) + Robot.get_object_position = partial(get_object_position, robot) + + def get_object_orientation(robot, object, relative_to_object=None): + return vrep_io.get_object_orientation(object, relative_to_object) + Robot.get_object_orientation = partial(get_object_orientation, robot) + + return robot diff --git a/pypot-master/pypot-master/pypot/vrep/child_script/inject_code.lua b/pypot-master/pypot-master/pypot/vrep/child_script/inject_code.lua new file mode 100644 index 0000000..b76f7fd --- /dev/null +++ b/pypot-master/pypot-master/pypot/vrep/child_script/inject_code.lua @@ -0,0 +1,67 @@ +-- DO NOT WRITE CODE OUTSIDE OF THE if-then-end SECTIONS BELOW!! (unless the code is a function definition) + +if (sim_call_type==sim_childscriptcall_initialization) then + + -- Put some initialization code here + + -- Make sure you read the section on "Accessing general-type objects programmatically" + -- For instance, if you wish to retrieve the handle of a scene object, use following instruction: + -- + -- handle=simGetObjectHandle('sceneObjectName') + -- + -- Above instruction retrieves the handle of 'sceneObjectName' if this script's name has no '#' in it + -- + -- If this script's name contains a '#' (e.g. 'someName#4'), then above instruction retrieves the handle of object 'sceneObjectName#4' + -- This mechanism of handle retrieval is very convenient, since you don't need to adjust any code when a model is duplicated! + -- So if the script's name (or rather the name of the object associated with this script) is: + -- + -- 'someName', then the handle of 'sceneObjectName' is retrieved + -- 'someName#0', then the handle of 'sceneObjectName#0' is retrieved + -- 'someName#1', then the handle of 'sceneObjectName#1' is retrieved + -- ... + -- + -- If you always want to retrieve the same object's handle, no matter what, specify its full name, including a '#': + -- + -- handle=simGetObjectHandle('sceneObjectName#') always retrieves the handle of object 'sceneObjectName' + -- handle=simGetObjectHandle('sceneObjectName#0') always retrieves the handle of object 'sceneObjectName#0' + -- handle=simGetObjectHandle('sceneObjectName#1') always retrieves the handle of object 'sceneObjectName#1' + -- ... + -- + -- Refer also to simGetCollisionhandle, simGetDistanceHandle, simGetIkGroupHandle, etc. + -- + -- Following 2 instructions might also be useful: simGetNameSuffix and simSetNameSuffix + +end + + +if (sim_call_type==sim_childscriptcall_actuation) then + + -- Put your main ACTUATION code here + + -- For example: + -- + -- local position=simGetObjectPosition(handle,-1) + -- position[1]=position[1]+0.001 + -- simSetObjectPosition(handle,-1,position) + + luacode = simGetStringSignal('my_lua_code') + if (luacode) then + f = loadstring(luacode) + f() + simClearStringSignal('my_lua_code') + end +end + + +if (sim_call_type==sim_childscriptcall_sensing) then + + -- Put your main SENSING code here + +end + + +if (sim_call_type==sim_childscriptcall_cleanup) then + + -- Put some restoration code here + +end diff --git a/pypot-master/pypot-master/pypot/vrep/child_script/timer.lua b/pypot-master/pypot-master/pypot/vrep/child_script/timer.lua new file mode 100644 index 0000000..caa954f --- /dev/null +++ b/pypot-master/pypot-master/pypot/vrep/child_script/timer.lua @@ -0,0 +1,41 @@ +-- DO NOT WRITE CODE OUTSIDE OF THE if-then-end SECTIONS BELOW!! + +if (sim_call_type==sim_childscriptcall_initialization) then + simSetScriptAttribute(sim_handle_self,sim_childscriptattribute_automaticcascadingcalls,false) +end + + +if (sim_call_type==sim_childscriptcall_actuation) then + if not firstTimeHere93846738 then + firstTimeHere93846738=0 + end + simSetScriptAttribute(sim_handle_self,sim_scriptattribute_executioncount,firstTimeHere93846738) + firstTimeHere93846738=firstTimeHere93846738+1 + +------------------------------------------------------------------------------ + + +-- Check the end of the script for some explanations! + if (simGetScriptExecutionCount()==0) then + + end + + simHandleChildScripts(sim_call_type) + + local currentTime=simGetSimulationTime() + + simSetFloatSignal('CurrentTime',currentTime) + +end + + +if (sim_call_type==sim_childscriptcall_sensing) then + simHandleChildScripts(sim_call_type) +end + + +if (sim_call_type==sim_childscriptcall_cleanup) then + + -- Put some restoration code here + +end diff --git a/pypot-master/pypot-master/pypot/vrep/controller.py b/pypot-master/pypot-master/pypot/vrep/controller.py new file mode 100644 index 0000000..99d48f8 --- /dev/null +++ b/pypot-master/pypot-master/pypot/vrep/controller.py @@ -0,0 +1,184 @@ +from numpy import rad2deg, deg2rad +from collections import deque + +from ..robot.controller import MotorsController, SensorsController +from ..dynamixel.conversion import torque_max +from ..robot.sensor import Sensor +from .io import remote_api + + +class VrepController(MotorsController): + + """ V-REP motors controller. """ + + def __init__(self, vrep_io, scene, motors, sync_freq=50., id=None): + """ + :param vrep_io: vrep io instance + :type vrep_io: :class:`~pypot.vrep.io.VrepIO` + :param str scene: path to the V-REP scene file to start + :param list motors: list of motors attached to the controller + :param float sync_freq: synchronization frequency + :param int id: robot id in simulator (useful when using a scene with multiple robots) + + """ + MotorsController.__init__(self, vrep_io, motors, sync_freq) + + self.id = id + + if scene is not None: + vrep_io.load_scene(scene, start=True) + + def setup(self): + """ Setups the controller by reading/setting position for all motors. """ + self._init_vrep_streaming() + + # Init lifo for temperature spoofing + for m in self.motors: + m.__dict__['_load_fifo'] = deque(200 * [1], maxlen=200) + + self.update() + + def update(self): + """ Synchronization update loop. + + At each update all motor position are read from vrep and set to the motors. The motors target position are also send to v-rep. + + """ + # Read all the angle limits + h, _, l, _ = self.io.call_remote_api('simxGetObjectGroupData', + remote_api.sim_object_joint_type, + 16, + streaming=True) + limits4handle = {hh: (ll, lr) for hh, ll, lr in zip(h, l[::2], l[1::2])} + + for m in self.motors: + tmax = torque_max[m.model] + + # Read values from V-REP and set them to the Motor + p = round( + rad2deg(self.io.get_motor_position(motor_name=self._motor_name(m))), 1) + m.__dict__['present_position'] = p + + l = 100. * self.io.get_motor_force(motor_name=self._motor_name(m)) / tmax + m.__dict__['present_load'] = l + + m.__dict__['_load_fifo'].append(abs(l)) + m.__dict__['present_temperature'] = 25 + \ + round(2.5 * sum(m.__dict__['_load_fifo']) / len(m.__dict__['_load_fifo']), 1) + + ll, lr = limits4handle[self.io._object_handles[self._motor_name(m)]] + m.__dict__['lower_limit'] = rad2deg(ll) + m.__dict__['upper_limit'] = rad2deg(ll) + rad2deg(lr) + + # Send new values from Motor to V-REP + p = deg2rad(round(m.__dict__['goal_position'], 1)) + self.io.set_motor_position(motor_name=self._motor_name(m), position=p) + + t = m.__dict__['torque_limit'] * tmax / 100. + + if m.__dict__['compliant']: + t = 0. + + self.io.set_motor_force(motor_name=self._motor_name(m), force=t) + + def _init_vrep_streaming(self): + # While the code below may look redundant and that + # it could be simplified. It is written as such to + # speed-up the initialization of the streaming process. + # Here, we initalized all streaming and then wait for + # them to be ready at once. + + # Prepare streaming for getting position for each motor + for m in self.motors: + for vrep_call in ['simxGetJointPosition', 'simxGetJointForce']: + self.io.call_remote_api(vrep_call, + self.io.get_object_handle(self._motor_name(m)), + streaming=True, + _force=True) + + # Now actually retrieves all values + pos = [self.io.get_motor_position(self._motor_name(m)) for m in self.motors] + + # Prepare streaming for setting position for each motor + for m, p in zip(self.motors, pos): + self.io.call_remote_api('simxSetJointTargetPosition', + self.io.get_object_handle(self._motor_name(m)), + p, + sending=True, + _force=True) + + for m in self.motors: + self.io.call_remote_api('simxSetJointForce', + self.io.get_object_handle(self._motor_name(m)), + torque_max[m.model], + sending=True, + _force=True) + + # Prepare streaming for the angle limit + self.io.call_remote_api('simxGetObjectGroupData', + remote_api.sim_object_joint_type, + 16, + streaming=True, + _force=True) + + # And actually affect them + for m, p in zip(self.motors, pos): + self.io.set_motor_position(self._motor_name(m), p) + m.__dict__['goal_position'] = rad2deg(p) + + for m in self.motors: + self.io.set_motor_force(self._motor_name(m), torque_max[m.model]) + m.__dict__['torque_limit'] = 100. + m.__dict__['compliant'] = False + + def _motor_name(self, m): + if self.id is None: + return m.name + else: + return '{}{}'.format(m.name, self.id) + + +class VrepObjectTracker(SensorsController): + + """ Tracks the 3D position and orientation of a V-REP object. """ + + def setup(self): + """ Forces a first update to trigger V-REP streaming. """ + self.update() + + def update(self): + """ Updates the position and orientation of the tracked objects. """ + for s in self.sensors: + s.position = self.io.get_object_position(object_name=s.name) + s.orientation = self.io.get_object_orientation(object_name=s.name) + + +class VrepCollisionDetector(Sensor): + + def __init__(self, name): + Sensor.__init__(self, name) + + self._colliding = False + + @property + def colliding(self): + return self._colliding + + @colliding.setter + def colliding(self, new_state): + self._colliding = new_state + + +class VrepCollisionTracker(SensorsController): + + """ Tracks collision state. """ + + def setup(self): + """ Forces a first update to trigger V-REP streaming. """ + self.update() + + def update(self): + """ Update the state of the collision detectors. """ + + for s in self.sensors: + s.colliding = self.io.get_collision_state(collision_name=s.name) diff --git a/pypot-master/pypot-master/pypot/vrep/io.py b/pypot-master/pypot-master/pypot/vrep/io.py new file mode 100644 index 0000000..7ea7091 --- /dev/null +++ b/pypot-master/pypot-master/pypot/vrep/io.py @@ -0,0 +1,395 @@ +import os +import time +import ctypes + +from threading import Lock + +from .remoteApiBindings import vrep as remote_api +from ..robot.io import AbstractIO + + +vrep_error = { + remote_api.simx_return_ok: 'Ok', + remote_api.simx_return_novalue_flag: 'No value', + remote_api.simx_return_timeout_flag: 'Timeout', + remote_api.simx_return_illegal_opmode_flag: 'Opmode error', + remote_api.simx_return_remote_error_flag: 'Remote error', + remote_api.simx_return_split_progress_flag: 'Progress error', + remote_api.simx_return_local_error_flag: 'Local error', + remote_api.simx_return_initialize_error_flag: 'Init error' +} + +vrep_mode = { + 'normal': remote_api.simx_opmode_oneshot_wait, + 'streaming': remote_api.simx_opmode_streaming, + 'sending': remote_api.simx_opmode_oneshot, +} + + +class VrepIO(AbstractIO): + + """ This class is used to get/set values from/to a V-REP scene. + + It is based on V-REP remote API (http://www.coppeliarobotics.com/helpFiles/en/remoteApiOverview.htm). + + """ + MAX_ITER = 5 + TIMEOUT = 0.4 + + def __init__(self, vrep_host='127.0.0.1', vrep_port=19997, scene=None, start=False): + """ Starts the connection with the V-REP remote API server. + + :param str vrep_host: V-REP remote API server host + :param int vrep_port: V-REP remote API server port + :param str scene: path to a V-REP scene file + :param bool start: whether to start the scene after loading it + + .. warning:: Only one connection can be established with the V-REP remote server API. So before trying to connect make sure that all previously started connections have been closed (see :func:`~pypot.vrep.io.close_all_connections`) + + """ + self._object_handles = {} + self._lock = Lock() + + self.vrep_host = vrep_host + self.vrep_port = vrep_port + self.scene = scene + self.start = start + + # self.client_id = remote_api.simxStart( + # vrep_host, vrep_port, True, True, 5000, 5) + # if self.client_id == -1: + # msg = ('Could not connect to V-REP server on {}:{}. ' + # 'This could also means that you still have ' + # 'a previously opened connection running! ' + # '(try pypot.vrep.close_all_connections())') + # raise VrepConnectionError(msg.format(vrep_host, vrep_port)) + + # if scene is not None: + # self.load_scene(scene, start) + + self.open_io() + + def open_io(self): + self.client_id = remote_api.simxStart( + self.vrep_host, self.vrep_port, True, True, 5000, 5) + if self.client_id == -1: + msg = ('Could not connect to V-REP server on {}:{}. ' + 'This could also means that you still have ' + 'a previously opened connection running! ' + '(try pypot.vrep.close_all_connections())') + raise VrepConnectionError( + msg.format(self.vrep_host, self.vrep_port)) + + if self.scene is not None: + self.load_scene(self.scene, self.start) + + def close(self): + """ Closes the current connection. """ + with self._lock: + remote_api.simxFinish(self.client_id) + + def load_scene(self, scene_path, start=False): + """ Loads a scene on the V-REP server. + + :param str scene_path: path to a V-REP scene file + :param bool start: whether to directly start the simulation after loading the scene + + .. note:: It is assumed that the scene file is always available on the server side. + + """ + self.stop_simulation() + + if not os.path.exists(scene_path): + raise IOError("No such file or directory: '{}'".format(scene_path)) + + self.call_remote_api('simxLoadScene', scene_path, True) + + if start: + self.start_simulation() + + def start_simulation(self): + """ Starts the simulation. + + .. note:: Do nothing if the simulation is already started. + + .. warning:: if you start the simulation just after stopping it, the simulation will likely not be started. Use :meth:`~pypot.vrep.io.VrepIO.restart_simulation` instead. + """ + self.call_remote_api('simxStartSimulation') + + # We have to force a sleep + # Otherwise it may causes troubles?? + time.sleep(0.5) + + def restart_simulation(self): + """ Re-starts the simulation. """ + self.stop_simulation() + # We have to force a sleep + # Otherwise the simulation is not restarted + time.sleep(0.5) + self.start_simulation() + + def stop_simulation(self): + """ Stops the simulation. """ + self.call_remote_api('simxStopSimulation') + + def pause_simulation(self): + """ Pauses the simulation. """ + self.call_remote_api('simxPauseSimulation') + + def resume_simulation(self): + """ Resumes the simulation. """ + self.start_simulation() + + def get_motor_position(self, motor_name): + """ Gets the motor current position. """ + return self.call_remote_api('simxGetJointPosition', + self.get_object_handle(motor_name), + streaming=True) + + def set_motor_position(self, motor_name, position): + """ Sets the motor target position. """ + self.call_remote_api('simxSetJointTargetPosition', + self.get_object_handle(motor_name), + position, + sending=True) + + def get_motor_force(self, motor_name): + """ Retrieves the force or torque applied to a joint along/about its active axis. """ + return self.call_remote_api('simxGetJointForce', + self.get_object_handle(motor_name), + streaming=True) + + def set_motor_force(self, motor_name, force): + """ Sets the maximum force or torque that a joint can exert. """ + self.call_remote_api('simxSetJointForce', + self.get_object_handle(motor_name), + force, + sending=True) + + def get_object_position(self, object_name, relative_to_object=None): + """ Gets the object position. """ + h = self.get_object_handle(object_name) + relative_handle = (-1 if relative_to_object is None + else self.get_object_handle(relative_to_object)) + + return self.call_remote_api('simxGetObjectPosition', + h, relative_handle, + streaming=True) + + def set_object_position(self, object_name, position=[0, 0, 0]): + """ Sets the object position. """ + h = self.get_object_handle(object_name) + + return self.call_remote_api('simxSetObjectPosition', + h, -1, position, + sending=True) + + def get_object_orientation(self, object_name, relative_to_object=None): + """ Gets the object orientation. """ + h = self.get_object_handle(object_name) + relative_handle = (-1 if relative_to_object is None + else self.get_object_handle(relative_to_object)) + + return self.call_remote_api('simxGetObjectOrientation', + h, relative_handle, + streaming=True) + + def _get_object_handle(self, obj): + return self.call_remote_api('simxGetObjectHandle', obj) + + def get_object_handle(self, obj): + """ Gets the vrep object handle. """ + if obj not in self._object_handles: + self._object_handles[obj] = self._get_object_handle(obj=obj) + + return self._object_handles[obj] + + def get_collision_state(self, collision_name): + """ Gets the collision state. """ + return self.call_remote_api('simxReadCollision', + self.get_collision_handle(collision_name), + streaming=True) + + def _get_collision_handle(self, collision): + return self.call_remote_api('simxGetCollisionHandle', collision) + + def get_collision_handle(self, collision): + """ Gets a vrep collisions handle. """ + if collision not in self._object_handles: + h = self._get_collision_handle(collision) + self._object_handles[collision] = h + + return self._object_handles[collision] + + def get_simulation_current_time(self, timer='CurrentTime'): + """ Gets the simulation current time. """ + try: + return self.call_remote_api('simxGetFloatSignal', timer, streaming=True) + except VrepIOErrors: + return 0.0 + + def add_cube(self, name, position, sizes, mass): + """ Add Cube """ + self._create_pure_shape(0, 239, sizes, mass, [0, 0]) + self.set_object_position("Cuboid", position) + self.change_object_name("Cuboid", name) + + def add_sphere(self, name, position, sizes, mass, precision=[10, 10]): + """ Add Sphere """ + self._create_pure_shape(1, 239, sizes, mass, precision) + self.set_object_position("Sphere", position) + self.change_object_name("Sphere", name) + + def add_cylinder(self, name, position, sizes, mass, precision=[10, 10]): + """ Add Cylinder """ + self._create_pure_shape(2, 239, sizes, mass, precision) + self.set_object_position("Cylinder", position) + self.change_object_name("Cylinder", name) + + def add_cone(self, name, position, sizes, mass, precision=[10, 10]): + """ Add Cone """ + self._create_pure_shape(3, 239, sizes, mass, precision) + self.set_object_position("Cylinder", position) + self.change_object_name("Cylinder", name) + + def change_object_name(self, old_name, new_name): + """ Change object name """ + h = self._get_object_handle(old_name) + if old_name in self._object_handles: + self._object_handles.pop(old_name) + lua_code = "simSetObjectName({}, '{}')".format(h, new_name) + self._inject_lua_code(lua_code) + + def _create_pure_shape(self, primitive_type, options, sizes, mass, precision): + """ Create Pure Shape """ + lua_code = "simCreatePureShape({}, {}, {{{}, {}, {}}}, {}, {{{}, {}}})".format( + primitive_type, options, sizes[0], sizes[1], sizes[2], mass, precision[0], precision[1]) + self._inject_lua_code(lua_code) + + def _inject_lua_code(self, lua_code): + """ Sends raw lua code and evaluate it without any checking! """ + msg = (ctypes.c_ubyte * len(lua_code)).from_buffer_copy(lua_code.encode()) + self.call_remote_api('simxWriteStringStream', 'my_lua_code', msg) + + def call_remote_api(self, func_name, *args, **kwargs): + """ Calls any remote API func in a thread_safe way. + + :param str func_name: name of the remote API func to call + :param args: args to pass to the remote API call + :param kwargs: args to pass to the remote API call + + .. note:: You can add an extra keyword to specify if you want to use the streaming or sending mode. The oneshot_wait mode is used by default (see `here `_ for details about possible modes). + + .. warning:: You should not pass the clientId and the operationMode as arguments. They will be automatically added. + + As an example you can retrieve all joints name using the following call:: + + vrep_io.remote_api_call('simxGetObjectGroupData', + vrep_io.remote_api.sim_object_joint_type, + 0, + streaming=True) + + """ + f = getattr(remote_api, func_name) + + mode = self._extract_mode(kwargs) + kwargs['operationMode'] = vrep_mode[mode] + # hard_retry = True + + if '_force' in kwargs: + del kwargs['_force'] + _force = True + else: + _force = False + + for _ in range(VrepIO.MAX_ITER): + with self._lock: + ret = f(self.client_id, *args, **kwargs) + + if _force: + return + + if mode == 'sending' or isinstance(ret, int): + err, res = ret, None + else: + err, res = ret[0], ret[1:] + res = res[0] if len(res) == 1 else res + + err = [bool((err >> i) & 1) for i in range(len(vrep_error))] + + if remote_api.simx_return_novalue_flag not in err: + break + + time.sleep(VrepIO.TIMEOUT) + + # if any(err) and hard_retry: + # print "HARD RETRY" + # self.stop_simulation() #nope + # + # notconnected = True + # while notconnected: + # self.close() + # close_all_connections() + # time.sleep(0.5) + # try: + # self.open_io() + # notconnected = False + # except: + # print 'CONNECTION ERROR' + # pass + # + # self.start_simulation() + # + # with self._lock: + # ret = f(self.client_id, *args, **kwargs) + # + # if mode == 'sending' or isinstance(ret, int): + # err, res = ret, None + # else: + # err, res = ret[0], ret[1:] + # res = res[0] if len(res) == 1 else res + # + # err = [bool((err >> i) & 1) for i in range(len(vrep_error))] + # + # return res + + if any(err): + msg = ' '.join([vrep_error[2 ** i] + for i, e in enumerate(err) if e]) + raise VrepIOErrors(msg) + + return res + + def _extract_mode(self, kwargs): + for mode in ('streaming', 'sending'): + if mode in kwargs: + kwargs.pop(mode) + return mode + + return 'normal' + + +def close_all_connections(): + """ Closes all opened connection to V-REP remote API server. """ + remote_api.simxFinish(-1) + + +# V-REP Errors +class VrepIOError(Exception): + + """ Base class for V-REP IO Errors. """ + + def __init__(self, error_code, message): + message = 'V-REP error code {} ({}): "{}"'.format( + error_code, vrep_error[error_code], message) + Exception.__init__(self, message) + + +class VrepIOErrors(Exception): + pass + + +class VrepConnectionError(Exception): + + """ Base class for V-REP connection Errors. """ + pass diff --git a/pypot-master/pypot-master/pypot/vrep/remoteApiBindings/__init__.py b/pypot-master/pypot-master/pypot/vrep/remoteApiBindings/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/pypot-master/pypot-master/pypot/vrep/remoteApiBindings/vrep.py b/pypot-master/pypot-master/pypot/vrep/remoteApiBindings/vrep.py new file mode 100644 index 0000000..f3c3b19 --- /dev/null +++ b/pypot-master/pypot-master/pypot/vrep/remoteApiBindings/vrep.py @@ -0,0 +1,1480 @@ +# This file is part of the REMOTE API +# +# Copyright 2006-2016 Coppelia Robotics GmbH. All rights reserved. +# marc@coppeliarobotics.com +# www.coppeliarobotics.com +# +# The REMOTE API is licensed under the terms of GNU GPL: +# +# ------------------------------------------------------------------- +# The REMOTE API is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# THE REMOTE API IS DISTRIBUTED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED +# WARRANTY. THE USER WILL USE IT AT HIS/HER OWN RISK. THE ORIGINAL +# AUTHORS AND COPPELIA ROBOTICS GMBH WILL NOT BE LIABLE FOR DATA LOSS, +# DAMAGES, LOSS OF PROFITS OR ANY OTHER KIND OF LOSS WHILE USING OR +# MISUSING THIS SOFTWARE. +# +# See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with the REMOTE API. If not, see . +# ------------------------------------------------------------------- +# +# This file was automatically created for V-REP release V3.3.2 on August 29th 2016 + +import platform +import struct +import sys +import ctypes as ct +from .vrepConst import * + +#load library +libsimx = None + +import os +import sys + +basepath = os.path.join(os.path.dirname(__file__), 'lib') +version = '64Bit' if sys.maxsize > 2**32 else '32Bit' + +if platform.system() == 'Windows': + dyn_lib = os.path.join(basepath, 'windows', version, 'remoteApi.dll') +elif platform.system() == 'Darwin': + dyn_lib = os.path.join(basepath, 'mac', version, 'remoteApi.dylib') +else: + dyn_lib = os.path.join(basepath, 'linux', version, 'remoteApi.so') + +libsimx = ct.CDLL(dyn_lib) + +#ctypes wrapper prototypes +c_GetJointPosition = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_float), ct.c_int32)(("simxGetJointPosition", libsimx)) +c_SetJointPosition = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_float, ct.c_int32)(("simxSetJointPosition", libsimx)) +c_GetJointMatrix = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_float), ct.c_int32)(("simxGetJointMatrix", libsimx)) +c_SetSphericalJointMatrix = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_float), ct.c_int32)(("simxSetSphericalJointMatrix", libsimx)) +c_SetJointTargetVelocity = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_float, ct.c_int32)(("simxSetJointTargetVelocity", libsimx)) +c_SetJointTargetPosition = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_float, ct.c_int32)(("simxSetJointTargetPosition", libsimx)) +c_GetJointForce = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_float), ct.c_int32)(("simxGetJointForce", libsimx)) +c_SetJointForce = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_float, ct.c_int32)(("simxSetJointForce", libsimx)) +c_ReadForceSensor = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_ubyte), ct.POINTER(ct.c_float), ct.POINTER(ct.c_float), ct.c_int32)(("simxReadForceSensor", libsimx)) +c_BreakForceSensor = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32)(("simxBreakForceSensor", libsimx)) +c_ReadVisionSensor = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_ubyte), ct.POINTER(ct.POINTER(ct.c_float)), ct.POINTER(ct.POINTER(ct.c_int32)), ct.c_int32)(("simxReadVisionSensor", libsimx)) +c_GetObjectHandle = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.POINTER(ct.c_int32), ct.c_int32)(("simxGetObjectHandle", libsimx)) +c_GetVisionSensorImage = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_int32), ct.POINTER(ct.POINTER(ct.c_byte)), ct.c_ubyte, ct.c_int32)(("simxGetVisionSensorImage", libsimx)) +c_SetVisionSensorImage = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_byte), ct.c_int32, ct.c_ubyte, ct.c_int32)(("simxSetVisionSensorImage", libsimx)) +c_GetVisionSensorDepthBuffer= ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_int32), ct.POINTER(ct.POINTER(ct.c_float)), ct.c_int32)(("simxGetVisionSensorDepthBuffer", libsimx)) +c_GetObjectChild = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32, ct.POINTER(ct.c_int32), ct.c_int32)(("simxGetObjectChild", libsimx)) +c_GetObjectParent = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_int32), ct.c_int32)(("simxGetObjectParent", libsimx)) +c_ReadProximitySensor = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_ubyte), ct.POINTER(ct.c_float), ct.POINTER(ct.c_int32), ct.POINTER(ct.c_float), ct.c_int32)(("simxReadProximitySensor", libsimx)) +c_LoadModel = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.c_ubyte, ct.POINTER(ct.c_int32), ct.c_int32)(("simxLoadModel", libsimx)) +c_LoadUI = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.c_ubyte, ct.POINTER(ct.c_int32), ct.POINTER(ct.POINTER(ct.c_int32)), ct.c_int32)(("simxLoadUI", libsimx)) +c_LoadScene = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.c_ubyte, ct.c_int32)(("simxLoadScene", libsimx)) +c_StartSimulation = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32)(("simxStartSimulation", libsimx)) +c_PauseSimulation = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32)(("simxPauseSimulation", libsimx)) +c_StopSimulation = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32)(("simxStopSimulation", libsimx)) +c_GetUIHandle = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.POINTER(ct.c_int32), ct.c_int32)(("simxGetUIHandle", libsimx)) +c_GetUISlider = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32, ct.POINTER(ct.c_int32), ct.c_int32)(("simxGetUISlider", libsimx)) +c_SetUISlider = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32, ct.c_int32, ct.c_int32)(("simxSetUISlider", libsimx)) +c_GetUIEventButton = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_int32), ct.POINTER(ct.c_int32), ct.c_int32)(("simxGetUIEventButton", libsimx)) +c_GetUIButtonProperty = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32, ct.POINTER(ct.c_int32), ct.c_int32)(("simxGetUIButtonProperty", libsimx)) +c_SetUIButtonProperty = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32, ct.c_int32, ct.c_int32)(("simxSetUIButtonProperty", libsimx)) +c_AddStatusbarMessage = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.c_int32)(("simxAddStatusbarMessage", libsimx)) +c_AuxiliaryConsoleOpen = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.c_int32, ct.c_int32, ct.POINTER(ct.c_int32), ct.POINTER(ct.c_int32), ct.POINTER(ct.c_float), ct.POINTER(ct.c_float), ct.POINTER(ct.c_int32), ct.c_int32)(("simxAuxiliaryConsoleOpen", libsimx)) +c_AuxiliaryConsoleClose = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32)(("simxAuxiliaryConsoleClose", libsimx)) +c_AuxiliaryConsolePrint = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_char), ct.c_int32)(("simxAuxiliaryConsolePrint", libsimx)) +c_AuxiliaryConsoleShow = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_ubyte, ct.c_int32)(("simxAuxiliaryConsoleShow", libsimx)) +c_GetObjectOrientation = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32, ct.POINTER(ct.c_float), ct.c_int32)(("simxGetObjectOrientation", libsimx)) +c_GetObjectPosition = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32, ct.POINTER(ct.c_float), ct.c_int32)(("simxGetObjectPosition", libsimx)) +c_SetObjectOrientation = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32, ct.POINTER(ct.c_float), ct.c_int32)(("simxSetObjectOrientation", libsimx)) +c_SetObjectPosition = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32, ct.POINTER(ct.c_float), ct.c_int32)(("simxSetObjectPosition", libsimx)) +c_SetObjectParent = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32, ct.c_ubyte, ct.c_int32)(("simxSetObjectParent", libsimx)) +c_SetUIButtonLabel = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32, ct.POINTER(ct.c_char), ct.POINTER(ct.c_char), ct.c_int32)(("simxSetUIButtonLabel", libsimx)) +c_GetLastErrors = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_int32), ct.POINTER(ct.POINTER(ct.c_char)), ct.c_int32)(("simxGetLastErrors", libsimx)) +c_GetArrayParameter = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_float), ct.c_int32)(("simxGetArrayParameter", libsimx)) +c_SetArrayParameter = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_float), ct.c_int32)(("simxSetArrayParameter", libsimx)) +c_GetBooleanParameter = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_ubyte), ct.c_int32)(("simxGetBooleanParameter", libsimx)) +c_SetBooleanParameter = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_ubyte, ct.c_int32)(("simxSetBooleanParameter", libsimx)) +c_GetIntegerParameter = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_int32), ct.c_int32)(("simxGetIntegerParameter", libsimx)) +c_SetIntegerParameter = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32, ct.c_int32)(("simxSetIntegerParameter", libsimx)) +c_GetFloatingParameter = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_float), ct.c_int32)(("simxGetFloatingParameter", libsimx)) +c_SetFloatingParameter = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_float, ct.c_int32)(("simxSetFloatingParameter", libsimx)) +c_GetStringParameter = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.POINTER(ct.c_char)), ct.c_int32)(("simxGetStringParameter", libsimx)) +c_GetCollisionHandle = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.POINTER(ct.c_int32), ct.c_int32)(("simxGetCollisionHandle", libsimx)) +c_GetDistanceHandle = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.POINTER(ct.c_int32), ct.c_int32)(("simxGetDistanceHandle", libsimx)) +c_GetCollectionHandle = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.POINTER(ct.c_int32), ct.c_int32)(("simxGetCollectionHandle", libsimx)) +c_ReadCollision = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_ubyte), ct.c_int32)(("simxReadCollision", libsimx)) +c_ReadDistance = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_float), ct.c_int32)(("simxReadDistance", libsimx)) +c_RemoveObject = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32)(("simxRemoveObject", libsimx)) +c_RemoveModel = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32)(("simxRemoveModel", libsimx)) +c_RemoveUI = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32)(("simxRemoveUI", libsimx)) +c_CloseScene = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32)(("simxCloseScene", libsimx)) +c_GetObjects = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_int32), ct.POINTER(ct.POINTER(ct.c_int32)), ct.c_int32)(("simxGetObjects", libsimx)) +c_DisplayDialog = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.POINTER(ct.c_char), ct.c_int32, ct.POINTER(ct.c_char), ct.POINTER(ct.c_float), ct.POINTER(ct.c_float), ct.POINTER(ct.c_int32), ct.POINTER(ct.c_int32), ct.c_int32)(("simxDisplayDialog", libsimx)) +c_EndDialog = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32)(("simxEndDialog", libsimx)) +c_GetDialogInput = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.POINTER(ct.c_char)), ct.c_int32)(("simxGetDialogInput", libsimx)) +c_GetDialogResult = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_int32), ct.c_int32)(("simxGetDialogResult", libsimx)) +c_CopyPasteObjects = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_int32), ct.c_int32, ct.POINTER(ct.POINTER(ct.c_int32)), ct.POINTER(ct.c_int32), ct.c_int32)(("simxCopyPasteObjects", libsimx)) +c_GetObjectSelection = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.POINTER(ct.c_int32)), ct.POINTER(ct.c_int32), ct.c_int32)(("simxGetObjectSelection", libsimx)) +c_SetObjectSelection = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_int32), ct.c_int32, ct.c_int32)(("simxSetObjectSelection", libsimx)) +c_ClearFloatSignal = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.c_int32)(("simxClearFloatSignal", libsimx)) +c_ClearIntegerSignal = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.c_int32)(("simxClearIntegerSignal", libsimx)) +c_ClearStringSignal = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.c_int32)(("simxClearStringSignal", libsimx)) +c_GetFloatSignal = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.POINTER(ct.c_float), ct.c_int32)(("simxGetFloatSignal", libsimx)) +c_GetIntegerSignal = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.POINTER(ct.c_int32), ct.c_int32)(("simxGetIntegerSignal", libsimx)) +c_GetStringSignal = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.POINTER(ct.POINTER(ct.c_ubyte)), ct.POINTER(ct.c_int32), ct.c_int32)(("simxGetStringSignal", libsimx)) +c_SetFloatSignal = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.c_float, ct.c_int32)(("simxSetFloatSignal", libsimx)) +c_SetIntegerSignal = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.c_int32, ct.c_int32)(("simxSetIntegerSignal", libsimx)) +c_SetStringSignal = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.POINTER(ct.c_ubyte), ct.c_int32, ct.c_int32)(("simxSetStringSignal", libsimx)) +c_AppendStringSignal = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.POINTER(ct.c_ubyte), ct.c_int32, ct.c_int32)(("simxAppendStringSignal", libsimx)) +c_WriteStringStream = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.POINTER(ct.c_ubyte), ct.c_int32, ct.c_int32)(("simxWriteStringStream", libsimx)) +c_GetObjectFloatParameter = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32, ct.POINTER(ct.c_float), ct.c_int32)(("simxGetObjectFloatParameter", libsimx)) +c_SetObjectFloatParameter = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32, ct.c_float, ct.c_int32)(("simxSetObjectFloatParameter", libsimx)) +c_GetObjectIntParameter = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32, ct.POINTER(ct.c_int32), ct.c_int32)(("simxGetObjectIntParameter", libsimx)) +c_SetObjectIntParameter = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32, ct.c_int32, ct.c_int32)(("simxSetObjectIntParameter", libsimx)) +c_GetModelProperty = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_int32), ct.c_int32)(("simxGetModelProperty", libsimx)) +c_SetModelProperty = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32, ct.c_int32)(("simxSetModelProperty", libsimx)) +c_Start = ct.CFUNCTYPE(ct.c_int32,ct.POINTER(ct.c_char), ct.c_int32, ct.c_ubyte, ct.c_ubyte, ct.c_int32, ct.c_int32)(("simxStart", libsimx)) +c_Finish = ct.CFUNCTYPE(None, ct.c_int32)(("simxFinish", libsimx)) +c_GetPingTime = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_int32))(("simxGetPingTime", libsimx)) +c_GetLastCmdTime = ct.CFUNCTYPE(ct.c_int32,ct.c_int32)(("simxGetLastCmdTime", libsimx)) +c_SynchronousTrigger = ct.CFUNCTYPE(ct.c_int32,ct.c_int32)(("simxSynchronousTrigger", libsimx)) +c_Synchronous = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_ubyte)(("simxSynchronous", libsimx)) +c_PauseCommunication = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_ubyte)(("simxPauseCommunication", libsimx)) +c_GetInMessageInfo = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_int32))(("simxGetInMessageInfo", libsimx)) +c_GetOutMessageInfo = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_int32))(("simxGetOutMessageInfo", libsimx)) +c_GetConnectionId = ct.CFUNCTYPE(ct.c_int32,ct.c_int32)(("simxGetConnectionId", libsimx)) +c_CreateBuffer = ct.CFUNCTYPE(ct.POINTER(ct.c_ubyte), ct.c_int32)(("simxCreateBuffer", libsimx)) +c_ReleaseBuffer = ct.CFUNCTYPE(None, ct.c_void_p)(("simxReleaseBuffer", libsimx)) +c_TransferFile = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.POINTER(ct.c_char), ct.c_int32, ct.c_int32)(("simxTransferFile", libsimx)) +c_EraseFile = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.c_int32)(("simxEraseFile", libsimx)) +c_GetAndClearStringSignal = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.POINTER(ct.POINTER(ct.c_ubyte)), ct.POINTER(ct.c_int32), ct.c_int32)(("simxGetAndClearStringSignal", libsimx)) +c_ReadStringStream = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.POINTER(ct.POINTER(ct.c_ubyte)), ct.POINTER(ct.c_int32), ct.c_int32)(("simxReadStringStream", libsimx)) +c_CreateDummy = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_float, ct.POINTER(ct.c_ubyte), ct.POINTER(ct.c_int32), ct.c_int32)(("simxCreateDummy", libsimx)) +c_Query = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.POINTER(ct.c_char), ct.POINTER(ct.c_ubyte), ct.c_int32, ct.POINTER(ct.c_char), ct.POINTER(ct.POINTER(ct.c_ubyte)), ct.POINTER(ct.c_int32), ct.c_int32)(("simxQuery", libsimx)) +c_GetObjectGroupData = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.c_int32, ct.POINTER(ct.c_int32), ct.POINTER(ct.POINTER(ct.c_int32)), ct.POINTER(ct.c_int32), ct.POINTER(ct.POINTER(ct.c_int32)), ct.POINTER(ct.c_int32), ct.POINTER(ct.POINTER(ct.c_float)), ct.POINTER(ct.c_int32), ct.POINTER(ct.POINTER(ct.c_char)), ct.c_int32)(("simxGetObjectGroupData", libsimx)) +c_GetObjectVelocity = ct.CFUNCTYPE(ct.c_int32,ct.c_int32, ct.c_int32, ct.POINTER(ct.c_float), ct.POINTER(ct.c_float), ct.c_int32)(("simxGetObjectVelocity", libsimx)) +c_CallScriptFunction = ct.CFUNCTYPE(ct.c_int32,ct.c_int32,ct.POINTER(ct.c_char),ct.c_int32,ct.POINTER(ct.c_char),ct.c_int32,ct.POINTER(ct.c_int32),ct.c_int32,ct.POINTER(ct.c_float),ct.c_int32,ct.POINTER(ct.c_char),ct.c_int32,ct.POINTER(ct.c_ubyte),ct.POINTER(ct.c_int32), ct.POINTER(ct.POINTER(ct.c_int32)),ct.POINTER(ct.c_int32), ct.POINTER(ct.POINTER(ct.c_float)),ct.POINTER(ct.c_int32), ct.POINTER(ct.POINTER(ct.c_char)),ct.POINTER(ct.c_int32), ct.POINTER(ct.POINTER(ct.c_ubyte)),ct.c_int32)(("simxCallScriptFunction", libsimx)) + +#API functions +def simxGetJointPosition(clientID, jointHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + position = ct.c_float() + return c_GetJointPosition(clientID, jointHandle, ct.byref(position), operationMode), position.value + +def simxSetJointPosition(clientID, jointHandle, position, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_SetJointPosition(clientID, jointHandle, position, operationMode) + +def simxGetJointMatrix(clientID, jointHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + matrix = (ct.c_float*12)() + ret = c_GetJointMatrix(clientID, jointHandle, matrix, operationMode) + arr = [] + for i in range(12): + arr.append(matrix[i]) + return ret, arr + +def simxSetSphericalJointMatrix(clientID, jointHandle, matrix, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + matrix = (ct.c_float*12)(*matrix) + return c_SetSphericalJointMatrix(clientID, jointHandle, matrix, operationMode) + +def simxSetJointTargetVelocity(clientID, jointHandle, targetVelocity, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_SetJointTargetVelocity(clientID, jointHandle, targetVelocity, operationMode) + +def simxSetJointTargetPosition(clientID, jointHandle, targetPosition, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_SetJointTargetPosition(clientID, jointHandle, targetPosition, operationMode) + +def simxJointGetForce(clientID, jointHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + force = ct.c_float() + return c_GetJointForce(clientID, jointHandle, ct.byref(force), operationMode), force.value + +def simxGetJointForce(clientID, jointHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + force = ct.c_float() + return c_GetJointForce(clientID, jointHandle, ct.byref(force), operationMode), force.value + +def simxSetJointForce(clientID, jointHandle, force, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + return c_SetJointForce(clientID, jointHandle, force, operationMode) + +def simxReadForceSensor(clientID, forceSensorHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + state = ct.c_ubyte() + forceVector = (ct.c_float*3)() + torqueVector = (ct.c_float*3)() + ret = c_ReadForceSensor(clientID, forceSensorHandle, ct.byref(state), forceVector, torqueVector, operationMode) + arr1 = [] + for i in range(3): + arr1.append(forceVector[i]) + arr2 = [] + for i in range(3): + arr2.append(torqueVector[i]) + #if sys.version_info[0] == 3: + # state=state.value + #else: + # state=ord(state.value) + return ret, state.value, arr1, arr2 + +def simxBreakForceSensor(clientID, forceSensorHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + return c_BreakForceSensor(clientID, forceSensorHandle, operationMode) + +def simxReadVisionSensor(clientID, sensorHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + detectionState = ct.c_ubyte() + auxValues = ct.POINTER(ct.c_float)() + auxValuesCount = ct.POINTER(ct.c_int)() + ret = c_ReadVisionSensor(clientID, sensorHandle, ct.byref(detectionState), ct.byref(auxValues), ct.byref(auxValuesCount), operationMode) + + auxValues2 = [] + if ret == 0: + s = 0 + for i in range(auxValuesCount[0]): + auxValues2.append(auxValues[s:s+auxValuesCount[i+1]]) + s += auxValuesCount[i+1] + + #free C buffers + c_ReleaseBuffer(auxValues) + c_ReleaseBuffer(auxValuesCount) + + return ret, bool(detectionState.value!=0), auxValues2 + +def simxGetObjectHandle(clientID, objectName, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + handle = ct.c_int() + if (sys.version_info[0] == 3) and (type(objectName) is str): + objectName=objectName.encode('utf-8') + return c_GetObjectHandle(clientID, objectName, ct.byref(handle), operationMode), handle.value + +def simxGetVisionSensorImage(clientID, sensorHandle, options, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + resolution = (ct.c_int*2)() + c_image = ct.POINTER(ct.c_byte)() + bytesPerPixel = 3 + if (options and 1) != 0: + bytesPerPixel = 1 + ret = c_GetVisionSensorImage(clientID, sensorHandle, resolution, ct.byref(c_image), options, operationMode) + + reso = [] + image = [] + if (ret == 0): + image = [None]*resolution[0]*resolution[1]*bytesPerPixel + for i in range(resolution[0] * resolution[1] * bytesPerPixel): + image[i] = c_image[i] + for i in range(2): + reso.append(resolution[i]) + return ret, reso, image + +def simxSetVisionSensorImage(clientID, sensorHandle, image, options, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + size = len(image) + image_bytes = (ct.c_byte*size)(*image) + return c_SetVisionSensorImage(clientID, sensorHandle, image_bytes, size, options, operationMode) + +def simxGetVisionSensorDepthBuffer(clientID, sensorHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + c_buffer = ct.POINTER(ct.c_float)() + resolution = (ct.c_int*2)() + ret = c_GetVisionSensorDepthBuffer(clientID, sensorHandle, resolution, ct.byref(c_buffer), operationMode) + reso = [] + buffer = [] + if (ret == 0): + buffer = [None]*resolution[0]*resolution[1] + for i in range(resolution[0] * resolution[1]): + buffer[i] = c_buffer[i] + for i in range(2): + reso.append(resolution[i]) + return ret, reso, buffer + +def simxGetObjectChild(clientID, parentObjectHandle, childIndex, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + childObjectHandle = ct.c_int() + return c_GetObjectChild(clientID, parentObjectHandle, childIndex, ct.byref(childObjectHandle), operationMode), childObjectHandle.value + +def simxGetObjectParent(clientID, childObjectHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + parentObjectHandle = ct.c_int() + return c_GetObjectParent(clientID, childObjectHandle, ct.byref(parentObjectHandle), operationMode), parentObjectHandle.value + +def simxReadProximitySensor(clientID, sensorHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + detectionState = ct.c_ubyte() + detectedObjectHandle = ct.c_int() + detectedPoint = (ct.c_float*3)() + detectedSurfaceNormalVector = (ct.c_float*3)() + ret = c_ReadProximitySensor(clientID, sensorHandle, ct.byref(detectionState), detectedPoint, ct.byref(detectedObjectHandle), detectedSurfaceNormalVector, operationMode) + arr1 = [] + for i in range(3): + arr1.append(detectedPoint[i]) + arr2 = [] + for i in range(3): + arr2.append(detectedSurfaceNormalVector[i]) + return ret, bool(detectionState.value!=0), arr1, detectedObjectHandle.value, arr2 + +def simxLoadModel(clientID, modelPathAndName, options, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + baseHandle = ct.c_int() + if (sys.version_info[0] == 3) and (type(modelPathAndName) is str): + modelPathAndName=modelPathAndName.encode('utf-8') + return c_LoadModel(clientID, modelPathAndName, options, ct.byref(baseHandle), operationMode), baseHandle.value + +def simxLoadUI(clientID, uiPathAndName, options, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + count = ct.c_int() + uiHandles = ct.POINTER(ct.c_int)() + if (sys.version_info[0] == 3) and (type(uiPathAndName) is str): + uiPathAndName=uiPathAndName.encode('utf-8') + ret = c_LoadUI(clientID, uiPathAndName, options, ct.byref(count), ct.byref(uiHandles), operationMode) + + handles = [] + if ret == 0: + for i in range(count.value): + handles.append(uiHandles[i]) + #free C buffers + c_ReleaseBuffer(uiHandles) + + return ret, handles + +def simxLoadScene(clientID, scenePathAndName, options, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + if (sys.version_info[0] == 3) and (type(scenePathAndName) is str): + scenePathAndName=scenePathAndName.encode('utf-8') + return c_LoadScene(clientID, scenePathAndName, options, operationMode) + +def simxStartSimulation(clientID, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_StartSimulation(clientID, operationMode) + +def simxPauseSimulation(clientID, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_PauseSimulation(clientID, operationMode) + +def simxStopSimulation(clientID, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_StopSimulation(clientID, operationMode) + +def simxGetUIHandle(clientID, uiName, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + handle = ct.c_int() + if (sys.version_info[0] == 3) and (type(uiName) is str): + uiName=uiName.encode('utf-8') + return c_GetUIHandle(clientID, uiName, ct.byref(handle), operationMode), handle.value + +def simxGetUISlider(clientID, uiHandle, uiButtonID, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + position = ct.c_int() + return c_GetUISlider(clientID, uiHandle, uiButtonID, ct.byref(position), operationMode), position.value + +def simxSetUISlider(clientID, uiHandle, uiButtonID, position, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_SetUISlider(clientID, uiHandle, uiButtonID, position, operationMode) + +def simxGetUIEventButton(clientID, uiHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + uiEventButtonID = ct.c_int() + auxValues = (ct.c_int*2)() + ret = c_GetUIEventButton(clientID, uiHandle, ct.byref(uiEventButtonID), auxValues, operationMode) + arr = [] + for i in range(2): + arr.append(auxValues[i]) + return ret, uiEventButtonID.value, arr + +def simxGetUIButtonProperty(clientID, uiHandle, uiButtonID, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + prop = ct.c_int() + return c_GetUIButtonProperty(clientID, uiHandle, uiButtonID, ct.byref(prop), operationMode), prop.value + +def simxSetUIButtonProperty(clientID, uiHandle, uiButtonID, prop, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_SetUIButtonProperty(clientID, uiHandle, uiButtonID, prop, operationMode) + +def simxAddStatusbarMessage(clientID, message, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + if (sys.version_info[0] == 3) and (type(message) is str): + message=message.encode('utf-8') + return c_AddStatusbarMessage(clientID, message, operationMode) + +def simxAuxiliaryConsoleOpen(clientID, title, maxLines, mode, position, size, textColor, backgroundColor, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + consoleHandle = ct.c_int() + if (sys.version_info[0] == 3) and (type(title) is str): + title=title.encode('utf-8') + if position != None: + c_position = (ct.c_int*2)(*position) + else: + c_position = None + if size != None: + c_size = (ct.c_int*2)(*size) + else: + c_size = None + if textColor != None: + c_textColor = (ct.c_float*3)(*textColor) + else: + c_textColor = None + if backgroundColor != None: + c_backgroundColor = (ct.c_float*3)(*backgroundColor) + else: + c_backgroundColor = None + return c_AuxiliaryConsoleOpen(clientID, title, maxLines, mode, c_position, c_size, c_textColor, c_backgroundColor, ct.byref(consoleHandle), operationMode), consoleHandle.value + +def simxAuxiliaryConsoleClose(clientID, consoleHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_AuxiliaryConsoleClose(clientID, consoleHandle, operationMode) + +def simxAuxiliaryConsolePrint(clientID, consoleHandle, txt, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + if (sys.version_info[0] == 3) and (type(txt) is str): + txt=txt.encode('utf-8') + return c_AuxiliaryConsolePrint(clientID, consoleHandle, txt, operationMode) + +def simxAuxiliaryConsoleShow(clientID, consoleHandle, showState, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_AuxiliaryConsoleShow(clientID, consoleHandle, showState, operationMode) + +def simxGetObjectOrientation(clientID, objectHandle, relativeToObjectHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + eulerAngles = (ct.c_float*3)() + ret = c_GetObjectOrientation(clientID, objectHandle, relativeToObjectHandle, eulerAngles, operationMode) + arr = [] + for i in range(3): + arr.append(eulerAngles[i]) + return ret, arr + +def simxGetObjectPosition(clientID, objectHandle, relativeToObjectHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + position = (ct.c_float*3)() + ret = c_GetObjectPosition(clientID, objectHandle, relativeToObjectHandle, position, operationMode) + arr = [] + for i in range(3): + arr.append(position[i]) + return ret, arr + +def simxSetObjectOrientation(clientID, objectHandle, relativeToObjectHandle, eulerAngles, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + angles = (ct.c_float*3)(*eulerAngles) + return c_SetObjectOrientation(clientID, objectHandle, relativeToObjectHandle, angles, operationMode) + +def simxSetObjectPosition(clientID, objectHandle, relativeToObjectHandle, position, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + c_position = (ct.c_float*3)(*position) + return c_SetObjectPosition(clientID, objectHandle, relativeToObjectHandle, c_position, operationMode) + +def simxSetObjectParent(clientID, objectHandle, parentObject, keepInPlace, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_SetObjectParent(clientID, objectHandle, parentObject, keepInPlace, operationMode) + +def simxSetUIButtonLabel(clientID, uiHandle, uiButtonID, upStateLabel, downStateLabel, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + if sys.version_info[0] == 3: + if type(upStateLabel) is str: + upStateLabel=upStateLabel.encode('utf-8') + if type(downStateLabel) is str: + downStateLabel=downStateLabel.encode('utf-8') + return c_SetUIButtonLabel(clientID, uiHandle, uiButtonID, upStateLabel, downStateLabel, operationMode) + +def simxGetLastErrors(clientID, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + errors =[] + errorCnt = ct.c_int() + errorStrings = ct.POINTER(ct.c_char)() + ret = c_GetLastErrors(clientID, ct.byref(errorCnt), ct.byref(errorStrings), operationMode) + if ret == 0: + s = 0 + for i in range(errorCnt.value): + a = bytearray() + while errorStrings[s] != b'\0': + if sys.version_info[0] == 3: + a.append(int.from_bytes(errorStrings[s],'big')) + else: + a.append(errorStrings[s]) + s += 1 + s += 1 #skip null + if sys.version_info[0] == 3: + errors.append(str(a,'utf-8')) + else: + errors.append(str(a)) + + return ret, errors + +def simxGetArrayParameter(clientID, paramIdentifier, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + paramValues = (ct.c_float*3)() + ret = c_GetArrayParameter(clientID, paramIdentifier, paramValues, operationMode) + arr = [] + for i in range(3): + arr.append(paramValues[i]) + return ret, arr + +def simxSetArrayParameter(clientID, paramIdentifier, paramValues, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + c_paramValues = (ct.c_float*3)(*paramValues) + return c_SetArrayParameter(clientID, paramIdentifier, c_paramValues, operationMode) + +def simxGetBooleanParameter(clientID, paramIdentifier, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + paramValue = ct.c_ubyte() + return c_GetBooleanParameter(clientID, paramIdentifier, ct.byref(paramValue), operationMode), bool(paramValue.value!=0) + +def simxSetBooleanParameter(clientID, paramIdentifier, paramValue, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_SetBooleanParameter(clientID, paramIdentifier, paramValue, operationMode) + +def simxGetIntegerParameter(clientID, paramIdentifier, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + paramValue = ct.c_int() + return c_GetIntegerParameter(clientID, paramIdentifier, ct.byref(paramValue), operationMode), paramValue.value + +def simxSetIntegerParameter(clientID, paramIdentifier, paramValue, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_SetIntegerParameter(clientID, paramIdentifier, paramValue, operationMode) + +def simxGetFloatingParameter(clientID, paramIdentifier, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + paramValue = ct.c_float() + return c_GetFloatingParameter(clientID, paramIdentifier, ct.byref(paramValue), operationMode), paramValue.value + +def simxSetFloatingParameter(clientID, paramIdentifier, paramValue, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_SetFloatingParameter(clientID, paramIdentifier, paramValue, operationMode) + +def simxGetStringParameter(clientID, paramIdentifier, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + paramValue = ct.POINTER(ct.c_char)() + ret = c_GetStringParameter(clientID, paramIdentifier, ct.byref(paramValue), operationMode) + + a = bytearray() + if ret == 0: + i = 0 + while paramValue[i] != b'\0': + if sys.version_info[0] == 3: + a.append(int.from_bytes(paramValue[i],'big')) + else: + a.append(paramValue[i]) + i=i+1 + if sys.version_info[0] == 3: + a=str(a,'utf-8') + else: + a=str(a) + return ret, a + +def simxGetCollisionHandle(clientID, collisionObjectName, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + handle = ct.c_int() + if (sys.version_info[0] == 3) and (type(collisionObjectName) is str): + collisionObjectName=collisionObjectName.encode('utf-8') + return c_GetCollisionHandle(clientID, collisionObjectName, ct.byref(handle), operationMode), handle.value + +def simxGetCollectionHandle(clientID, collectionName, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + handle = ct.c_int() + if (sys.version_info[0] == 3) and (type(collectionName) is str): + collectionName=collectionName.encode('utf-8') + return c_GetCollectionHandle(clientID, collectionName, ct.byref(handle), operationMode), handle.value + +def simxGetDistanceHandle(clientID, distanceObjectName, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + handle = ct.c_int() + if (sys.version_info[0] == 3) and (type(distanceObjectName) is str): + distanceObjectName=distanceObjectName.encode('utf-8') + return c_GetDistanceHandle(clientID, distanceObjectName, ct.byref(handle), operationMode), handle.value + +def simxReadCollision(clientID, collisionObjectHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + collisionState = ct.c_ubyte() + return c_ReadCollision(clientID, collisionObjectHandle, ct.byref(collisionState), operationMode), bool(collisionState.value!=0) + +def simxReadDistance(clientID, distanceObjectHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + minimumDistance = ct.c_float() + return c_ReadDistance(clientID, distanceObjectHandle, ct.byref(minimumDistance), operationMode), minimumDistance.value + +def simxRemoveObject(clientID, objectHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_RemoveObject(clientID, objectHandle, operationMode) + +def simxRemoveModel(clientID, objectHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_RemoveModel(clientID, objectHandle, operationMode) + +def simxRemoveUI(clientID, uiHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_RemoveUI(clientID, uiHandle, operationMode) + +def simxCloseScene(clientID, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_CloseScene(clientID, operationMode) + +def simxGetObjects(clientID, objectType, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + objectCount = ct.c_int() + objectHandles = ct.POINTER(ct.c_int)() + + ret = c_GetObjects(clientID, objectType, ct.byref(objectCount), ct.byref(objectHandles), operationMode) + handles = [] + if ret == 0: + for i in range(objectCount.value): + handles.append(objectHandles[i]) + + return ret, handles + + +def simxDisplayDialog(clientID, titleText, mainText, dialogType, initialText, titleColors, dialogColors, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + if titleColors != None: + c_titleColors = (ct.c_float*6)(*titleColors) + else: + c_titleColors = None + if dialogColors != None: + c_dialogColors = (ct.c_float*6)(*dialogColors) + else: + c_dialogColors = None + + c_dialogHandle = ct.c_int() + c_uiHandle = ct.c_int() + if sys.version_info[0] == 3: + if type(titleText) is str: + titleText=titleText.encode('utf-8') + if type(mainText) is str: + mainText=mainText.encode('utf-8') + if type(initialText) is str: + initialText=initialText.encode('utf-8') + return c_DisplayDialog(clientID, titleText, mainText, dialogType, initialText, c_titleColors, c_dialogColors, ct.byref(c_dialogHandle), ct.byref(c_uiHandle), operationMode), c_dialogHandle.value, c_uiHandle.value + +def simxEndDialog(clientID, dialogHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_EndDialog(clientID, dialogHandle, operationMode) + +def simxGetDialogInput(clientID, dialogHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + inputText = ct.POINTER(ct.c_char)() + ret = c_GetDialogInput(clientID, dialogHandle, ct.byref(inputText), operationMode) + + a = bytearray() + if ret == 0: + i = 0 + while inputText[i] != b'\0': + if sys.version_info[0] == 3: + a.append(int.from_bytes(inputText[i],'big')) + else: + a.append(inputText[i]) + i = i+1 + + if sys.version_info[0] == 3: + a=str(a,'utf-8') + else: + a=str(a) + return ret, a + + +def simxGetDialogResult(clientID, dialogHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + result = ct.c_int() + return c_GetDialogResult(clientID, dialogHandle, ct.byref(result), operationMode), result.value + +def simxCopyPasteObjects(clientID, objectHandles, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + c_objectHandles = (ct.c_int*len(objectHandles))(*objectHandles) + c_objectHandles = ct.cast(c_objectHandles,ct.POINTER(ct.c_int)) # IronPython needs this + newObjectCount = ct.c_int() + newObjectHandles = ct.POINTER(ct.c_int)() + ret = c_CopyPasteObjects(clientID, c_objectHandles, len(objectHandles), ct.byref(newObjectHandles), ct.byref(newObjectCount), operationMode) + + newobj = [] + if ret == 0: + for i in range(newObjectCount.value): + newobj.append(newObjectHandles[i]) + + return ret, newobj + + +def simxGetObjectSelection(clientID, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + objectCount = ct.c_int() + objectHandles = ct.POINTER(ct.c_int)() + ret = c_GetObjectSelection(clientID, ct.byref(objectHandles), ct.byref(objectCount), operationMode) + + newobj = [] + if ret == 0: + for i in range(objectCount.value): + newobj.append(objectHandles[i]) + + return ret, newobj + + + +def simxSetObjectSelection(clientID, objectHandles, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + c_objectHandles = (ct.c_int*len(objectHandles))(*objectHandles) + return c_SetObjectSelection(clientID, c_objectHandles, len(objectHandles), operationMode) + +def simxClearFloatSignal(clientID, signalName, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + if (sys.version_info[0] == 3) and (type(signalName) is str): + signalName=signalName.encode('utf-8') + return c_ClearFloatSignal(clientID, signalName, operationMode) + +def simxClearIntegerSignal(clientID, signalName, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + if (sys.version_info[0] == 3) and (type(signalName) is str): + signalName=signalName.encode('utf-8') + return c_ClearIntegerSignal(clientID, signalName, operationMode) + +def simxClearStringSignal(clientID, signalName, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + if (sys.version_info[0] == 3) and (type(signalName) is str): + signalName=signalName.encode('utf-8') + return c_ClearStringSignal(clientID, signalName, operationMode) + +def simxGetFloatSignal(clientID, signalName, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + signalValue = ct.c_float() + if (sys.version_info[0] == 3) and (type(signalName) is str): + signalName=signalName.encode('utf-8') + return c_GetFloatSignal(clientID, signalName, ct.byref(signalValue), operationMode), signalValue.value + +def simxGetIntegerSignal(clientID, signalName, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + signalValue = ct.c_int() + if (sys.version_info[0] == 3) and (type(signalName) is str): + signalName=signalName.encode('utf-8') + return c_GetIntegerSignal(clientID, signalName, ct.byref(signalValue), operationMode), signalValue.value + +def simxGetStringSignal(clientID, signalName, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + signalLength = ct.c_int(); + signalValue = ct.POINTER(ct.c_ubyte)() + if (sys.version_info[0] == 3) and (type(signalName) is str): + signalName=signalName.encode('utf-8') + ret = c_GetStringSignal(clientID, signalName, ct.byref(signalValue), ct.byref(signalLength), operationMode) + + a = bytearray() + if ret == 0: + for i in range(signalLength.value): + a.append(signalValue[i]) + if sys.version_info[0] != 3: + a=str(a) + + return ret, a + +def simxGetAndClearStringSignal(clientID, signalName, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + signalLength = ct.c_int(); + signalValue = ct.POINTER(ct.c_ubyte)() + if (sys.version_info[0] == 3) and (type(signalName) is str): + signalName=signalName.encode('utf-8') + ret = c_GetAndClearStringSignal(clientID, signalName, ct.byref(signalValue), ct.byref(signalLength), operationMode) + + a = bytearray() + if ret == 0: + for i in range(signalLength.value): + a.append(signalValue[i]) + if sys.version_info[0] != 3: + a=str(a) + + return ret, a + +def simxReadStringStream(clientID, signalName, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + signalLength = ct.c_int(); + signalValue = ct.POINTER(ct.c_ubyte)() + if (sys.version_info[0] == 3) and (type(signalName) is str): + signalName=signalName.encode('utf-8') + ret = c_ReadStringStream(clientID, signalName, ct.byref(signalValue), ct.byref(signalLength), operationMode) + + a = bytearray() + if ret == 0: + for i in range(signalLength.value): + a.append(signalValue[i]) + if sys.version_info[0] != 3: + a=str(a) + + return ret, a + +def simxSetFloatSignal(clientID, signalName, signalValue, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + if (sys.version_info[0] == 3) and (type(signalName) is str): + signalName=signalName.encode('utf-8') + return c_SetFloatSignal(clientID, signalName, signalValue, operationMode) + +def simxSetIntegerSignal(clientID, signalName, signalValue, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + if (sys.version_info[0] == 3) and (type(signalName) is str): + signalName=signalName.encode('utf-8') + return c_SetIntegerSignal(clientID, signalName, signalValue, operationMode) + +def simxSetStringSignal(clientID, signalName, signalValue, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + sigV=signalValue + if sys.version_info[0] == 3: + if type(signalName) is str: + signalName=signalName.encode('utf-8') + if type(signalValue) is bytearray: + sigV = (ct.c_ubyte*len(signalValue))(*signalValue) + if type(signalValue) is str: + signalValue=signalValue.encode('utf-8') + sigV = (ct.c_ubyte*len(signalValue))(*signalValue) + else: + if type(signalValue) is bytearray: + sigV = (ct.c_ubyte*len(signalValue))(*signalValue) + if type(signalValue) is str: + signalValue=bytearray(signalValue) + sigV = (ct.c_ubyte*len(signalValue))(*signalValue) + sigV=ct.cast(sigV,ct.POINTER(ct.c_ubyte)) # IronPython needs this + return c_SetStringSignal(clientID, signalName, sigV, len(signalValue), operationMode) + +def simxAppendStringSignal(clientID, signalName, signalValue, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + sigV=signalValue + if sys.version_info[0] == 3: + if type(signalName) is str: + signalName=signalName.encode('utf-8') + if type(signalValue) is bytearray: + sigV = (ct.c_ubyte*len(signalValue))(*signalValue) + if type(signalValue) is str: + signalValue=signalValue.encode('utf-8') + sigV = (ct.c_ubyte*len(signalValue))(*signalValue) + else: + if type(signalValue) is bytearray: + sigV = (ct.c_ubyte*len(signalValue))(*signalValue) + if type(signalValue) is str: + signalValue=bytearray(signalValue) + sigV = (ct.c_ubyte*len(signalValue))(*signalValue) + sigV=ct.cast(sigV,ct.POINTER(ct.c_ubyte)) # IronPython needs this + return c_AppendStringSignal(clientID, signalName, sigV, len(signalValue), operationMode) + +def simxWriteStringStream(clientID, signalName, signalValue, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + sigV=signalValue + if sys.version_info[0] == 3: + if type(signalName) is str: + signalName=signalName.encode('utf-8') + if type(signalValue) is bytearray: + sigV = (ct.c_ubyte*len(signalValue))(*signalValue) + if type(signalValue) is str: + signalValue=signalValue.encode('utf-8') + sigV = (ct.c_ubyte*len(signalValue))(*signalValue) + else: + if type(signalValue) is bytearray: + sigV = (ct.c_ubyte*len(signalValue))(*signalValue) + if type(signalValue) is str: + signalValue=bytearray(signalValue) + sigV = (ct.c_ubyte*len(signalValue))(*signalValue) + sigV=ct.cast(sigV,ct.POINTER(ct.c_ubyte)) # IronPython needs this + return c_WriteStringStream(clientID, signalName, sigV, len(signalValue), operationMode) + +def simxGetObjectFloatParameter(clientID, objectHandle, parameterID, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + parameterValue = ct.c_float() + return c_GetObjectFloatParameter(clientID, objectHandle, parameterID, ct.byref(parameterValue), operationMode), parameterValue.value + +def simxSetObjectFloatParameter(clientID, objectHandle, parameterID, parameterValue, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_SetObjectFloatParameter(clientID, objectHandle, parameterID, parameterValue, operationMode) + +def simxGetObjectIntParameter(clientID, objectHandle, parameterID, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + parameterValue = ct.c_int() + return c_GetObjectIntParameter(clientID, objectHandle, parameterID, ct.byref(parameterValue), operationMode), parameterValue.value + +def simxSetObjectIntParameter(clientID, objectHandle, parameterID, parameterValue, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_SetObjectIntParameter(clientID, objectHandle, parameterID, parameterValue, operationMode) + +def simxGetModelProperty(clientID, objectHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + prop = ct.c_int() + return c_GetModelProperty(clientID, objectHandle, ct.byref(prop), operationMode), prop.value + +def simxSetModelProperty(clientID, objectHandle, prop, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_SetModelProperty(clientID, objectHandle, prop, operationMode) + +def simxStart(connectionAddress, connectionPort, waitUntilConnected, doNotReconnectOnceDisconnected, timeOutInMs, commThreadCycleInMs): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + if (sys.version_info[0] == 3) and (type(connectionAddress) is str): + connectionAddress=connectionAddress.encode('utf-8') + return c_Start(connectionAddress, connectionPort, waitUntilConnected, doNotReconnectOnceDisconnected, timeOutInMs, commThreadCycleInMs) + +def simxFinish(clientID): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_Finish(clientID) + +def simxGetPingTime(clientID): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + pingTime = ct.c_int() + return c_GetPingTime(clientID, ct.byref(pingTime)), pingTime.value + +def simxGetLastCmdTime(clientID): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_GetLastCmdTime(clientID) + +def simxSynchronousTrigger(clientID): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_SynchronousTrigger(clientID) + +def simxSynchronous(clientID, enable): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_Synchronous(clientID, enable) + +def simxPauseCommunication(clientID, enable): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_PauseCommunication(clientID, enable) + +def simxGetInMessageInfo(clientID, infoType): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + info = ct.c_int() + return c_GetInMessageInfo(clientID, infoType, ct.byref(info)), info.value + +def simxGetOutMessageInfo(clientID, infoType): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + info = ct.c_int() + return c_GetOutMessageInfo(clientID, infoType, ct.byref(info)), info.value + +def simxGetConnectionId(clientID): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_GetConnectionId(clientID) + +def simxCreateBuffer(bufferSize): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_CreateBuffer(bufferSize) + +def simxReleaseBuffer(buffer): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + return c_ReleaseBuffer(buffer) + +def simxTransferFile(clientID, filePathAndName, fileName_serverSide, timeOut, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + if (sys.version_info[0] == 3) and (type(filePathAndName) is str): + filePathAndName=filePathAndName.encode('utf-8') + return c_TransferFile(clientID, filePathAndName, fileName_serverSide, timeOut, operationMode) + +def simxEraseFile(clientID, fileName_serverSide, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + if (sys.version_info[0] == 3) and (type(fileName_serverSide) is str): + fileName_serverSide=fileName_serverSide.encode('utf-8') + return c_EraseFile(clientID, fileName_serverSide, operationMode) + +def simxCreateDummy(clientID, size, color, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + handle = ct.c_int() + if color != None: + c_color = (ct.c_ubyte*12)(*color) + else: + c_color = None + return c_CreateDummy(clientID, size, c_color, ct.byref(handle), operationMode), handle.value + +def simxQuery(clientID, signalName, signalValue, retSignalName, timeOutInMs): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + retSignalLength = ct.c_int(); + retSignalValue = ct.POINTER(ct.c_ubyte)() + + sigV=signalValue + if sys.version_info[0] == 3: + if type(signalName) is str: + signalName=signalName.encode('utf-8') + if type(retSignalName) is str: + retSignalName=retSignalName.encode('utf-8') + if type(signalValue) is bytearray: + sigV = (ct.c_ubyte*len(signalValue))(*signalValue) + if type(signalValue) is str: + signalValue=signalValue.encode('utf-8') + sigV = (ct.c_ubyte*len(signalValue))(*signalValue) + else: + if type(signalValue) is bytearray: + sigV = (ct.c_ubyte*len(signalValue))(*signalValue) + if type(signalValue) is str: + signalValue=bytearray(signalValue) + sigV = (ct.c_ubyte*len(signalValue))(*signalValue) + sigV=ct.cast(sigV,ct.POINTER(ct.c_ubyte)) # IronPython needs this + + ret = c_Query(clientID, signalName, sigV, len(signalValue), retSignalName, ct.byref(retSignalValue), ct.byref(retSignalLength), timeOutInMs) + + a = bytearray() + if ret == 0: + for i in range(retSignalLength.value): + a.append(retSignalValue[i]) + if sys.version_info[0] != 3: + a=str(a) + + return ret, a + +def simxGetObjectGroupData(clientID, objectType, dataType, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + handles =[] + intData =[] + floatData =[] + stringData =[] + handlesC = ct.c_int() + handlesP = ct.POINTER(ct.c_int)() + intDataC = ct.c_int() + intDataP = ct.POINTER(ct.c_int)() + floatDataC = ct.c_int() + floatDataP = ct.POINTER(ct.c_float)() + stringDataC = ct.c_int() + stringDataP = ct.POINTER(ct.c_char)() + ret = c_GetObjectGroupData(clientID, objectType, dataType, ct.byref(handlesC), ct.byref(handlesP), ct.byref(intDataC), ct.byref(intDataP), ct.byref(floatDataC), ct.byref(floatDataP), ct.byref(stringDataC), ct.byref(stringDataP), operationMode) + + if ret == 0: + for i in range(handlesC.value): + handles.append(handlesP[i]) + for i in range(intDataC.value): + intData.append(intDataP[i]) + for i in range(floatDataC.value): + floatData.append(floatDataP[i]) + s = 0 + for i in range(stringDataC.value): + a = bytearray() + while stringDataP[s] != b'\0': + if sys.version_info[0] == 3: + a.append(int.from_bytes(stringDataP[s],'big')) + else: + a.append(stringDataP[s]) + s += 1 + s += 1 #skip null + if sys.version_info[0] == 3: + a=str(a,'utf-8') + else: + a=str(a) + stringData.append(a) + + return ret, handles, intData, floatData, stringData + +def simxCallScriptFunction(clientID, scriptDescription, options, functionName, inputInts, inputFloats, inputStrings, inputBuffer, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + inputBufferV=inputBuffer + if sys.version_info[0] == 3: + if type(scriptDescription) is str: + scriptDescription=scriptDescription.encode('utf-8') + if type(functionName) is str: + functionName=functionName.encode('utf-8') + if type(inputBuffer) is bytearray: + inputBufferV = (ct.c_ubyte*len(inputBuffer))(*inputBuffer) + if type(inputBuffer) is str: + inputBuffer=inputBuffer.encode('utf-8') + inputBufferV = (ct.c_ubyte*len(inputBuffer))(*inputBuffer) + else: + if type(inputBuffer) is bytearray: + inputBufferV = (ct.c_ubyte*len(inputBuffer))(*inputBuffer) + if type(inputBuffer) is str: + inputBuffer=bytearray(inputBuffer) + inputBufferV = (ct.c_ubyte*len(inputBuffer))(*inputBuffer) + inputBufferV=ct.cast(inputBufferV,ct.POINTER(ct.c_ubyte)) # IronPython needs this + + c_inInts = (ct.c_int*len(inputInts))(*inputInts) + c_inInts = ct.cast(c_inInts,ct.POINTER(ct.c_int)) # IronPython needs this + c_inFloats = (ct.c_float*len(inputFloats))(*inputFloats) + c_inFloats = ct.cast(c_inFloats,ct.POINTER(ct.c_float)) # IronPython needs this + + concatStr=''.encode('utf-8') + for i in range(len(inputStrings)): + a=inputStrings[i] + a=a+'\0' + if type(a) is str: + a=a.encode('utf-8') + concatStr=concatStr+a + c_inStrings = (ct.c_char*len(concatStr))(*concatStr) + + intDataOut =[] + floatDataOut =[] + stringDataOut =[] + bufferOut =bytearray() + + intDataC = ct.c_int() + intDataP = ct.POINTER(ct.c_int)() + floatDataC = ct.c_int() + floatDataP = ct.POINTER(ct.c_float)() + stringDataC = ct.c_int() + stringDataP = ct.POINTER(ct.c_char)() + bufferS = ct.c_int() + bufferP = ct.POINTER(ct.c_ubyte)() + + ret = c_CallScriptFunction(clientID,scriptDescription,options,functionName,len(inputInts),c_inInts,len(inputFloats),c_inFloats,len(inputStrings),c_inStrings,len(inputBuffer),inputBufferV,ct.byref(intDataC),ct.byref(intDataP),ct.byref(floatDataC),ct.byref(floatDataP),ct.byref(stringDataC),ct.byref(stringDataP),ct.byref(bufferS),ct.byref(bufferP),operationMode) + + if ret == 0: + for i in range(intDataC.value): + intDataOut.append(intDataP[i]) + for i in range(floatDataC.value): + floatDataOut.append(floatDataP[i]) + s = 0 + for i in range(stringDataC.value): + a = bytearray() + while stringDataP[s] != b'\0': + if sys.version_info[0] == 3: + a.append(int.from_bytes(stringDataP[s],'big')) + else: + a.append(stringDataP[s]) + s += 1 + s += 1 #skip null + if sys.version_info[0] == 3: + a=str(a,'utf-8') + else: + a=str(a) + stringDataOut.append(a) + for i in range(bufferS.value): + bufferOut.append(bufferP[i]) + if sys.version_info[0] != 3: + bufferOut=str(bufferOut) + + return ret, intDataOut, floatDataOut, stringDataOut, bufferOut + +def simxGetObjectVelocity(clientID, objectHandle, operationMode): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + linearVel = (ct.c_float*3)() + angularVel = (ct.c_float*3)() + ret = c_GetObjectVelocity(clientID, objectHandle, linearVel, angularVel, operationMode) + arr1 = [] + for i in range(3): + arr1.append(linearVel[i]) + arr2 = [] + for i in range(3): + arr2.append(angularVel[i]) + return ret, arr1, arr2 + +def simxPackInts(intList): + ''' + Please have a look at the function description/documentation in the V-REP user manual + ''' + + if sys.version_info[0] == 3: + s=bytes() + for i in range(len(intList)): + s=s+struct.pack('. +# ------------------------------------------------------------------- +# +# This file was automatically created for V-REP release V3.3.2 on August 29th 2016 + +#constants +#Scene object types. Values are serialized +sim_object_shape_type =0 +sim_object_joint_type =1 +sim_object_graph_type =2 +sim_object_camera_type =3 +sim_object_dummy_type =4 +sim_object_proximitysensor_type =5 +sim_object_reserved1 =6 +sim_object_reserved2 =7 +sim_object_path_type =8 +sim_object_visionsensor_type =9 +sim_object_volume_type =10 +sim_object_mill_type =11 +sim_object_forcesensor_type =12 +sim_object_light_type =13 +sim_object_mirror_type =14 + +#General object types. Values are serialized +sim_appobj_object_type =109 +sim_appobj_collision_type =110 +sim_appobj_distance_type =111 +sim_appobj_simulation_type =112 +sim_appobj_ik_type =113 +sim_appobj_constraintsolver_type=114 +sim_appobj_collection_type =115 +sim_appobj_ui_type =116 +sim_appobj_script_type =117 +sim_appobj_pathplanning_type =118 +sim_appobj_RESERVED_type =119 +sim_appobj_texture_type =120 + +# Ik calculation methods. Values are serialized +sim_ik_pseudo_inverse_method =0 +sim_ik_damped_least_squares_method =1 +sim_ik_jacobian_transpose_method =2 + +# Ik constraints. Values are serialized +sim_ik_x_constraint =1 +sim_ik_y_constraint =2 +sim_ik_z_constraint =4 +sim_ik_alpha_beta_constraint=8 +sim_ik_gamma_constraint =16 +sim_ik_avoidance_constraint =64 + +# Ik calculation results +sim_ikresult_not_performed =0 +sim_ikresult_success =1 +sim_ikresult_fail =2 + +# Scene object sub-types. Values are serialized +# Light sub-types +sim_light_omnidirectional_subtype =1 +sim_light_spot_subtype =2 +sim_light_directional_subtype =3 +# Joint sub-types +sim_joint_revolute_subtype =10 +sim_joint_prismatic_subtype =11 +sim_joint_spherical_subtype =12 +# Shape sub-types +sim_shape_simpleshape_subtype =20 +sim_shape_multishape_subtype =21 +# Proximity sensor sub-types +sim_proximitysensor_pyramid_subtype =30 +sim_proximitysensor_cylinder_subtype=31 +sim_proximitysensor_disc_subtype =32 +sim_proximitysensor_cone_subtype =33 +sim_proximitysensor_ray_subtype =34 +# Mill sub-types +sim_mill_pyramid_subtype =40 +sim_mill_cylinder_subtype =41 +sim_mill_disc_subtype =42 +sim_mill_cone_subtype =42 +# No sub-type +sim_object_no_subtype =200 + + +#Scene object main properties (serialized) +sim_objectspecialproperty_collidable =0x0001 +sim_objectspecialproperty_measurable =0x0002 +#reserved =0x0004 +#reserved =0x0008 +sim_objectspecialproperty_detectable_ultrasonic =0x0010 +sim_objectspecialproperty_detectable_infrared =0x0020 +sim_objectspecialproperty_detectable_laser =0x0040 +sim_objectspecialproperty_detectable_inductive =0x0080 +sim_objectspecialproperty_detectable_capacitive =0x0100 +sim_objectspecialproperty_renderable =0x0200 +sim_objectspecialproperty_detectable_all =sim_objectspecialproperty_detectable_ultrasonic|sim_objectspecialproperty_detectable_infrared|sim_objectspecialproperty_detectable_laser|sim_objectspecialproperty_detectable_inductive|sim_objectspecialproperty_detectable_capacitive +sim_objectspecialproperty_cuttable =0x0400 +sim_objectspecialproperty_pathplanning_ignored =0x0800 + +# Model properties (serialized) +sim_modelproperty_not_collidable =0x0001 +sim_modelproperty_not_measurable =0x0002 +sim_modelproperty_not_renderable =0x0004 +sim_modelproperty_not_detectable =0x0008 +sim_modelproperty_not_cuttable =0x0010 +sim_modelproperty_not_dynamic =0x0020 +sim_modelproperty_not_respondable =0x0040 # cannot be selected if sim_modelproperty_not_dynamic is not selected +sim_modelproperty_not_reset =0x0080 # Model is not reset at simulation end. This flag is cleared at simulation end +sim_modelproperty_not_visible =0x0100 # Whole model is invisible independent of local visibility settings +sim_modelproperty_not_model =0xf000 # object is not a model + + +# Check the documentation instead of comments below!! +# Following messages are dispatched to the Lua-message container +sim_message_ui_button_state_change =0 # a UI button slider etc. changed (due to a user's action). aux[0]=UI handle aux[1]=button handle aux[2]=button attributes aux[3]=slider position (if slider) +sim_message_reserved9 =1 # Do not use +sim_message_object_selection_changed=2 +sim_message_reserved10 =3 # do not use +sim_message_model_loaded =4 +sim_message_reserved11 =5 # do not use +sim_message_keypress =6 # a key was pressed while the focus was on a page (aux[0]=key aux[1]=ctrl and shift key state) +sim_message_bannerclicked =7 # a banner was clicked (aux[0]=banner ID) + + +# Following messages are dispatched only to the C-API (not available from Lua) +sim_message_for_c_api_only_start =0x100 # Do not use +sim_message_reserved1 =0x101 # Do not use +sim_message_reserved2 =0x102 # Do not use +sim_message_reserved3 =0x103 # Do not use +sim_message_eventcallback_scenesave =0x104 # about to save a scene +sim_message_eventcallback_modelsave =0x105 # about to save a model (current selection will be saved) +sim_message_eventcallback_moduleopen =0x106 # called when simOpenModule in Lua is called +sim_message_eventcallback_modulehandle =0x107 # called when simHandleModule in Lua is called with argument false +sim_message_eventcallback_moduleclose =0x108 # called when simCloseModule in Lua is called +sim_message_reserved4 =0x109 # Do not use +sim_message_reserved5 =0x10a # Do not use +sim_message_reserved6 =0x10b # Do not use +sim_message_reserved7 =0x10c # Do not use +sim_message_eventcallback_instancepass =0x10d # Called once every main application loop pass. auxiliaryData[0] contains event flags of events that happened since last time +sim_message_eventcallback_broadcast =0x10e +sim_message_eventcallback_imagefilter_enumreset =0x10f +sim_message_eventcallback_imagefilter_enumerate =0x110 +sim_message_eventcallback_imagefilter_adjustparams =0x111 +sim_message_eventcallback_imagefilter_reserved =0x112 +sim_message_eventcallback_imagefilter_process =0x113 +sim_message_eventcallback_reserved1 =0x114 # do not use +sim_message_eventcallback_reserved2 =0x115 # do not use +sim_message_eventcallback_reserved3 =0x116 # do not use +sim_message_eventcallback_reserved4 =0x117 # do not use +sim_message_eventcallback_abouttoundo =0x118 # the undo button was hit and a previous state is about to be restored +sim_message_eventcallback_undoperformed =0x119 # the undo button was hit and a previous state restored +sim_message_eventcallback_abouttoredo =0x11a # the redo button was hit and a future state is about to be restored +sim_message_eventcallback_redoperformed =0x11b # the redo button was hit and a future state restored +sim_message_eventcallback_scripticondblclick =0x11c # script icon was double clicked. (aux[0]=object handle associated with script set replyData[0] to 1 if script should not be opened) +sim_message_eventcallback_simulationabouttostart =0x11d +sim_message_eventcallback_simulationended =0x11e +sim_message_eventcallback_reserved5 =0x11f # do not use +sim_message_eventcallback_keypress =0x120 # a key was pressed while the focus was on a page (aux[0]=key aux[1]=ctrl and shift key state) +sim_message_eventcallback_modulehandleinsensingpart =0x121 # called when simHandleModule in Lua is called with argument true +sim_message_eventcallback_renderingpass =0x122 # called just before the scene is rendered +sim_message_eventcallback_bannerclicked =0x123 # called when a banner was clicked (aux[0]=banner ID) +sim_message_eventcallback_menuitemselected =0x124 # auxiliaryData[0] indicates the handle of the item auxiliaryData[1] indicates the state of the item +sim_message_eventcallback_refreshdialogs =0x125 # aux[0]=refresh degree (0=light 1=medium 2=full) +sim_message_eventcallback_sceneloaded =0x126 +sim_message_eventcallback_modelloaded =0x127 +sim_message_eventcallback_instanceswitch =0x128 +sim_message_eventcallback_guipass =0x129 +sim_message_eventcallback_mainscriptabouttobecalled =0x12a +sim_message_eventcallback_rmlposition =0x12b #the command simRMLPosition was called. The appropriate plugin should handle the call +sim_message_eventcallback_rmlvelocity =0x12c # the command simRMLVelocity was called. The appropriate plugin should handle the call +sim_message_simulation_start_resume_request =0x1000 +sim_message_simulation_pause_request =0x1001 +sim_message_simulation_stop_request =0x1002 + +# Scene object properties. Combine with the | operator +sim_objectproperty_reserved1 =0x0000 +sim_objectproperty_reserved2 =0x0001 +sim_objectproperty_reserved3 =0x0002 +sim_objectproperty_reserved4 =0x0003 +sim_objectproperty_reserved5 =0x0004 # formerly sim_objectproperty_visible +sim_objectproperty_reserved6 =0x0008 # formerly sim_objectproperty_wireframe +sim_objectproperty_collapsed =0x0010 +sim_objectproperty_selectable =0x0020 +sim_objectproperty_reserved7 =0x0040 +sim_objectproperty_selectmodelbaseinstead =0x0080 +sim_objectproperty_dontshowasinsidemodel =0x0100 +# reserved =0x0200 +sim_objectproperty_canupdatedna =0x0400 +sim_objectproperty_selectinvisible =0x0800 +sim_objectproperty_depthinvisible =0x1000 + + +# type of arguments (input and output) for custom lua commands +sim_lua_arg_nil =0 +sim_lua_arg_bool =1 +sim_lua_arg_int =2 +sim_lua_arg_float =3 +sim_lua_arg_string =4 +sim_lua_arg_invalid =5 +sim_lua_arg_table =8 + +# custom user interface properties. Values are serialized. +sim_ui_property_visible =0x0001 +sim_ui_property_visibleduringsimulationonly =0x0002 +sim_ui_property_moveable =0x0004 +sim_ui_property_relativetoleftborder =0x0008 +sim_ui_property_relativetotopborder =0x0010 +sim_ui_property_fixedwidthfont =0x0020 +sim_ui_property_systemblock =0x0040 +sim_ui_property_settocenter =0x0080 +sim_ui_property_rolledup =0x0100 +sim_ui_property_selectassociatedobject =0x0200 +sim_ui_property_visiblewhenobjectselected =0x0400 + + +# button properties. Values are serialized. +sim_buttonproperty_button =0x0000 +sim_buttonproperty_label =0x0001 +sim_buttonproperty_slider =0x0002 +sim_buttonproperty_editbox =0x0003 +sim_buttonproperty_staydown =0x0008 +sim_buttonproperty_enabled =0x0010 +sim_buttonproperty_borderless =0x0020 +sim_buttonproperty_horizontallycentered =0x0040 +sim_buttonproperty_ignoremouse =0x0080 +sim_buttonproperty_isdown =0x0100 +sim_buttonproperty_transparent =0x0200 +sim_buttonproperty_nobackgroundcolor =0x0400 +sim_buttonproperty_rollupaction =0x0800 +sim_buttonproperty_closeaction =0x1000 +sim_buttonproperty_verticallycentered =0x2000 +sim_buttonproperty_downupevent =0x4000 + + +# Simulation status +sim_simulation_stopped =0x00 # Simulation is stopped +sim_simulation_paused =0x08 # Simulation is paused +sim_simulation_advancing =0x10 # Simulation is advancing +sim_simulation_advancing_firstafterstop =sim_simulation_advancing|0x00 # First simulation pass (1x) +sim_simulation_advancing_running =sim_simulation_advancing|0x01 # Normal simulation pass (>=1x) +# reserved =sim_simulation_advancing|0x02 +sim_simulation_advancing_lastbeforepause =sim_simulation_advancing|0x03 # Last simulation pass before pause (1x) +sim_simulation_advancing_firstafterpause =sim_simulation_advancing|0x04 # First simulation pass after pause (1x) +sim_simulation_advancing_abouttostop =sim_simulation_advancing|0x05 # "Trying to stop" simulation pass (>=1x) +sim_simulation_advancing_lastbeforestop =sim_simulation_advancing|0x06 # Last simulation pass (1x) + + +# Script execution result (first return value) +sim_script_no_error =0 +sim_script_main_script_nonexistent =1 +sim_script_main_script_not_called =2 +sim_script_reentrance_error =4 +sim_script_lua_error =8 +sim_script_call_error =16 + + + # Script types (serialized!) +sim_scripttype_mainscript =0 +sim_scripttype_childscript =1 +sim_scripttype_jointctrlcallback =4 +sim_scripttype_contactcallback =5 +sim_scripttype_customizationscript =6 +sim_scripttype_generalcallback =7 + +# API call error messages +sim_api_errormessage_ignore =0 # does not memorize nor output errors +sim_api_errormessage_report =1 # memorizes errors (default for C-API calls) +sim_api_errormessage_output =2 # memorizes and outputs errors (default for Lua-API calls) + + +# special argument of some functions +sim_handle_all =-2 +sim_handle_all_except_explicit =-3 +sim_handle_self =-4 +sim_handle_main_script =-5 +sim_handle_tree =-6 +sim_handle_chain =-7 +sim_handle_single =-8 +sim_handle_default =-9 +sim_handle_all_except_self =-10 +sim_handle_parent =-11 + + +# special handle flags +sim_handleflag_assembly =0x400000 +sim_handleflag_model =0x800000 + + +# distance calculation methods (serialized) +sim_distcalcmethod_dl =0 +sim_distcalcmethod_dac =1 +sim_distcalcmethod_max_dl_dac =2 +sim_distcalcmethod_dl_and_dac =3 +sim_distcalcmethod_sqrt_dl2_and_dac2=4 +sim_distcalcmethod_dl_if_nonzero =5 +sim_distcalcmethod_dac_if_nonzero =6 + + + # Generic dialog styles +sim_dlgstyle_message =0 +sim_dlgstyle_input =1 +sim_dlgstyle_ok =2 +sim_dlgstyle_ok_cancel =3 +sim_dlgstyle_yes_no =4 +sim_dlgstyle_dont_center =32# can be combined with one of above values. Only with this flag can the position of the related UI be set just after dialog creation + + # Generic dialog return values +sim_dlgret_still_open =0 +sim_dlgret_ok =1 +sim_dlgret_cancel =2 +sim_dlgret_yes =3 +sim_dlgret_no =4 + + +# Path properties +sim_pathproperty_show_line =0x0001 +sim_pathproperty_show_orientation =0x0002 +sim_pathproperty_closed_path =0x0004 +sim_pathproperty_automatic_orientation =0x0008 +sim_pathproperty_invert_velocity =0x0010 +sim_pathproperty_infinite_acceleration =0x0020 +sim_pathproperty_flat_path =0x0040 +sim_pathproperty_show_position =0x0080 +sim_pathproperty_auto_velocity_profile_translation =0x0100 +sim_pathproperty_auto_velocity_profile_rotation =0x0200 +sim_pathproperty_endpoints_at_zero =0x0400 +sim_pathproperty_keep_x_up =0x0800 + + + # drawing objects +# following are mutually exclusive +sim_drawing_points =0 # 3 values per point (point size in pixels) +sim_drawing_lines =1 # 6 values per line (line size in pixels) +sim_drawing_triangles =2 # 9 values per triangle +sim_drawing_trianglepoints =3 # 6 values per point (3 for triangle position 3 for triangle normal vector) (triangle size in meters) +sim_drawing_quadpoints =4 # 6 values per point (3 for quad position 3 for quad normal vector) (quad size in meters) +sim_drawing_discpoints =5 # 6 values per point (3 for disc position 3 for disc normal vector) (disc size in meters) +sim_drawing_cubepoints =6 # 6 values per point (3 for cube position 3 for cube normal vector) (cube size in meters) +sim_drawing_spherepoints =7 # 3 values per point (sphere size in meters) + +# following can be or-combined +sim_drawing_itemcolors =0x00020 # +3 values per item (each item has its own ambient color (rgb values)). + # Mutually exclusive with sim_drawing_vertexcolors +sim_drawing_vertexcolors =0x00040 # +3 values per vertex (each vertex has its own ambient color (rgb values). Only for sim_drawing_lines (+6) and for sim_drawing_triangles(+9)). Mutually exclusive with sim_drawing_itemcolors +sim_drawing_itemsizes =0x00080 # +1 value per item (each item has its own size). Not for sim_drawing_triangles +sim_drawing_backfaceculling =0x00100 # back faces are not displayed for all items +sim_drawing_wireframe =0x00200 # all items displayed in wireframe +sim_drawing_painttag =0x00400 # all items are tagged as paint (for additinal processing at a later stage) +sim_drawing_followparentvisibility =0x00800 # if the object is associated with a scene object then it follows that visibility otherwise it is always visible +sim_drawing_cyclic =0x01000 # if the max item count was reached then the first items are overwritten. +sim_drawing_50percenttransparency =0x02000 # the drawing object will be 50% transparent +sim_drawing_25percenttransparency =0x04000 # the drawing object will be 25% transparent +sim_drawing_12percenttransparency =0x08000 # the drawing object will be 12.5% transparent +sim_drawing_emissioncolor =0x10000 # When used in combination with sim_drawing_itemcolors or sim_drawing_vertexcolors then the specified colors will be for the emissive component +sim_drawing_facingcamera =0x20000 # Only for trianglepoints quadpoints discpoints and cubepoints. If specified the normal verctor is calculated to face the camera (each item data requires 3 values less) +sim_drawing_overlay =0x40000 # When specified objects are always drawn on top of "regular objects" +sim_drawing_itemtransparency =0x80000 # +1 value per item (each item has its own transparency value (0-1)). Not compatible with sim_drawing_vertexcolors + +# banner values +# following can be or-combined +sim_banner_left =0x00001 # Banners display on the left of the specified point +sim_banner_right =0x00002 # Banners display on the right of the specified point +sim_banner_nobackground =0x00004 # Banners have no background rectangle +sim_banner_overlay =0x00008 # When specified banners are always drawn on top of "regular objects" +sim_banner_followparentvisibility =0x00010 # if the object is associated with a scene object then it follows that visibility otherwise it is always visible +sim_banner_clickselectsparent =0x00020 # if the object is associated with a scene object then clicking the banner will select the scene object +sim_banner_clicktriggersevent =0x00040 # if the banner is clicked an event is triggered (sim_message_eventcallback_bannerclicked and sim_message_bannerclicked are generated) +sim_banner_facingcamera =0x00080 # If specified the banner will always face the camera by rotating around the banner's vertical axis (y-axis) +sim_banner_fullyfacingcamera =0x00100 # If specified the banner will always fully face the camera (the banner's orientation is same as the camera looking at it) +sim_banner_backfaceculling =0x00200 # If specified the banner will only be visible from one side +sim_banner_keepsamesize =0x00400 # If specified the banner will always appear in the same size. In that case size represents the character height in pixels +sim_banner_bitmapfont =0x00800 # If specified a fixed-size bitmap font is used. The text will also always fully face the camera and be right + # to the specified position. Bitmap fonts are not clickable + + +# particle objects following are mutually exclusive +sim_particle_points1 =0 # 6 values per point (pt1 and pt2. Pt1 is start position pt2-pt1 is the initial velocity vector). i + #Point is 1 pixel big. Only appearance is a point internally handled as a perfect sphere +sim_particle_points2 =1 # 6 values per point. Point is 2 pixel big. Only appearance is a point internally handled as a perfect sphere +sim_particle_points4 =2 # 6 values per point. Point is 4 pixel big. Only appearance is a point internally handled as a perfect sphere +sim_particle_roughspheres =3 # 6 values per sphere. Only appearance is rough. Internally a perfect sphere +sim_particle_spheres =4 # 6 values per sphere. Internally a perfect sphere + + + + +# following can be or-combined +sim_particle_respondable1to4 =0x0020 # the particles are respondable against shapes (against all objects that have at least one bit 1-4 activated in the global respondable mask) +sim_particle_respondable5to8 =0x0040 # the particles are respondable against shapes (against all objects that have at least one bit 5-8 activated in the global respondable mask) +sim_particle_particlerespondable =0x0080 # the particles are respondable against each other +sim_particle_ignoresgravity =0x0100 # the particles ignore the effect of gravity. Not compatible with sim_particle_water +sim_particle_invisible =0x0200 # the particles are invisible +sim_particle_itemsizes =0x0400 # +1 value per particle (each particle can have a different size) +sim_particle_itemdensities =0x0800 # +1 value per particle (each particle can have a different density) +sim_particle_itemcolors =0x1000 # +3 values per particle (each particle can have a different color) +sim_particle_cyclic =0x2000 # if the max item count was reached then the first items are overwritten. +sim_particle_emissioncolor =0x4000 # When used in combination with sim_particle_itemcolors then the specified colors will be for the emissive component +sim_particle_water =0x8000 # the particles are water particles (no weight in the water (i.e. when z<0)). Not compatible with sim_particle_ignoresgravity +sim_particle_painttag =0x10000 # The particles can be seen by vision sensors (sim_particle_invisible must not be set) + + + + +# custom user interface menu attributes +sim_ui_menu_title =1 +sim_ui_menu_minimize =2 +sim_ui_menu_close =4 +sim_ui_menu_systemblock =8 + + + +# Boolean parameters +sim_boolparam_hierarchy_visible =0 +sim_boolparam_console_visible =1 +sim_boolparam_collision_handling_enabled =2 +sim_boolparam_distance_handling_enabled =3 +sim_boolparam_ik_handling_enabled =4 +sim_boolparam_gcs_handling_enabled =5 +sim_boolparam_dynamics_handling_enabled =6 +sim_boolparam_joint_motion_handling_enabled =7 +sim_boolparam_path_motion_handling_enabled =8 +sim_boolparam_proximity_sensor_handling_enabled =9 +sim_boolparam_vision_sensor_handling_enabled =10 +sim_boolparam_mill_handling_enabled =11 +sim_boolparam_browser_visible =12 +sim_boolparam_scene_and_model_load_messages =13 +sim_reserved0 =14 +sim_boolparam_shape_textures_are_visible =15 +sim_boolparam_display_enabled =16 +sim_boolparam_infotext_visible =17 +sim_boolparam_statustext_open =18 +sim_boolparam_fog_enabled =19 +sim_boolparam_rml2_available =20 +sim_boolparam_rml4_available =21 +sim_boolparam_mirrors_enabled =22 +sim_boolparam_aux_clip_planes_enabled =23 +sim_boolparam_full_model_copy_from_api =24 +sim_boolparam_realtime_simulation =25 +sim_boolparam_force_show_wireless_emission =27 +sim_boolparam_force_show_wireless_reception =28 +sim_boolparam_video_recording_triggered =29 +sim_boolparam_threaded_rendering_enabled =32 +sim_boolparam_fullscreen =33 +sim_boolparam_headless =34 +sim_boolparam_hierarchy_toolbarbutton_enabled =35 +sim_boolparam_browser_toolbarbutton_enabled =36 +sim_boolparam_objectshift_toolbarbutton_enabled =37 +sim_boolparam_objectrotate_toolbarbutton_enabled=38 +sim_boolparam_force_calcstruct_all_visible =39 +sim_boolparam_force_calcstruct_all =40 +sim_boolparam_exit_request =41 +sim_boolparam_play_toolbarbutton_enabled =42 +sim_boolparam_pause_toolbarbutton_enabled =43 +sim_boolparam_stop_toolbarbutton_enabled =44 +sim_boolparam_waiting_for_trigger =45 + + +# Integer parameters +sim_intparam_error_report_mode =0 # Check sim_api_errormessage_... constants above for valid values +sim_intparam_program_version =1 # e.g Version 2.1.4 --> 20104. Can only be read +sim_intparam_instance_count =2 # do not use anymore (always returns 1 since V-REP 2.5.11) +sim_intparam_custom_cmd_start_id =3 # can only be read +sim_intparam_compilation_version =4 # 0=evaluation version 1=full version 2=player version. Can only be read +sim_intparam_current_page =5 +sim_intparam_flymode_camera_handle =6 # can only be read +sim_intparam_dynamic_step_divider =7 # can only be read +sim_intparam_dynamic_engine =8 # 0=Bullet 1=ODE. 2=Vortex. +sim_intparam_server_port_start =9 # can only be read +sim_intparam_server_port_range =10 # can only be read +sim_intparam_visible_layers =11 +sim_intparam_infotext_style =12 +sim_intparam_settings =13 +sim_intparam_edit_mode_type =14 # can only be read +sim_intparam_server_port_next =15 # is initialized at sim_intparam_server_port_start +sim_intparam_qt_version =16 # version of the used Qt framework +sim_intparam_event_flags_read =17 # can only be read +sim_intparam_event_flags_read_clear =18 # can only be read +sim_intparam_platform =19 # can only be read +sim_intparam_scene_unique_id =20 # can only be read +sim_intparam_work_thread_count =21 +sim_intparam_mouse_x =22 +sim_intparam_mouse_y =23 +sim_intparam_core_count =24 +sim_intparam_work_thread_calc_time_ms =25 +sim_intparam_idle_fps =26 +sim_intparam_prox_sensor_select_down =27 +sim_intparam_prox_sensor_select_up =28 +sim_intparam_stop_request_counter =29 +sim_intparam_program_revision =30 +sim_intparam_mouse_buttons =31 +sim_intparam_dynamic_warning_disabled_mask =32 +sim_intparam_simulation_warning_disabled_mask =33 +sim_intparam_scene_index =34 +sim_intparam_motionplanning_seed =35 +sim_intparam_speedmodifier =36 + +# Float parameters +sim_floatparam_rand=0 # random value (0.0-1.0) +sim_floatparam_simulation_time_step =1 +sim_floatparam_stereo_distance =2 + +# String parameters +sim_stringparam_application_path=0 # path of V-REP's executable +sim_stringparam_video_filename=1 +sim_stringparam_app_arg1 =2 +sim_stringparam_app_arg2 =3 +sim_stringparam_app_arg3 =4 +sim_stringparam_app_arg4 =5 +sim_stringparam_app_arg5 =6 +sim_stringparam_app_arg6 =7 +sim_stringparam_app_arg7 =8 +sim_stringparam_app_arg8 =9 +sim_stringparam_app_arg9 =10 +sim_stringparam_scene_path_and_name =13 + +# Array parameters +sim_arrayparam_gravity =0 +sim_arrayparam_fog =1 +sim_arrayparam_fog_color =2 +sim_arrayparam_background_color1=3 +sim_arrayparam_background_color2=4 +sim_arrayparam_ambient_light =5 +sim_arrayparam_random_euler =6 + +sim_objintparam_visibility_layer= 10 +sim_objfloatparam_abs_x_velocity= 11 +sim_objfloatparam_abs_y_velocity= 12 +sim_objfloatparam_abs_z_velocity= 13 +sim_objfloatparam_abs_rot_velocity= 14 +sim_objfloatparam_objbbox_min_x= 15 +sim_objfloatparam_objbbox_min_y= 16 +sim_objfloatparam_objbbox_min_z= 17 +sim_objfloatparam_objbbox_max_x= 18 +sim_objfloatparam_objbbox_max_y= 19 +sim_objfloatparam_objbbox_max_z= 20 +sim_objfloatparam_modelbbox_min_x= 21 +sim_objfloatparam_modelbbox_min_y= 22 +sim_objfloatparam_modelbbox_min_z= 23 +sim_objfloatparam_modelbbox_max_x= 24 +sim_objfloatparam_modelbbox_max_y= 25 +sim_objfloatparam_modelbbox_max_z= 26 +sim_objintparam_collection_self_collision_indicator= 27 +sim_objfloatparam_transparency_offset= 28 +sim_objintparam_child_role= 29 +sim_objintparam_parent_role= 30 +sim_objintparam_manipulation_permissions= 31 +sim_objintparam_illumination_handle= 32 + +sim_visionfloatparam_near_clipping= 1000 +sim_visionfloatparam_far_clipping= 1001 +sim_visionintparam_resolution_x= 1002 +sim_visionintparam_resolution_y= 1003 +sim_visionfloatparam_perspective_angle= 1004 +sim_visionfloatparam_ortho_size= 1005 +sim_visionintparam_disabled_light_components= 1006 +sim_visionintparam_rendering_attributes= 1007 +sim_visionintparam_entity_to_render= 1008 +sim_visionintparam_windowed_size_x= 1009 +sim_visionintparam_windowed_size_y= 1010 +sim_visionintparam_windowed_pos_x= 1011 +sim_visionintparam_windowed_pos_y= 1012 +sim_visionintparam_pov_focal_blur= 1013 +sim_visionfloatparam_pov_blur_distance= 1014 +sim_visionfloatparam_pov_aperture= 1015 +sim_visionintparam_pov_blur_sampled= 1016 +sim_visionintparam_render_mode= 1017 + +sim_jointintparam_motor_enabled= 2000 +sim_jointintparam_ctrl_enabled= 2001 +sim_jointfloatparam_pid_p= 2002 +sim_jointfloatparam_pid_i= 2003 +sim_jointfloatparam_pid_d= 2004 +sim_jointfloatparam_intrinsic_x= 2005 +sim_jointfloatparam_intrinsic_y= 2006 +sim_jointfloatparam_intrinsic_z= 2007 +sim_jointfloatparam_intrinsic_qx= 2008 +sim_jointfloatparam_intrinsic_qy= 2009 +sim_jointfloatparam_intrinsic_qz= 2010 +sim_jointfloatparam_intrinsic_qw= 2011 +sim_jointfloatparam_velocity= 2012 +sim_jointfloatparam_spherical_qx= 2013 +sim_jointfloatparam_spherical_qy= 2014 +sim_jointfloatparam_spherical_qz= 2015 +sim_jointfloatparam_spherical_qw= 2016 +sim_jointfloatparam_upper_limit= 2017 +sim_jointfloatparam_kc_k= 2018 +sim_jointfloatparam_kc_c= 2019 +sim_jointfloatparam_ik_weight= 2021 +sim_jointfloatparam_error_x= 2022 +sim_jointfloatparam_error_y= 2023 +sim_jointfloatparam_error_z= 2024 +sim_jointfloatparam_error_a= 2025 +sim_jointfloatparam_error_b= 2026 +sim_jointfloatparam_error_g= 2027 +sim_jointfloatparam_error_pos= 2028 +sim_jointfloatparam_error_angle= 2029 +sim_jointintparam_velocity_lock= 2030 +sim_jointintparam_vortex_dep_handle= 2031 +sim_jointfloatparam_vortex_dep_multiplication= 2032 +sim_jointfloatparam_vortex_dep_offset= 2033 + +sim_shapefloatparam_init_velocity_x= 3000 +sim_shapefloatparam_init_velocity_y= 3001 +sim_shapefloatparam_init_velocity_z= 3002 +sim_shapeintparam_static= 3003 +sim_shapeintparam_respondable= 3004 +sim_shapefloatparam_mass= 3005 +sim_shapefloatparam_texture_x= 3006 +sim_shapefloatparam_texture_y= 3007 +sim_shapefloatparam_texture_z= 3008 +sim_shapefloatparam_texture_a= 3009 +sim_shapefloatparam_texture_b= 3010 +sim_shapefloatparam_texture_g= 3011 +sim_shapefloatparam_texture_scaling_x= 3012 +sim_shapefloatparam_texture_scaling_y= 3013 +sim_shapeintparam_culling= 3014 +sim_shapeintparam_wireframe= 3015 +sim_shapeintparam_compound= 3016 +sim_shapeintparam_convex= 3017 +sim_shapeintparam_convex_check= 3018 +sim_shapeintparam_respondable_mask= 3019 +sim_shapefloatparam_init_velocity_a= 3020 +sim_shapefloatparam_init_velocity_b= 3021 +sim_shapefloatparam_init_velocity_g= 3022 +sim_shapestringparam_color_name= 3023 +sim_shapeintparam_edge_visibility= 3024 +sim_shapefloatparam_shading_angle= 3025 +sim_shapefloatparam_edge_angle= 3026 +sim_shapeintparam_edge_borders_hidden= 3027 + +sim_proxintparam_ray_invisibility= 4000 + +sim_forcefloatparam_error_x= 5000 +sim_forcefloatparam_error_y= 5001 +sim_forcefloatparam_error_z= 5002 +sim_forcefloatparam_error_a= 5003 +sim_forcefloatparam_error_b= 5004 +sim_forcefloatparam_error_g= 5005 +sim_forcefloatparam_error_pos= 5006 +sim_forcefloatparam_error_angle= 5007 + +sim_lightintparam_pov_casts_shadows= 8000 + +sim_cameraintparam_disabled_light_components= 9000 +sim_camerafloatparam_perspective_angle= 9001 +sim_camerafloatparam_ortho_size= 9002 +sim_cameraintparam_rendering_attributes= 9003 +sim_cameraintparam_pov_focal_blur= 9004 +sim_camerafloatparam_pov_blur_distance= 9005 +sim_camerafloatparam_pov_aperture= 9006 +sim_cameraintparam_pov_blur_samples= 9007 + +sim_dummyintparam_link_type= 10000 + +sim_mirrorfloatparam_width= 12000 +sim_mirrorfloatparam_height= 12001 +sim_mirrorfloatparam_reflectance= 12002 +sim_mirrorintparam_enable= 12003 + +sim_pplanfloatparam_x_min= 20000 +sim_pplanfloatparam_x_range= 20001 +sim_pplanfloatparam_y_min= 20002 +sim_pplanfloatparam_y_range= 20003 +sim_pplanfloatparam_z_min= 20004 +sim_pplanfloatparam_z_range= 20005 +sim_pplanfloatparam_delta_min= 20006 +sim_pplanfloatparam_delta_range= 20007 + +sim_mplanintparam_nodes_computed= 25000 +sim_mplanintparam_prepare_nodes= 25001 +sim_mplanintparam_clear_nodes= 25002 + +# User interface elements +sim_gui_menubar =0x0001 +sim_gui_popups =0x0002 +sim_gui_toolbar1 =0x0004 +sim_gui_toolbar2 =0x0008 +sim_gui_hierarchy =0x0010 +sim_gui_infobar =0x0020 +sim_gui_statusbar =0x0040 +sim_gui_scripteditor =0x0080 +sim_gui_scriptsimulationparameters =0x0100 +sim_gui_dialogs =0x0200 +sim_gui_browser =0x0400 +sim_gui_all =0xffff + + +# Joint modes +sim_jointmode_passive =0 +sim_jointmode_motion =1 +sim_jointmode_ik =2 +sim_jointmode_ikdependent =3 +sim_jointmode_dependent =4 +sim_jointmode_force =5 + + +# Navigation and selection modes with the mouse. Lower byte values are mutually exclusive upper byte bits can be combined +sim_navigation_passive =0x0000 +sim_navigation_camerashift =0x0001 +sim_navigation_camerarotate =0x0002 +sim_navigation_camerazoom =0x0003 +sim_navigation_cameratilt =0x0004 +sim_navigation_cameraangle =0x0005 +sim_navigation_camerafly =0x0006 +sim_navigation_objectshift =0x0007 +sim_navigation_objectrotate =0x0008 +sim_navigation_reserved2 =0x0009 +sim_navigation_reserved3 =0x000A +sim_navigation_jointpathtest =0x000B +sim_navigation_ikmanip =0x000C +sim_navigation_objectmultipleselection =0x000D +# Bit-combine following values and add them to one of above's values for a valid navigation mode +sim_navigation_reserved4 =0x0100 +sim_navigation_clickselection =0x0200 +sim_navigation_ctrlselection =0x0400 +sim_navigation_shiftselection =0x0800 +sim_navigation_camerazoomwheel =0x1000 +sim_navigation_camerarotaterightbutton =0x2000 + + + +#Remote API constants +SIMX_VERSION =0 +# Remote API message header structure +SIMX_HEADER_SIZE =18 +simx_headeroffset_crc =0 # 1 simxUShort. Generated by the client or server. The CRC for the message +simx_headeroffset_version =2 # 1 byte. Generated by the client or server. The version of the remote API software +simx_headeroffset_message_id =3 # 1 simxInt. Generated by the client (and used in a reply by the server) +simx_headeroffset_client_time =7 # 1 simxInt. Client time stamp generated by the client (and sent back by the server) +simx_headeroffset_server_time =11 # 1 simxInt. Generated by the server when a reply is generated. The server timestamp +simx_headeroffset_scene_id =15 # 1 simxUShort. Generated by the server. A unique ID identifying the scene currently displayed +simx_headeroffset_server_state =17 # 1 byte. Generated by the server. Bit coded 0 set --> simulation not stopped 1 set --> simulation paused 2 set --> real-time switch on 3-5 edit mode type (0=no edit mode 1=triangle 2=vertex 3=edge 4=path 5=UI) + +# Remote API command header +SIMX_SUBHEADER_SIZE =26 +simx_cmdheaderoffset_mem_size =0 # 1 simxInt. Generated by the client or server. The buffer size of the command. +simx_cmdheaderoffset_full_mem_size =4 # 1 simxInt. Generated by the client or server. The full buffer size of the command (applies to split chunks). +simx_cmdheaderoffset_pdata_offset0 =8 # 1 simxUShort. Generated by the client or server. The amount of data that is part of the command identification. +simx_cmdheaderoffset_pdata_offset1 =10 # 1 simxInt. Generated by the client or server. The amount of shift of the pure data buffer (applies to split chunks). +simx_cmdheaderoffset_cmd=14 # 1 simxInt. Generated by the client (and used in a reply by the server). The command combined with the operation mode of the command. +simx_cmdheaderoffset_delay_or_split =18 # 1 simxUShort. Generated by the client or server. The amount of delay in ms of a continuous command or the max. pure data size to send at once (applies to split commands). +simx_cmdheaderoffset_sim_time =20 # 1 simxInt. Generated by the server. The simulation time (in ms) when the command was executed (or 0 if simulation is not running) +simx_cmdheaderoffset_status =24 # 1 byte. Generated by the server. (1 bit 0 is set --> error in function execution on server side). The client writes bit 1 if command cannot be overwritten +simx_cmdheaderoffset_reserved =25 # 1 byte. Not yet used + + + + + +# Regular operation modes +simx_opmode_oneshot =0x000000 # sends command as one chunk. Reply will also come as one chunk. Doesn't wait for the reply. +simx_opmode_blocking =0x010000 # sends command as one chunk. Reply will also come as one chunk. Waits for the reply (_REPLY_WAIT_TIMEOUT_IN_MS is the timeout). +simx_opmode_oneshot_wait =0x010000 # sends command as one chunk. Reply will also come as one chunk. Waits for the reply (_REPLY_WAIT_TIMEOUT_IN_MS is the timeout). +simx_opmode_continuous =0x020000 +simx_opmode_streaming =0x020000 # sends command as one chunk. Command will be stored on the server and always executed + #(every x ms (as far as possible) where x can be 0-65535. just add x to opmode_continuous). + # A reply will be sent continuously each time as one chunk. Doesn't wait for the reply. + +# Operation modes for heavy data +simx_opmode_oneshot_split =0x030000 # sends command as several chunks (max chunk size is x bytes where x can be _MIN_SPLIT_AMOUNT_IN_BYTES-65535. Just add x to opmode_oneshot_split). Reply will also come as several chunks. Doesn't wait for the reply. +simx_opmode_continuous_split =0x040000 +simx_opmode_streaming_split =0x040000 # sends command as several chunks (max chunk size is x bytes where x can be _MIN_SPLIT_AMOUNT_IN_BYTES-65535. Just add x to opmode_continuous_split). Command will be stored on the server and always executed. A reply will be sent continuously each time as several chunks. Doesn't wait for the reply. + +# Special operation modes +simx_opmode_discontinue =0x050000 # removes and cancels all commands stored on the client or server side (also continuous commands) +simx_opmode_buffer =0x060000 # doesn't send anything but checks if a reply for the given command is available in the input buffer (i.e. previously received from the server) +simx_opmode_remove =0x070000 # doesn't send anything and doesn't return any specific value. It just erases a similar command reply in the inbox (to free some memory) + + +# Command return codes +simx_return_ok =0x000000 +simx_return_novalue_flag =0x000001 # input buffer doesn't contain the specified command +simx_return_timeout_flag =0x000002 # command reply not received in time for opmode_oneshot_wait operation mode +simx_return_illegal_opmode_flag =0x000004 # command doesn't support the specified operation mode +simx_return_remote_error_flag =0x000008 # command caused an error on the server side +simx_return_split_progress_flag =0x000010 # previous similar command not yet fully processed (applies to opmode_oneshot_split operation modes) +simx_return_local_error_flag =0x000020 # command caused an error on the client side +simx_return_initialize_error_flag =0x000040 # simxStart was not yet called + +# Following for backward compatibility (same as above) +simx_error_noerror =0x000000 +simx_error_novalue_flag =0x000001 # input buffer doesn't contain the specified command +simx_error_timeout_flag =0x000002 # command reply not received in time for opmode_oneshot_wait operation mode +simx_error_illegal_opmode_flag =0x000004 # command doesn't support the specified operation mode +simx_error_remote_error_flag =0x000008 # command caused an error on the server side +simx_error_split_progress_flag =0x000010 # previous similar command not yet fully processed (applies to opmode_oneshot_split operation modes) +simx_error_local_error_flag =0x000020 # command caused an error on the client side +simx_error_initialize_error_flag =0x000040 # simxStart was not yet called + + diff --git a/pypot-master/pypot-master/samples/REST/ruby/README.md b/pypot-master/pypot-master/samples/REST/ruby/README.md new file mode 100644 index 0000000..a85b003 --- /dev/null +++ b/pypot-master/pypot-master/samples/REST/ruby/README.md @@ -0,0 +1,28 @@ +## Poppy Ruby + + +### Example use. + +```ruby + +$poppy = Poppy.new +$poppy.set_default_motor_positions + +$poppy.set_compliant "true" +$poppy.set_compliant "false" + +$motor = $poppy.motors["head_z"] + +#show the list of registers +$motor.registers + +# You can access the registers directly +puts $motor.compliant +# false +$motor.compliant = "true" + +## goal_position and goal_speed registers can handle numeric values +$motor.goal_position = 30 +$motor.goal_position = -30 +``` + diff --git a/pypot-master/pypot-master/samples/REST/ruby/motor.rb b/pypot-master/pypot-master/samples/REST/ruby/motor.rb new file mode 100644 index 0000000..0d98304 --- /dev/null +++ b/pypot-master/pypot-master/samples/REST/ruby/motor.rb @@ -0,0 +1,117 @@ + +class Motor + + attr_reader :name, :registers + + def initialize (robot, motor_name) + @name = motor_name + @robot = robot + load_registers + end + + def set_name (name) + @name = name + end + + def load_registers + + @registers = Hash.new + names = JSON.parse(@robot.motor_register_list self).values[0] + + names.each do |name| + + next if name == "registers" + begin + value = @robot.motor_register_get(self, name) + value = JSON.parse(value) + value = value[name] + @registers[name] = value + + ## create a function to access this + instance_variable_set("@#{name}", value) + self.class.send(:attr_reader, name) + + if is_float_register(name) + self.class.send(:define_method, name+"=") do |argument| + puts "Sending value..." + @robot.send_motor_register(self, name, argument.to_s) + end + else + self.class.send(:define_method, name+"=") do |argument| + puts "Sending ..." + @robot.send_motor_register(self, name, argument) + end + + end + + rescue +# puts "Register not read " + name + end + end + +# update_registers + end + + def is_float_register (name) + if name == "goal_position" or name == "goal_speed" + return true + end + false + end + + def update_registers + + @registers.each do |name, value| + begin + value = @robot.motor_register_get(self, name) + value = JSON.parse(value) + value = value[name] + @registers[name] = value + + instance_variable_set("@#{name}", value) + rescue +# puts "Register not read " + name + end + end + end + + ## TODO: custom functions for key functions. + ## not for the others. + + # def set_compliant (value) + # compliant = value + # end + + # def compliant= (value) + # text = "true" if value == true + # text = "false" if value == false + # @robot.send_motor_register(self, "compliant", text) + # end + + # def moving_speed= (value) + # @robot.send_motor_register(self, "moving_speed", value) + # end + + # def position= (value) + # @robot.send_motor_register(self, "goal_position", value.to_s) + # end + + # def position + # present_position + # end + + + def to_s + return "Motor: " + @name + end + +# RestClient.get @url + '/motor/' + name + '/register/list.json' , {:accept => :json} + + + +end + + +# class Register +# attr_reader :name +# end diff --git a/pypot-master/pypot-master/samples/REST/ruby/poppy-processing.rb b/pypot-master/pypot-master/samples/REST/ruby/poppy-processing.rb new file mode 100644 index 0000000..db0bca5 --- /dev/null +++ b/pypot-master/pypot-master/samples/REST/ruby/poppy-processing.rb @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +require 'ruby-processing' +require './poppy' + +Processing::Runner +Dir["#{Processing::RP_CONFIG['PROCESSING_ROOT']}/core/library/\*.jar"].each{ |jar| require jar } +Processing::App::SKETCH_PATH = __FILE__ + + +class Sketch < Processing::App + + attr_reader :poppy + + def setup + size(800, 600, OPENGL) + + $poppy = Poppy.new "schtroumpf.local" + @poppy = $poppy + $motor = @poppy.motors["head_z"] + + + + end + + def draw + background 200 + rect 0, 0, 100, 20 + + if mouse_y < 20 and mouse_x < 100 + ellipse mouse_x, mouse_y, 10, 10 + end + + + end + + def mouse_dragged + if mouse_y < 20 + $motor.goal_position = mouse_x - 50 if mouse_x < 100 + end + end + +end + + +Sketch.new unless defined? $app diff --git a/pypot-master/pypot-master/samples/REST/ruby/poppy.rb b/pypot-master/pypot-master/samples/REST/ruby/poppy.rb new file mode 100644 index 0000000..b876f4f --- /dev/null +++ b/pypot-master/pypot-master/samples/REST/ruby/poppy.rb @@ -0,0 +1,92 @@ +require 'json' +require 'rest-client' +require 'parallel' + +require './motor' + +class Poppy + + attr_reader :ip, :port, :url, :motors + + def initialize ip + @host = ip + @port = "8080" + @url = "http://" + @host + ":" + @port + + init_motors; + end + + def init_motors + @motors = Hash.new + motor_list.each do |motor_name| + @motors[motor_name] = Motor.new(self, motor_name) + end + end + + + def motor_list_text + RestClient.get @url + '/motor/list.json' + end + + def motor_list + JSON.parse(motor_list_text).values[0] + end + + def to_s + "Poppy :]" + end + + def update_motor_registers + each_motor do |motor| + motor.update_registers + end + end + + def each_motor + @motors.each_value do |motor| + yield motor + end + end + + def set_compliant (is_compliant) + each_motor do |motor| + motor.compliant = is_compliant + end + end + + def set_default_motor_positions + each_motor do |motor| + motor.compliant = "false" + motor.goal_speed = 0 + motor.goal_position = 0 + end + + end + + def set_default_motor_positions_parallel + Parallel.each(@motors.values) do |motor| + motor.compliant = "false" + motor.goal_speed = 10 + motor.goal_position = 0 + end + end + + ## Low level for motors ... + + def motor_values (name) + RestClient.get @url + '/motor/' + name + '/register/list.json' , {:accept => :json} + end + + def motor_register_get (motor, register) + RestClient.get @url + '/motor/' + motor.name + '/register/' + register , {:accept => :json} + end + + def motor_register_list (motor) + RestClient.get @url + '/motor/' + motor.name + '/register/list.json' , {:accept => :json} + end + + def send_motor_register (motor, register, value) + RestClient.post @url + '/motor/' + motor.name + '/register/' + register + '/value.json', value, :content_type => :json + end + +end diff --git a/pypot-master/pypot-master/samples/benchmarks/controller.png b/pypot-master/pypot-master/samples/benchmarks/controller.png new file mode 100644 index 0000000000000000000000000000000000000000..a9741efc4ad5f560293c1ea399bb22bbc0c00d32 GIT binary patch literal 34694 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

f^kFe+>Seuc4)ZBDd4 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 M4l}cyDh%g;03)FOAOHXW literal 0 HcmV?d00001 diff --git a/pypot-master/pypot-master/samples/benchmarks/packet.png b/pypot-master/pypot-master/samples/benchmarks/packet.png new file mode 100644 index 0000000000000000000000000000000000000000..4c4579241f4938ecd76dacc6d6b6ada1d90916d3 GIT binary patch literal 40111 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�`Sv|=w+9yTvonBTJ91Xl!kMABQ$sxYyFqd9 zFN_~k)QbnE^}d%IxAxv}1(e{-`QkI~Rrh7xbp=__2r;h7^#0M)nm<~wyO(FNcs63- z#^Y@6J9aXSz}XID#;BZW^pWEpxOD@KJb8Phz)$;^ZtH3XCYm+;XRiZUZ31`=#$-4l zetgdSicpN=uamU^bWcdX!w|PYsTDsPRJ-R3pl}PAwt$FBggii#&sDzXLAx2hf^;Yu zUKg`D^_Qxq#_wZO)kmbk+TM7V@I->;gl7D8!gv~y7x7ANDkHS)nsYOrJi$7oJfS1CAG}7HSIiI*v7uMR4`u%qvpef4=~sVkk-a?3@L=))RM>zn z|8Zx3?~R#WfM++H&7KvbMKa3vf?)@X6xm3A*$Vx!|sc^%=JO2!w}48K;$$1j16e#dhj_$_6ICZ<+5${>Q) zX5jDdU+kPm*mkIafCFnh719(0>>mQA{AlnJsCh=v0A?acEoe?$grrI?_$&bPClDU6 zL&M!&T_-N2d9j1`>Moxq4GACv)||c-=&$@td(jS{Tqii9QNsimhJ_>rN_r5wYD36y z>ngGbe35lJK#!0z2=MM9-|^_g_K9j!Xm7|9uF_j~N?iwWUuR>kMk0FGu?LKDqa=Aa zP)~>LFrQjkwg57Quw#SsqN9`3!)-@bGx{q20r!*kLJK}-uo}3au{?8w%Vnx32E67t z5cQ(W2MwkT3xmu&J5_B#p!sNWIR`>Y-BdeF;mQf@#f%0s_F3WP_8M zf)0iAaBbC89jLt7#52aD1^_QPVC7kQCzhI@ow`hkT{}DRnTgN&?;pxtFqd`lOb?xU zpjb8d{TwW*0lJeIx-yyOIp|#3`K38(8XQP|l4qZpkC*=kK%R8MdAvF5pqRP@BeMkH zm#2K{H_VEiA1Gdt+HY2!hjKVu3T|Oyej|8!b&^QjNj-tMjGDRXD1dP=&A(Jv zkz@QE6EIqm83c&Rz}klT7c-pvz_Fcocg7E6qufQv;;kN!QJ5m`A#|i}56(V9{9DI` zRDWK?Fe{_06dA847d!Ey zU}iz*y-Rh6*~26M@GNOb&Yz#-c>v4yw+xZ@Vl10#CWt6qpw!#rdn;RpSVhOJ|ay?I#zqmonq&N1@20UOcE}I6D8F7bK z@tHewe(nO$*vzZHU2`6ocWaA`nMnwt_q)pkT&w1!h8NIzH9s?%1I{2qGV#-K_Y)-#!0g zx*EiFxwd4`e{gURIuwMS1mVMAHhc-VT>{PJZ+AiHfbW9kXV30au5!QhH-$7_VxDPa zz(WeU^rVU!xizldvhuqg5<&Q%K{K4<_6NEb;4-gXtpm3f- z0JzY&9L;mh!O*htI+Py7I{Jxs_NgugwhtUfD~*k5(KLvu*`S#`Fb>aCCW1nyu}ru# z6Q&2?Hr^25d*2X22ki+$S(Ac9=n%nv)@+*rk3Q=vk9BI^$OI;&g!-~ibpWUVASzZ= zI|*ef|CoJi?E5^P|uuh#?qJ=e*BSPMqx+Qq^az#y$ZNP#zAPTGav2_47nb z*m2*3Sb&6YFm$RMz>R!WDt6@8>)mw~i$JM8LYzs7h(NY5b*_G$4ICgMP~5n2L#Iwc zRUhXOV-{GKu;ap5i|{%Y)L?tJa7fDn_v{7^l!yos&gd?J;k})-4k^^>Pd2eR2W(ny z0~K3`XTc8vgvZ?x&bp(Z6Xt@cPQ&f0RH;RwfKEGienG)Lxl|`b3rG!^m zE)G0ZD)#$L3nshx(>(%NzKS~Z>|%VRCHTyDMDBTT5}#Ig&!7Zof}y?pnZ4< zYwV#29cIH9JV%3Ry70r=mBrJZ9k|DughMvSsW6nWD0YTd+AFvFD`pTeNdwISua0Hs zo4b4qfblfooz-9y#|wb6&T{Ll_oeQMnUtFYzJI~qedYGqrKtA|X9(ZL?*n*j!m0vs zS--(T#BuKl76W^&3zoMuGMxOpyiDl!#kY=U;x2|Gmi6p2*{u zyiZ|Y@J+U-FyiQhiw+UViBqrg>jq?Jj|0XoA-8V88pe2JNslm~{22OoG<4f*B)M!3 z=c<5+n0lNYlU4t3xtOqe*V&pYs38qIz!V@ma6h11sW=NcYAk~0aW`@$Xj^2W6H(fp zG6aAvE$Ik$1966sD*;TYRP0o!!h3B=U+SK=G{kLgs$~leb@%kBh_!d6Z~mDK=_3}> zD@leU*v2Y}zpvIIt%|fe50$k+@xhdL_FG8%O`qR}eqN+FBL&Fr{G_Gi`afaF{7`Oa zm~8xk2(~WtA|C=A+(BHjcy`pm_i~}g<2<`Wu%@w)J~NMZGQ_iSPAjddx(6Vd1A2KY@_3bj!(j7P1_Dv<7Gtcyt zADaGyL_poVI2p_1@3%ws{785jEg@+_q#@PV#tuL&FX0sSSue!U85qNhbDygc+iV|K zRNN7-Tk10JH`+@iLO6O1L2J{R`-*_M&q4Gla`M5j&fPI`Av#dEFz@&Oc>Y4CP_k*) z_!^iH2qlQyTBM73`820BSh-Z!>FTq}!^_2CX{yt6BI%rgnVDHKI_BVPzDCHwX;h;1 z8#*l!_|QTLZ6SR_?(O^2xGzUUyjc6jYIa% zNZO-s5fMPqYM~p^Z)Xx20lYb*{Adt`pJF{2jn?PyfSs=ttQ7R5>Ko^*sj{+iZb+*M z(q>p)3d=uMOK1k7uksvk2t0D<@NmqxZ{I>1@8Cd%2&o$$2;0!oTQ}~Pn8KmH{|v(? zvW#=fN`J-aofYerKbjCS4S#;d2EICT&Mc?@v502l22nT=brL=M*X|}$|Jm{yCySh4 z_^{)Ik_NJQrr6f<9)U1|KSAW8rWl5)T8uc!`Z&@D)h?-Y%t!wS$%kAI|`AK7Q_f67Ez?>mWv*Y7cf$Lc>n<7&@5?+-}CHAz#* z*5_7aCf}vzIy1SrxCke=t0MAd0A}3<8cZHG2Owk-=FawKEBy%OFIBO^*!ArgWTV(l zUHOcJb_xZCgm3!H$}!09m{kdSbsOe1+uIOSM&vV$(ZhSCx#M&fO)z;{Z zPKjn&S=@jbyTXGOkDH1n+v27)hWtnBkEQr~7xU5{`FzzPu=ntY$A{m;9^bCM$M24& zKYS=i@I-WUbVMX1!b3wTu-!~%C*g@qNDL8Dg7@z2Br0T#?zk0wnI=CF=G;dJ6*kCq zyf_ilZn0?^~!9qXqspMTQ=`sR@+2J25j=@|E($+j!E=Cd^ zafbOXp%yn&W(uKF!lM~JJMfC^Jw2bom{v#b&*n8m#^n({1o;6V)hnEYn$xpe3J9fj*wBevwt{U#MXSNhWf z*0;#Y$}ar=9k{`BDa3PyKjxe8?%fn{6gUAz(C=mU4f0gZp1osOW!zyV=(aH0hz>a{ zTtFCHSX?X!f3Rii-h&6Xqe%mYGcWTM$lJlw)@h~LTqb3CzlxbV1kLhHH9;2lWy0|? zrtqv=_5u{!T)n)CJgA1T5XVsOxw^R_0o$@QCnJM!$Rqx8u@uG^>JXhCzGr+>AZSYn zAFaH`=M#l{V5;-ndzKUGUYs@iPEd&M-`@=FD^6Q8IGO~>Z8{Cm(b44#eqtNuWp0>h zL}0gaaM-eE&z`&Y?peX-?YYmqdATz>CU8x3BDla%=H2@Fbfzpm6d|8dTUU3$p-T{g zSudn(HlXKbap}hwRp^!wgiFW!f$)^U7N>y*Mk7~oK~*~(t{@>sh}5pGu8!g;>hL>U zcl3&{uO&?Mww69w*E28(2?`1l-mop8wOr)geh<$nMKjr?hhYgaR6#-Xz**yjnvn-Xudqr z#Cg!3VZ!~e&)ny{q&zDK;ZZigd6zT!FB)P~-@culzoxCFmHptsu)-OyQ7@ju?$=3o z)6!1G*Ir$dLJF*P;lhO?>&L}2!*%|(KJ&x-%4H56>JyFIU2FD*u8mt5QMhM)!=iJ+Kr9}B1*Q`mR0)7CXII=UG_zD!DnxPRadD{E@rls*Of z+`W6ZM6vHb0l7Iu0O2EK-izN(Ap&VQ6TS;jJ9Fs2d6N$I9HYpglWz(+LIl%cVsUpQ zq}Q!~erYBKlyk#%^jcc&YJrze?YQ{FK&CPf@hAjVBBphIY%m$PGZ3d@Z!Zk`)+Jb> znScK+fenldcywYS41G5(i7mzOrXY@H6m&$?g_nlLVF{V^wLfbf1Q`^+AnlkRU+}D~ zjBuAApu#0y-_Pca3Xupa2516fQxF>9kgbMGAf)SpAbXwnX%3wic%NKHac8;t@9&v_ zP{LA=c(zi1v2tC#y<4D`M+7>;9RmXOU4KeTr3ClvIW$!AQEhAbJ3|PrL5JTX-WJ~K z$|p{s1KZx!Wsq+u>OIploz{LXcOMqqV?7baw_Y5qtST@GkGHk5;@?=BZi04AsYQK2 z+0&;PnVI~#+V@Vxn^w6C0e{$^t-dX<;{G>LJmkS2P)vt3lY_PO2^$+5UIlM$<5&pR zCSKAlI_rVMR$5xx7CMoi;DP|l>rx_OuAP?VN?G^Y+#d{?I}h(4pW<+b1lu6F)Y;x1 zg(7`vVIdM-?f_SRg(7)>g|kV#Ep|vzQ4!dHe7#f9@k{); zJGmWK@e-L@_s~#UOH0er;$p%|F;sxNIy+ImuPm*sJj%%ts;jL%84qJON+k;mi;9b# zCqy4zfkO17hYve?dJ-WB`LL?$FlKVsAiIzPvjFr7hAg)dMMV(fU(rYSd&M zA3xq%UtgD&k^&Y$X7Sgrlko_9lzO@OyS8djKJ_C8BEX=yHw2Mk?)L~UiEyj+Ys9ux zCP|%{^Bf##9QUgt2J9Z<{fCal)Q=x;5iR2iwK*?czWm{^$G6*s+5>b!IIP9scMH(! zC&ZxmuSg@&VNn0}_3P8Z!drAX`D4QWFiGZ$~-=aX6N?p+aDYYG*6lT{(Yaz z;rc8b(=*f4KjBFFw!Pg(Q?xYkVG0EAI~!s%@Li3zmVX*%lt4~Ig>x){q5~e&Ye3C$jBtw+A(YH*s+6s z#||v?K=3iK>0_Bp)dN<54m2<{;IH_(D%l-w)-- zBEFgV`47ZPn=JgsQ>JWy3gl70r3l>zikJ!188#orJCRl~%c*=}HcXA^e;o2da&YB& zfA>Hr)|~ML2^_UQ;5)N>Mdxv(W{v__wL|4@$7xrCnHTwO(s^>hi6(R>lbaM&L>T?v9Wb@cNdg@jMb}OT3+tN zqrg7T8CX;BnNx9dD@lAZjcY>9+UuBowxE1?1M`OHME)EwUkOiDm@S0=`sH49H5_?f zmwQSsw~TJ_P@VsdGeq=a&lq_3=G5$QpzzPytnR1nX$qo{pnMt zYwJsKcMcpnl-#o8$dMz2yd`1Nhx2t|Y3UV?sRK9-?xv(T9*MtfX-UH8?-eeb+pCXt zPUMD27+`F!1oL)G;RrJUc6RF1r%xAQ$FFpafV|%|VsCH%6m`e?_vz^^B*MjjFou2n zSVT@v4nVQ$mg);BUVncpAlb~@w6n8=JVNoAYnl8J;c_$3m(TzC(_TVC;yz4=-~)H( z5t2v_m>4B!2GB-dK!_te#$j6gaS0X%)-W|ds#umdR{$ycRn$TcWd-#O4X-2Y7CA`3 z!Zrknh~Ym<5-Lv#IRyoZ)k@zyVI?nU*F%BdIQS=IozHVGL%4+j@lQ%?^ojL4q*EsLT7M1{Ksw-mE|^w+#L^qjj- zX=^`q9Xo;ZWVfs=I}W(VEUYrpd(NfIx2Xt@Wzi)wKL?;Yd3I7BfvaM*Q<@k`3olF|UG@1s_0Jo*7xmh*;kU9%t ztppK~%-q~?WZi@pKt8X6bi$Wnko;b3NNL=ZUHt@A)p16y~XzrVA$Hwo){ z0?F9$uS1s~#Oylu9_Pxrovm$cZC1X%a#~tikp4au!*wX;&Ye4kBCMtrPCFsF`woW? zs+lD0n{0?*6crZA!6xY20S?{5$O2xy? zjeEId9GD70aB?Dt!tT<=9x>(A+T8}v@As*PidS|$XO6Ue5u!(5Zv1zkdB4VqqO*PL zPuSap6<#bnfl*FJUte;CuGgR=&?UqJ{PpYCOwl%(*<eF;_LZxO7tM2PTi8K4RdYElO2_2UW1ya8*4Jx7xEXat*wznp1HI@ z&R1txRIrih8==fZIVO|WJ0t9~AR#Jx0&d07h+FNdNGaq$HLFl78j8-4gv$>d+7P}e z0i2w2hYvd(2^smcw6tVtYfI?LC$m?{95?{!6*8zG=Ok!^H*?(OqYcSOc(q>z5`M?` zM3RJwe=W!i$T<^bnjrcA{Iv>cJO1A@p4JkjScnb_nKpj7L*xIJW|Wfu-~RExZDq0! V4^O!ckCO09LsduR$qCDl{{vKroSpyx literal 0 HcmV?d00001 diff --git a/pypot-master/pypot-master/samples/benchmarks/robot.py b/pypot-master/pypot-master/samples/benchmarks/robot.py new file mode 100644 index 0000000..821241b --- /dev/null +++ b/pypot-master/pypot-master/samples/benchmarks/robot.py @@ -0,0 +1,42 @@ +import os +import time +import psutil +import argparse + +from numpy import mean + +from pypot.robot import from_json + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('-l', '--log-file', + type=str, required=True) + parser.add_argument('-t', '--running-time', + type=int, required=True) + parser.add_argument('-c', '--config', + type=str, required=True) + args = parser.parse_args() + + bp = args.log_file + if os.path.exists(bp): + raise IOError('File already exists: {}'.format(bp)) + + p = psutil.Process() + p.cpu_percent() + + robot = from_json(args.config) + robot.start_sync() + time.sleep(60) + + loads = [] + start = time.time() + while time.time() - start < args.running_time: + loads.append(p.cpu_percent()) + time.sleep(1) + load = mean(loads) + print('After loading about {}%'.format(load)) + + # We'll use raw file instead of numpy because of pypy + with open(bp, 'w') as f: + f.write(str(loads)) diff --git a/pypot-master/pypot-master/samples/benchmarks/run-all.py b/pypot-master/pypot-master/samples/benchmarks/run-all.py new file mode 100644 index 0000000..eeeaeec --- /dev/null +++ b/pypot-master/pypot-master/samples/benchmarks/run-all.py @@ -0,0 +1,43 @@ +import os +import json +import argparse + +from subprocess import call, check_output + +from pypot.robot import from_json + +N = 50000 +T = 15 * 60 + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + + parser.add_argument('-l', '--log-folder', + type=str, required=True) + + parser.add_argument('-c', '--config', + type=str, required=True) + + args = parser.parse_args() + + bp = args.log_folder + if os.path.exists(bp): + raise IOError('Folder already exists: {}'.format(bp)) + os.mkdir(bp) + + call(["python", "dxl-single-motor.py", + "-l", os.path.join(bp, 'dxl_single'), + "-N", str(N)]) + + call(["python", "dxl-controller.py", + "-l", os.path.join(bp, 'dxl_controller.list'), + "-N", str(N), + "-c", args.config]) + + call(["python", "robot.py", + "-l", os.path.join(bp, 'robot.list'), + "-t", str(T), + "-c", args.config]) + + print('Everything is done!!!') diff --git a/pypot-master/pypot-master/samples/benchmarks/single_packet.ipynb b/pypot-master/pypot-master/samples/benchmarks/single_packet.ipynb new file mode 100644 index 0000000..6948cbc --- /dev/null +++ b/pypot-master/pypot-master/samples/benchmarks/single_packet.ipynb @@ -0,0 +1,132 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:1aae17bbf83989324e5ea2689394d9c4668379c714534666e2d0ae76787cb304" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Populating the interactive namespace from numpy and matplotlib\n" + ] + } + ], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import pickle \n", + "\n", + "# get the file here: https://github.com/poppy-project/pypot/releases/download/2.4.0/data.pickle", + "with open('data.pickle') as f:\n", + " data = pickle.load(f)\n", + " \n", + "packets = data['packet']" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "to_plot = (('dell', '2.7.8'),\n", + " ('dell', 'pypy-2.3.1'),\n", + "\n", + " ('odroid', '2.7.8'),\n", + " ('odroid', 'pypy-2.3.1'),\n", + " \n", + " ('pi', '2.7.8'),\n", + " ('pi', 'pypy-2.3.1'))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "indices = array([0.5, 1.0, \n", + " 2.0, 2.5,\n", + " 3.5, 4.0])\n", + "\n", + "color = {'serial': 'b',\n", + " 'forged': 'r',\n", + " 'pypot': 'g'}\n", + "\n", + "width = 0.4\n", + "\n", + "with xkcd():\n", + " fig = plt.figure()\n", + " ax = fig.add_axes((0.1, 0.2, 0.8, 0.7))\n", + " \n", + " for s in ['pypot', 'forged', 'serial']:\n", + " x = [mean(packets[s][b][p]) * 1000 for b, p in to_plot]\n", + " ax.bar(indices, x, width, color=color[s])\n", + " \n", + " ax.spines['right'].set_color('none')\n", + " ax.spines['top'].set_color('none')\n", + " ax.xaxis.set_ticks_position('bottom')\n", + " ax.yaxis.set_ticks_position('left')\n", + "\n", + " ax.set_xticks(indices + width/2)\n", + " \n", + " ax.set_xticklabels(['2.7.8\\n PC',\n", + " 'PyPy',\n", + " '2.7.8\\n Odroid',\n", + " 'PyPy',\n", + " '2.7.8\\n Raspberry pi',\n", + " 'PyPy'])\n", + "\n", + " plt.ylabel('time (ms)')\n", + " plt.title(\"BOARDS COMPARISON\")\n", + " legend(['pypot', 'preforged-packet', 'raw serial'], loc='best')\n", + " savefig('packet.png')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEBCAYAAACXArmGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXeYVOX5sO8zve3szDZYlg6CoIiCigWMEhWISFDEGqP5\nqVGCEktiQTAIfvYSUVEkFhIEJRghSiy4ICQqAorSRcrStu/MTq9n3u+PYY4uW0F2Z2DP7TUX7ryn\nPOfMzPuc532aJIQQqKioqKioAJp0C6CioqKikjmoSkFFRUVFRUFVCioqKioqCqpSUFFRUVFRUJWC\nioqKioqCdtq0adPSLYTKsceqVat48cUXWbp0KcFgkBNPPBFJkupt53K5+Oqrr6isrKSgoACtVtvo\nMROJRJ1jBINB5s+fz+7du9HpdOTm5tbZfu/evbz99tuceOKJGAyGo3dxP5Hd7Xazfft2OnXqVGds\n586dfPvtt0SjUXJzc+td+65du0gkElgsFgCEECxbtoyePXsq2y5evJgXXniB5cuXo9Pp6NmzZ6Oy\nHHpv1q5dy4oVK6iqqqKgoKDO9UciEUpKSqisrCQYDGIwGNDr9Yd9/bFYjLVr17Jjxw6ys7Mxm83K\n2HvvvUdWVhZ2u73OPtFolFWrVtGjR4/DPp9KhiBUVI6ASy65RAwZMkRcf/31IicnR4wZM0YkEgll\nPBaLiRkzZgibzSbMZrOQJEk4HA7x0ksvNXi8srIy0atXL7F582blvbffflvo9XpRUFAgAHHJJZeI\n0tJSZfzhhx8WgMjJyRFTpkwRlZWVDR67qqpK3H777aJTp07CYrGICy64QOzatavRa/N6veIPf/iD\nkCRJACI3N1cZO3DggLj66quFJEnCarUKQPTt21esXbtW2SaRSIhevXqJW2+9VXnvk08+EYD43//+\np7x38skni+uuu05MmDBB5OTkiD//+c8NyvP888+LsWPH1nnvtNNOE7m5ucJoNIrs7Gzx6quvKmN3\n3HGHAOq8unTpInw+nyLfggULxKBBg4TJZBI9e/YUr7zySp3jL126VPTp00fodDphMBiEVqsVV199\ntQiHw0IIITp27CgGDx4sIpFInf02b94sdDqd8Hq9jd5flcxGVQoqR8QFF1wgXnjhBSFEcqJ0Op3i\no48+UsbvuOMO0bFjR7F48WKRSCREJBIRr7zyigDEzp076xwrkUiIMWPGCEDMnj1bef/f//636NKl\nixBCiG3btomLL75YnHnmmcrENH36dDFixAjxt7/9TfTp00dYrVbxzjvv1Dl2IBAQJ5xwgrj22mvF\nunXrxNatW8XixYuF2+1u8Lqi0ag4//zzRf/+/cUXX3whiouLRVFRkRBCCL/fL/r16yfOO+88sXXr\nViFEUuFcffXVYsCAAcoxtm3bJgDRv39/5b0pU6YIQDz11FPKe3379hWrVq0SQghRUlIiLBaL2LNn\nTx15vv32W6HX64XD4aijdM8991zx4osvinA4LObOnSuysrLEggULhBBChMNhUVlZKW655RZxzTXX\niNWrV4vi4mJl/yeffFJ07txZLFq0SOzYsUOsWLFCrFmzRjn2xx9/LPR6vZg2bZoIBoNClmWxZs0a\nUVhYKJ577jkhhBD9+vUTgJgyZUodeePxuLBYLGLp0qUN3l+VzEdVCipHxFlnnSXeeOMNIURyUu/T\np4/4xz/+IYRITmSSJIkvv/yy3n6DBw8Wzz77bJ33FixYILKyssSvfvUrcdtttynvL1u2TOTn5yt/\nRyIR0b9/f2VievTRR8WoUaOEEEnL5PnnnxcGg0G89tpryj5z584VVqtVyLLcouuaMWOG6NKli6io\nqFDeS02mjzzyiOjevbvw+/119jlw4IAAxI4dO4QQQrz11ltCkiSh0WhEIBAQQggxZMgQodfrxS23\n3KLs16VLF/HNN98IIZKTaXZ2ttiwYYMyHo/HxaBBg8TVV18tALF7925l7MILLxRPP/208ve7774r\nrFZrnSf36667rkHrw+FwiDlz5jR4/bIsi549e4r777+/wXtz3nnnKddz++23i+zsbLFy5co62/Xq\n1avR46tkPqqjWeWIqK2tRafTUVlZyeTJk6msrOTSSy8F4O2332bUqFGcddZZ9fYrKiqisrJS+dvn\n83H33Xfz6KOP8utf/5o1a9YoYzU1NXX8CJIkYbfb8Xg8AOh0OmRZVv5/0qRJPPHEE9x7770Eg0EA\nTj/9dACGDRvGnXfeyezZsykrK2vwmkKhEM899xzPP/88BQUFdc4LMH/+fO6//36sVmud/Tp27IhG\no1Gu65tvvuHCCy9Eq9Xy3XffUVVVxZo1a7j55pvZtm2bsp/X68VqtVJVVcVtt91Gz549Ofnkk5Xx\nlKyvvPIKPXv2bPLeZGdnEwqFiEajynuBQACTyVTvOn/xi1/wwAMPcNNNNzFjxgxWrlypjK1Zs4aK\nigruvffeevsVFRVRVVWl3O8BAwYwZ84crrnmGioqKpTtnE4n4XC4wXuskvmoSkHliPB4PFx//fV0\n6NCBxx9/nHHjxmGz2QBYvnw5559/foP77d+/n8LCQuXvxx9/nEQigRCCpUuXsmHDBkKhEADl5eXE\n43FmzZrF1KlTOfXUUykvL+fWW29V9heHVGm54447sFqtvP/++wD079+fzZs3c+2116LT6Xj55Zc5\n8cQT60ywKRYvXozNZmPMmDH1xioqKtiyZUuD11VWVkYikVCua/ny5QwfPpxTTz2V1atX8/7779O7\nd2+uvfZaNm3ahBCCRCKB1+ulX79+FBQUsHfvXhYtWqQoILfbzUMPPcTIkSN55plnCIVCdWQuLy/n\n66+/5plnnuHGG29k9OjRTJ06VfkMAOLxeIOO/YULFzJ79my6du3Kxo0bGTFiBBMnTlRkHzhwIE6n\ns95++/bto2PHjkBSKWi1WsaPH89VV13Fr3/9a0URG43GBoMOVI4NdOkWQOXYxOfz8dZbb9GzZ0/+\n97//8fzzz3P99dczf/58gsFgnckpRUlJCd9++y0LFiwA4JNPPuHxxx9HCMGsWbMYPHgwBoOB9evX\nc8455+D3+9m1a5cyYV133XXMmjVLiXiJRqP1noS1Wi35+fn4fD7lvW7duinHSCQSXHXVVTzxxBO8\n++67dfbdunUrZ555ZoMTaWrCa+i6lixZQt++fenevTtVVVWsX7+eF198kcrKSpYvX044HGb8+PEM\nGDBAiWYqKipCCMGWLVsoKioiKyurzjGvueYaampqWLRoEYMHD+bEE0/kq6++Usb9fj+zZs0ikUhg\ns9l47733GDlyZJ1jmM3mOpZDCoPBwOWXX87ll18OJCPJUtZDKBSqJwskle+SJUu4+uqrAZBlmUQi\nAcATTzzBRRddxHXXXcfChQsxGAxoNOrz5rGK+smpHBHRaJR+/fpx1lln8ac//YmpU6dSXFwMwAUX\nXMA///lPZWkHkpPKlClTGDJkCH369AHgs88+47TTTqO2tpatW7cyb948TjvtNL744gsgOXn98pe/\nZP369Vx66aUsWLCAGTNmEI/HgeREbTQa68i1Z88evv32W4YMGUI4HFYshhQajYaOHTvWszAAunbt\nyoYNG5TjCyGYPXs2f/vb3+jatSs9evTgnXfeqbOPy+Xi8ccf58YbbwSSE6zZbOb0009n+PDhLF++\n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\nL3/5C/F4nDPPPJOZM2fyyCOPoNfrWbNmDStXrmTr1q1s27aNzZs3EwwGkSSJ0tJSpkyZQk1NDa+8\n8opyjkcffZRu3brxySefUFJSQv/+/dm5cyfRaJSKigr++c9/csUVV3DRRRcpCiU/P5+VK1ei1Wq5\n5ZZb+O6779i3bx+vvPIKmzZtwufzcddddylFCl944QUGDRrEvHnzkCSJ119/nZdeekmRQQhBNBpF\nlmUsFgtOp5MePXqwYsUKHA4H55xzDosWLeK0007jpZde4uuvv6Z///6MGTOG3Nzk09qDDz7I73//\ne5544gkAxV+R6rx35ZVXsmbNGpYvX06XLl1YtmwZ27dvZ8OGDaxbt45vvvmGYDCIzWbjtddeY8mS\nJdx3333Mnz+/yc8oFAq1m9DEdOPxeTIjmxnQRXWqUkgHLVUKiUSi0SS3TFAKOcCmsrLD3i8rK4vO\nnTvTsWNHAAYNGsTOnTuV8cmTJyNJElOmTAHgmWeeoX///lx11VV8/fXX3HvvvcqyXMqpfOj692ef\nfcaUKVPQ6/WccMIJ9O/fn127dqHT6ejTp4/SRvTjjz9Go9FwzTXXMHv2bGXpZ9euXVx22WWsXr2a\n3r17c8899/DJJ58wceJE7r//fgC++uorrr32WkWGjh07Kp/X9OnTeeGFF5AkiZycHNatW0dWVha9\nevXC6UyG/J122mns3LmTkpISxo4dS//+/YGkMrFarYTDYf79739z4MAB5bpSE3U8HmfJkiXk5ORg\nt9uVZahVq1bRt29ffvWrX7F9+3YeeOABJkyYUGf/ljjCW1reXeXnU+upzYwKqYAmqKGgoCDdYrQJ\nGZIZkqSly0dNrev6fT7S51JNYgUCR1CbyWg0EvlJWGxNTU2dftWpiVmSJCRJwuv1smnTJi655BJK\nSkq45557iEQiiiUlSVI9p6tGo1Em6EQiQU1NjfJl/+maf2qbaDSqOKndbjdr1qyhc+fOeL1efvjh\nBwYOHMju3buZMWMGGo2GeDyOXq9Pljw+iCRJSgjxQw89RFVVFZWVlWzbtg2bzdbodWs0mjoTcH5+\nPtFoVMlVSVkNP8Xn83HRRRexZ88eOnXqxK233oo4mEy4YcMGrr32Wnbu3MnEiRMJBoPKvWppSWy3\n243D4Wh2O5WfTzAUzIxeCgAR2k3eUUYphZbWNAqHwxiNDbdjCoZCaVcKTsD9k0mxpWi1WkpKSnjl\n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\nJBKh0aNH0/jx42nYsGH01ltvdZi9kydPpltuuYVuueUW6t+/Px08eLDRdJ999hkNGzZMzi/PPvts\nh9nU1UmlUjR//nwqLi6mK6+8kgoKCmjXrl0Zaa6//no688wzaejQoVRaWkoA6J577slI89FHH1Fp\naSlNnjyZRo4cSUeOHOkQe30+H3k8HvrrX/9K559/Pt1yyy1Npp0yZQrdfPPNdOutt1K/fv3ol19+\n6RCbmqJLicLBgwfpH//4BwmCQEREp59+Om3cuLHJ9LfddhvNnDmTUqmUvE8URcrPz6doNEpERKNH\nj6avv/66Q+z917/+RTfeeCMREdXV1VHfvn2bTFtUVCSL07XXXksffvhhh9h0MvD222/Thg0biIho\n06ZNNHTo0CbT1tTUUK9evWjt2rUZ+9944w36r//6LyIi2rFjB5111lkdZu/48eNp06ZNRET0yCOP\n0EMPPdRoutWrV9OMGTOISCpESkpKOsymro4gCHT//fdTKBQiIqIbbriBnnzyySbTL1myhEaMGNGg\nsnXhhRfS5s2biYjoD3/4Az3//PMdYu+RI0do2LBhsu0DBw6k2traRtNOnDiRvvzySyIi+t///V96\n8MEHO8SmplCcQ7xs9OzZE3PmzIFGo8HatWtx8OBBDB48uNG0W7ZswYoVK/DUU09lNNNUKhXcbjeW\nLFmCd999FwcOHEBhYWGH2BuNRuVIaHv37oXL5cJtt92GrVu3ymmuv/567N69G6IoQq/XI5lMYt++\nfdi5cyfuvPNOOd3KlSsxf/78DrGzq3HNNddg9OjREEURzz//PEaNGtVk2r/85S+4/vrrcf7552fs\nLywsxLp16/DFF1/g6aefxqBBgzrM3mg0Kq/S37VrF1KpFCZMmCBPed61axemTZuWkW7fvn1wOp24\n/fbbsWXLFvlc06dPx08//dRhtnYVNBoN5s2bB5vNhgMHDmD16tU455xzGk3r8/lw11134bXXXmvQ\nFVNYWIh//vOf+PTTT/HJJ5+gf//+HWLvsWVBer3HkiVL8Nprr8lpHnroISxbtiwj7a5du6BSqTBu\n3Dg5v+zZs6fBjM12pVMlqB0QRZEeffRR6tWrF3322WdNprviiivoueeea/TY3/72N7LZbFRcXEy/\n/e1vM7qg2pMXXniBhgwZQpMmTaI+ffrQmjVr6J///CedddZZJIoirV27lvr27UvJZJLMZjNNnz6d\nSktL6fbbb6dwOEw9evSgjRs3kiiKVFZWxloPx3Dw4EG65JJL6PLLL6dgMNhomp9//plcLhcFAoEG\nx2KxGJWWltKAAQPIbDbTq6++2mG2jhgxgq666io6++yz6Te/+Q3FYjE677zz5Pw5bdo0+tvf/kZL\nliyh0047jSZNmkRFRUX0+eef0+uvv07Dhw8nURRpw4YNVFxcnNENdqrz/vvvU2FhYdYa/ty5c2nW\nrFmNHlu9ejVpNBoaPHgwlZaW0oEDBzrEzm3btlH37t3puuuuoz59+tALL7xA3333Hbndbqqrq6Oa\nmhpyOBxUVVVFZ599Nk2cOJHOOeccuvTSSykWi9GFF15IzzzzDBERlZeXd2jrocuJwsyZM+nKK6+k\nmpqaJtPs3buXunfvTrFYrMGx6upqKi4upqqqKkomkzRx4kT661//2iG2LliwgG644Qb65JNP5Gau\nIAg0ZMgQeu+992j8+PH09NNPUywWox49etDy5csz+kUXLVpEv/71r2n16tU0dOjQjG6wU5lffvmF\nioqK6Lnnnst6T+6++27605/+1OixBQsW0E033USiKNLu3bvJbrfT4cOHO8TegQMH0ltvvUXbtm2T\n7V27di0VFhbS3r17yel0ks/no8cff5xmzJhBH3/8sSx0oijS0KFDaenSpXTVVVdl7SI51XjyySfp\n9NNPpx9++KHJNBzHUY8ePWjnzp0NjqVSKTrttNNo48aNlEqlaN68eTRx4sQOsfWLL76gCy64gFau\nXJmRz6ZNm0Z/+ctfaP78+XJX8+DBg+mNN96grVu3yvllw4YN1KNHD9q3bx85HA7yer0dYidRFxOF\nn3/+mYqKiiiRSGRNd9dddzUYUEqzbt06+s1vfiO/f+yxx+jWW29tVzvTPPTQQ/TEE0802P/+++9T\n//79qaCggGKxGPn9fiotLW2QLpFIUO/evWnQoEH02muvdYiNXZG7776b7r///qxpOI6j7t270759\n+xo9Pn36dHrnnXfk96WlpfTNN9+0q51piouLG504cNlll9GgQYPojjvuICJpvOGxxx5rkG7ZsmXU\nr18/6t69e4e1arsaqVSK3G53s4OwS5cupTFjxjR6LBqNksvlkgveNWvW0MiRI9vdViJpQLu8vLzB\n/j179pDL5aLCwkL68ccfiYiob9++8pjnsVxxxRU0aNAgmj17dofYmKZLjSkcOXIEoVAIo0ePRv/+\n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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 6 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [] + } + ], + "metadata": {} + } + ] +} diff --git a/pypot-master/pypot-master/samples/benchmarks/vrep.py b/pypot-master/pypot-master/samples/benchmarks/vrep.py new file mode 100644 index 0000000..833587c --- /dev/null +++ b/pypot-master/pypot-master/samples/benchmarks/vrep.py @@ -0,0 +1,38 @@ +import os +import json +import time + +import pypot +import poppytools + +from pypot.vrep import from_vrep +from pypot.primitive import LoopPrimitive + + +if __name__ == '__main__': + DT = 30. + + class JustWaitingPrimitive(LoopPrimitive): + def update(self): + if self.elapsed_time > DT: + self.stop(wait=False) + + configfile = os.path.join(os.path.dirname(poppytools.__file__), + 'configuration', 'poppy_config.json') + + with open(configfile) as f: + poppy_config = json.load(f) + + scene_path = os.path.join(os.path.dirname(pypot.__file__), + '..', 'samples', 'notebooks', 'poppy-sitting.ttt') + + poppy = from_vrep(poppy_config, '127.0.0.1', 19997, scene_path) + + time.sleep(0.1) + + p = JustWaitingPrimitive(poppy, 50.) + + t0 = time.time() + p.start() + p.wait_to_stop() + print('Running {}s of v-rep simulation took {}s'.format(DT, time.time() - t0)) diff --git a/pypot-master/pypot-master/samples/notebooks/Accessing pypot REST API through HTTP requests.ipynb b/pypot-master/pypot-master/samples/notebooks/Accessing pypot REST API through HTTP requests.ipynb new file mode 100644 index 0000000..f326516 --- /dev/null +++ b/pypot-master/pypot-master/samples/notebooks/Accessing pypot REST API through HTTP requests.ipynb @@ -0,0 +1,507 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:7a1296f1470068a26e12a6e9eae79f37b84cd8aa3b3b14d6a900280ca6850afd" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "Accessing pypot REST API through HTTP requests" + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Introduction" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this example, we will illustrate how to start an HTTP server permitting the remote access of any Poppy creature through the pypot [REST API](https://github.com/poppy-project/pypot/blob/REST-API-2.0/REST-APIs.md). More precisely, we will show how we can retrieve motor position and set new ones." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For this, we will use the simulated version of the Poppy humanoid. Thus, anyone even without having a \"real\" poppy creature on its table, will be able to try. Adapting this tutorial to a \"real\" robot should be straightforward." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The client side of the example - meaning the HTTP requests - will be realised using *curl*." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*Note: For this tutorial you will need:*\n", + "* [V-REP](http://www.coppeliarobotics.com)\n", + "* [pypot](https://github.com/poppy-project/pypot) >= 2.x\n", + "* [poppytools](https://github.com/poppy-project/poppy-software)\n", + "* [bottle](http://bottlepy.org/docs/dev/index.html)" + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Create the Robot" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, we will instantiate a robot using V-REP (see [this post](https://forum.poppy-project.org/t/howto-connect-pypot-to-your-simulated-version-of-poppy-humanoid-in-v-rep/332/) for details on how this can be done)." + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Launch V-REP" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First launch a V-REP instance. We will assume below that the remoteApi is bind to *'127.0.0.1'* using the port *19997* (its default configuration)." + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Connect pypot to the V-REP scene" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import os\n", + "import json\n", + "\n", + "import pypot\n", + "import poppytools\n", + "\n", + "from pypot.vrep import from_vrep\n", + "\n", + "# Load the robot configuration\n", + "configfile = os.path.join(os.path.dirname(poppytools.__file__),\n", + " 'configuration', 'poppy_config.json')\n", + "\n", + "with open(configfile) as f:\n", + " robot_config = json.load(f)\n", + " \n", + "# Load a V-REP scene with poppy sitting\n", + "scene = os.path.join(os.path.dirname(pypot.__file__), \n", + " '..', 'samples', 'notebooks', 'poppy-sitting.ttt')\n", + "\n", + "# Connect to the simulated robot\n", + "robot = from_vrep(robot_config, '127.0.0.1', 19997, scene,\n", + " tracked_objects=['head_visual'])" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Create the HTTPServer" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will now starts the HTTP server providing the remote access of our robot." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It will run on *http://127.0.0.1:8080/*" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from pypot.server.httpserver import HTTPRobotServer\n", + "\n", + "server = HTTPRobotServer(robot, host='127.0.0.1', port=8080)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By default, the bottle server is launch using [tornado](http://www.tornadoweb.org/en/stable/) - for effiency puposes. Yet, as [IPython notebook](http://ipython.org/notebook.html) also uses the tornado server, it seems to cause trouble. Here, we use the [wsgiref](https://docs.python.org/2/library/wsgiref.html) server instead." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from threading import Thread\n", + "\n", + "Thread(target=lambda: server.run(quiet=True, server='wsgiref')).start()" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 3 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As the [run method](http://poppy-project.github.io/pypot/pypot.server.html#pypot.server.httpserver.HTTPServer.run) of the server is blocking we launch it inside a thread. Thus, we can use the same notebook to send requests." + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Sending requests" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that the server is launched, you should be able to directly access the robot using the [REST API](https://github.com/poppy-project/pypot/blob/REST-API-2.0/REST-APIs.md)." + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Getting values" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For instance, to retrieve the list of all motors name:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "!curl http://127.0.0.1:8080/motor/list.json" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "{\"motors\": [\"l_elbow_y\", \"r_elbow_y\", \"r_knee_y\", \"head_y\", \"head_z\", \"r_arm_z\", \"r_ankle_y\", \"r_shoulder_x\", \"r_shoulder_y\", \"r_hip_z\", \"r_hip_x\", \"r_hip_y\", \"l_arm_z\", \"l_hip_x\", \"l_hip_y\", \"l_hip_z\", \"abs_x\", \"abs_y\", \"abs_z\", \"l_ankle_y\", \"bust_y\", \"bust_x\", \"l_knee_y\", \"l_shoulder_x\", \"l_shoulder_y\"]}" + ] + } + ], + "prompt_number": 4 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Or to access a specific register of a motor:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "!curl http://127.0.0.1:8080/motor/head_z/register/present_position" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "{\"present_position\": 0.2}" + ] + } + ], + "prompt_number": 5 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Similarly, you can retrieve the list of sensors and their respective registers:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "!curl http://127.0.0.1:8080/sensor/list.json" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "{\"sensors\": [\"head_visual\"]}" + ] + } + ], + "prompt_number": 6 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "!curl http://127.0.0.1:8080/sensor/head_visual/register/list.json" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "{\"registers\": [\"position\", \"orientation\"]}" + ] + } + ], + "prompt_number": 7 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "!curl http://127.0.0.1:8080/sensor/head_visual/register/position" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "{\"position\": [-0.011824678629636765, -0.029312146827578545, 0.53340655565261841]}" + ] + } + ], + "prompt_number": 8 + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Sending values" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following requests should make the head of the robot moves." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "!curl -X POST -d \"100\" http://127.0.0.1:8080/motor/head_z/register/goal_position/value.json \\\n", + " --header \"Content-Type:application/json\"" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "{}" + ] + } + ], + "prompt_number": 9 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "!curl -X POST -d \"-100\" http://127.0.0.1:8080/motor/head_z/register/goal_position/value.json \\\n", + " --header \"Content-Type:application/json\"" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "{}" + ] + } + ], + "prompt_number": 10 + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Using the [requests](http://docs.python-requests.org/en/latest/) module instead" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Similar behaviors can be achieved directly in Python, for instance using the [request](http://docs.python-requests.org/en/latest/) module." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import requests" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 11 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To retrieve a position:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "r = requests.get('http://127.0.0.1:8080/motor/head_z/register/present_position')\n", + "r.json()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 12, + "text": [ + "{u'present_position': -100.3}" + ] + } + ], + "prompt_number": 12 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To set a new position:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import time\n", + "\n", + "pos = 50\n", + "\n", + "for _ in range(3):\n", + " requests.post('http://127.0.0.1:8080/motor/head_z/register/goal_position/value.json', \n", + " data=json.dumps(pos), \n", + " headers={'content-type': 'application/json'})\n", + " \n", + " pos *= -1\n", + " time.sleep(1.)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 13 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Just as a very basic benchmark:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%%timeit\n", + "\n", + "r = requests.get('http://127.0.0.1:8080/motor/head_z/register/present_position')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "100 loops, best of 3: 3.37 ms per loop\n" + ] + } + ], + "prompt_number": 14 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [] + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/pypot-master/pypot-master/samples/notebooks/Another language.ipynb b/pypot-master/pypot-master/samples/notebooks/Another language.ipynb new file mode 100644 index 0000000..2272a09 --- /dev/null +++ b/pypot-master/pypot-master/samples/notebooks/Another language.ipynb @@ -0,0 +1,1646 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Another language" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**NOTE before starting**\n", + "\n", + "To change the notebook which is launched by default by the \"programming with Jupyter\" tab in puppet-master interface\n", + "\n", + "1. Go to [My Documents/ Poppy source-code/ puppet-master/ bouteillederouge.py](http://poppy.local:8888/edit/My%20Documents/Poppy%20Source-code/puppet-master/bouteillederouge.py)\n", + "2. Find `jupyter()` function (around line 191)\n", + "3. Change the value of the variable `default_notebook`" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**This notebook will guide you for connect another programmation language** *(not beginner tutorial)*\n", + "\n", + "What you will see in this notebook:\n", + "\n", + "1. Understand how your robot is programmed\n", + "2. Code through API\n", + "\n", + " > snap server\n", + " 1. Access to API to get values \n", + " 2. Get value - *with single input* - and - *with multiple input* -\n", + " 3. Set value - *with single input* - and - *with multiple input* -\n", + " 4. Add checking inputs and use your function\n", + " \n", + " > http server\n", + " 1. Access to API\n", + " 2. Get request\n", + " 3. Post request\n", + " \n", + "3. Add new entries in API\n", + "4. Add tab in puppet-master interface" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 1. Understand how your robot is programmed" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Code source\n", + "The native language of Poppy robots is the python language. In python, all of the robot's functionalities are available.\\\n", + "Check notebooks «Discover your Poppy robot» and «Benchmark your Poppy robot» (in folder [My Documents/ python notebook](http://poppy.local:8888/tree/My%20Documents/Python%20notebooks)) for more information.\\\n", + "You can also read [the documentation](http://poppy.local/docs) for even more information." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## API\n", + "An application programming interface (API) is a computing interface which defines interactions between multiple software intermediaries.\\\n", + "Show [Wikipedia](https://en.wikipedia.org/wiki/Application_programming_interface) for more informations.\n", + "What interests us here is how to use a language other than Python.\n", + "\n", + "On the Poppy robot, you can access to the API via two server: one named \"http\", the other named \"snap\".\\\n", + "These two server allow you to control your robot through some url requests\n", + "\n", + "**Http server**\\\n", + "You can access to this server via the `8080` port (value by default).\\\n", + "With this server, you can use the HTTP request of `GET` and `POST` method.\\\n", + "All valid urls are visible at the root url: http://poppy.local:8080/\n", + "\n", + "**Snap server**\\\n", + "You can access to this server via the `6969` port (value by default).\\\n", + "With this server, you can use the HTTP request of only `GET` method.\\\n", + "All valid urls are visible at the root url: http://poppy.local:6969/" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### *Snap! Build your own Blocks* and other languages\n", + "\n", + "*Snap!* (formerly BYOB) is a visual, drag-and-drop programming language. It is an extended reimplementation of Scratch (a project of the Lifelong Kindergarten Group at the MIT Media Lab) that allows you to Build Your Own Blocks.\\\n", + "Show [Wikipedia](https://en.wikipedia.org/wiki/Snap!_(programming_language)) and/ or [*Snap!* website](https://snap.berkeley.edu/about) for more informations. What interests us here is how *Snap!* use the robot API to control it.\n", + "\n", + "*Snap!* allows you to create blocks from initial blocks. These blocks correspond to functions. Among these, one of them allows you to send requests urls.\n", + "On this basis, we have built a series of blocks to control the robot via the API. All these blocks have in common to end with the emission of the url request.\n", + "\n", + "Here, in python, we will see how to use these urls. The methodology will be the same for another language.\n", + "An example applied is that of poppy-monitor ([primitive manager](http://poppy.local/monitoring/monitor)) and that of poppy-viewer ([web viewer](http://poppy.local/monitoring/visualisator)). Both are coded in JavaScript. Check the source code, respectively here: [My Documents/ Poppy Source-code/ poppy-monitor](http://poppy.local:8888/tree/My%20Documents/Poppy%20Source-code/poppy-monitor) and here: [My Documents/ Poppy Source-code/ poppy-viewer](http://poppy.local:8888/tree/My%20Documents/Poppy%20Source-code/poppy-viewer)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 2. Code through API (snap server)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**First**\\\n", + "Launch an instance of the robot with http and/or snap server.\\\n", + "You can do this in two différente way:\n", + "\n", + "- launch API with puppet-master interface: Clicking on start API button in «[what happend?](http://poppy.local/logs)» tab.\\\n", + "*By default, API auto-starting is enable (and there is no need to click on start API button), change this option in «[settings](http://poppy.local/settings)» tab.*\n", + "- launch an instance of the robot directly in this notebook (show cell below)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from pypot.creatures import PoppyErgoJr\n", + "\n", + "poppy = PoppyErgoJr(use_http=True, use_snap=True)\n", + "\n", + "# If you want to use another robot (humanoid, torso, ...) adapt this code\n", + "#from pypot.creatures import PoppyTorso\n", + "#poppy = PoppyTorso(use_http=True, use_snap=True)\n", + "\n", + "# If you want to use the robot with the camera unpluged, \n", + "# you have to pass the argument camera='dummy\n", + "#poppy = PoppyErgoJr(camera='dummy', use_http=True, use_snap=True)\n", + "\n", + "# If you want to use a simulated robot in the 3D web viewer aka \"poppy simu\"\n", + "# you have to pass the argument simulator='poppy-simu'\n", + "#poppy = PoppyErgoJr(simulator='poppy-simu', use_http=True, use_snap=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Second**\\\n", + "Allow python to use url `import request` and to show HTML content inline `import HTML`" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import requests\n", + "from IPython.core.display import HTML" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "All url paths available:
/
/motors/<alias>
/motor/<motor>/get/<register>
/motor/<motor>/get/list/registers
/motors/get/positions
/motors/alias
/motors/<motors>/get/<register>
/motors/set/goto/<motors_position_duration>
/motors/set/registers/<motors_register_value>
/motors/set/positions/<positions>
/motor/<motor>/set/<register>/<value>
/motor/<motor>/goto/<position>/<duration>
/snap-blocks.xml
/snap/<project>
/ip/<host>
/ip/
/reset-simulation
/primitives
/primitives/running
/primitive/<primitive>/start
/primitive/<primitive>/stop
/primitive/<primitive>/pause
/primitive/<primitive>/resume
/primitive/<primitive>/properties
/primitive/<primitive>/get/<property>
/primitive/<primitive>/set/<property>/<value>
/primitive/<primitive>/methodes
/primitive/<primitive>/call/<method>
/primitive/<primitive>/call/<method>/<args>
/primitive/MoveRecorder/<move_name>/start
/primitive/MoveRecorder/<move_name>/stop
/primitive/MoveRecorder/<move_name>/attach/<motors>
/primitive/MoveRecorder/<move_name>/get_motors
/primitive/MoveRecorder/<move_name>/start/<motors>
/primitive/MoveRecorder/<move_name>/remove
/primitive/MoveRecorder
/primitive/MovePlayer
/primitive/MovePlayer/<move_name>/start
/primitive/MovePlayer/<move_name>/start/<move_speed>
/primitive/MovePlayer/<move_name>/start/<move_speed>/backwards
/primitive/MovePlayer/<move_name>/stop
/detect/<marker>
/frame.png
/frame.png/saved_in_my_documents
/ik/<chain>/endeffector
/ik/<chain>/goto/<x>/<y>/<z>/<duration>" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#Testing Snap API access\n", + "valid_url_for_snap_server=''\n", + "try:\n", + " response = requests.get('http://poppy.local:6969/')\n", + " if response.status_code==200:\n", + " valid_url_for_snap_server=response.text\n", + "except:\n", + " print('http://poppy.local:6969/ is unreachable')\n", + "\n", + "HTML(valid_url_for_snap_server)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.a. Access to API to get values\n", + "\n", + "Each url execute an action on the robot (in the native langage) and return a value. \n", + "All applications able to send a url request can use the snap API to interact with the robot (including your web browser). Be careful, the format of each url is different as well as the type of returned value.\n", + "For exemple:\n", + "- http://poppy.local:6969/ip/ return courant ip of the robot as a string\n", + "- http://poppy.local:6969/motors/get/positions return all motors positions as a string split by `;`\n", + "- http://poppy.local:6969/frame.png return the last frame take by the camera as png\n", + "\n", + "From there, we can create a function simplifying the emission of the url request. In *Snap!*, we would speak of blocks, and not of function, the idea is the same for another language." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> call: http://poppy.local:6969/ip/\n", + "192.168.1.100\n", + "> call: http://poppy.local:6969/motors/get/positions\n", + "[4.25, -39.15, 78.15, -17.74, 53.81, -4.84]\n" + ] + } + ], + "source": [ + "def to_api(url, hostname='poppy.local', port='6969'):\n", + " url_root='http://{}:{}/'.format(hostname, port)\n", + " print('> call:',url_root+url)\n", + " try:\n", + " response = requests.get(url_root+url)\n", + " if response.status_code==200:\n", + " return response.text\n", + " else:\n", + " return 'ERROR'\n", + " except:\n", + " print('{} is unreachable'.format(url_root))\n", + "\n", + "def get_ip():\n", + " return to_api('ip/')\n", + "\n", + "def get_all_positions():\n", + " return [float(val) for val in to_api('motors/get/positions').split(';')]\n", + "\n", + "print(get_ip())\n", + "print(get_all_positions())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.b. Get value - *with single input* -\n", + "Some urls have variables. They are identified by the symbols `<` and `>` \n", + "For exemple in url :\n", + "- `http://poppy.local:6969/motor/`\\\n", + "Replace `` by the name of the motor group" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> call: http://poppy.local:6969/motors/alias\n", + "['base', 'tip']\n", + "> call: http://poppy.local:6969/motors/motors\n", + "['m1', 'm2', 'm3', 'm4', 'm5', 'm6']\n", + "> call: http://poppy.local:6969/motors/alias\n", + "> call: http://poppy.local:6969/motors/base\n", + "> call: http://poppy.local:6969/motors/alias\n", + "these motors: ['m1', 'm2', 'm3'], are in group of motors named: base.\n" + ] + } + ], + "source": [ + "def get_motors_alias():\n", + " return to_api('motors/alias').split('/')\n", + "\n", + "def get_motors_name(alias='motors'):\n", + " return to_api('motors/'+alias).split('/')\n", + "\n", + "print(get_motors_alias())\n", + "print(get_motors_name())\n", + "\n", + "print('these motors: {}, are in group of motors named: {}.'.format(\n", + " get_motors_name(get_motors_alias()[0]),\n", + " get_motors_alias()[0])\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- `http://poppy.local:6969/motor//get/`\\\n", + "Replace `` by the name of the motor, and `` by name of register:\n", + " - http://poppy.local:6969/motor/m1/get/present_position return the value of present_position for m1 motor\n", + " - http://poppy.local:6969/motor/m5/get/present_speed return the value of present_speed for m5 motor\n", + " - http://poppy.local:6969/motor/m3/get/led return the value of led for m3 motor" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> call: http://poppy.local:6969/motor/m1/get/registers\n", + "all avalible register are: registers, goal_speed, compliant, safe_compliant, angle_limit, id, name, model, present_position, goal_position, present_speed, moving_speed, present_load, torque_limit, lower_limit, upper_limit, present_voltage, present_temperature, pid, led, control_mode\n", + "> call: http://poppy.local:6969/motor/m1/get/present_position\n", + "m1 is in position 4.25°\n", + "> call: http://poppy.local:6969/motor/m1/get/present_position\n", + "m1 is in position 4.25°\n", + "> call: http://poppy.local:6969/motor/m1/get/compliant\n", + "m1 compliant register is True\n", + "> call: http://poppy.local:6969/motor/m1/get/compliant\n", + "m1 compliant register is True\n", + "> call: http://poppy.local:6969/motor/m1/get/led\n", + "led of m1 is off\n", + "> call: http://poppy.local:6969/motor/m1/get/led\n", + "led of m1 is off\n" + ] + } + ], + "source": [ + "def get_register(motor_id, register):\n", + " url='motor/m{}/get/{}'.format(motor_id, register)\n", + " return to_api(url)\n", + "\n", + "def get_register_list(motor_id=1):\n", + " out=get_register(motor_id, 'registers')\n", + " if 'ERROR' in out: return out\n", + " else: return eval(out) #type == list\n", + "\n", + "def get_position(motor_id):\n", + " out=get_register(motor_id, 'present_position')\n", + " if 'ERROR' in out: return out\n", + " else: return float(out)\n", + " \n", + "def get_compliant(motor_id):\n", + " out=get_register(motor_id, 'compliant')\n", + " if 'ERROR' in out: return out\n", + " else: return bool(out)\n", + " \n", + "def get_color(motor_id):\n", + " return get_register(motor_id, 'led') #type == str\n", + "\n", + "print('all avalible register are: {}'.format(', '.join(get_register_list())))\n", + "print('m1 is in position {}°'.format(get_register(1, 'present_position')))\n", + "print('m1 is in position {}°'.format(get_position(1)))\n", + "print('m1 compliant register is {}'.format(get_register(1, 'compliant')))\n", + "print('m1 compliant register is {}'.format(get_compliant(1)))\n", + "print('led of m1 is {}'.format(get_register(1, 'led')))\n", + "print('led of m1 is {}'.format(get_color(1)))\n", + "#print('motor sensitivity {}'.format([get_position(2)==get_position(2) for _ in range(10)]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.b Get value - *with multiple inputs* -\n", + "Some urls have multiple input. They are identified by the letter `s` For exemple in url, where motor variable have an `s`:\n", + "\n", + "- `http://poppy.local:6969/motors//get/`\\\n", + "Replace `` by the name of one or multiple motors (split by `;`), and `` by name of register:\n", + " - http://poppy.local:6969/motors/m1;m2;m3/get/present_temperature return the value of present_temperature for m1, m2 and m3 motors split by `;`\n", + " - http://poppy.local:6969/motors/m1;m5/get/present_load return the value of present_load for m1 m5 motors" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> call: http://poppy.local:6969/motors/m1;m2/get/present_position\n", + "m1 and m2 are respectively in position ['4.25', '-39.15']\n", + "> call: http://poppy.local:6969/motors/m1;m2/get/present_position\n", + "m1 and m2 are respectively in position [4.25, -39.15]\n", + "> call: http://poppy.local:6969/motors/m1;m2/get/compliant\n", + "m1 and m2 compliant register are respectively ['True', 'True']\n", + "> call: http://poppy.local:6969/motors/m1;m2/get/compliant\n", + "m1 and m2 compliant register are respectively [True, True]\n", + "> call: http://poppy.local:6969/motors/m1;m2/get/led\n", + "led of m1 and m2 are respectively ['off', 'off']\n", + "> call: http://poppy.local:6969/motors/m1;m2/get/led\n", + "led of m1 and m2 are respectively ['off', 'off']\n" + ] + } + ], + "source": [ + "def get_registers(motors_id, register):\n", + " if type(motors_id)!=list: return 'Type ERROR'\n", + " targets=[]\n", + " for motor_id in motors_id:\n", + " targets.append('m'+str(motor_id))\n", + " url='motors/{}/get/{}'.format(';'.join(targets), register)\n", + " return to_api(url).split(';')\n", + "\n", + "def get_positions(motors_id):\n", + " out=get_registers(motors_id, 'present_position')\n", + " if 'ERROR' in out: return out\n", + " else: return [float(val) for val in out]\n", + "def get_compliants(motors_id):\n", + " out=get_registers(motors_id, 'compliant')\n", + " if 'ERROR' in out: return out\n", + " else: return [bool(val) for val in out]\n", + "def get_colors(motors_id):\n", + " out=get_registers(motors_id, 'led')\n", + " if 'ERROR' in out: return out\n", + " else: return [str(val) for val in out]\n", + "\n", + "print('m1 and m2 are respectively in position {}'.format(get_registers([1,2], 'present_position')))\n", + "print('m1 and m2 are respectively in position {}'.format(get_positions([1,2])))\n", + "print('m1 and m2 compliant register are respectively {}'.format(get_registers([1,2], 'compliant')))\n", + "print('m1 and m2 compliant register are respectively {}'.format(get_compliants([1,2])))\n", + "print('led of m1 and m2 are respectively {}'.format(get_registers([1,2], 'led')))\n", + "print('led of m1 and m2 are respectively {}'.format(get_colors([1,2])))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.c. Set value - *with single input* -\n", + "For these previous urls, the Snap API only returns the requested value(s). The following urls performs an action on the robot and return always 'Done!':\n", + "- `http://poppy.local:6969/motor//set//`\n", + " - http://poppy.local:6969/motor/m1/set/goal_position/15 motor m1 started from where it was and arrived in position 15°\n", + " - http://poppy.local:6969/motor/m1/set/goal_position/-15 motor m1 started from where it was and arrived in position -15°" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> call: http://poppy.local:6969/motor/m1/set/compliant/0 \n", + "set m1 compliant state to false: Done!\n", + "> call: http://poppy.local:6969/motor/m1/set/goal_position/15 \n", + "set m1 position to 15°: Done!\n", + "> call: http://poppy.local:6969/motor/m1/set/compliant/1 \n", + "set m1 compliant state to true: Done!\n" + ] + } + ], + "source": [ + "def set_register(motor_id, register, value):\n", + " url='motor/m{}/set/{}/{} '.format(motor_id, register, value)\n", + " return to_api(url)\n", + "\n", + "def set_position(motor_id, position):\n", + " return set_register(motor_id, 'goal_position', position)\n", + "def set_compliant(motor_id, state):\n", + " return set_register(motor_id, 'compliant', state)\n", + "def set_color(motor_id, color):\n", + " return set_register(motor_id, 'led', color)\n", + "\n", + "#note: the motor must be in the non-compliant state to be control it in position\n", + "print('set m1 compliant state to false: {}'.format(set_compliant(1,0)))\n", + "print('set m1 position to 15°: {}'.format(set_position(1,15)))\n", + "print('set m1 compliant state to true: {}'.format(set_compliant(1,1)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.c. Set value - *with multiple inputs* -\n", + "- `http://poppy.local:6969/motors/set/registers/`\\\n", + "Replace `` by the name of motors, name of register, value to give to the register (split by `:` like this: `m1:led:pink`) then iterate for each moteurs (split by `;` like this: `m1:led:pink;m2:led:pink`)\n", + " - http://poppy.local:6969/motors/set/registers/m1:present_position:15;m1:led:green;m6:led:yellow \\\n", + " motor m1 started from where it was and arrived in position 15° ; motor m1 lit green ; motor m6 lit yellow" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> call: http://poppy.local:6969/motors/set/registers/m1:compliant:1;m2:compliant:1\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:yellow;m1:goal_position:45;m2:goal_position:25;m3:led:blue\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:goal_position:0\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:compliant:0;m2:compliant:0\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:green;m2:led:green;m3:led:green\n", + "Done!\n" + ] + } + ], + "source": [ + "def valid_registers_input(motors_id, registers, values):\n", + " if type(motors_id)!=list or type(registers)!=list or type(values)!=list:\n", + " return 'Type ERROR'\n", + " if len(motors_id) != len(registers) or len(motors_id) != len(values):\n", + " return 'Size ERROR'\n", + " return motors_id, registers, values\n", + "\n", + "def set_registers(motors_id, registers, values):\n", + " registers_input = valid_registers_input(motors_id, registers, values)\n", + " if 'ERROR' in registers_input:\n", + " return registers_input\n", + " else:\n", + " motors_id, registers, values = registers_input\n", + " cmd=[]\n", + " for i, motor_id in enumerate(motors_id):\n", + " cmd.append('m{}:{}:{}'.format(motor_id, registers[i], values[i]))\n", + " cmd=';'.join(cmd)\n", + " url='motors/set/registers/'+cmd\n", + " return to_api(url)\n", + "\n", + "def set_positions(motors_id, positions):\n", + " return set_registers(motors_id, ['goal_position']*len(motors_id), positions)\n", + "def set_compliants(motors_id, states):\n", + " return set_registers(motors_id, ['compliant']*len(motors_id), states)\n", + "def set_colors(motors_id, colors):\n", + " return set_registers(motors_id, ['led']*len(motors_id), colors)\n", + "\n", + "print(set_compliants([1,2],[1,1]))\n", + "print(set_registers([1,1,2,3],['led', 'goal_position', 'goal_position', 'led'],['yellow', 45, 25, 'blue']))\n", + "print(set_positions([1],[0]))\n", + "print(set_compliants([1,2],[0,0]))\n", + "print(set_colors([1,2,3],['green']*3))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.d. Add checking inputs and use your function" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> call: http://poppy.local:6969/motors/motors\n", + "> call: http://poppy.local:6969/motor/m1/get/registers\n" + ] + } + ], + "source": [ + "'''\n", + "prepare input for set_register function:\n", + " accept:\n", + " python list of values,\n", + " str list of values (split by space),\n", + " int, float, bool\n", + " return: python list of str values\n", + "'''\n", + "def set_type(value):\n", + " if type(value)==str:\n", + " value=value.split(' ')\n", + " elif type(value) in (float, int, bool):\n", + " value=[str(value)]\n", + " elif type(value)!=list:\n", + " return 'Type ERROR'\n", + " else:\n", + " for i, v in enumerate(value): value[i]=str(v)\n", + " return value\n", + "'''\n", + "re-write valid_registers_input function\n", + "valid_registers_input is use by set_registers function\n", + "add set_type function\n", + "add check size, accept one value for default for each motor\n", + "return couple of tree values, each is a list of str values\n", + "'''\n", + "number_of_all_motors=len(get_motors_name())\n", + "all_valid_register=get_register_list()\n", + "\n", + "def valid_registers_input(motors_id, registers, values):\n", + "\n", + " motors_id, registers, values = set_type(motors_id), set_type(registers), set_type(values)\n", + " if 'ERROR' in (motors_id or registers or values):\n", + " return 'Type ERROR'\n", + "\n", + " if len(registers) == 1:\n", + " registers=registers*len(motors_id)\n", + " elif len(motors_id) != len(registers):\n", + " return 'Size ERROR'\n", + "\n", + " if len(values) == 1:\n", + " values=values*len(motors_id)\n", + " elif len(motors_id) != len(values):\n", + " return 'Size ERROR'\n", + " \n", + " number_of_motors=number_of_all_motors\n", + " valid_register=all_valid_register\n", + " #assume that value of values variable are check before\n", + " for i, motor_id in enumerate(motors_id):\n", + " if int(motor_id) <1 or int(motor_id) > number_of_motors or registers[i] not in valid_register:\n", + " return 'Value ERROR'\n", + " \n", + " return motors_id, registers, values\n", + "'''\n", + "No need to re-write set_registers function\n", + "but get_registers function need to:\n", + "add set_type function to avoid error\n", + "add check values\n", + "'''\n", + "def get_registers(motors_id, register):\n", + " motors_id=set_type(motors_id)\n", + " if 'ERROR' in motors_id: return motors_id\n", + " \n", + " valid_register=all_valid_register\n", + " if register not in valid_register: return 'Value ERROR'\n", + " \n", + " number_of_motors=number_of_all_motors\n", + " targets=[]\n", + " for i, motor_id in enumerate(motors_id):\n", + " if int(motor_id) <1 or int(motor_id) > number_of_motors:\n", + " return 'Value ERROR'\n", + " else:\n", + " targets.append('m'+motor_id)\n", + " \n", + " url='motors/{}/get/{}'.format(';'.join(targets), register)\n", + " return to_api(url).split(';')" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "'''\n", + "re-write function\n", + "add check value\n", + "'''\n", + "def set_positions(motors_id, positions):\n", + " positions=set_type(positions)\n", + " if 'ERROR' in positions: return positions\n", + " for position in positions:\n", + " if float(position) < -90 or float(position) > 90:\n", + " return 'Value ERROR'\n", + " return set_registers(motors_id, 'goal_position', positions)\n", + "\n", + "def set_compliants(motors_id, states):\n", + " states=set_type(states)\n", + " if 'ERROR' in states: return states\n", + " for state in states:\n", + " if state == 'True': state='1'\n", + " elif state == 'False': state='0'\n", + " elif state not in ('0', '1'): return 'Value ERROR'\n", + " return set_registers(motors_id, 'compliant', states)\n", + "\n", + "def set_colors(motors_id, colors):\n", + " colors=set_type(colors)\n", + " if 'ERROR' in colors: return colors\n", + " for color in colors:\n", + " if color not in ['red','green','pink','blue','yellow','off']:\n", + " return 'Value ERROR'\n", + " return set_registers(motors_id, 'led', colors)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> call: http://poppy.local:6969/motors/set/registers/m1:compliant:0;m2:compliant:0\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:yellow;m1:goal_position:45;m2:goal_position:25;m3:led:blue\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:goal_position:0\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:compliant:1;m2:compliant:1\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:green;m2:led:green;m3:led:green\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:compliant:0;m2:compliant:0\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:yellow;m1:goal_position:45;m2:goal_position:25;m3:led:blue\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:goal_position:0\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:compliant:1;m2:compliant:1\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:green;m2:led:green;m3:led:green\n", + "Done!\n" + ] + } + ], + "source": [ + "#before syntaxe, work always + check values\n", + "print(set_compliants([1,2],[0,0]))\n", + "print(set_registers([1,1,2,3],['led', 'goal_position', 'goal_position', 'led'],['yellow', 45, 25, 'blue']))\n", + "print(set_positions([1],[0]))\n", + "print(set_compliants([1,2],[1,1]))\n", + "print(set_colors([1,2,3],['green']*3))\n", + "# + more flxible syntaxe \n", + "print(set_compliants('1 2',0))\n", + "print(set_registers('1 1 2 3','led goal_position goal_position led','yellow 45 25 blue'))\n", + "print(set_positions(1,0))\n", + "print(set_compliants([1,2],1))\n", + "print(set_colors('1 2 3','green'))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> call: http://poppy.local:6969/motors/set/registers/m1:led:pink\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m1/get/led\n", + "['pink']\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:off\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m1/get/led\n", + "['off']\n", + "> call: http://poppy.local:6969/motors/set/registers/m2:led:pink\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m2/get/led\n", + "['pink']\n", + "> call: http://poppy.local:6969/motors/set/registers/m2:led:off\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m2/get/led\n", + "['off']\n", + "> call: http://poppy.local:6969/motors/set/registers/m3:led:pink\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m3/get/led\n", + "['pink']\n", + "> call: http://poppy.local:6969/motors/set/registers/m3:led:off\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m3/get/led\n", + "['off']\n", + "> call: http://poppy.local:6969/motors/set/registers/m4:led:pink\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m4/get/led\n", + "['pink']\n", + "> call: http://poppy.local:6969/motors/set/registers/m4:led:off\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m4/get/led\n", + "['off']\n", + "> call: http://poppy.local:6969/motors/set/registers/m5:led:pink\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m5/get/led\n", + "['pink']\n", + "> call: http://poppy.local:6969/motors/set/registers/m5:led:off\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m5/get/led\n", + "['off']\n", + "> call: http://poppy.local:6969/motors/set/registers/m6:led:pink\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m6/get/led\n", + "['pink']\n", + "> call: http://poppy.local:6969/motors/set/registers/m6:led:off\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m6/get/led\n", + "['off']\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:red;m2:led:red;m3:led:red;m4:led:red;m5:led:red;m6:led:red\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m1;m2;m3;m4;m5;m6/get/led\n", + "['red', 'red', 'red', 'red', 'red', 'red']\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:off;m2:led:off;m3:led:off;m4:led:off;m5:led:off;m6:led:off\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m1;m2;m3;m4;m5;m6/get/led\n", + "['off', 'off', 'off', 'off', 'off', 'off']\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:green;m2:led:green;m3:led:green;m4:led:green;m5:led:green;m6:led:green\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m1;m2;m3;m4;m5;m6/get/led\n", + "['green', 'green', 'green', 'green', 'green', 'green']\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:off;m2:led:off;m3:led:off;m4:led:off;m5:led:off;m6:led:off\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m1;m2;m3;m4;m5;m6/get/led\n", + "['off', 'off', 'off', 'off', 'off', 'off']\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:pink;m2:led:pink;m3:led:pink;m4:led:pink;m5:led:pink;m6:led:pink\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m1;m2;m3;m4;m5;m6/get/led\n", + "['pink', 'pink', 'pink', 'pink', 'pink', 'pink']\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:off;m2:led:off;m3:led:off;m4:led:off;m5:led:off;m6:led:off\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m1;m2;m3;m4;m5;m6/get/led\n", + "['off', 'off', 'off', 'off', 'off', 'off']\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:blue;m2:led:blue;m3:led:blue;m4:led:blue;m5:led:blue;m6:led:blue\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m1;m2;m3;m4;m5;m6/get/led\n", + "['blue', 'blue', 'blue', 'blue', 'blue', 'blue']\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:off;m2:led:off;m3:led:off;m4:led:off;m5:led:off;m6:led:off\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m1;m2;m3;m4;m5;m6/get/led\n", + "['off', 'off', 'off', 'off', 'off', 'off']\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:yellow;m2:led:yellow;m3:led:yellow;m4:led:yellow;m5:led:yellow;m6:led:yellow\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m1;m2;m3;m4;m5;m6/get/led\n", + "['yellow', 'yellow', 'yellow', 'yellow', 'yellow', 'yellow']\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:off;m2:led:off;m3:led:off;m4:led:off;m5:led:off;m6:led:off\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m1;m2;m3;m4;m5;m6/get/led\n", + "['off', 'off', 'off', 'off', 'off', 'off']\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:red;m2:led:red;m3:led:red;m4:led:red;m5:led:red;m6:led:red\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m1;m2;m3;m4;m5;m6/get/led\n", + "['red', 'red', 'red', 'red', 'red', 'red']\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:off;m2:led:off;m3:led:off;m4:led:off;m5:led:off;m6:led:off\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m1;m2;m3;m4;m5;m6/get/led\n", + "['off', 'off', 'off', 'off', 'off', 'off']\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:green;m2:led:green;m3:led:green;m4:led:green;m5:led:green;m6:led:green\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m1;m2;m3;m4;m5;m6/get/led\n", + "['green', 'green', 'green', 'green', 'green', 'green']\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:off;m2:led:off;m3:led:off;m4:led:off;m5:led:off;m6:led:off\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m1;m2;m3;m4;m5;m6/get/led\n", + "['off', 'off', 'off', 'off', 'off', 'off']\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:pink;m2:led:pink;m3:led:pink;m4:led:pink;m5:led:pink;m6:led:pink\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m1;m2;m3;m4;m5;m6/get/led\n", + "['pink', 'pink', 'pink', 'pink', 'pink', 'pink']\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:off;m2:led:off;m3:led:off;m4:led:off;m5:led:off;m6:led:off\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m1;m2;m3;m4;m5;m6/get/led\n", + "['off', 'off', 'off', 'off', 'off', 'off']\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:blue;m2:led:blue;m3:led:blue;m4:led:blue;m5:led:blue;m6:led:blue\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m1;m2;m3;m4;m5;m6/get/led\n", + "['blue', 'blue', 'blue', 'blue', 'blue', 'blue']\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:off;m2:led:off;m3:led:off;m4:led:off;m5:led:off;m6:led:off\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m1;m2;m3;m4;m5;m6/get/led\n", + "['off', 'off', 'off', 'off', 'off', 'off']\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:yellow;m2:led:yellow;m3:led:yellow;m4:led:yellow;m5:led:yellow;m6:led:yellow\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m1;m2;m3;m4;m5;m6/get/led\n", + "['yellow', 'yellow', 'yellow', 'yellow', 'yellow', 'yellow']\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:led:off;m2:led:off;m3:led:off;m4:led:off;m5:led:off;m6:led:off\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/m1;m2;m3;m4;m5;m6/get/led\n", + "['off', 'off', 'off', 'off', 'off', 'off']\n" + ] + } + ], + "source": [ + "#use your function\n", + "import time\n", + "\n", + "for i in range(1,7):\n", + " print(set_colors(i,'pink'))\n", + " print(get_colors(i))\n", + " time.sleep(0.5)\n", + " print(set_colors(i,'off'))\n", + " print(get_colors(i))\n", + " #time.sleep(0.5)\n", + "\n", + "for _ in range(2):\n", + " for c in ['red','green','pink','blue','yellow']:\n", + " print(set_colors('1 2 3 4 5 6', c))\n", + " print(get_colors('1 2 3 4 5 6'))\n", + " time.sleep(0.5)\n", + " print(set_colors('1 2 3 4 5 6','off'))\n", + " print(get_colors('1 2 3 4 5 6'))\n", + " time.sleep(0.5)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> call: http://poppy.local:6969/motors/set/registers/m1:compliant:0;m2:compliant:0;m3:compliant:0;m4:compliant:0;m5:compliant:0;m6:compliant:0\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:goal_position:0;m2:goal_position:10;m3:goal_position:-15;m4:goal_position:10;m5:goal_position:0;m6:goal_position:0\n", + "> call: http://poppy.local:6969/motors/m1;m2;m3;m4;m5;m6/get/present_position\n", + "motors in position: [0.73, 41.5, 30.06, -13.05, 55.57, -4.84]\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:goal_position:-10;m2:goal_position:-10;m3:goal_position:-10;m4:goal_position:-10;m5:goal_position:-10;m6:goal_position:-10\n", + "> call: http://poppy.local:6969/motors/m1;m2;m3;m4;m5;m6/get/present_position\n", + "motors in position: [0.73, 41.5, 30.06, -13.05, 55.57, -4.84]\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:compliant:1;m2:compliant:1;m3:compliant:1;m4:compliant:1;m5:compliant:1;m6:compliant:1\n", + "> call: http://poppy.local:6969/motors/m1/get/present_position\n", + "m1 in position [-10.7]°\n", + "> call: http://poppy.local:6969/motors/m2/get/present_position\n", + "m2 in position [-11.88]°\n", + "> call: http://poppy.local:6969/motors/m3/get/present_position\n", + "m3 in position [-10.7]°\n", + "> call: http://poppy.local:6969/motors/m4/get/present_position\n", + "m4 in position [-10.7]°\n", + "> call: http://poppy.local:6969/motors/m5/get/present_position\n", + "m5 in position [-8.36]°\n", + "> call: http://poppy.local:6969/motors/m6/get/present_position\n", + "m6 in position [-5.43]°\n" + ] + } + ], + "source": [ + "set_compliants('1 2 3 4 5 6', 0)\n", + "\n", + "set_positions('1 2 3 4 5 6', '0 10 -15 10 0 0')\n", + "time.sleep(1.5)\n", + "print('motors in position: ', get_positions([1, 2, 3, 4, 5, 6]))\n", + "\n", + "set_positions('1 2 3 4 5 6', -10)\n", + "time.sleep(.5)\n", + "print('motors in position: ', get_positions('1 2 3 4 5 6'))\n", + "\n", + "set_compliants('1 2 3 4 5 6', 1)\n", + "\n", + "time.sleep(.5)\n", + "for i in range(1,7): print('m{} in position {}°'.format(i, get_positions(i)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Another URL**\n", + "- `http://poppy.local:6969/motors/set/goto/`\n", + " - http://poppy.local:6969/motors/set/goto/m1:0:1;m2:15:2;m6:45:1.5 \\\n", + "motor m1 started from where it was and arrived in position 0° in 1 seconde ;\\\n", + "motor m2 started from where it was and arrived in position 15° in 2 secondes ;\\\n", + "motor m6 started from where it was and arrived in position 45° in 1.5 secondes" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> call: http://poppy.local:6969/motors/motors\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:compliant:False;m2:compliant:False;m3:compliant:False;m4:compliant:False;m5:compliant:False;m6:compliant:False\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/set/goto/m1:10:1;m2:10:1;m3:10:1;m4:10:1;m5:10:1;m6:10:1\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/set/goto/m1:-10:2;m2:-10:2;m3:-10:2;m4:-10:2;m5:-10:2;m6:-10:2\n", + "Done!\n", + "> call: http://poppy.local:6969/motors/set/registers/m1:compliant:True;m2:compliant:True;m3:compliant:True;m4:compliant:True;m5:compliant:True;m6:compliant:True\n", + "Done!\n" + ] + } + ], + "source": [ + "number_of_all_motors=len(get_motors_name())\n", + "\n", + "def valid_goto_input(motors_id, positions, durations):\n", + "\n", + " motors_id, positions, durations = set_type(motors_id), set_type(positions), set_type(durations)\n", + " if 'ERROR' in (motors_id or positions or durations):\n", + " return 'Type ERROR'\n", + "\n", + " if len(positions) == 1:\n", + " positions=positions*len(motors_id)\n", + " elif len(motors_id) != len(positions):\n", + " return 'Size ERROR'\n", + "\n", + " if len(durations) == 1:\n", + " durations=durations*len(motors_id)\n", + " elif len(durations) != len(durations):\n", + " return 'Size ERROR'\n", + " \n", + " number_of_motors=number_of_all_motors\n", + " for i, motor_id in enumerate(motors_id):\n", + " if int(motor_id) <1 or int(motor_id) > number_of_motors:\n", + " return 'Value ERROR'\n", + " if float(positions[i]) < -90 or float(positions[i]) > 90:\n", + " return 'Value ERROR'\n", + " if float(durations[i]) < 0:\n", + " return 'Value ERROR'\n", + " \n", + " return motors_id, positions, durations\n", + "\n", + "def set_goto(motors_id, positions, durations):\n", + " goto_input = valid_goto_input(motors_id, positions, durations)\n", + " if 'ERROR' in goto_input:\n", + " return goto_input\n", + " else:\n", + " motors_id, positions, durations = goto_input\n", + " cmd=[]\n", + " for i, motor_id in enumerate(motors_id):\n", + " cmd.append('m{}:{}:{}'.format(motor_id, positions[i], durations[i]))\n", + " cmd=';'.join(cmd)\n", + " url='motors/set/goto/'+cmd\n", + "\n", + " return to_api(url)\n", + "\n", + "print(set_compliants('1 2 3 4 5 6', False))\n", + "print(set_goto('1 2 3 4 5 6', 10, 1))\n", + "time.sleep(1.5)\n", + "print(set_goto('1 2 3 4 5 6', -10, 2))\n", + "time.sleep(2.5)\n", + "print(set_compliants('1 2 3 4 5 6', True))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Recap: function define here:\n", + "to_api(url)\n", + "\n", + "get_ip() \\\n", + "get_all_positions() \\\n", + "get_motors_alias() \\\n", + "get_motors_name()\n", + "\n", + "get_register(motor_id, register) \\\n", + "get_register_list() \\\n", + "get_position(motor_id) \\\n", + "get_compliant(motor_id) \\\n", + "get_color(motor_id)\n", + "\n", + "get_registers(motors_id, register) \\\n", + "get_positions(motors_id) \\\n", + "get_compliants(motors_id) \\\n", + "get_colors(motors_id)\n", + "\n", + "set_register(motor_id, register, value) \\\n", + "set_position(motor_id, value) \\\n", + "set_compliant(motor_id, value) \\\n", + "set_color(motor_id, value)\n", + "\n", + "set_type(value)\n", + "\n", + "valid_registers_input(motors_id, registers, values) \\\n", + "set_registers(motors_id, registers, values) \\\n", + "set_positions(motors_id values) \\\n", + "set_compliants(motors_id, values) \\\n", + "set_colors(motors_id, values)\n", + "\n", + "valid_goto_input(motors_id, positions, durations) \\\n", + "set_goto(motors_id, positions, durations)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 2*. Code through API (http server)\n", + "## 2*.a. Access to API" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> get: http://poppy.local:8080/\n" + ] + }, + { + "data": { + "text/html": [ + "All url paths available:

Get method url:
/
/robot.json
/motor/alias/list.json
/motor/<alias>/list.json
/sensor/list.json
/motor/<motor_name>/register/list.json
/sensor/<motor_name>/register/list.json
/motor/<motor_name>/register/<register_name>/list.json
/sensor/<motor_name>/register/<register_name>/list.json
/motor/<motor_name>/register/<register_name>
/sensor/<motor_name>/register/<register_name>
/primitive/list.json
/primitive/running/list.json
/primitive/<primitive_name>/start.json
/primitive/<primitive_name>/stop.json
/primitive/<primitive_name>/pause.json
/primitive/<primitive_name>/resume.json
/primitive/<primitive_name>/property/list.json
/primitive/<primitive_name>/property/<prop>
/primitive/<primitive_name>/method/list.json
/motors/register/<register_name>

Post method url:
/motor/<motor_name>/register/<register_name>/value.json
/sensor/<motor_name>/register/<register_name>/value.json
/primitive/<primitive_name>/property/<prop>/value.json
/primitive/<primitive_name>/method/<method_name>/args.json
" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def get_api(url, hostname='poppy.local', port='8080'):\n", + " url_root='http://{}:{}/'.format(hostname, port)\n", + " print('> get:',url_root+url)\n", + " try:\n", + " response = requests.get(url_root+url)\n", + " if response.status_code==200:\n", + " return response\n", + " else:\n", + " return 'ERROR {}!'.format(response.status_code)\n", + " except:\n", + " print('{} is unreachable'.format(url_root))\n", + "\n", + "def post_api(url, value, hostname='poppy.local', port='8080'):\n", + " url_root='http://{}:{}/'.format(hostname, port)\n", + " print('> post: url=', url_root+url, ' ; value=', value)\n", + " try:\n", + " response = requests.post(url_root+url, json=value)\n", + " if response.status_code==200:\n", + " return 'Done!'\n", + " else:\n", + " return 'ERROR {}!'.format(response.status_code)\n", + " except:\n", + " print('{} is unreachable'.format(url_root))\n", + " \n", + "HTML(get_api('').text)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2*.b. Get request" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> get: http://poppy.local:8080/motor/motors/list.json\n", + "{'motors': ['m1', 'm2', 'm3', 'm4', 'm5', 'm6']}\n", + "> get: http://poppy.local:8080/motor/m1/register/list.json\n", + "{'registers': ['registers', 'goal_speed', 'compliant', 'safe_compliant', 'angle_limit', 'id', 'name', 'model', 'present_position', 'goal_position', 'present_speed', 'moving_speed', 'present_load', 'torque_limit', 'lower_limit', 'upper_limit', 'present_voltage', 'present_temperature', 'pid', 'led', 'control_mode']}\n", + "> get: http://poppy.local:8080/motor/m1/register/name\n", + "m1\n", + "> get: http://poppy.local:8080/motor/m1/register/present_position\n", + "-10.7\n", + "> get: http://poppy.local:8080/motor/m1/register/compliant\n", + "True\n", + "> get: http://poppy.local:8080/motor/m1/register/angle_limit\n", + "[-150.0, 150.0]\n", + "> get: http://poppy.local:8080/motor/m1/register/led\n", + "off\n" + ] + } + ], + "source": [ + "def get_motor_list(alias='motors'):\n", + " url='motor/{}/list.json'.format(alias)\n", + " return get_api(url).json()\n", + "def get_motor_register_list(motor_id=1):\n", + " url = 'motor/m{}/register/list.json'.format(motor_id)\n", + " return get_api(url).json()\n", + "def get_motor_register_value(motor_id, register):\n", + " url = 'motor/m{}/register/{}'.format(motor_id, register)\n", + " return get_api(url).json()[register]\n", + "\n", + "print(get_motor_list())\n", + "print(get_motor_register_list())\n", + "print(get_motor_register_value(1, 'name'))\n", + "print(get_motor_register_value(1, 'present_position'))\n", + "print(get_motor_register_value(1, 'compliant'))\n", + "print(get_motor_register_value(1, 'angle_limit'))\n", + "print(get_motor_register_value(1, 'led'))" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> get: http://poppy.local:8080/sensor/list.json\n", + "{'sensors': ['camera', 'marker_detector']}\n", + "> get: http://poppy.local:8080/sensor/camera/register/list.json\n", + "{'registers': ['frame', 'resolution', 'fps', 'index']}\n", + "> get: http://poppy.local:8080/sensor/camera/register/fps\n", + "20.0\n", + "> get: http://poppy.local:8080/sensor/camera/register/resolution\n", + "[640, 480]\n", + "> get: http://poppy.local:8080/sensor/camera/register/frame\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "IOPub data rate exceeded.\n", + "The notebook server will temporarily stop sending output\n", + "to the client in order to avoid crashing it.\n", + "To change this limit, set the config variable\n", + "`--NotebookApp.iopub_data_rate_limit`.\n", + "\n", + "Current values:\n", + "NotebookApp.iopub_data_rate_limit=1000000.0 (bytes/sec)\n", + "NotebookApp.rate_limit_window=3.0 (secs)\n", + "\n" + ] + } + ], + "source": [ + "def get_sensor_list():\n", + " return get_api('sensor/list.json').json()\n", + "def get_sensor_register_list(sensor):\n", + " url = 'sensor/{}/register/list.json'.format(sensor)\n", + " return get_api(url).json()\n", + "def get_sensor_register_value(sensor, register):\n", + " url = 'sensor/{}/register/{}'.format(sensor, register)\n", + " return get_api(url).json()[register]\n", + "\n", + "print(get_sensor_list())\n", + "print(get_sensor_register_list('camera'))\n", + "print(get_sensor_register_value('camera', 'fps'))\n", + "print(get_sensor_register_value('camera', 'resolution'))\n", + "print(get_sensor_register_value('camera', 'frame'))" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> get: http://poppy.local:8080/primitive/list.json\n", + "{'primitives': ['safe_power_up', 'dance', 'base_posture', 'rest_posture', 'curious_posture', 'tetris_posture', 'tracking_feedback']}\n", + "> get: http://poppy.local:8080/primitive/list.json\n", + "> get: http://poppy.local:8080/primitive/safe_power_up/property/list.json\n", + "{'property': []}\n", + "> get: http://poppy.local:8080/primitive/list.json\n", + "> get: http://poppy.local:8080/primitive/safe_power_up/method/list.json\n", + "{'methods': ['start', 'stop', 'pause', 'resume']}\n" + ] + } + ], + "source": [ + "def get_primitive_list():\n", + " return get_api('primitive/list.json').json()\n", + "def get_primitive_property(primitive_name):\n", + " url='primitive/{}/property/list.json'.format(primitive_name)\n", + " return get_api(url).json()\n", + "def get_primitive_method(primitive_name):\n", + " url='primitive/{}/method/list.json'.format(primitive_name)\n", + " return get_api(url).json()\n", + "\n", + "print(get_primitive_list())\n", + "print(get_primitive_property(get_primitive_list()['primitives'][0]))\n", + "print(get_primitive_method(get_primitive_list()['primitives'][0]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2*.c. Post request" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> post: url= http://poppy.local:8080/motor/m1/register/compliant/value.json ; value= False\n", + "Done!\n", + "> get: http://poppy.local:8080/motor/m1/register/compliant\n", + "False\n", + "> post: url= http://poppy.local:8080/motor/m1/register/goal_speed/value.json ; value= 25\n", + "Done!\n", + "> post: url= http://poppy.local:8080/motor/m1/register/goal_position/value.json ; value= 25\n", + "Done!\n", + "> get: http://poppy.local:8080/motor/m1/register/present_position\n", + "-10.7\n", + "> get: http://poppy.local:8080/motor/m1/register/present_position\n", + "-6.6\n", + "> get: http://poppy.local:8080/motor/m1/register/present_position\n", + "-2.79\n", + "> get: http://poppy.local:8080/motor/m1/register/present_position\n", + "1.32\n", + "> get: http://poppy.local:8080/motor/m1/register/present_position\n", + "5.13\n", + "> get: http://poppy.local:8080/motor/m1/register/present_position\n", + "8.94\n", + "> get: http://poppy.local:8080/motor/m1/register/present_position\n", + "13.05\n", + "> get: http://poppy.local:8080/motor/m1/register/present_position\n", + "16.57\n", + "> get: http://poppy.local:8080/motor/m1/register/present_position\n", + "21.26\n", + "> get: http://poppy.local:8080/motor/m1/register/present_position\n", + "25.07\n", + "> post: url= http://poppy.local:8080/motor/m1/register/goal_position/value.json ; value= 0\n", + "Done!\n", + "> get: http://poppy.local:8080/motor/m1/register/present_position\n", + "25.37\n", + "> get: http://poppy.local:8080/motor/m1/register/present_position\n", + "21.85\n", + "> get: http://poppy.local:8080/motor/m1/register/present_position\n", + "18.04\n", + "> get: http://poppy.local:8080/motor/m1/register/present_position\n", + "13.64\n", + "> get: http://poppy.local:8080/motor/m1/register/present_position\n", + "9.82\n", + "> get: http://poppy.local:8080/motor/m1/register/present_position\n", + "5.13\n", + "> get: http://poppy.local:8080/motor/m1/register/present_position\n", + "0.15\n", + "> get: http://poppy.local:8080/motor/m1/register/present_position\n", + "-0.15\n", + "> get: http://poppy.local:8080/motor/m1/register/present_position\n", + "-0.15\n", + "> get: http://poppy.local:8080/motor/m1/register/present_position\n", + "-0.15\n", + "> post: url= http://poppy.local:8080/motor/m1/register/comlpiant/value.json ; value= True\n", + "Done!\n" + ] + } + ], + "source": [ + "def post_motor_value(motor, register, value):\n", + " url = 'motor/m{}/register/{}/value.json'.format(motor, register)\n", + " return post_api(url, value)\n", + "\n", + "import time\n", + "print(post_motor_value(1, 'compliant', False))\n", + "print(get_motor_register_value(1, 'compliant'))\n", + "print(post_motor_value(1, 'goal_speed', 25))\n", + "print(post_motor_value(1, 'goal_position', 25))\n", + "for _ in range(10):\n", + " print(get_motor_register_value(1, 'present_position'))\n", + " time.sleep(0.1)\n", + "print(post_motor_value(1, 'goal_position', 0))\n", + "for _ in range(10):\n", + " print(get_motor_register_value(1, 'present_position'))\n", + " time.sleep(0.1)\n", + "print(post_motor_value(1, 'comlpiant', True))" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> get: http://poppy.local:8080/sensor/list.json\n", + "{'sensors': ['camera', 'marker_detector']}\n", + "> get: http://poppy.local:8080/sensor/camera/register/list.json\n", + "{'registers': ['frame', 'resolution', 'fps', 'index']}\n", + "> get: http://poppy.local:8080/sensor/camera/register/fps\n", + "20.0\n", + "> post: url= http://poppy.local:8080/sensor/caemra/register/fps/value.json ; value= 15.0\n", + "ERROR 500!\n", + "> get: http://poppy.local:8080/sensor/camera/register/fps\n", + "20.0\n" + ] + } + ], + "source": [ + "def post_sensor_value(sensor, register, value):\n", + " url = 'sensor/{}/register/{}/value.json'.format(sensor, register)\n", + " return post_api(url, value)\n", + "\n", + "print(get_sensor_list())\n", + "print(get_sensor_register_list('camera'))\n", + "print(get_sensor_register_value('camera', 'fps'))\n", + "print(post_sensor_value('caemra', 'fps', 15.0))\n", + "print(get_sensor_register_value('camera', 'fps'))" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> get: http://poppy.local:8080/primitive/list.json\n", + "{'primitives': ['safe_power_up', 'dance', 'base_posture', 'rest_posture', 'curious_posture', 'tetris_posture', 'tracking_feedback']}\n", + "> get: http://poppy.local:8080/primitive/rest_posture/property/list.json\n", + "{'property': []}\n", + "> get: http://poppy.local:8080/primitive/rest_posture/method/list.json\n", + "{'methods': ['start', 'stop', 'pause', 'resume']}\n", + "> post: url= http://poppy.local:8080/primitive/rest_posture/method/start/args.json ; value= start\n", + "ERROR 500!\n", + "> post: url= http://poppy.local:8080/primitive/rest_posture/method/stop/args.json ; value= stop\n", + "ERROR 500!\n" + ] + } + ], + "source": [ + "def post_primitive_property(primitive, prop, value):\n", + " url = 'primitive/{}/property/{}/value.json'.format(primitive, prop)\n", + " return post_api(url, value)\n", + "\n", + "def post_primitive_method(primitive, meth, value):\n", + " url = 'primitive/{}/method/{}/args.json'.format(primitive, meth)\n", + " return post_api(url, value)\n", + "\n", + "print(get_primitive_list())\n", + "print(get_primitive_property('rest_posture'))\n", + "print(get_primitive_method('rest_posture'))\n", + "print(post_primitive_method('rest_posture', 'start', 'start'))\n", + "time.sleep(2)\n", + "print(post_primitive_method('rest_posture', 'stop', 'stop'))" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "> get: http://poppy.local:8080/primitive/list.json\n", + "{'primitives': ['safe_power_up', 'dance', 'base_posture', 'rest_posture', 'curious_posture', 'tetris_posture', 'tracking_feedback']}\n", + "> get: http://poppy.local:8080/primitive/rest_posture/start.json\n", + "start of rest_posture Done!\n", + "> get: http://poppy.local:8080/primitive/rest_posture/stop.json\n", + "stop of rest_posture Done!\n" + ] + } + ], + "source": [ + "def set_primitive_action(primitive, action):\n", + " if action not in ['start','stop','pause','resume']:\n", + " return 'Value ERROR'\n", + " url = 'primitive/{}/{}.json'.format(primitive, action)\n", + " if get_api(url).status_code==200:\n", + " return '{} of {} Done!'.format(action, primitive)\n", + " else:\n", + " return '{} of {} Fail! Error {}'.format(action, primitive, get_api(url).status_code)\n", + "\n", + "print(get_primitive_list())\n", + "print(set_primitive_action('rest_posture', 'start'))\n", + "time.sleep(2)\n", + "print(set_primitive_action('rest_posture', 'stop'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 3. Add new entries in API\n", + "\n", + "Add an specific url, in the good file, with the good syntaxe, and do everything python can be do.\n", + "Both server have access to the RESTRobot class to munipulate the robot. If you need, add an entries here as well \n", + "[My Documents/ Poppy Source-code/ pypotserver/ rest.py](http://poppy.local:8888/edit/My%20Documents/Poppy%20Source-code/pypot/server/rest.py)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3.1 snap server\n", + "\n", + "Snap server are define here: [My Documents/ Poppy Source-code/ pypotserver/ snap.py](http://poppy.local:8888/edit/My%20Documents/Poppy%20Source-code/pypot/server/snap.py)\n", + "\n", + "Standard entry is written like this:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```\n", + "#~/pypot/server/snap.py\n", + "class SnapRobotServer(AbstractServer):\n", + " def __init__(self, robot, host='0.0.0.0', port='6969', quiet=True):\n", + " ...\n", + " @self.app.get('/specific/url/with//and/')\n", + " def what_will_be_done(var_1, var_2):\n", + " rr.what_the_robot_do(var_1)\n", + " return 'what you want'\n", + "#wherre rr is the restfuul_robot intitiate by RESTRobot class\n", + "\n", + "#An exemple, ligne 202:\n", + " @self.app.get('/motors//get/')\n", + " def get_motors_registers(motors, register):\n", + " motors = motors.split(';')\n", + " return ';'.join(str(rr.get_register_value(m, register)) for m in motors)\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3.2 http server\n", + "\n", + "Http server are define here: [My Documents/ Poppy Source-code/ pypotserver/ httpserver.py](http://poppy.local:8888/edit/My%20Documents/Poppy%20Source-code/pypot/server/httpserver.py)\n", + "\n", + "Standard entry is written like this:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```\n", + "#add specific url in url_path ligne 234 and write associate function\n", + "\n", + "(r'/specific/url/with/(?P[a-zA-Z0-9_]+)/and/(?P[a-zA-Z0-9_]+)/value\\.json', what_will_be_done_1),\n", + "class what_will_be_done_when_post_here(PoppyRequestHandler):\n", + " def post(self, var_1, var_2):\n", + " data = json.loads(self.request.body.decode())\n", + " self.restful_robot.what_the_robot_do(var_1, var_2, data)\n", + " self.write_json({})\n", + "\n", + "(r'/primitive/list\\.json', what_will_be_done_2),\n", + "class what_will_be_done_when_get_here(PoppyRequestHandler):\n", + " def get(self):\n", + " self.write_json({\n", + " 'key': self.restful_robot.value()\n", + " })\n", + "#where self.restful_robot is the restfull_robot intitiate by RESTRobot class\n", + "\n", + "#An exemple, ligne 86, get methode:\n", + "(r'/motor/(?P[a-zA-Z0-9_]+)/?list\\.json', MotorsListHandler)\n", + "class MotorsListHandler(PoppyRequestHandler):\n", + " def get(self, alias='motors'):\n", + " self.write_json({\n", + " alias: self.restful_robot.get_motors_list(alias)\n", + " })\n", + "#An exemple, ligne 121, post methode:\n", + "(r'/motor/(?P[a-zA-Z0-9_]+)/register/(?P[a-zA-Z0-9_]+)/value\\.json', UpdateMotorRegisterHandler)\n", + "class UpdateMotorRegisterHandler(PoppyRequestHandler):\n", + " def post(self, motor_name, register_name):\n", + " data = json.loads(self.request.body.decode())\n", + " self.restful_robot.set_motor_register_value(motor_name, register_name, data)\n", + " self.write_json({}) \n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 4. Add tab in puppet-master interface\n", + "\n", + "In [My Documents/ Poppy Source-code/ puppet-master/ templates/ programming.html](http://poppy.local:8888/edit/My%20Documents/Poppy%20Source-code/puppet-master/templates/programming.html) add a tab:\n", + "\n", + "Standard entry is written like this:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```\n", + "

\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "where svg icon are define in [My Documents/ Poppy Source-code/ puppet-master/ templates/ defs-svg.html](http://poppy.local:8888/edit/My%20Documents/Poppy%20Source-code/puppet-master/templates/defs-svg.html)\n", + "\n", + "You can also add a simple png file in folder: [My Documents/ Poppy Source-code/ puppet-master/ static/ img](http://poppy.local:8888/tree/My%20Documents/Poppy%20Source-code/puppet-master/static/img) and use this Standard entry:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "```\n", + " \n", + "```" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/pypot-master/pypot-master/samples/notebooks/Benchmark your Poppy robot.ipynb b/pypot-master/pypot-master/samples/notebooks/Benchmark your Poppy robot.ipynb new file mode 100644 index 0000000..d4fd855 --- /dev/null +++ b/pypot-master/pypot-master/samples/notebooks/Benchmark your Poppy robot.ipynb @@ -0,0 +1,645 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Benchmark your Poppy robot" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The goal of this notebook is to help you identify the performance of your robot and where the bottle necks are. We will measure:\n", + "* the time to read/write the position to one motor (for each of your dynamixel bus)\n", + "* the time to read/write the positions for all motors (for each of your dynamixel bus)\n", + "* the regularity of the synchronization loop of pos/speed/load when\n", + " * only this loop is runnnig\n", + " * all other synchronization loops are running\n", + " * everything else is running" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from ipywidgets import interact" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Populating the interactive namespace from numpy and matplotlib\n" + ] + } + ], + "source": [ + "%pylab inline" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "All bench info will be stored in this dictionary so it's easy to compare with other platforms." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "results = {}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## What's the platform" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Linux-4.19.118-v7l+-armv7l-with-debian-10.4\n" + ] + } + ], + "source": [ + "import platform\n", + "\n", + "p = platform.platform()\n", + "print(p)\n", + "\n", + "results['platform'] = p" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3.7.3 (default, Dec 20 2019, 18:57:59) \n", + "[GCC 8.3.0]\n" + ] + } + ], + "source": [ + "import sys\n", + "\n", + "v = sys.version\n", + "print(v)\n", + "\n", + "results['python'] = v" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Pypot version: 4.0.0\n" + ] + } + ], + "source": [ + "import pypot\n", + "\n", + "results['pypot'] = pypot.__version__\n", + "print('Pypot version: {}'.format(results['pypot']))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "13c4b64ba42349fd82a2148c8e419b91", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "interactive(children=(Dropdown(description='robot', options={'poppy-ergo-jr': " + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "d = monitor(controllers, duration)\n", + "freq_plot(d)\n", + "\n", + "results['normal'] = d" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "follow_trajectory(motor)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Without primitives" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "for p in robot.primitives:\n", + " p.stop()\n", + " \n", + "robot._primitive_manager.stop()" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Avg CPU usage: 11.7%\n", + "Avg frq for controller [1, 2, 3, 4, 5, 6]: 49.283 ms STD=2.95 ms\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "d = monitor(controllers, duration)\n", + "freq_plot(d)\n", + "\n", + "results['without primitive'] = d" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "follow_trajectory(motor)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Without all sensors" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "for s in robot.sensors:\n", + " s.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Avg CPU usage: 6.0%\n", + "Avg frq for controller [1, 2, 3, 4, 5, 6]: 49.729 ms STD=0.118 ms\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "d = monitor(controllers, duration)\n", + "freq_plot(d)\n", + "\n", + "results['without sensor'] = d" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "follow_trajectory(motor)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +} diff --git a/pypot-master/pypot-master/samples/notebooks/Controlling a Poppy Creature using SNAP.ipynb b/pypot-master/pypot-master/samples/notebooks/Controlling a Poppy Creature using SNAP.ipynb new file mode 100644 index 0000000..84770fc --- /dev/null +++ b/pypot-master/pypot-master/samples/notebooks/Controlling a Poppy Creature using SNAP.ipynb @@ -0,0 +1,480 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# How-To: Control a PoppyCreature using the visual programming language [Snap!](http://snap.berkeley.edu) *(a variant of Scratch)*" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![alt text](image/snap-header.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Introduction" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This notebook will describe how:\n", + "* you can **connect the visual programming language [Snap!](http://snap.berkeley.edu)** to a Poppy Creature \n", + "* and how you can **control it in real time** using poppy's custom blocks." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Snap!](http://snap.berkeley.edu/) is a *\"very powerful visual, drag-and-drop programming language. It is an extended reimplementation of [Scratch](http://scratch.mit.edu) (a project of the Lifelong Kindergarten Group at the MIT Media Lab) that allows you to Build Your Own Blocks\"*. It is an extremely efficient tool to learn how to program for kids or even college students and also a powerful prototyping method for artists." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[Snap!](http://snap.berkeley.edu/) is open-source and it is entirelly written in javascript, you only need a browser connected to the Poppy Creature webserver. **No installation is required on your computer!**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*Note: We assume in this tutorial that you are familiar with the basic of Snap! or Scratch. If it's not the case you can find a lot of documentation online. We especially recommand the very good [Snap! reference manual](http://snap.berkeley.edu/SnapManual.pdf).*" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "An example of the [Snap!](http://snap.berkeley.edu/) interface:\n", + "\n", + "![alt text](image/snap.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Comments, issues, improvements and updates can be sent directly on the dedicated section of the [github issue tracker](https://github.com/poppy-project/pypot/labels/Notebooks).**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### What's needed" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**First, if you do not know how to run an IPython Notebook please refer to [our readme](https://github.com/poppy-project/pypot/blob/master/samples/notebooks/readme.md#notebooks-everywhere).**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To follow this tutorial you will need:\n", + "\n", + "* a poppy creature (real or simulated)\n", + "* the python [pypot](https://github.com/poppy-project/pypot) library version >= 2.1 (only if you are working with a simulated creature, otherwise you can [directly connect to your poppy creature](https://github.com/poppy-project/pypot/blob/master/samples/notebooks/readme.md#connecting-to-a-remote-notebook))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*Note: for this notebook we will use a simulated poppy humanoid in V-REP (see [this v-rep notebook](http://nbviewer.ipython.org/github/poppy-project/pypot/blob/master/samples/notebooks/Controlling%20a%20Poppy%20humanoid%20in%20V-REP%20using%20pypot.ipynb) for details on how they can be installed and connected) but you can use any other creature (e.g. a real poppy ergo for instance). Only the configuration of the robot host will change (see details below).*" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Please refer to [the install section](https://github.com/poppy-project/pypot#installation) if you don't know how to install these libraries or how to connect to your Poppy Creature.**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Connect [Snap!](http://snap.berkeley.edu) to a Poppy Creature" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Before being able to control a simulated Poppy Creature with [Snap!](http://snap.berkeley.edu) blocks a few steps are required:\n", + "* First, we need to connect to a Poppy Creature (real or simulated).\n", + "* Then, we need to tell [pypot](https://github.com/poppy-project/pypot) that we wan't to control it through Snap!.\n", + "* Finally, connect to [Snap!](http://snap.berkeley.edu) web interface (locally or online) and import the Poppy specific blocks." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*Note: If you want to control a real Poppy Creature this is even simpler. As Poppy Creatures come with an embedded board with everything configured, you only need to connect to their webserver. Assuming that you are working with a Poppy-ErgoJr and that you are on the same network that your creature, you only have to connect to http://poppy-ergojr:8080/snap (see [here](https://github.com/poppy-project/pypot#pypot-a-python-lib-for-dynamixel-motors-control) for details).*" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create a simulated Poppy Creature and connect it to [Snap!](http://poppy-project.github.io/pypot/pypot.server.html#pypot.server.snap.SnapRobotServer)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So, first we will create and launch the Robot Snap Server. In more details, we will:\n", + "* instantiate a [Poppy Creature](https://github.com/poppy-project/Poppy-Creature)\n", + "* connect it the [SnapRobotServer](http://poppy-project.github.io/pypot/pypot.server.html#pypot.server.snap.SnapRobotServer) and run it" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We create a [Poppy Humanoid](https://github.com/poppy-project/Poppy-Humanoid) using the approach discribed in [here](http://nbviewer.ipython.org/github/poppy-project/pypot/blob/master/samples/notebooks/Controlling%20a%20Poppy%20humanoid%20in%20V-REP%20using%20pypot.ipynb) and specifies that we want to use [Snap!](http://snap.berkeley.edu) to control it." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from pypot.creatures import PoppyHumanoid\n", + "\n", + "poppy = PoppyHumanoid(simulator='vrep', use_snap=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*Note for advanced users: setting the use_snap arg to True basically creates a webserver which allows [Snap!](http://snap.berkeley.edu) to get/post values from/to a Poppy Creature through [pypot REST API](https://github.com/poppy-project/pypot/blob/master/REST-APIs.md). Then we use the *http* block to connect Snap! with the robot (you can refer to the section [The Outside World](http://snap.berkeley.edu/SnapManual.pdf) from Snap! reference manual for more details). You can manually specify the host and port to which the server will be attached using snap_host and snap_port args. Here, we use the default values which bind the server to the *localhost*. Yet, this will not allow for external connections. You can use *snap_host='0.0.0.0'* to automatically attach the webserver to the IP of your machine. Hostnames can also be used, for instance Poppy Creatures usually provide an hostname such as *host='poppy-humanoid.local'*.*" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "poppy.snap.run()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*Note for advanced user: the run method will run the server forever and thus block the main thread. This is here not a problem as you do not need to execute extra code for this tutorial. If you need to run other python code after, you can run this method inside a thread.*" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can create a poppy creature from python with the above code, but you can also use a simple command on your terminal: \n", + "``` \n", + "poppy-snap --vrep poppy-humanoid \n", + "```\n", + "If you want to try other configurations, look at the help of poppy-snap:\n", + "``` \n", + "poppy-snap --help \n", + "``` " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\"V-REP" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Use [Snap!](http://snap.berkeley.edu/)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have anything we need to control our Poppy Creature, we just need to run [Snap!](http://snap.berkeley.edu/) on a web browser." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As stated above, [Snap!](http://snap.berkeley.edu/) is entirelly written in javascript and thus the only things needed to run it is a (not too old) web browser! You can run [Snap!](http://snap.berkeley.edu/) in two modes:\n", + "* **online**: you just need to go to http://snap.berkeley.edu/snapsource/snap.html\n", + "* **locally**: you have to first download [Snap! sources](https://github.com/jmoenig/Snap--Build-Your-Own-Blocks) and then open the *snap.html* file. No internet connection is required after downloading the source.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will now detail on you can control your Poppy Creature via the two approaches:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "*Note that the online one is more straightforward and should thus be privileged except if you do not have an internet connection.*" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Alternative 1: Run [Snap!](http://snap.berkeley.edu/snapsource/snap.html) Online" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The last step required before actually making your robot moves in [Snap!](http://snap.berkeley.edu/snapsource/snap.html) is to import our predefined blocks. [Snap!](http://snap.berkeley.edu/snapsource/snap.html) provides a really simple way to do that: you just have to go to this url: http://snap.berkeley.edu/snapsource/snap.html#open:http://127.0.0.1:6969/snap-blocks.xml" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note the **#open:http://...** at the end of the url. It tells [Snap!](http://snap.berkeley.edu) to automatically loads the blocks that can be found at the url: http://127.0.0.1:6969/snap-blocks.xml." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "*Note: if you changed the web server host, you need to change it in here as well. For instance if you use the Poppy Ergo default hostname you need to go to http://snap.berkeley.edu/snapsource/snap.html#open:http://poppy-ergojr.local:6969/snap-blocks.xml instead.*" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You should now see something like this in your browser (note importing the blocks may take a few seconds):\n", + "\n", + "![alt text](image/snap-ready.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Alternative 2: Run [Snap!](http://snap.berkeley.edu/snapsource/snap.html) locally" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you use [Snap!](http://snap.berkeley.edu) locally instead, you will have to first:\n", + "* launch [Snap!](http://snap.berkeley.edu/) by opening the **snap.html** file from you snap local folder\n", + "* import the project with our specific blocks via the snap menu\n", + "\n", + "![alt text](image/snap-import.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The Poppy's specific blocks can be found on pypot/server/snap_projects/pypot-snap-blocks.xml directory in the pypot installation folder (its location will depend on your operating system and how you installed it). You can use the explorer/finder to find it." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Alternatively you can directly download it from the [github repository](https://raw.githubusercontent.com/poppy-project/pypot/master/pypot/server/snap_projects/pypot-snap-blocks.xml). For instance:\n", + "\n", + "```bash\n", + "wget https://raw.githubusercontent.com/poppy-project/pypot/master/pypot/server/snap_projects/pypot-snap-blocks.xml\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once imported you should see something like:\n", + "\n", + "![alt text](image/snap-ready.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Using [Snap!](http://snap.berkeley.edu) to make your Poppy Creature moves" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can see that our base project comes with a few specific blocks such as:\n", + "\n", + "\"Drawing\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Those blocks can be used to respectively:\n", + "* test if connection with poppy robot is working well\n", + "* get a list of all motors name\n", + "* get a list of all motors refered by an alias\n", + "* get the value of a register motor (e.g. get motor \"head_z\" register \"present_load\")\n", + "* get the index of a motor\n", + "* get all alias avaible for the current robot\n", + "* set a motor position in a specified time\n", + "* turn a motor compliant or not\n", + "* set a register of a motor (e.g. set motor \"head_z\" register \"present_load\" to 10)\n", + "* create/attach a move to some motors (you have to create a move before to record or replay it)\n", + "* stop the record of a move\n", + "* start the record of a move\n", + "* play a move at a defined speed\n", + "* play a move in reverse at a defined speed\n", + "* play concurently many moves\n", + "* play sequentialy many moves\n", + "\n", + "Other blocks are also available. Their behavior should be easily deduced from their name." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can easily see all blocks relative to poppy in Snap! with the \"find blocks\" feature.\n", + "You have to right-click in the left part of Snap! page and select \"find blocks\":\n", + "\"Drawing\"\n", + "\n", + "If you type **robot** on the search input, you will select all poppy blocks:\n", + "\"Drawing\"\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To control a motor via a slider you need to:\n", + "* first, make a variable - we will call it **head position**\n", + "* right click on it and use the slider option\n", + "* change the slider min/max to (-50, 50)\n", + "\n", + "![alt text](image/snap-slider.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then, connect it to a motor:\n", + "* use the *motor(s) goto position* block\n", + "* put it inside a forever loop\n", + "* add a wait for performance issue\n", + "\n", + "\"Drawing\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Project example: orchestration of move records" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On the pypot install directory pypot/server/pypot-snap-record-orchestration-demo.xml (its location will depend on your operating system and how you installed it), you can find a project tutorial of how to make orchestration of move record.\n", + "Alternatively you can directly download it from the [github repository](https://raw.githubusercontent.com/poppy-project/pypot/master/pypot/server/snap_projects/pypot-snap-blocks.xml):\n", + "```bash\n", + "wget https://raw.githubusercontent.com/poppy-project/pypot/master/pypot-snap-record-orchestration-demo.xml\n", + "```\n", + "or getting it from [Snap! cloud](http://snap.berkeley.edu/snapsource/snap.html#cloud:Username=showok&ProjectName=pypot_orchestration_demo).\n", + "\n", + "\n", + "This project will guide you step by step on how to use Snap! to record and play many nested move.\n", + "\n", + "\"Drawing\"\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Project example: apply a sinus on a few motors" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![alt text](image/snap-sinus.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Demonstration Video" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/pypot-master/pypot-master/samples/notebooks/QuickStart playing with a PoppyErgo.ipynb b/pypot-master/pypot-master/samples/notebooks/QuickStart playing with a PoppyErgo.ipynb new file mode 100644 index 0000000..f62595e --- /dev/null +++ b/pypot-master/pypot-master/samples/notebooks/QuickStart playing with a PoppyErgo.ipynb @@ -0,0 +1,477 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# QuickStart: Playing with a Poppy Ergo (or a PoppyErgoJr)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**This notebook is still work in progress! [Feedbacks are welcomed](https://github.com/poppy-project/pypot/labels/Notebooks)!**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this tutorial we will show how to get started with your [PoppyErgo](https://www.poppy-project.org/project/mathematics-a-beautiful-elsewhere/) creature. You can use a [PoppyErgoJr](https://github.com/poppy-project/poppy-ergo-jr) instead." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\"Poppy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To run the code in this notebook, you will need:\n", + "* a poppy ergo creature (or a Jr)\n", + "* the [pypot](https://github.com/poppy-project/pypot) library\n", + "* the [poppy-ergo](https://github.com/pierre-rouanet/poppy-ergo) library (or use the [poppy-ergo-jr](https://github.com/poppy-project/poppy-ergo-jr) library instead)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can install those libraries with the pip tool (see [here]() if you don't know how to run this):\n", + "```bash\n", + "\n", + "pip install pypot poppy-ergo\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Connect to your robot" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For a PoppyErgo:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from pypot.creatures import PoppyErgo" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "ergo = PoppyErgo()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For a PoppyErgoJr:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from pypot.creatures import PoppyErgoJr\n", + "\n", + "ergo = PoppyErgoJr()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Get robot current status" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + ", , , , , ]>" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ergo" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ergo.m2" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "-97.13" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ergo.m2.present_position" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "32.0" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ergo.m2.present_temperature" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Motor \"m1\" current position = -1.69\n", + "Motor \"m2\" current position = -97.13\n", + "Motor \"m3\" current position = 89.96\n", + "Motor \"m4\" current position = 0.65\n", + "Motor \"m5\" current position = 41.5\n", + "Motor \"m6\" current position = 22.14\n" + ] + } + ], + "source": [ + "for m in ergo.motors:\n", + " print 'Motor \"{}\" current position = {}'.format(m.name, m.present_position)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Turn on/off the compliancy of a motor" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ergo.m3.compliant" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "ergo.m6.compliant = False" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Go to the zero position" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "ergo.m6.goal_position = 0." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "for m in ergo.motors:\n", + " m.compliant = False\n", + " \n", + " # Goes to the position 0 in 2s\n", + " m.goto_position(0, 2)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# You can also change the maximum speed of the motors\n", + "# Warning! Goto position also change the maximum speed.\n", + "\n", + "for m in ergo.motors:\n", + " m.moving_speed = 50" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Make a simple dance movement" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On a single motor:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import time\n", + "\n", + "ergo.m4.goal_position = 30\n", + "time.sleep(1.)\n", + "ergo.m4.goal_position = -30" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "On multiple motors:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "ergo.m4.goal_position = 30\n", + "ergo.m5.goal_position = 20\n", + "ergo.m6.goal_position = -20\n", + "\n", + "time.sleep(1.)\n", + "\n", + "ergo.m4.goal_position = -30\n", + "ergo.m5.goal_position = -20\n", + "ergo.m6.goal_position = 20" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Wrap it inside a function for convenience:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def dance():\n", + " ergo.m4.goal_position = 30\n", + " ergo.m5.goal_position = 20\n", + " ergo.m6.goal_position = -20\n", + "\n", + " time.sleep(1.)\n", + "\n", + " ergo.m4.goal_position = -30\n", + " ergo.m5.goal_position = -20\n", + " ergo.m6.goal_position = 20\n", + " \n", + " time.sleep(1.)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "dance()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "for _ in range(4):\n", + " dance()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using goto position instead:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "def dance2():\n", + " ergo.goto_position({'m4': 30, 'm5': 20, 'm6': -20}, 1., wait=True)\n", + " ergo.goto_position({'m4': -30, 'm5': -20, 'm6': 20}, 1., wait=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "for _ in range(4):\n", + " dance2()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.9" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/pypot-master/pypot-master/samples/notebooks/Record, Save, and Play Moves on a Poppy Creature.ipynb b/pypot-master/pypot-master/samples/notebooks/Record, Save, and Play Moves on a Poppy Creature.ipynb new file mode 100644 index 0000000..b78050d --- /dev/null +++ b/pypot-master/pypot-master/samples/notebooks/Record, Save, and Play Moves on a Poppy Creature.ipynb @@ -0,0 +1,358 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Record, Save, and Play Moves on a Poppy Creature" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**This notebook is still work in progress! [Feedbacks are welcomed](https://github.com/poppy-project/pypot/labels/Notebooks)!**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this tutorial we will show how to:\n", + "* record moves by direct demonstration on a Poppy Creature\n", + "* save them to the disk - and re-load them\n", + "* play, and re-play the best moves" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To follow this notebook, you should already have installed everything needed to control a Poppy Creature. The examples below used a Poppy Ergo but then can be easily transposed to a Poppy Humanoid or to any other creatures." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Connect to your Poppy Creature" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, connect to your Poppy Creature and put it in its \"base\" position so you can easily record motions." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we use a Poppy Ergo but you can replace it by a Poppy Humanoid." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from pypot.creatures import PoppyErgo\n", + "\n", + "poppy = PoppyErgo()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "for m in poppy.motors:\n", + " m.compliant = False\n", + " m.goal_position = 0.0" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Import the Move, Recorder and Player" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Import everything you need for recording, playing, saving, and loading Moves\n", + "\n", + "# Move: object used to represent a movement\n", + "# MoveRecorder: object used to record a Move\n", + "# MovePlayer: object used to play (and re-play) a Move\n", + "\n", + "from pypot.primitive.move import Move, MoveRecorder, MovePlayer" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create a Recorder for the robot Poppy" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "record_frequency = 50.0 # This means that a new position will be recorded 50 times per second.\n", + "recorded_motors = [poppy.m4, poppy.m5, poppy.m6] # We will record the position of the 3 last motors of the Ergo\n", + "\n", + "# You can also use alias for the recorded_motors\n", + "# e.g. recorder = MoveRecorder(poppy, record_frequency, poppy.tip)\n", + "# or even to record all motors position\n", + "# recorder = MoveRecorder(poppy, record_frequency, poppy.motors)\n", + "\n", + "recorder = MoveRecorder(poppy, record_frequency, recorded_motors)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Start the recording" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, turn the recorded motors compliant, so you can freely move them:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "for m in recorded_motors:\n", + " m.compliant = True" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Starts the recording when you are ready!" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "recorder.start()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Stop the recording" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Stop it when you are done demonstrating the movement." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "recorder.stop()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Turn back off the compliance." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "for m in recorded_motors:\n", + " m.compliant = False" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Get the recorder Move and store it on the disk" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Save the recorded move on the text file named 'mymove.json'." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "recorded_move = recorder.move\n", + "\n", + "with open('mymove.json', 'w') as f:\n", + " recorded_move.save(f)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Load a saved Move" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Re-load it from the file jsut as an example purpose." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "with open('mymove.json') as f:\n", + " loaded_move = Move.load(f)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create a Move Player and Play Back a Recorded Move" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, create the object used to re-play a recorded Move." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "player = MovePlayer(poppy, loaded_move)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can start the play back whenever you want:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "player.start()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can play your move as many times as you want. Note, that we use the *wait_to_stop* method to wait for the first play abck to end before running it again." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "for _ in range(3):\n", + " player.start()\n", + " player.wait_to_stop()" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.9" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/pypot-master/pypot-master/samples/notebooks/image/snap-basic-blocks.png b/pypot-master/pypot-master/samples/notebooks/image/snap-basic-blocks.png new file mode 100644 index 0000000000000000000000000000000000000000..07f7c159b8d86816944dc2dba25f427e03654d39 GIT binary patch literal 67506 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%0AuLMm#{a_TF+y82pDTAIH;ODVL~ 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 literal 0 HcmV?d00001 diff --git a/pypot-master/pypot-master/samples/notebooks/image/snap-header.png b/pypot-master/pypot-master/samples/notebooks/image/snap-header.png new file mode 100644 index 0000000000000000000000000000000000000000..85274f17958a0e25e5f431ff399c3275410807b5 GIT binary patch literal 232194 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�jh)&nM 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πD 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
N7fcLk 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 z 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 literal 0 HcmV?d00001 diff --git a/pypot-master/pypot-master/samples/notebooks/image/snap-orchestration-demo.png b/pypot-master/pypot-master/samples/notebooks/image/snap-orchestration-demo.png new file mode 100644 index 0000000000000000000000000000000000000000..793897ee6c728986d178b1c4f8736b4431b84b6b GIT binary patch literal 239862 zcmY(r1z1&E7cPt~pr~|7NePJ3ozen|bW4YHH;QyfcL_)c(jW~=cZdi`Nl14$cPu^M zz5jn6eLTvBz1Es@j`7ym0WW05Z=(^Sp`f7LmXr{AiGp$^2nFTpotxL;U#g-#9>5=0 zZG|NjZo+?VH}(BdP{>duMT8Wbl2#`iov??Fziw@Gn{{R3-Mo64R^~3HmzNjqE9`4> zU%hn2i)?We6y{v^eid3>qIY^EAcuYLs+`D+aM?xCgu7vP$puRuCa&@D?3_GUjYIiF zdHs)D3Qb?cBcmy<(gEiKKGB!hqOp{yZz3n8A~4!f%8V&(XAN+V?b!x%1H2@|ty~n6 zNKmx}Z)no6OJ(UKc@;G6f4*B9>vL$D={qR@J%wV$xLV`eiDc_W<_7)75l*?S8nG2fmVTmo3&v2UQ&6f=cI_^b*|r>^J-prhdFuY$nlm|W!SH*k zV5*IeOP-YK*$GznQ`WYe6PQ0xrxw%q8LYJ;xyCxzoj&<*z+@Cnn)jgsbvYTGWuOvFja05+l z$;%4da>NeNK3fOka&zI%JM__yV~@F_NCjgIX1xydQMH5g16Hc($HNQy$+V`sGRdiX zf4?yjAJV#|`a;M3IR)+PSRHEWIt#IiQxg(e8UJ0(&2k}FV2%#%hqt9gR4CtLdt13s>Z96G zx@5;6+L_(rDWz;Z?Q8n!{!Kv3jX^FV)2c;=Mk8M2_`xOfpD63gc~;LXS*|fAKb-PC zw22oJ%vUpz8y1S`tL;o5UTIm_vECa}p0(rd=<0fK_ol*eb@hi_I@g1BDr)L1sc6P~ zu4_3KtAC%$O|KW~l%jIG(`RP9_OG!Q!|W;B$Fy%8x)`9;D9-GiP`toK4}Jcyktl4y zfJidnksy0o?j<*^8$#OTB^vD0kyNOvzG3^~UOzr%HeMNyTN;%!JlG&Nd~~P8E>Bh~ zTv%c-lqzm|?pDSl$%rSavtjz^xsMNma~N`S1H1mrYs+T*Qd%l0A(3Ons41gY_-yZ<>!C)H>v|R2d!k&D|1IkeYDqclv*Ty^ z8oxS%dnj0n{6aoIpc@Xhf4Mra_=_=ujfdCUF8&AmaDQ1-zH#7vP5ELG%4y!}_zC(8 z8QR}hC8tNezNAEvY^036b${sSflzf>Ml{jm^8WfN*>IZnc|K}G#=(wmR5Hmnx~Pa? zk&eqe5oTG=!$$tW<~_Zn79790&i6MIR2gV#$sRolsjTF*v9Z}aIa8EUfg6%_aM(vZ z@Z9d8aog$P;7sn78p~-P$Pl-#nP_fn8+KXE{FEzYVZrF*<71rQJ8G6C^zJ%Ny`_8G z`pywb(Wsf=sIB#oqH!3t$rr%U(kV0)3r zM~~IQ9gFom&Ky0u6A@b)&quFK#xl#cUzjSreol&d?HTSuSbtc5__HiBif12|46sDs z{29A^I(r|li5h!nN|j{3z^3>jXG2AzZC)__3L(nR9BL7c)nF>ROlh7!ii=VgBwEEK z=?jXP+juF7s&X|$Rgcb&XMG|A=jQa2WNF?C{*KDC2~4+INOr`;!m^cGqoky~d-G~A zeyB20ab9lc`Pqq_VzlS^PO911mk{@peWuqx85k>ndkr!>r1rH<*12vSxivR8TP^md zMUq4|O@B2l|LL+Stcs`QL{30JP`lZPzIR`$Tqc=2Iym@N0*9rRB@?_ySa|q1qf~b# zOQyf4?8SwCV?aKqfruCgrHKT@x#2;@&rsVKiFF&)xTK2UvuOHT~$4F#8@ER!4B-edp(2I`gqp zL|Falu&Dz~ek4~?*A)Vqz&ajmFIJ{(*taxyEfg(IZ#hqF7WUo}RjWR-$Jy>eWBooNjJy zy&RU1&>8f&zMb!2-1b)sM*l}itQZE>#xj$^qOrBp73~XV5+Y{(n{axT2D4do8n043 zc<`ESf3PE%fTePy{$!cw77D9OMp4n-*e=Bt^H2g7-%s+{KV5jH+z;-Py6@h*afjq% zQBfF_)Xoh#`RW3B6&01di~E>J!JjT{x=Qs_tcMy^F_PA9iTL3UlZcN|pS+JIs#r~j zLO;$g%^92-j~A|R?^i1P(mcLAIrG$8;m!c+!mE;2_+@R}W<=bPB(t+aN|`l%lyeEs z@HMu%SuyeWKDqN~7iZo|q(n*l8;(2b3iA4q_amtinre)!c88Z1qi*Rx>YXsI-RQ7r z>dd?O)4^a%!8ctg>IpQemoHz!Im^ja%de%;hhI~bb6lwJx+`^OlMs!;R4q?1SG zsWl>5Z*>2-mn`kq)fU-b#`8)zg3{}pLOMoehEVejy(JG%EN{yfQt_8gwC}R+uanVj zY1lZpe_O|y9ogH-INd&*AU* z9a8>oRgdTZ1}c?k)LCt6rII4y(E1$w-$p(8J5G3lIrmn5X6=Q3lpX0lT~ zbO+K!YxjS>X0;fvlpafa;SX4%*zL%s{%D@a_ZERJuOWNlQJcW|H)U=2mhYL*oHyzY zj3=tgx16$NljFGU>4NYcv;VRjDIzZ}E{3=1{~&aQ+kUzEXTCbu%IDI~kWwgRwL85$ zr@MpC-QdD__kPHan0>JsL%s9Vd@$?wy?giCOS+RCCp(aL2*ja3oKLjG=dz(REG3|o zWM^S!M*h;|cgF~>l!o}V0UTli0S{i}5q3Rp_y~W}@MgoqLr=Ed^8ufK8CPa<}1h_v(!=ePn4%R3A0@qA`@E8*!5Zm+8r{?c}VCar_)T zeWuQM_>FK!)u+Ve-QylHRqi;>IG8z@lOHJa_y4{X0I3;VrZ0byXCAX7 z>-8rVB_$=u9)`CZ*7i(>6;1L%$J=hf)9%j@ztb8@8alipIw&>IQ}KHEy~o)xvNt0l zBAj*y!~=qYnl=u0M)X3N>=s`j=R@G)=s7f3WP9+Z-U(`HY!1Kzu=MKtM@eaDi|CA% zZ}7C;!ZXA}w_%fAF7mwaNbxu}!64-~Q&@i1MsVwTJf}6q+OKlGMsHLGt=hP^S8mvx ztW`wD#yWm?XiOET7?aV_A$J_NzHx_l69ulBW76r}l*dVkx@BE7Kp3L2S`_5Q;ZbaR zUL1HrzmDSi*~xn}7pY;>L1p%+r9C9YhdVPD9xuE%% zdmJ0l#mC+x8`vZExrCQ^WRj5@Cm|sj^^o?b&~U$fz#DqM33~0{2lrFMzZ>4|;hqe5 zlzVT?lThZX@|*N1hVgr{pIJ4jJ|5rnkveai%2~ThF*`=lf%$XMusslm?YGF_W!ji_ zy&6`pf~T}9!8NaFa9z>VX#F3o@CXaxMeK^7v`zU&bL^J=fBX8VX%2sCp;BZE37-qB zWhmBqDzkx9`52nEe{42)F&+-i*2zZ0AarZfo=j;O8G|1=a^tprd`N*%B>AP9SRCt6 zf@9pp;&!-+7TLM2fbDwNb)$5&yR?tL3!e2uTH05~yGy$(!=ZQh58o6voF~X-hz-;@ zTGk)VpjSJrp?!t=*y-lHHR-ysH5)2WqT7O2P&tFfShxF4l)8BD>{eH+0PIM-}6ZNHJ;+A*z~Bc-`LJt^dvITAVaB1Magb>k4Rs-`Sf2+Ee&k zoi@MS2&W9_P39S_cX$0_KGs@kJ=@P3lAccStNb;xhFdOmC_uezC+vss-MY>cFO6Jp zSs5!XgNoqA`5AH(GtB{4-wDmk&N?42WiJio;ng^9v|3b@nvby?_N9ch&Fa98gjdvR zJ>FU9Gn#7;$Hv8FHtHqTS7krXf^7@uba5bK>*VaSc0&rlO^eFu>(ItqR|*??8-38b z%x|2l#7QYClDKUOLE~?R9jaPw_i$Lt_0i+{!}M^5iHB4oWO86olf`9hLyuaF$JTDhs>lJgDIGW@8&M6_I7 zNxwflyx(~>OJX~TTYkY=GFZ-dqD((7lJfqTu<(};E0`%>b@~MaeLqRh-wsWN%_$9I zdZZUzgiAauxh8}D>Pzduj2DgZ_&)V%N)u;^M{9iPb-uZ$=+|z3;@58pWQf&JklHTJ zzeY)bYPDeA8re`Mh4XdR^MYOp*Fe<}>LD9pu1c((CI=%)*E5GaqLb++zooH?$9c+y z1#;3%Oibe*Cu`CCg^ap)c!u1u>E)wGnusxOR8>`>%*{n9%rxQjRM{?IqWQp0ibqhw z)At=)Gu)bK`AVAFr&;4buwj3=siUt-O-1Dc`I*-@`cJg-%$`fY z`}gegIx**o7?uGqxn*H-o;{ldNT3T_)(yHRN^9+)m1nd?_O7Q9A%}%Dpdr6Ir0l(L ziKpi$8?=GKrlxe?Ufq48?RhqIxS?>!a+j1elu{B0V^mg3s?m&{Nc#!O>O@V2w1!c# zJuV8If5X|<5TwmqzfIU*>ud{~w^z>4kov_omv=tFtRLb<^Wxnu3md2}xW*Kp z;U8@IY+#yAB|Ranow~O7%t*vQP7eFj!_xp>!?xeVNdl-4EFngx?RQ<%E*Q?$nt|2Ya(vp#;#?)u3F(J9qhwh=oT#X5AuNR@z z+$LoGpx5@EL8a)c#QV?-X3-df2bbuQo4v7yt(fiHlGx#;>!Fr0UUX5tRC>j63Jko_>+KaIt#% z9pmbf5y9uY=X)EqI~epzpE*t3-h@~BYU9aL;D|ol@e$Ybi218_WU59f0mOeYKc)G=>Bpw zL6h_Pqq#QaU84NQ$r8)go|7j^F?w9AM~f!*IH)ly0?$f&aWl2gNF$iEu)4Udwe>r6 z7Wu$Dx~DHzDE7ZMp3urBu%f=%Xt%y1CZi>$D6S$~VGgqeCFY@-j3b^RIn|jqs8F@bNf0B0`uJn}UYM4>mszEde(n zZb7auy_8P0qF_@a&gZ~iysC|*fGtpdeKALm+8yw}_W+P`uC=x^r6dIp<W-we5l| zyZJBgu0PCQSWN&t-{*1AU;3UIe4i(V-~G4n@|Uzq&V4`bS)#$>#bX=`gsutQg@Cy}FV;~+9RT5+iuIKFFiOl+)QZZ0Ja z4bj*SZ-Fa14QKm_1C!9zM(f>qtgWr7@^r@5hR(e*=~6QjD69W!Uq2YJzWTpjEt6*2 z`u#Bi{m%!q6-S@Sg9Mf1q>bNWw*tf-xeOLfJaP)WlkRgW5qRyj2qu^7d|2$>gAOBY z$$oj}-Nn#mDd9bwaQLSIRC5!L^QWxFqohO1{sno56MkXX^lI&)R3+q}?r%_ibSV;H z|E3!>`_=d2GP(X}aP}*_v=42EKTkI_RLe%qIEgXf!PD_%zuUY_&lsE6jTWB?09Y)9 zkjZgf<2nYh%4{XHAB82`Ws3b-QE_n=AWE|b+w)8wpe_XiYlXU_^l2iunPh&?1%ZX= zc#LyD)h(|{?XSIy@YWwKF#sHO{T99;=uKU*kHsTCGUJ^*5DO;b=TCwDu3N04^2Lk* zK4k<7&!i{jv$Z~66*-irY`fKh z7dtlJ5#gJ!UQwdghQV#O_;sgGAhc=vcQ4Ndtco8jdQ#XbaUXzKXspb}{bZ9)v$qi- z3xAb`E{o4?M+@!qbi?yP52|N(G7ny2j~LW-Ywl!XUZ;MEg0V7_rp@W55PtqixPXxJ z_MRRCP)FwG=OdDmq&Ft(;0~YptN}{*BlT!+4}ahc`jbl0t4qL9ao7_>Livx|;}V_e zyuOhEmB@IW%3r(HO2nXA;+<$w{i)k_zBjq6NT;b12pq_BAG5NU_1o{(A1~7boX<3E zSOCaFcgCQ&hkoN9mwG>*9^SpCJTg+m^Yt`1LPt7+a%;AgjGOMk4bgCHbRKq(ZI_pH=J5??>Z3=fR%xn`3SmW`~bQSG1er z%l&Klw8QFjcu$lsu!h6S;~qp`BlmR~xOcBn4i=2W6vv>oAGSwsI*eF}M7YxV`Qj+bWIj1hyb}?vZhE z?F*@%7G|+J?1@0tfI5uiFdw_sGw-aSOnRJ{U%x{lz0jMiTIa&{T;Pl~f)ZXwz~jIG z{W{&KFD00eEpTQ=m&D^xM{jZ#QDI69&_jqg3_R!{%O?x;W&=(bCcB&UeQPb}VPh$;r_q<8fL}@`98moXBood2xQ?4D!v< z?{{~?4B}lk>S95Ndys}vVe7UEJQblzu$e)Fz$augZT=`38TUlT%UbLC(CfmwR^Qu1 zoEN7%1iVf~;V8Z*=U?Am2`1r7sB=Bo{(9w(6@ZcLrR>ygI9#(1HLuHPf5<=QQ=E3j z3mQYzO5wA}^8=Au{?%oP6z2y2Eta}C?3*T-N~O(neh&y7WLQ}|>{yoXll5?m+*HA&+Qd3+J1>c}0n3kD?-#fI#YxA3sdZP3vLJ zP4l}|M@^Hat6li|TS(oPA@S8|onVWKn(nHb2ewX@U7fjsLm`@S z*h&Q&k{%xXAe{l&1F!?%t2tb(!T`<@nItCCJd=4G=Y5GRUX6V*S7E?ib>IPoA`^bM znr1oF+)wTE%Q68%vFcE>RW-zVyKp!tH@9_4R7Au(ywW(qkn&y$gR)8HSm&=@m%78V zb7ou2rb2W}W772?fB&1d2#Zo+9{OsR#tvm~K68m0iBAuiC(tFrzq#ClFlP)vLaR-AZAq^Yq$aH1*0;?G)K zG=5-$?n%<9t)-f;1bS-(rQ(uGo(+anY6ZOYxP@c9E&i?RA&T#sv?;s=)Z0=stVA{B zu+uX#E?IFW8z+cKOW%TvcbUBQ7rO~$g)|(Gda4+FONa;*mlzB;xS6xLZNzVei*HpN z@x?^ObsVMSW9h}s&u47jZ3|Ch1S7BoFZ1bBiWspm4`w{Yz88a1T|g#@#!VRU zk?fh$ZxkL+%hpSLf%v5&$49q~f0ChpG&D{imE2GF(f2rSX(ab6Y!oRj%e^I;pOd_N zODA8J=g(~uzNG*zhfB@?xDj~yM<=|zjyXHaq_xEoia*?cbnDB(k=N?(%~~#0Ly^fr zxfp!;lB;d#G?+T?Zrqs%?ETSpp%-Zau(+3_c&4P~qHH300Xa2S*0#Y>>4Zwz>HdCf zZNBbcGS4Ovq%9hm-v+Ae5gD`bJ%)NIuST{4A{n|y*7j|t4h}tdQzk4P?;Jgg zj`7teTiGbet!73$e!c_EUUCfWq~YR3Ko3VjHRid~`j&Y@&%6y*)odsfuH?<*SpoUz zBEZDFTr1igm!_0P|p(FMz31lMlf<R8_3C*s1i7l!$&ME~^I=aHGW*!f<|D{IR%1jkkdt5HCf5|=Xo;qbOryY7 zrKxS8Sd@s6Cc9d#RYzV(L&T_#_tg0HFWIHBPVg$h6b6;)0XcbEcZ<8zr(<~>S$#H{ zr^EIDOXfRqaBzk=b?y}pKmVU^Xq8JDNwGrZoOqQ+(hZxyE;-_A!H-!zzh8?#Ue3>o z3e|etPZSj!l)@AaC1o_GA3V71Gq7=e)cu9Po_F3{EFF!F=N?y3o4jH)w1dlUQJ@-w zgal^v&Fk;VOGs6ha!s5tV!QqT!5TKc`O&}bT<`z7&vG6H;UxhHl3pBmCd@ zJMU@nTw!FM-CJ3#_GResw!59D`t8qv)A``tDShuJ4?QVe+bRl|FuAFsMMQsw|G|os zl;LrvaLrP{eI~Csq*6wq5s(X91Ql38m0WrJXaA8d<=A5Me=e!846+U{>d+FmW(H~Z z2qYr^mj#$Uu2IJQd;Sq|>Rg&xq42W9>A4r%sO9G2Lh9#PBQhNJ#$R{(qM| zZKwE0p9$K8Zfxk!`-7+wlAM9UNvR3$t(KRjx111R0}KvuQ9y_UJ)ZNA!_Ll504taC z`hJ%8Wi&q<-fl`1KpKXa3A4zsMJ=4T`D~JLe zU}{5LQSpITWQV>R2?K6dDq-Y*m+~V^DpJ(1>D#Dz%|PYET@6OO>UCE3SV!(;dy?PU z0Ui1j4<829*7Abr5fBhCWYIKjwK)=&RVG``PK=jPonhE?}5iv1L0)nILX3GCX0P-942O!t5 z^{I^4^Ck(Y0X=UU>Yb)C6$V!0eiYiO97Z}i(4G{X$VqQq2c$K!=75Hd4$>Dukkpy9 zp;S;q;1VHRpk})a%g?05q1k8tG_AC<@%;LTwV>V%2f2g6ipVcAKAHLO*Vx_EpMEhJ zEtstG=h!;aWOf$DpN4cUYZ9`gOcs!Y^h_h7kW$#zmh4cdgsR6XB)Zo3bam2uDz z07>@S-&a%&xynRN{x&Iz7+%rxMD^cRoqqhOap;96Bi@ATRIu**>$EJCoB9Z513Ark zHiQEOT)J_vzgI^~{lLIY8$SS{5N`1eBDdYY--9T^h-*8jm+Ls4<`3LQtq|~L?P>p! z_xnG-IC~Xsg*%Hkgc6b`!W9KPTUzs7osN6E~aW_e|dLxX_RH*Dd3;3p5!lNOh0B zs5>usFGwZ`n;Q5xF}IyR7%0CFPToe~sCDHTgZ378c5lLku8r7PE;0F;KxGE!!O1;!2C+3_Bt z_qVzN;|oLl5s1|Qfa!p!0O_wXlc!2bxL7o@`bXP;f{8fZ15pcoApX8TPx%=7NT zSf*93recbUUf({1ODjZAZ9G=p-iZr5J`qgm&3}4bw}i@Sw@t`<{D$P^K&1<@VxF&+ z&lOWV=cEc6b_j&$_4m)J-}=`*$HZHhAHCx-UB8DVmvBe)`<1e(LzJ|+FT7T(#40^S z&dMb2k9lJ8YZ?O$f=2BRuf%ws5Xyb3Yq!UqonX0kIHyqk>E|5IC#PDW+|h|4$Sp06 zmeK%gA?C7aK1`}GAHxL=Qc7wD2m(mm-5@V>2ek-GOG|f5MM(VDOS~Jx&>}@a43%d8 zK&kp!%3wgBxfm2rMC*p_i-PQ53JNa}bEu``z5*fZ1=`eEvr*rb5z62B^bVg$gU8tm z#b_qI*3I?@p(s?g1T?Zq{vgzX12zuKruJ|q2(fQoJ&{mTBRrV$6v$J`p8+q5*F2)7 zXn8$IW&2b>?7H%gDa^26pRXl64h=i`VD0(4o$lvae~~zi&CXNH>7%_XlP8-j1$7q> zA{dFq$u{v(ibHrdS0k_B?=|8zC);v#(eSrYxfi6_KYgrSyF+Sjj3AuGKPp208-g=mrwxM&dtr;y?H2cD{8p*@e@8r1(aD~yix`xk(Wik# z4?w>8oly^9`4#nu3j>E=Cv*`WE0oL1^gM!2TtT>U96mxum9Ir{P9SQw% zSbcx7X>%%i636r)Qd!H{2iLp?GsolL2ltsus$xY$-cvYp}|&@Hf$%FevX%VWn9Bu17W-xOX5G zXuJD8KpI)2Nfw-W)A9(N*URP5R%DaKlNep18I z(aNw}G%5yOJo_>gStd@rDa;L5T76t;v2)k0hvPS`y&H-PF#rbCRH9G@4JbLEC8tpD z47{(4qli$69*UYOJ=p2>x_fcjCg_qx+R+$lgTnbTr&K?&mE{Wd@6hg-ccK;CSRZ*) zcF>|7dfjChigqc|*NI_#^zF}3apLb4HuCPQO}Canfg7F}_q9=k35V7TDM|U^t{>nRs4r{bVIgMst z|LELM+VxDS|Ea!(wqpKl9=ecXc7Og>&C}dLbS;3%XE;sZ(*m2RoUmALxbSdT9eLaJ zhmN2=KZ^24W&310S;-yR3Bo2f|y6ZqzG6yoFSW984k<9Ywprlm?YiMc_@~}= zleFh+=^jo@{b?Ho{YCYtw8mJ(271AYVI#=}OL2bcLPzoA4@dV~cPPv;O{B?xjd?$A zIL7GF7MxC?sjM3l(*3?{tEiCt?)_b7*=Xk#a}g?$p-~>6g_#&x3AiE^kjy{^p8@$& zFoKfAdF~!#{h=<2>t}rn<4PM3>fRglXH~ap{HY^9NjFl^1$m}ya)nWT>gM8<|G&@m zQn9;JHq<+QMY&4148@~e&jSf>+0;}o~|DmQF#;5 zS2ODN{W10N{#qBP{*Yix2e9ZkvdKco>|;V>naT>%A25e5d;LZ=st{m z;v0#VwjN!u8Y7FVr>6%-DmN%cc^h~CQWDM{1+{eu?NIWZaIiC`hy=aoAd{4epIem9 zG9fHsAPU;?uIMUK%V(3-fJ;{`<04{eo01?^JEK28 zd_h6ASl&?7koVK4>=;@l>e>b)Vc|wp^;ZlUm0_YmxZ!be{!P#8yn_|aT|0{mbJ=%rEpl1KyGgC?G2Jwpj5M( z*eq+~o=!w-g|jC;QL;CE`UtcskdnDMA&itLgnTTX4#{_c}Bd%i7SO4{k zg#e1E)mY<-F-XoJxRr*tV1?V+*|}|I5WqH&`M;p@EO=b6co!`PNG;q3*wmHB%XtJG z7Q|q6Lu?WPCw-7g(Eihzmt~^ix>gRZB=iZyHh?}xNkx^(cxS%GF^-ryldfU+J9 zin|;JCp>iIxj&C<=+e{E+xz-x=;?#Np&>$jMRxbeJhiVdIYc*s{oLopwyvNZy%8!VOIqDv094(YQk5adf;_Drdt zr*w;xx_h_iBKZgD6yEr#DD3*v?PvO`h%SB#aXLgwc3AsW4Dlk5^CP24mz76A>z%+0 zjT7+X2aZSM1Z{T0f`%^F!A~^soL^3J-_ag~WZ>)s6^$nLQ3V=4p0F{I3`+{7nOizE2n*lOfTM?XMrn^ zG)nJng@2;SgsP^A=lam0Cbw)TR#}9zdZr&!azI5w7LZXm89BL9AkjnZ0dLxs!DC1mo=(^1MRm!kiWm7P6nQ?)o!`~Z}C z)tFJp$HJJvAF$cHh0_G4jhDria!CcB;Oj%IjQ4mk!){~pzNp+ttuqT^v>FSt;SAj_k$Fb9*WZEqDSx;0N}#g z0K$OrmPcx3uSSY=0IDIIDFTF9a7fOh^zvjf7Z{`>M8JY{hEOUJeszZAez?JCWuZY= z3`Eqv=g2*PgV+LHT7vBEtMN+f==wgYSdB&~Ep71N!2fvy?lTeOKS>j^2Fgt2Njy)t zs`-C3u>Mz9(s+?B-E}54y0Z83x0Q|dh2+&b%zpznAaKE^C;W(`CzZKb@%ntjI;j~f7&S=Qu;Ye-7%1m( zD8K|OXZPz{*^5X`eV!o}B70(f!}Qlw+rLIWo2PbkbOcJsAOy;xPFqxr;d2v0F+)?P z#co{K0q>5UnA#PRyHA`pU-4g@+PY=#KiWHTgILyg;N1oF$EI*Ji8w6up#g%+HobEs zd*b{V?g3OHgwN@{H>#X5EmnDfo!PC+1_3lA&FKc|uRY?Ucq7Pfzz9HoebYZ#lU07& zGzY#n&vnwbXSXdWEwJ8a9qP!+aG}7Td=jvhpjc-*ZcJwXkag$s(0QM0Q>9V1;Ym-f z{^x9M=ZKb(alW{XL=TcZt6)t(Za9qqEI-`Iq>`^x&~WYoNnPcoCtr`12G0u^0TV$t zhZ!hhK9{J^pBa$YI3ymy05_P_mcxeZEr@P7t>w^Neimx?l@Dt@^YEy*Zs;*&$u&dN zii_jnhLJi~4)b4SQ5m=Oj4I6=IPireAf7@8aPZG5Fk} z!pVRN9}yPzX2>-2!v`Q~ehghO7Lf8YS{#b!*jjBz%&C<0velcaTJ#T2vQ&}La~4l z9@3>j_<{M27ueUpyn{;3&rhPL2&xY3FnCG;@R05(WxHppE^}PN-Dr!Q$ZFCEu!#$< zAbyCG9!7m^2!_gLO%hrmhawF-g#Z$@ku=Zwbry4nOs~CybRe9pbXqiMRDfP0A|nYn zt;nF6lRbFwF7sJz352?S@odV!aB&U#uGswDb5{5a%l4mCLi^lD*&HUY@YPGUTxIs> zw&C1sFs8U|OCqZV0d@jD7jU7&Vf%w5f~WXL#}*Zmi$c>wzy7ZFY=3OAy7$ecD|BXK`po2#n6SmKUcLm= zRq^cRgb194=-)h~gy$jtybvx6p}3lwd_FUkX$i9u{a2l3>In&K;9ZjPr`A_fCt9LIVbSkej(B%;d)H&UPU@B z(7JbU7Pg0!wV7<^r6IR341qmZe@K4mGRH6e_=E*8L*{E z>cd+2SKp#!wAQ4np;|iKE#?n*X*6z zIXMGk4?;+Jb;6%U%?e&p@R!vMJCqYxjPt z!yA|N(iPx3zVB9cobm< zRo%5!$b!wa--EcYw3HND1m(09rxSej2$BqOK-|FZWQFo4&A`RQ1&MFe#C*y$7^Wdd zaQH;EJu#=%o6%Au+pb3y3Kcc7sxl`v+%P7o&peHsrlUK`e0dSCFbJ5v`CRv3XlQ7x zjbM=QO2F+d!j^%`3`JqPo24%-K3)>&D{R{#(^B@h9z&om&!NVzxOd@LtDl>b-K8z9 zjQC4XgjIYx(jm_FVp0opwdYN)GH%mO4W(qGZt({b!i21QH?M-d*!rT(iU)8Iy?9Ik zMm_|IEheg&kp6b~`wFy(HuH)JF_`YDnhB&wP?>Da*&u|>C?#7pN^?up@|`f&-Zd*^ zP@8rjf;1qIjj=Us9GrpAsw@Sy+fvnbOO41t1Dxs+KsFCa z%-0~%0)t@h+uPe+p8GeOA60;z(cRsBd|rw4Brhw%+$X9q0;TWzQ_AHFy(Dg)nkp}h zwE))=mBWT654>vznC@=~uET`sK-$wA^=JF)Fw+1~{$qBwJWRgAeS!QLGSC}A^=zcl z`T{&!h;4u#~ za|GnMQ~XF={E;C+$kxUJelCIE6)N^J64%l2)!X)4>D^g1_y+^1Ryj+Ca!qY?C;x67{Vw93>5-X%YeIGbmE%f2f{c+9z)|3{pr;n$F>17f z^nwr47;?|B+l-*Mg6jx;QX@#ydKp6AzW1+Rz61@G-c#-&SnR}|ha|4Q{*Wn-Pn9sR z!1X3TmIH!FqEJNP3?twS+}E8^qtt<1MS5ID4G9Mab|gGHP>2FGyw&Pu_8>T-<%ymN8N8v4a-Gy*_83)E%i09_}Y9GI-Ig2JQ6o`{U{ zz}Ub%be2|NdBSiJI~7@JeZRTT*crO!9ZF zegQ`xUZH}>Bd}D{ia%DIo1z>P4*fY;#|U;VzkmD?MpNOwVEzja8gDC%SoK`F!z-A| z@4me2{<`#k64)k5Bp~)fHxq`^+yBb~@B?_0b&>_$7>Lvc>cvm{36)GXXmN{+i&$DG zK!0{%k6J-J)hleb?d9@=lev8X5fV4~J@_nv=MLW|qGFiQqBI?@jpn>yFHx8m71F>9 z|CFA-d8IJW%PCp;+6^zxO0t_d(gx3jqUw}Q(tI`jSJzM>u?gN!upwz!4zh*jkLP+=x@>n>Q%S!-YuYM!k6x zX6Lc=XNjEVt7#(hDg3$*^{}0SGRaB4uW$ZT{%XA|}-{j=b-tuKt z+VFgLJne{;Tj1B0fy1)+XFAUYEcOYjnFyi{yIXnl8OHs%<@Jorg;_6KPvCuE9&S5J zz|y(3hVqALd6}J&FAhNpW9~1pFDYyaCKn=$ZF5g&Vr<@EYPkSK`k%Sp1m2T z14K$J;882W@>8qQ>TOwBSzF$JGmEAIU5Eq-3O_a&@eEN@Rc4g z(4%$F^{NGAdTkVBFBucRzrC=r=jDw4JsYEjA4_%>`foRQ!u=ipWDKu>MFCP8Hrh41 zXf(g3aLb=++QS21zka2_YT=R5>GGSqKdd_b<=<0p?2*sam%Hmdj+Oz&nMK7j90%=^ z90j_8B|Br*1mT*L$xmo%{LTO5Fys_N*UyynMN>Bw$ryM7(aImD_Vs&|v5&Q7fxIGm zjKBr#mHE5)`2Molvk2e>AOo^OGC*6MC-_eYL%=5W22{NXQ0&8yDKcV9QeK=_fqfFmDhpQO01bAi10;*$b0hzm=fUE4_WufYvQ)2YJ4 z{yW@+&Ymb^_mrwa{i9M|OJ85;n>TN4)^H!rxYq>+JDTJSnZk9yWl2K2MxUeR1YH{` zlm9ua>T_QZpiTzkEwEh%VT|y2Z{^0EtcTs^Zz1qNgrEitc}4+YrRkAi1Gqe?xB3v?}ddnuzwl+hueqShyH zArJSs)eZ!r2eDnqEFN^0*&mIu=##k(T zd|IlvutTpwteoTx+@Uo*Ju=6VG?@Rp5*8EF3QGdi5i&AiA3l&VYS&A@e2EFtHwrP2 zLom48Qhiga}a($;p~O!~W$m#$Upz1KrF-z2ZI};eKoKEcsYM zNQd6cOiNIU>^skzi>eq&Z+Rzk2o;7OE@0>4#=*N$p#79ng_$`<3eZ8)q5pjCOz?bXdXGSCEEL3J43qzSa2s#dE=x6lM64 z&Wsf&3Nm*J4-@9?Y3F>KOJcf|fj>-eI;p z{bz!e(6g(u;@>JOoC?=r6Z^x6xzQ6-a2!NGfAla~3KpmpC;$`wEd#ah-(EfGuhf(w z#JC>W5y&w{Kcnft?eD1iH&x36;c044PW&p3_wdmly2VyA&8QI51&tp$(y^nJgNKuC zIyyQ)X0{*+@L_lbnTJK6*x$g!#5Df-nLyy;lm)O1y;UMCNP$MxQ%xMy#PBR7iT5B%gr=g*#D2YoBfdCuu$5e&9OmlN~qU-P8g4%)%OTotzRoX3Kg2Ex`BeQLFv~7UA zX~V^trBb1m<|zh;96UUTLuIP%Q-Gc&dxw=Wy{`1Dllm8}MCm3_5EBxlz@Lm`F~WcW zc$n7mI9{T`eXJGSV@Pj1w!?TOJQlhsltlpFNst#u#&fb}6}(HDPd40Gtmkovi5bo; zAmDlXb|#D*0B5k>TULaab@+lYd*ar?L7^QUt3?)w`iO7{L!vwRr79ynci{wsKMo&l z0ipXSbsp$+B#3GSa&BSWJ|TDvl%Q3Bk%T0RK<{aT$&)@n4qaH{2L=ItCr~3e9aiz5^B++H)=Y!S1qB*nSYaLd-;Zsfet@FlFd8_wIqi-T3OsU1DNshdD7Z`3(ioXp>;WP9659pDTV+P|5#kWByJoV;WQ)PzSB18?OOL_fJhFMc5q-)zAvo z6R7@s((86`mf=yEF5gTl7@wosz^iT;1U!fXp`$BFyv`9I20%N3OsCi<1!NimLD_KF zRY8^0_Bf(K`mU>%fJOQ54Wg z!Fxf5Kj70q=mAYY1>FSxXA9FJk&%&2F!l5mO7Ta6had`e!v{(%P1JBe3ZrFqYZFA0 z60=ceIN*Ltc?LtdiinM9xAffy&fAN8HMaBPmB$br^6N321<8p)yFLk$Tc8SI!KiZ& zI0bUF*q^oPsx{hdpg3hhR2LMfd$3Poqs1Hw`v|AOwt)P?#-hG8G+#I_&or}w(qDec zf!k{U@#R%sd!De6+r^1LBGYk!Z z_2HwG_h=WtLd^tA74pU}Z6BdNq?=@p4~A*iSFD8al%v+CV3r64G8%2OTm7K*@gFZf zKs-)_NI_dirj4Ka-kPpIS=R%(6DEt$%l{8s?;X$O+y4)152Pf@tfXXykWoreA+j?f zSs7VnuTlu15|WjW5JFZ~k-f5$y*J6u`aMtA_5I$D-+kZLKi74AKE?Zep2zVzUa#jm z)O{OAV_+Jo4igFh-!ot(1Y^LNl)S%t@ek3V$&I}iH2rl3(xO{vM!-HLzRs2n6}a&> zFb$m}VWbB>H}m75+!>>W6Ow-P*RhS`b=4Y{l&Nw%WiMVNLB<9WN)nu%54DT5A={z6 zwzifbSfg6b#wPO%na5_w>}D}erKa|}YVcP_YiYqD)zQlG@;h*m5}oIl`|Ux9(%?lQ zb(kBu1Q{Ae*He(gLIlZ&Mi)?{>crQ_ghmA_6u=!=b;qnjM8OQICTsSh)8+1uSEcWM z{Vz8Bo+MXrf10+>Rrwi}cqM3{ocxzhsz2_KO2KT(!}AidKER+P;8stg*TM@+2MKZ1 z_OX3;!$BM(gaLsNx=~Y?qSSI^aB^^v1+!<#rQs3Y2o)H4C``zXL2h7K--Vu1!I6Mn zAVWnv1w#wryvsD}ti+KjeJHr^H5Om5RnASeK$tZYtX&tB&r65i>5{E{&=K|Dr!q^m zJgFXCZ&7cj_4T$=Y?VQJFNPkp<+pNeIAMqC0np7NDjKGeqz=(I@F38)MkjA{f3@cg zAwxa96Zlg#)+)CXRnSPR`%P}8fLVQTHma4;u|LGXsCnbepoogjOp9>_(aHb(dDFP* z<0TZ!wzf8$ukZ|2VI9Y=aZ-~?=}%d2L9bI|zzm!gt$+PjYZD|ORKk-^5|iqVw_%8Y z7=kXxHY8aN=EE0L$kpTu{&MzG*H}cGX=$$o(T9ScRZG3Q0~1<5f|Xd6HNCBvXSgP3 zse+#i)9*VSvM`hHQgR!qeVbeBY2}A<^TPG@^&h9E0?lZYNB=G^4ikVAlyk(Pan`(x z*xewufv*vcN`wy(HGoLT1>+W7`f|0BG5*IxQ6vjv8ocMQUrwx5oUP|&b7 zQ|`L}9tHtTWBd!NYimLqp7MCyd4pC$D+`m%IOKMaQiBmHL%>5VamWD;A_fGjoG^^V z&>|2(5D7pbVgWWKDEnZf#!je!vfuCmlJ9q53UP!?pOjRB}QW`whl%x?1uN)M- zBM_)sk2OWX6A5Siut}Ukd<+66(E54}Rt3+(4n&o$ROHKQk|$kkdx_cH9r%rIdRq(= zI1E&Fqn1x0UwpZ>0w>@9cOM<4iYqt!xMj;0(+e3dSKd3k6Tht&E6o+0Zrsdf+?rg2 zCrjA?`JGD|&$81I{&VAI%cZgr0*uA@_JSEuZC;#r(B`GGO^A1GZ z33vV+C8n(xEuK{((fz=-LwNP~qQ((1063l~3CnZ@6a!?THKowVdV4Pe>?>%Q2OLuXxG*}59E)%1OEf*1WNbaJ#)C6m(I&HUQ(mc?{Y{< zv-XcquPzKSn6rLOBlPs}xJvl>&RL(IXGwki>sMqe@D}vwOu)@7TWmoeB|`rBKou%)u5Y^-!3B)^}%y`tA3+K(eCh z@1blpe2OpNzv^68+n(QS>)KVe;gb8MeWg?d)UnYgeS4MkLwk1!hwpP2KUQPP5l|6R z`FYyjssF)j#AW^L$wbECeAah2Su5`cY2Z)f?>d_0HkJ6ErYWMZFj=Bg`=^UUc*=Cy z=)<8}=v^vyXUIN_u(Hmy=YY zRT8U2i;XZ#;Ryt{n8VtG!rEh#Yu@(uxqZN{Kq+^H5Rs5TbMlI`Klv(VS#)?bH3k8t zRw@}8r)E#e;$+Bb$Dv;x+!Pq3k|>eb+&5zvvy`owEOjulFy-JFoll|?TP%z2W&zH2 z4m_uJmeyBKz51!Gv2TU;rLX*+^SmH zwPbue9ek{+qW9+f`sTDB8jsE!Cr?9TV~TW}K)AtvAv-tK94F{V)|k#F_FC z4RP-K`7$3-;3oMLl4HW@a9cBvweR+UnF2L*@Ar^>0F(sHxJG9f<;;z~{&@$ylVVc= znoxRHs=ad#=h0<+H_PgNZqUVBa0}frC>yERv|nt|;!#J>oqGdm5Ze)^98E6k+Y8n= z4oMdipSEZ+{+C|;oijJ{t;sT{k}TfJ*iE*UPCzK9YPT(sGFIU_UU0UgF+^!jR^dC<3S7ss07i&0O_traVOv=07k<;?gvi6blr<3f$G zdTdYb8!(5Msoeckaqyv|c>n?|w4>!+BaA=SZZMQ;L;gMDwq9OiL&J-zL8U|$ z^72W_U}OT^ym`~Bv>x8x=aS42NxO6LMnYzxN-3ZIdbv`M*Hj?%p{)J#`bqqU+L1oA=44IUI9;5^%Zgi= zx7Cv}We$mV3vD~DLl8wz+htyMClk7zZH|2{gIX+g?JS>IAhM9q@%T6~ z0*}Wqht@?8s*BbnmN%_f==K<@rJOdBZnoHUlL2ud1RYoQylyi+2_OKbErf&ZvzYkB zLu5{Z5xG54fTIzW7C9@$m}__M-OFYnf=L;}C;(`#hoOB-C-o~F4_uB_IB@vzt@pEY zcA|i~)xX^PjtL$3FBxQJ`uN+ivUd=m3;Jvqqusj(%{;t7tZ}D38B(#wj~;z@#p`|J z=nu0jK9KF}OZ^n+_euZ~W)DX=vZb{V!W~2s1RH6G$Us3@)@$+lLE?YPMWFYp0pk4R z1wOKLawRkbwxZ7fDn-Nw5*7*K>#QzW!aj#%80{v;4baWow{O3bdJC%*#h#K=@aCa= z8S0Sn#J5~K8(Pz$Tt#tan?#vLTw|(bza+RJ4}3;Gz5tNNfXfg*L5dB!iCM)qo#zAj zh{q0fqCjG2n*A^6Z=ar;M9Q1Pq!yepxgQ{ z{!ldtysLj01N)hvTWWo`>zj=EF;Q__wkkr)hK6u?SZt$0WIC@H$g2Io%d2mAbaxU_ zZNS<~^?0LH664ju#ry(%WK@Lk%vX1S1{1keHk0aT`jsvi+K{3e#|z&C zVi8X3(t1}zDKAip1v8s?Tq7~n0L3LlgrEin0d9XWZuUmVAh8R|b)&?aKmjCPDJu`Mh+#BY@ ziS{gikllX}FL+(MC>W$J=3|1tcm6kbTKBAvYKxuf7tD5+XnrZpnfC8T-gFL);le~) zF&In&P0=lV4hbAXhB~LS2l46fP<%J_XPg`pNSN>V>r05?1U3zmED^{Ed0!DGG(xq4rPHuX0(}6q@ULa_liQF=LdkG7RGbmI5Ne(bEZJJx5VkD>x z7$Lz|S^S&B9He#`UtQ{9gjNa-8gn~4yZF9nbTKh&m;i}#g_#r+oF`Uxbp4;1GA2S? zgSa(8)byR-@Xl(mllELRHRZs9ISMEYQOSTMj}WpV2wE3qkRGFN*ELD5keVr z-2|mUI*6ke^o(hDK{$Msug5Ytjb#!y+f`-hmlf~J`nOoGC)TpWb6`Az%UWtIq9!k#wj{K}6o5E&pUV`)@K*@J};kxh4zz&B{29(dWPRRSe^M5&dsxUVlfDCnd! zk4M5+KRG=sq=J6E^wLUS6f45Br(_#PnFQdfaHg2|3G=t z3kZb)VHzMuV&?~$kmJhake}j^MxFK~B*RdG;dr==-9Tu8pfQTVJ|Of|UmyZeN@ew_ z{IX9U`g0)K3h|}&rvs&MPJ_E00-ntc20j|xG=LBkVAQ`@0wP+QYXqr71mBGE6M?^T zZL83g-r)ha}ht zz~vtZ#E-E~aMVvSS_cd(fpKAd@E|{zNLC}x0RW^id(F@)7=hy>Xh(u^1<1r=mMb2G zR!Lg<_U2@hka>J%Z^fXM#ktsamLv|yZdL!SLF(NHh?g)yfFmW=I$G$08GS-Lj>D30 z`C{(}&1^@B*n#E?!fE%A5dY4v?=C17?rCL)sC)Sm_QF^&to z#-H(ur@(WSF#C%Z5zZ$cpJ;qE;>*Cb(FLcw)3gs^cE-Z1hr)B*4`L84%o{?^|IXqB z57yE^r*!k?e#z*UfDzIFa=;2GpCG_aqkR(tq#L0&)(-t6gTMt&Z{x_4Zd=!I7k@`{6uj9mG_ zG@R-uoTt>Y%!v3#B5n(6FfKwJg7%k1xDGGkRY-{a?ObnUF91BygYg7s!xKCYLTlqMI*v>-TskNfXUKVihl-@pDLZae5R#bjL=)u#tiOfI1%8dtdxgy zgHZcoIwAC*_z@Nh6KXI=fuijL0#5*3SPw((Den^351y1c3JeoMqcb>IjNX%WH!T&+ zcox`v&#+V@!8tz+4&mw3r#)6VV2n|_Jg_e7A%aJpQal#G(0MJ7-HrQ5RdqGTd;x$< zbUxVVYCyDz7;K0F?haN4LfR_@uga-Yuw6X!@_M5b7v12gh^dN1}s@xo*65+qPJJ7AMle zl~?!xgeIADS8J9k=PaYJ@1jsEAq|6-J%VHe2PIK)8&J%Y06 zk0fVw%IXQXUQ4R=-|hkm;Vv1Co+y9Gmy`hNQ7G&X5liTkiK7O=bq%}+VIO}FGG}Do z0eX*b*hm`h`)v@F0P+hNjYW``#4al0^u$Whfy~DVIeQ>W5`Q#*FPzQyl;TbGk~!I* z)$PIzpE@DAgU0L6NVNZ7NN4ur3`fF0=sz<0b1y(nG{Up(vax1MB$r|F-U9XwFC5_o z#J`l@a~JoN2!xWu6agtB0Ykze!z#am{u<{lJYzrc*NO2B!=e#r2|$-uQd(z!o21Mj zYAqNs=v4NfUcA_k#vD+=l{)+$Uyoy#J^p}Kg5vThQ7_R^!7G3QA=U2-jdlf4>e%hv z_~;;x_9N!~#j(rY=erx@arg9k?$su|n}eB|sxYygM;AqxU6JO~lsb6brcG9P$gkCH5+N znY-a}f0b#TxVi0>(IehGdgXHtbF9!VT;U2PN(}}C zwAJ4rfkFcB3_R3-K=uXatf5Cnt$Teh={zugyeU|!`w-P=@OPjBq~%*IIy#t2v5<)7 z2|w-xm@xdqP~<&h4G{WF{J(ze6MgjMV8bj?cnMJxNTVePT8U6|dyHw%ApeY48XB(v zqt3xn4d|g^8Uz5*1zu&ee~Rbl0i84P`al2?xew@z-=PsAIzjgcRaDhS9Wy`lSpq8H zQxrmhA8@D9>cLKmhGm4vxX{dZ2t@L;8)|5}%bEi^p*q4Sj$KVuW}GXi|59}+&Bn90 zuk6{o_f^6(!n}pg+z*B&4vh{>O_-&H0RMxd5JV1z4g#{PBgG1K=ZfFNnU&6` zVe?V7#WmeIbBDa;z}fewUO->bIDJ!wf#w=&gDoK?}6$5$G z7#uUp=3ijJekSTpNzj|a4!UV2XH2lN+zIRz%? z1-$F{53>6KrSJClwFSJmG;3rOgpk<(sCLBWf2HPdU6UInNoZL;KCnu zbreY|(rA13y1St>_cp$JWT}gI#_r;efibNoaY*-Uk~ufs%s$$WJ`@Jl(c9a5sG0E? z#er!J81!&+6Oye_uw)}I+<-hIhJOI^IL)EW-@a@N=D#NxfFAD94RT9I$)nJ9KkOW$?DJu+U7k4fEb?zPIHc|rUL z)PTMcM|10d%{N(jAW-5`wpW5G1>&we?DG4fPwf_b(#jrZ-u*!-amY3?bTj-y*>9$b2;^l$SFd^hM-{1dqZ!64_h!c>87Mwjn$C}_z7fCkE;o-Rw5U6C)!+eb6AVej+q%$?af=9J|y{)b+5R6PDrFVac*Wi z!ydZSuHd2U9T+T6^0LeyTl# z5P3ASQCAFO)H>s82AlYk0oL;dR8|x&!VFp|2Sukg*0hr^ez^Hq^NHr5fBR&q@vaay zk{6ivzANhrkOV98W?Qg$rhB!~ijC>}_7_ezD@Jh^9MEmU$Ubp7965Oac3*UjD^ zzBFaXwcH|bm1rar-dV{}Pv2J!_2VqQ*T(90)Af{)^dhc=& zh`Bs|&)DPfd1t1nuwf6gRp&d;r#NX;@*iW(Xufx# z`9;eO^{787?wZkMZ>)l5X()fq53{&*xWvA$<5toSOivp*NVc6s?U5Jc*+`Cxn$R0q z&!WCKH7qS-y7{UE-&a@kEgj>T8`Gr7kKCqFDJ$wR`G(wrGbeZX5S{k%(MnbDEN*U#ViBXg{#$t&Yp{=?V#yJXXZ*3(7`96}TG@J)BT+vxV+#FN~PDlx`NQEyv4 zD??xZI{ALW{zPGTL(_iEZUw z&aQupTV{`2=8-E;{WlT-KTZph-tpFb1713l_Y}(>^W7Io_K{?J;C71&KZ^N2liwHT zZ&@GbI7fef*wLB0_~W(ioyD#v9BL23n#hKe%o1+yV{`qFVIFUtEe^flSQJ|XU2Bj* z#>6?rR-IhEsDzVV?l~&f)i>xJznEN#)C#zkYvqUU__xiUhDU88>uZSk5wHLKM6Yi| zRrEd8xpCyz>BEMV=I6MEEpl1Bc2tC(+bQ`aZX=)bi0Irgu87}t3rme0YOXUXg7T~^ z|8;kR!%55GQZsF14O8z_kZm~;tcYAwYB_C{9)}0Uu zE2q$?^-fMue)N%p*fGSWX&aEH)^$M8ET^-}P^6J(Z?Y?^#=7rQ&w8bMbUsB7< zM%ZW56(-q*G&4Q#i4IxhwN^U#&nDSEF_ir#KO$88BZdlA)?ZE+&}eIZ1InamR#%@h zd#2i;ikxXU#Bk`d%UTK|if}{2I{7z$F|(J9i)&Nu$tV6!X}|dK1L}y`TV8(pXAK(i zSH$)@uZ}4*PyQx9ZB1w9?l3>KqjEYUvC?Mp-xD6)i2UZ7%^f1*XVvk|foz)k*?D_T z#)~JsS%Ph^?<3K-xcvUIas6i#s%?Emb~?tFMP*6bO4)CH5=cG~x7A`oX73T9eI&^- z`l%aFmxI1+$XXzWQ`%vl62ZH9L=dt zD>Me}nRXL4yKFm~^M2{Nd+eNTH?NYOUu7}6e5rDFO|dDpawTK4xL#sCJ$RWR>{me6 z@mD|ShAV}A*vCx^RtA3GeEs%}_*sWJ`5e-eEVG8aAqv4O*^>U657yi!j+`pgS!-c- zNP7!+w*I3 zpFy>q+xpscmF;tC&VQ-4(^585t4~_BHzua9&6RE*xLaHaa)=mNKiTx7ZI?kDPe`C3>wP8J_ z@Iv^p%O^kM7m$3lVfgO4&KFGl7Fyr8BO|{@9;$0OS#EK0Q5V1bWVz2r5V=bCKi!() z+p|Y?spm->+`OS;>$enpa;Q$2(@}Fe`0hDq@SsY7&-Cn> z`*)|**YO2@DmwD5XKDG59lPYTzAXAsn3Kur^J^Aq6(Gp=^Ud*dVz?mSMaN>RP7b z%*9^M$#75Btq8ljPrqyoRHT55s;CvPocMJl!pZ6c)<{J~z_42Gf?`pTc(Taw!lXuh zeB&9}$l9cAm-%K2gdMsCYyCSVCpyC`8%G+~SVBA;P%=mwPd`i+@}`Cw8qU|;2KM0> zoFC)zvm+Vm?zqn~ce)FVXG8AdIbmyWmeZ%*ACZWmyC@%Rq_JD-9o|h!8fDh0zJpP2 zbLD%-DlIjCGdgFN*lyYW_ZRP_}`a!%uU%J8*r^>FB`BBuTbm#Ag zXy3)ep+D2t>g8pGE8RlR9OjLeXBKzpxK};k$z*lV|I(9)yBq7pU(CDzeeGWYQhs=- zPP=+IvQD=(SquY+O!z<6I#Iq|kN8alXxcLKR^nn}v~5?BL;&my7p9!EvgNDzj1nLJjkw$vSxCi0sM&#h*qwAHd}O8Lb!Yjy5!RxVqY2STWtPYu~41LPFuF zPZvW4cp$S<*vF{pDISH}Mm!G-e9|sxwZxwW6%ybt<`S5svH01v?XA-!M4k7}8h1IG zQ;V%@)O;%T3qYG?6PV}3JB#KROn2Mj;4pV?J7+*X=SQ@J8%Bsh9lJ@ zPK_W0i-2rh`e)*X%!xbqhVNATI z8{_;9e>~el{2(iy;X!i`nGYP$X%LW?=YRH`tjsjiVs6C9 zgFKWB0T$7=)5+LiuX3l1{S@L)uqEuQ3NFM$5COwLSkfNtV^9Zsx~J#&xZUcKTKxN8 zNgBCZ+lR-!HS!$}tEmay;!q(mZuzti{K)OS9f)NqC3))ZPI>6i>9vSJ{l2A{^c@ki z+bHIAI=?2Jy?4`-cwO;|9Eu-SeVkYJf##zDRorBJh=+&#ob$iq{-S^BFMBQ+{QB(T zUMk4O_6l|?(%`C^K=$~#iIDa#aH`R*o&zFT{bhB$jthJWqHx8s&1G+%)kv zsU}*V*e?8_7EDM`q9%nl3R;VU_*wze>ouXa(e)o=?|+bEicA^T(LqhxzHMhm8TR35 zvk8Yui<9{5kS~cvjwZ+*ANq5jJ<7}fScTk-IeUL)#RS6K6h~2Wt7&MX#Iy@;X|`vX z4j&Jw_+z)%Wgk=bgLow=l(4@n%OrGyQ{Vb$UN2=A^bb0VeeGOcT$E=`X8EC&vgo=p z;2Pn!s7SSxJ1s_%_Pb;S@EadEGedeCEfn*F_F47lk~aw zPVsa~Nc!b2g_~biaU67TPI#N3pvHmd4<6j9q&+b3h6K@7%X<2Q1MMF!d$ypZIP~b# zCweVA9ha!GmDa)wC(fOF;dQX=jGcv?Y*@BHsemp0+W?U1FW))@B0~whYe{DPWbK-1 z<)D=&muh_bP`lWfpG;4VWmRQX=nXZ+&o28Vsw85m4_1fx;A*M0Qy^(rKi`NwPoqr- zbg?4y{tQXX2Q6IMe1MTrrRM^q5`QetgE-sK<`Sok{;KErW%9;XaPZBr?A>jlk^9BQd`H&wer=bWS7Phu;9v+H?aF7y*~jL(W=;P{F|Jmd z=0P-%&&UWXWD1F@=4^lYPfLpu(bhJMYABI75G{G|Ce$i~CU4MjG_b)z`~Imk+R!rXk&sW_9(UJ7YSyDahhk zRZ`X|3V{GOxo5`QpPek!Ez9~*V*SB&qYTMnmwc#w5%vssy$8^|2;4r4U0Uy4JbnSBKa#@;25LKvzTev8Ctxu2X*-fH$?W|&HMrLno#2~rXOAOWUOQe&9t9YZE)VRMb`_l8_!n^5WA1MG3oR0*#1F&%Vl7nmTm@yMCYR;+ z+`V?~1(kGpQsrbe(qYL>SoN#h{b{qd{<Sz6@=j+yXmQ4*~ z%`tB2QMO~v72ne{_uiA8X?SSn!7tluqDpNP!j)EIHX3(!Uu2f$u{N*v{=vn50W!5@ z@hr~q<)K@ht1cZL%~}gH0)csdlt-24F#%GQ8E4cdwx0WHO^2Yr{fixq>nehK9;qa~ z-A_yFlo)z!^LLW7KG09SUZ?g{aPrbWk0Qf@#A^@6X@xB6FJ&uVdJ12$=gEiW|Dy#k zo;|}KZt89uyppRD-NIaV;m7Uj=&q0bdJ_@PIE^kpZV#Gwn$MVizs@{!rfcvolodw)q~%+9ixVe5Q(r8WwYkuZVrwcB3YuT<@px+)3f{*^d}EIxePP-52HK z^7+xw>%!;sG^%7~U-yMebPrQB+RbS-Su>Vr`HD|o4LBfT;qj2&N+Y<;r=l-ve5B;* zyyo|1C2rf!+5Kyg?Q-KYyMCSxmugU^NqD3_7y9L;pBz)Hndyu)@|36w%w&{5awMyz ztEvAe5M5j953&+7uuRtCZ%FQZF+LT^)6Xejmggd>YiU*@q_hKuv9f#B99jL#eWKQ5 zCZ9ByrFk?qHP#k!tQOUG-$jO1v#%V>KEgkCwk#t2Ia|yTgHX?ROBD^9765+`ul0o7>@cc*Zb6?s!A#thj0YmFI8oQfkck@=Izr$~e6|B!wTvSV$7sB@sS32JH(D$2YHDt6&kT&DSo5Kg zi@oZxT&y(xx&MSKLPd0**r-OSK33^V!h zYOUw2(*4Kx2mieh5;!WN!xhx*7+vFfWh#IFUB$${=3a)^DqQDUOnr;0y(6Z>cU(Nq zS6o!f@Te$;@8g3$`-h8E&9oQRLmdh>`FL+%pU!d*6T{R5Eb1a8^ZbzJ!01@l6ND;5?<4Qn;^et%)PrT(_R z=S~??Yv2JBYfWZ=AhEyaXIQsO`xPJRuDKDOx5|k_bU~*vipxP)avY6>-}L~={q&-t zAVB`klD-jouoeE&v%(u``gEYWL_ovmJm`*9P4WA5D>bAhbn$4Q6z+uO+;3HgCvx6rrSKv>aCzRF$mC@u|B6GM~`23VC@E7v7VH%X&&i>kn4iLyU70 zZ2z}s2U19GW+jUa*REAhbzX(G@f5IeKL!mRla?!(U25HSRLQd)Qc4*3hTkR6=3_Q5 zX8(8Vv13<3o#|EurDQ)imDywsie}I5H!@mU7jR*%VO3E66$ysHB6oI~(9G?8d@KtK znV-~VZQ6Z;g{FkQoWseW{L>Fxr2UL_e zBFy$SC}d>wGy19QIvpZ>Vu3sJ;uZjjE=phr)}cb z3}-|{Gn`e&(8qnSpOw5K*(DjP(D+`0xi%vIO1c3#gg`v%b!H7Q2f%i9IoqCX&tkd~ ztAL?%C*yf3sLPJwx$-|>`~Kug!G;TaZ*MM=2@S9<&KfC1>Q@O+9!T8<#dl=)9S^cm zcO|xxuC5^cs`X-w?Ai8wZ|BEpa5*9+B=6VjA{ZcJ#T{&_{Zm@*ElHjhqYeC*HSu+^ zOKKy#Wg!wTD0o6F+%I3qpcU~;OypZzDJ;RldS3dcR%F($-}e~qF%DFWD|*8}PKp2r z>1Y=a&}B3Ip{F^NYXIcLol zHdy5w-1|Z*78!l7M;pufCp$yyqj&LGk7;}{JO5^BX*-~eL)b!4sO@)Lpx0lRNI5LF z&R?+Zz|1U}R}{!D7%v}9>+a6h@~N$~B0%HCwG$7=1zv>;M#DSJ3=z^hm$ly$9rn+f zn#dBA;>j+qEO0{4iJYeQ{QGjP>D0!AUsma3OX@HG6~g`W7xwP;c2Uh=TQ~*rFRh{B zsiC@!AYVFL+M3zi>DsF)tq(?iI%JxQm4CHvpP9dZ_wPBHV5ut-oy;7jGzz1$Nt6Ex zvMjlS#j6m%UHPA~o|MU_1nbAoePVvN_Ya+?vi_|<=g?Rs^Gm(rXRNlkPQPq~1nF4D z-fuaxCr>DpknYG4ZVj|mnEc!#y0OdgD&6U?a~4!BQv+&e<0Q&1CXnyrx2H?Ua39Uw zOL~>$i~Sx^VZm(-l%{lfUQeb@3MY9xm8~nqckT8s$czz&#%}B^ z{Q0ZudT(M;0&Adzwl))pF<40lhG}l%&J{^X>WB!5W)y|Dz=^DdZA?pY9vld}z)%}= zo%x*WImzNFS8?9TW;*p?rT`tt~)dQ{7u8jNb zVW_Zhqy5TX*$wo2ps&Q_%GK_;2g64ZPccv*t@J*6dbX0i^N8>q!-chnJD_+tbHZDW zZCp498>c17r$uL?G43EqPL4hHF_hO8567s=BhD96GDY4>r~|`#cnFyVEAeIg=3UoL zcoVJZA8v!RwB0|y-FD+*rt}J=v$8(U*z&Txda|OBPS%=cM`ocIOOwp8STzQ|V#~~& zs}=eAjDKvQSP~xw0%Ss5^NkZMnbYNK|9|@GCW{fGch(!8uVm@tMk|4dngS8On-wD~}7713y2l!)i394tLF za_XQOPLeBI!-ba-R={3f$BpX;JP>PQBOAFd?tx(;?@G|M6C)2}SJ>bzfK{N*>AB2F zcFT$W){>bZ8O9To*W-nPDxL?B`by&3^2Xg1-R`I_mo6zv`Cf`w0+(_Z%0&60b5-8s z{N}&R#t~$7_EF4>Op<#K?p|N22$)Ee=L_x3uhG>$zYluaTB|FXou`&B%2C>$Wf}i#=<47ru|KecMj7X{oB~_m zIU%9_hpZ_cHO6r_0G1tVNxF_UG9;u8GP?dTb+6mGem`^4Q|f0F;;DQ;jO=?v&6y`; zGa*WH{rc&T&9q_ROsXwNti5<|Xib?Zqi(-wSRJj>plgZA4^MODeb#3)vQQCt+etGjY^8+(N@8(+uAdQ*0pQ3csbM)-y5j)L+h-I3R6oqA{2Uu~qGBNXf@9sws4?iXMK2YO zSBWe$=F_aK1G&>fv>Dcx@wgE+r7?5zCd`Pl!-f7n(kvfj?6|ABbxUP*R~DX(JaoXYPH{1qD`^i| zSW!oggxr&4%{DK1-20}*DBZGQk<5Tb0O+w;xLBXYV^WFOTjw@~Sf?!0Bv;_+17ZHGk! z-YL=A-Xy<1=9hjJ{e2dysg*FuQ&7 zt1QEy=k-c?&?>!tO)A-rEM8m>RytnmcZBaLkFLiXQ9%d;4~FoYyzd=8l>)ceL$o&Z zkT3Ru&7i;Fw3ju(F5*Id^T(vvSoeBSn%P;C${@}gRiaZB;|oJIm-S28H;L?$6Rk$t zrfS}W>f<|yTsuZK4%`;HX26!_t*J((<@e^zxt;sSpoMigWFxejj*cBtP1owk4Nekm zC!SfBtD86FiA$W|c3RTNS^2j5M=L3qL0l+G(4qXAXL1?2MZ)$by;q`EOmch4xebY57UUF&|tJLA7D$|E+@)rUe21Fmk z1xJ&fv%g)nysOVfp?5H0cVNlWr&ke*x3j3&R@cl-^5H{{ltQi79E>715k=z7d@MK@ zBI?AnHQ3ag-h97%l~b3UyCtRj``l>1?|)O~o(4~bOj)kZf8FtokLCG+ z`W^ISsyKlp#9Lre># z8d+1P1Qw2ATJ6Csg-f{~wtQM{8lkVRUj#!!HZ$XeUiy`Bv*vQI=YE0vZ0ds66Te31 zrn>{z*L+^3HZ?u`H+RG{I+`I`lKee>$^SKtoknR{9TwA`8BZ}p%d~w5`5nw19R&=< z<0-C>0s_uAC+2P`ZB8onT{+`qCw81U`kAlu#cSnK)zz=JZmA#Xulj7u}yO)I6WE@h97&P#X)FpSjtF%dkS&*6d3igBmS~`CxRYAelp&H`AOa`)J}ARqg4I6$@*2dNy`{eQ3Rcrt zyI#DAMig7BewC_H@`TdR3jX}f;sQuDN}q>#$i`icu1~WX6cs(6m~Pr8iP!9>#HK&h zVQbXZ&~8!vcv~6N2IL6fMJA}qn0lVGh=*mr0d%i$p_#V*J;cQoSm{*fK^B7O!ea#m z7hM1S`%gQu>M+Fp4utZS!d0tRtE*e_av{a0hi!ss$BxphA98Q@|L7}8 zR7)RHc;;6GhAL~YR_c27_VfpzG{OO4R$2YkMhOj zfl@WS#dLOatbqdeJ<#n?p&=Y^xq-`*M7z53Vd>hh7*`-M-txrDU+yAXAWUs=R95{e zSUXBe<8sw*$;@SWa67@P;1Gx8+c)4;*3p;OM$j+{noBYVO7ZY1B2qn_m=eZYr|*<_ z+e3DpdbdP0`bvG%ihx1&o#Fy)0qKLtY|(qa`_G?VW~f+Rv?PThz0#!Zv(7Fi=eZ9Ri!!ka{k`&m(*>bb z_0fh)FcEaMYZB7POH0G&TN@Q!^3A@dw6YIH54dkc5?Gmc%dypwXh9*nKij)qa=o|< zZk2f*6r;_seDDBi@BU}_6s-m;ZvZ6R0^7_1h4{JnwJej?tr*OrqtDCAF2sB=_?ek=hp*rzW9rW~H)nm^UsW>$}r&V0PltDSUQiJG6*H!5vm zD6|-9)H+K`bAu>1(E`y|<(NgCXp)m_x9_;YGr`BF_;#%2T7{m%@t0U^hk5!A4OOd2 z&X1XqF?FRh@szBwQCWqBP54qr?%GYBUme7`a?UzoYsek)oAg%=WWAdV+ODALoJkqUd1hbLrq zm>KF{<&YVeSHr>?_E7k5zk?25GaJ|XeUV8}egOA766233C^jMjuqjbB;OEaO61a$m zLWaIIHa_|M`ThFhq=-S<4K-c%q4Dv{*RIts(qF#Joo?1yC%K}LX$p(5;g)kwOH>$* zq9jPop*Eqoh!1C+vD477U*pmS8B^pxqNksjc+WP_6z>zMF2Ugv8L2ns%&x+_@ZW(7 zR;2%HHhN#Fi<|0}7utn73O8P8y9jOhmZV`Tefu)DNzs{2-UwYNtCsP) za=f>STdcIco>8pu@Lh& zNRGPO94BX(mi}PFf)VD+Zvzz%P#^Ca8Ww-namFwM>pH#b#(^&;t#04GtwY8a9Ix1Y z{LCL`m6R@wg%NeHUlig*-?@)ot~EKOf4V!fi8Ga@jG8j7L63CCrC$O`($MRo&49&dF;Ki+)q;RsddS6^J#@B&40#WVGSPi0{EoAZvx*Vmcl zSqC0YO?ZZf-v~kEx%nlWix3JLWAxo4y5_u%0RR85X^5D`z?X+--uDEC9U`{j96bvg z&!Y>@r3Yw#Kfm;(%b>epnw;X;);H&Pp1pf_S}93AgdhS$rmLCHSUjqDvu&#bnxG59 z5AA#bo#~jFEgV5e9Yyu#52#N*;`5mXI`g zK|^D)^e0}SESO%S;umyfhIaXQtN}9@>yzGpC^crg#BoHoqTSqQ#k}cba<8L5kfDb7 z0PdS-<-lT-lb`{;i{LuRHJr9(9<44eH(-h!aeNCun_kN&FUk8=4&B~mX7}&wTjd=* zxt&Kx{6&3cUrvg0)e}(OTaKQwAj!-ul|H#+2l)xsd+&OO`*_|u)R90CWp0;$uii8E z?k4XQb=R?1ufF8c_r&##nfdtZ%BNUm_DO^~Q#)JjOZY!zePvXT-L^G~fS`aPA&qp3 zba!`mcXv0^ozmSU-L0gwbc1wv_qXvq=brQ3JBB|Tg2aCIv-eta&NZh#Y1(T}E208^ zw>0QhNnb&a`t7Z6VuDn8hL^vFC}es^;i<2Ruj?;X7wgSp6K=fSXlVGm32m?MA9v zzKYpU+oP$r=xa`1h)-ASwrpf<3S4Atv)3bEL)jNd4ISv@K{mm814YY;nsSK)$HViz zMW|B65#NSpKh5B^gzA%paIf1Bu>K(>e}9T(hQ&sAm!koM&L2HJ$q#qaE&E>{wLss0 zHt^4-7$aaNMz@5sE6_~*Im+{eM2F3(cXn6By`phVBjWE(&M)_r3{II<7TB6Q zyF*b*uF)AOJ!#u+Sj;vlzD8XZB~Qfvin9TIqt`HKgldatzgP;tNp>!j=3&?$uSzC2{;-@N%@CQ<6dslNWW1J$GBKsXw0ar zt81Y*+ONm6z(YuDx1WYFUXn)g zaCbo?kL|_brp8WL@DeFb0F1V$6;w!HL=uMjR6a#cr~H+eqo^hI=^nqMzOAj}OS{G_ zhMB#`jOCX*pL;1E8B!9##aYH0u{+#s)f{cl6=PPf%l!V4n{ry_g}h&Xwr07}SS|~{ zK)0-N;c8A~&&t-cA3&>F>;?0Yv|d)AWRCchcC{z=CPdbN~j)<%t?}UIHmA zu!KOOq#ClZuFwOMpKp?J_ zlpBs_``7<(4iFyk1G$+w=u-snqod;DI>RwXfl6Hb{yw=1+~DR54IhBSw>P3xl!Ha# zuXbYPNSa*bylidoJJYUSx?Oxn1I)db2-3i*{^aOf8G;3-%UGoZ7iXm{0l^M}(_xS8 z?yASIh6pj4#zPe!s%Rm=05qBrKrgNy!6Dyl znz6?8!nCLj1lln0-QAoeob_Px0i!C40!e>Bv!a1~AmsnkUDa8zNs~hZH1lvFn26q< z4ahrd%$UB*S2?c<(z{)i^(?l+m8v1GjOCdLo&oP$7I$aJNSwT}{GoTCAAf#~zA)3P zo16U<<*#C+qoKG#9}4hw%} z?eq>D!%3-YF=zO3q7}8Zh8Mg3z@DTZVDJEBkLz1gS0{gu;t*L;p&@8S7|+01Bp(8{ zXL(z4H-LGR+dW|bd;oIU870#feE9LR0I9vuf*zibuobG|{1=6K?e&9HCH2P8Y;HnS zAnu%Q?rBRTo6ObX#coYW;dt3gyy&EyiV{8oC#Gb2^O5GdTA8i9nD`j(1z*B40V1Tc zFKY65TG^oNWVhSIzq`UEVQ(Ro88fcQ%`^C7yIyj>&jOt!-anQ{2ckXy>0!j7@wnQ( z4;Sa3-vV$~zlfafp0C>2kz%DPDJNNj1C=&dO)x`E8VBxTbU1%tc_0Y(u%xOgF(4Sh ztgRw>0N5sLdwagX;sfwlpt((7|A)eY0E66vrD`+*9xE%+K#Pw=s=B_^(UA&%vY3<< zDIg>CURzgP#q3Zf@(YZRusyWE zf%bfs-5;z=pF^ZbkE zW^>Ye!R&Ct>3xl}zWg2BGI63%N9|ky*a*O|P%4>R-`D^)RlxEQ^nZW5lVBKN8Uzcn zH;mQ#Y)t6qWVa}v7gDv|6Y#eaU(Db9yLT~t1FTqqO%oDXlDH~4G(@Ai;^mK@q`@)5 zgn~9=gh=*Hy?reJbNQSQm-I)eWV3&B$jx~xEjlqN3H?Iu^dn#zPE7P^*9Z?)Hlesn zCgZlnWH)WP71l_SFj9&VLt@WAYp9-eB4%(g5dZDS{MwW4<=Zjb=^CN?*WcOuqX+Sy zbZ^6r$rNbh;T__!Ot*d7TUDnWZhK?Hg)hY+OyI<@#Go(k-pcVo%WA|*&FFM~DhX@p z7?mvn-e9XL>wC&{8qv`W`eV3PEi@#nBGtvn+}M63$z2}z;2M6}YTkMEBAqapVBMhuM`!m@F2 zqTfF&n*JEPkUc?j)Ush{dp8i}X-DT4scCRvvzLG!5)IzweQ+)YB4*@+u>*kh0e@@> zfc%5p*-yi%vmufNISM5_Z!xD56iQIPxSXm3EE1f*U(A)Yz)b%y(7K;oVEch{=wgqn zb8<4t|4lmqo;FfArkjqX=6N90e_9{nJ93l%O`xzBD>>=?^x3$+i_8RJ^RJ*U!FApk z0Mqj=Y^6U=O$xhSvY;2h4|Ilg28O*uP})FC z@Cv#uQn6%XQpxS32bT@_Ue`D9hR1(21z}f0Q0&mz9H9*jMb$MZ-h*rU;Vv>IY%g*X z3J;*FKYdATuMRzceUbd84I&O<61$L!9$g-QK)`5CQ2UcGG8{`9+no;Ry5gzaK$K+7 zDBst=b>_QAQQIT~l!>DE)NBz?SN2dlV9RSce)LLywLSfo5J}nY`#oV8N>&wVw6JpB zK385{V8G#*mWZGkNNxZ=q;j^_%Fj=hpvBKQf`*`T56p>RdV@FX1Flzp#iG1ccWPSN zOtaI4+?|K&+gekXk8SO*t&h@eY!w@;L`4jH zZExOht(OVY0+YESrSBT-RL|WOZkej9b=D|A5uIXn=gJoKReJnaZ$S1xErUfM{GJ(Y zG|J!K@VZ2p3kN}+Ws@>c+WC+s;Kf! zbRu^{Eml!muI$mE*!;IJWku=gSye%yI)zb!oPQx@er~Qzv*YO1GB~8g7MmX3uNKD> zEU&A<%V9iGIK4b}wR`{yC~zkMXKkLX;jdmM%U*ROKnr%iV+a28XmJu`Uzn>zxqwKrPnIAR94E8sJhTG>GI zpBO+^nf1=bRMwzj+TVto`jJ59CrcCJ+ht9#p3wnlMlBXv7cp3Ak0pW@rhE zi(_edFo0N>7T^|dSG3nBuZ9>|{4BuS9Kt-^mcdXcX0Eo~aCi5BIq5_cI72~8`0?ZG zngnN(;`0mX7t*P3aMDrgZrVU#z`^BsVD{Y56q*dU8m7*u^wHV1^K$9DYVcq;M^tJH&4u zQ9*xmTlyD~vwXZ zP&ksw^;n;6YVZLb;C2tvWh>1k3>)*uWJ!IY!T>PH9RkwS;Gh{_apKMqt1o;3?DM#m z;G(XyTD}7Es-N@COh7Tg?tUF45XzbBu$K>JMpc2~<4+))*xD;+0#OVU>W#Ls7!1WS zV809{Tcol#LIv~l0$D<%3mpbEwG`h|C~E0C=uv5$t*H%%)kOsb9g`{tGul&`mOk>f zdup&akcX*MxBcnGZP&lp%?Ju+fd+n(DZnTQYzWQo$~1^>ZkU}XKYv!wR<5Z5nvBk% zpO?{M4zNZ903c80YJVP$0}ub7EuQhb?_pnWO8_<=0Q}%nlAe20Y0@wxfgkJYj=Sq` zenb;sib#!s4onhbZn^OTP#z30TWgnolA$yK?ISRDwD?B)5)YgTIkqa}63tWuhx%TiHFE_PS z&J^Iz?8t)Dz1I&lF%Y@@IM`mb(P+W2d#N0vS-?XsXS?^u zZKi?o=WGcVs{^N~nNp0^A^ys4B(sZSZ>zx<*R*7x?=TCj*Eqtt69;V{DGHjl>7f=_ znf-mfGn+akh5CC)0I~JzXLljhL8}oaJ+CPBu7bjo15Sjk{3B~!2dM>9)|JV#c5RvP zg}?$EvTKNh;gSlOb)?!Si9xD^6C5;=jwx2DR6(i9TaFXVx`6$Z;~ zd|Q4Ib*0Wn@au?0R%+$gTZ%~TYS?}j|8zJC@9x$v6qj!m6KxOVt1!u_Xi4c_>H@`- z@p&>iO<)%8_*e&t%?StpO9j`n3K2+Wfj$<(-NPd&sNqEXL81IG0Ps~1AZ8dCxArV9 z#({{Gx8Z^Voq;0PclCJ|^PA7)Ik3WMcEZ&;{*$iW;v5d@XZu5}SKO|y#DFsjkLku_ z$_AmqeGp*SH)dw0szeM(&Iv&cE|yRxP(Ga_j~ZUU7Z?wULtwwm)ESr}$qGbKz&*GF zG||#EkE?)E0HbQyAjtaFkKy3}AD<4R!)nUMM+N?v#B-7uFlYo}Tl62h{SxAn| zQ4EZX?nl-qQh$kero#-uD#5vXZ;u=wM>;5yt2vTKk9Ev3HGCnHIIpMB_(=s;z(Vfu zp4WYb+`O2+vr-Yw{bk+QcASH7Zcn}ErMXFWO%_6)?(S?yj7cX}I3%U7(h)V8vpuZC z7z;A$<&5HGwq%OUc?xQ9cr_YaAT&r>e$|SjLZnqZamfF(vw&--;?K`=p7tl=8o#gj;V-ou2hGpyVAM zmV7>8_GiWPjnEVl3nVqf4f9Vd@-;PUpP>v00HVVH2BQC+lB8r=7VpM0+xkleg7+V? zHMhX%6v&!RF3WoFZ;teIbe=~dWQ!)E++UIcZZ{PRs6SwS02c@ofNk}i#7!2ENezGc z0dC=i<}2?{e6D9Fy&oE!PgIMX(-{+Vbd+Xm_r8GU7YH!afk!n0aLxN~zEx)PE@v`c z@?Ndxm~rrEyvMSCXI!8ib0jS^lgD??KvODz?j;Z;kdToCI2=ynWex8=aaP@6>-r|n+<A^v|s) z`Sf8#sSpfp=hN8)=b3zzQl?P8bT*l@yJssa8m5>@5lgv}grvPs06Ce}ntDC8ZOT-G z!%b@L@BS|TG9H@>MA>PahN*+EwHognE2(5k-t+~-uIw&dy(nBIg*3U#K118>>zhVv zHS&s5i>qJQTb5P%4g{qjr}V?e8C(c386lo@3Jqvkzzsj6HlUS}0~(WO6~DK)2-uhY zjg7N(7hE>F??CHPs9H;F)y5L$w3H;I{RaXZbQ0QskT-`tdf)Z#&we<$!VTvA1k~kR zz&$YR78pJ=!NMhXR2e*V0#F75Y;@qd9kA58`~yJafF}l*HkfvC2Io~zn@4-rUpdMM6YXgHY$Ek9GI!31Cp6lAddz@tNmrGdv4s! zK~9OJFQ1|SG9z1WDFHwmkQ)FzM4>@H*flnWl_og?ARQY=$93?U0Fj*^D9hb<)i1$x zj6#X$DyYc86jl;l@AYs9Kv#Yjj4<=^rReDCX^;aIozydP{DB1L=`i_!lhaQ^R@FRU zrpgyaY8|+p055>Tzej7fvnh?;rfhb$E-+UA#K|e()wMfcPY3KAv_Ww*f))Cg$=XQh zJE8<2pZtzeG+Ak7@s$60&{Iszr!14B#=`N>InybcQyo*Hf}*!X$c#VNRcbOdTQQiY zas3D#ujydGNor93bv=K9@aB@!KKUhcKO{21JP<#6jExbnbZZG}doRJX!r4=)>> z-q95+bwIbggHk+o4PPP(FB~#!Rx>gxC_44QPP6e5FUBddr>PqWf25Qz?Y&Q{9ttJ4 zneN7DDApY+sFu+kFf@MDEh9E4RFbf*;7iuJWy?0KjN810YYYpkF5xK`+FJ-LX7K8s zswFG-D^TJYP&-rrQoJ~F7Tc}ia)?(@Nt#a7EG%(ATjY9fY&FB^XzslNThvWSMaAr5 z8@d9#?utts3}+g7bl>2wR{59n%=-3gJ%WQ6kd6pC=5 zR8A(2s^7l3OYTa)p$7MMU;X8n{){9X?a>FcTX=?fkFLBSNbADU;QUU$-zIR47X!%P zV|quU5yX7;zVd?i{wM}Lqt$tFpG@e{wP6t$ZPiOqIX-sClJQ}jLB(@i{#oCV;_0#{ zuf0W1sO**IU= zytObX=^J;;Y600UgkR5_=IHM;Ut$yI%ePp6eBK%%8ONj8^>TeqJol=dPc@Gidx<@S zaSLZ>i}OeK>U$QZwmij@dYkfPbO+Oq!YESVwOH$#f{*ZV-Dzxy&r~3AzoE>P9Y=9l z>9#-O?2k%>^%@4=>%%LZ1)$BI2N?O^SKBMPpsYI4_WVREsg|XZ@c#TdI8fz%#!CS& zl_|jLFFBdus3e4yye138dCKG9GHmW6$>NnU5GDV*-!-6qYvVo2St5Et`YUMTFc?a3 z{^*`{V0$Yt;R%L&Vx=hWHuCXcr{4WBi*~c*c*QD!<#*AT$aPVjj@Bu)2YmSlxk*Ap zmC;}21hjN8r`ZE-M0Lu;7aRHl>^OFPb|`cVTa8Rgv2NA&8=p3QMajqeHu*dz6k=-|=(~iLQxRTwFM#glX>+1yU zfa8Mg@F`OYL;z@?fZ;Pjq;xWw`vP4A#7O<$nK&cgNaGV+?wh}X!N-S(o#o}H##>-* z%{=^)AnjB|ZW zNFW){r}_ylOc)q8(BXDHKJ)@>7_Q1n#GBKBq^I5`k3b=rQbeq$VRJD@xz|PSkY0-5 zac^TsBjC&CZA0}H4tM<#(k+WlcC!jEOA~st9MTMR7W)hP|j=$rPC*m8_mXS6OA(a|qsJ1rE{YAHL zeX+e&dc7||8cH|YkvJF!A1?C%K|JIDaYkufiUoo8z>@l7EOEHbe4U5ErG~WjdITFz zrpFyBD01b>HSvH=3pBuMtw6k3cef#!eLXqp9am|&X3EYXP|tB^wBn4SQbS!i@-pF^ z+#G_TwOz+fWsT#uw0seY>JgMpnm6p?3;oGpRk`sL(Q%*o2T0E7YH{JB@p?o8$OV|C z(7in;5s{EEy1(8c{ml3t1ET{?s|9#xd482F06+;eIKzife4E!=?y;zqk2!(AJwXc7 z5k7khC(s{)lO+XM1j}y;oe&cMn^b_oHYo10V5Zr*GQ9cxr;Eid2^vQ=xXt21;m~<6 z8s9dY;YmQf;c?#)NVmwfe(xU)o{Tz@#&K@58?NJud^$DK-vv>Oh<>8z_OnBeAO z`U2SF^nyKN2J{~QQI-JFPE|Ucm$V+gss@YXf`QHfL{{^*x-JS!ECy&Ei2zmh0Ac9f z^au$d;cpA}$45{0s|85{^lYRAB)&Z99W5CE8zn;^mQf{F`DPGow*Kf}Yq%uyx4tS*!e|&NRsAMIMVq2X1M~z!PFZ{Iz#t<@PN*K^W})8**R?iuW%L)e!%3~ZBiNz#2-Zy z1_QT35RTvsXiPO?35-tQcH^g{^$-NGd^*qjFTA`j#fU<@=bxV#2{CcC>7*b6)^*(a z`Wt$av2sOsM>A@pY#_n20to)NDeK3-4^5}&MJlY`Y;dL+mKe2RKem6|;kkB8FjepV zzPO3|&)|N2aER)YOFb@qN$` ziSCwlG>!lLJ4&=$k1+-4y-8@RvMBN|_Uh@hxt-?fBU@MHaVje%AdFtlwYYrSbI{bB zZ70!au7moa{ToD33E7@P)!*UJWOI#66i*PJ)6PzZc``VMT|NM%uBiLHit7~)BDbU@&dG_Hd@heu2|YX-Yq_fnhH=?06lDCUPw>BV0~*jy6bQ6WHEa zt=6|Hf)CbqfUVk+N+?pc#fgm&Xhx2dCaG2|0h=;(=&C_mbg!kQWyYRBGI6MTyT|ff zT>LP`zIjo`6l|)5=A-sHs^BdBn+-7hfZ4y=-42v28K8lQWH76H_kJ`sC@3A!?BALf zH+q#cu^?1S12{dJK-}`vOv8y67JGwF^Wko|DAAg=dPp^U982%;i0O{SE2n3}VDK|f z7LC!lClH2VA|O}V7DOvFhZ%U5&B*++avKCL!KUGurByS4N&*cy><@sN8!vO#iDTm8 zQUe`?20ATr;T8^ z6$H7lu(;?OZGj91^~1KcwULfzidW3&JwvsVpLh#tCR+KyU zP(tzKo9C2OD9LHFrrjDeuKFn=&;Iz1U*Bv^GGoDMd0Yr4F|PH%Z~TNQsC2zB^znr( zBVRd~cj9e?T)3aypQTHr-!TBDnV&wrcy@dOK8nDw;UXOzh~YfGIQW#`pLZ}h_W1Ei zEEo-9gTP>X3+6hFf5!4D)qXc>JOOmG zP+D46;49i3HXpfw5k8@gj@^^hP{g&hwQfIH>OV(Xf#5v@;RkNOec!X&4hsY|Z4Fy& z&pFT!B@2v|X}pmy7S-BohWeI3%9?-~?*H*E19I|n1-S6TbozIkkMxkKnt{!78~@9f z`W>Cr9ClNgJRHDk7UoBiGf2*HL>MLz^0aHUoFoqbiOTUNAh4^v447S}EVO;LS?x-O zTLZJX4SNpYn}QG>ouUh13TAYD{8)AcGLR_8g>nRS${4};nIpXMIM|V%w>#DCT{eK( zw_b8P%9HhIm}l}9%-Kw_>X&4oHCN^WUSV>kD!@qq?70P--h&P7&*S+VAqh%5=BuZ6 zho2FuXIGnQ9ap=eLDp5(#OcPmgdrCL<+L;wG%e(^FF2po6wZuNpKD2(A$qn>W3lq-^F`gfrIK<+$$7y8% z&YLW!qZ8mLIYEKYBZmTHSU`%wH z*6_%>WYhZTQuTKzM|IAAqeqI7W$`5TU3M~5y7~mi6g8))LP<$a=X5C969I(t*90P~ zlGZ$hP5ne6A-a6=azKnvAs}E-5cMxr_Vm33!;Dnt;zRcKLeu+;ho7mHZ`^)5ehcHJ zM3-iK|9v;%Y+#PfoD>0*aj$z6mF_CRlx%M|^YV43h%_>dj?P=0-*F}*{xK>=W&5 z674EC(mvO!A7BdPux9ZiT6X(YI?0(264QM8N_97U`mpQQ&LO#SBsWhUN;Fl*5g}Qi zx7roa)tx4gQ^Y4N4SDW*;;;CwOi@SY#q2B^>E~fW%E2FZM^+#RdoUS6?CWF?*eycEwoR2gdQguvUo&?9kn$pB5 zvO@0&Hr|S5Bx&6TBSNuIvbM5Hc@?aLa+5vVTF*tU$DOo~&!Bf*&+2@hjsB>i3r| zV#|Y?jnS2G077G^t{x+sOivek7VV6p6-({4k9#s#!u3dKKqM$p-$#HCP5;$U}1m9;5T-+v{_^G=}>p_J;Q zD(MaulR@V-ktYeszdB!ExeJJmb`8LGld5nuf)g4+p0Y3GC7QVG&;Hv#``}F|8pL$R zkA4;RDn!TepQp(XTTv82S|n@Km`rUd8ayaQwR^ucOl*73?<0(3M)MyF^Ab5Q1-ubm zW^b12Pjo=CUvC|=J*;J=q=3!~dl8(iGm`%n+ZK&c?EP#~QL328+K7kItPLrj_^8Yq zkSXx5@2-x`zzkE7bm2^ibCXh;yMY(eMbX@{`x?*fdL_?_dmu=7uBIWa;35koE5X^y zvShe^1z5Qw?f_x^kHLHo6$Y$_Qa<2;_jhGqt?U+(AOvd<9xNrwC9Fa4XFEG!Tks(KxpR6uD}a?gMI^%C?S9qA=axO zCw9?pK7P{e%QqDvc&@E!EV=KTWXy_fH}yuV{&}cZD`-|GGBfKQrr-GRysO-6(8S z$VnC-?U{O5r2CLOngp|J^O`iQsun)>o;U%`|33@H)4;l`)>uUwN^yLW#W!XT#c^F;fU|MZ}2 z^mlZJw~eEaZ-jE(buKB!srhA5%>UnC*}*)q{ENU} zrblD`DN+gv~o*lav`fb!5$yDqw2o4|LAYo;XaCTM&?k zD#&3{gjy|523cFYkID5W__HdzB_(iD@PjD^_UTF}?soqmp;PYRWpquc*aeAaNXGQ- zxbx)~v$as=R40!ooHw9+^^v}706B)7D&qVV0o+c zQZo9d^@hS8E4)|Hdc#~2vD3&XU&RkTzloC^p(o{dY5*CP?TcEbPEc|t>n=HrSv^Hp zo^l`E+-NZo#`N?bGwaKv4Kg|D^&h56LEj5D)C1s4G_p(}sg_)?6n@6=DIr7Ui2OW+ zfQ9ny&ASZAj*3g_{)yYGT}$>+0)ddbB>H$l!*t7myg0 zfizMDHz@`47U5O6>QFP8!c#NVb0yyqK44)mszyD&-{zrzloWh9D0S|>$$XjWi8vsru4hs83VB#@3fxlE0LX4(xWKCqA8R}%ntpj2m3>|&5Q(=%E|YVG)1k1%Qdtr z&r9x(WcyD|SM8N-So*zBl7|6O5Tx{E*Dy?(7eOrM8ehKNhVOouJu@&@q*Ii`5mMra z6r>n68C1eE>tk;&7iTYV!gRR{#H#P*tnf`Yxtcn1O@i0c-%Qu7bS_g=f#@%f6_ zW51e?C`Z136roKJ>ocNc_svII(J6y+iKrpJ^Z8PEwPLkiSG8T5(8tk^>7F7--2%0F zFVDV5-)n69=fhY?O>9Zjp4IoNzE8I=OAQ+iUiB?cr5a0xG3g5#r*{kb@BAD4 z%If;Ny=Wi}ZMF+e65mk2W8251XT`+|@d*qhsr2PqSx-j$vRN>Gv*fa`ZjZZ}ZLaIe zDIvTsT#-bxQDAL)AZF~-G+HsVEqn5I-xz{4_Dd5|cMP|mXo*FfKp*-b$~?<3F0pip z(ORrUsuDvkcRiOy-_|Flqo!V}*J>Z$WFqzHa(jb#$7&dhIX}HG#^qkx9aKZcHP(NA zsBDfb^NDs(Pk~kSEBVt_wOxcypu=>La!LFJKiKD6sdPIeC(qFDNefAy-M8oPFgnzd zy@?H}x!-TQ&YdwzKP5JWH)W5af4tszgdmJVkXrr%F=#Shfl3_fxhaKF^HF_6TaMO3 zSw5)-Au{VRr`>nXTePZSN^Q(Zhg>-S%i2dx9NPT*>h%H~;xF`b7G4RsO;W9j>uFBJ z-;xTvdUYNC;CdvOwdQ)OZUlcH)%)B6@gv$Gwj%jJSePF37**wDk4%`&N3o!nggM~z zl_$LS_e;Eob3u7ic&MVg7s20iH7xaR%{r9HWnO{zHXFRRT{`9N<6UXYWqPFbA(R>% zo}nHQbZwRTg)d2KSX0qpk-L)`mUX$V(wX^eOtG-BPX={iS8OfwhV?2B`n}vWJzc)= z1=jWG+h)oJt10^Lf$68QHjh{Ji&Kdk1BhS(`p%4%5UgfO$b5fxLSR=?wOdfrfz3qS zTU#WiD4pn_U1n%PbiKLvU^TO5QX!j25w<2iKqI0khC-R?!1ba!lF*Ith&Mp%)y>XU zF1lB?V&@h|+MCw%>5q^|y987`hR&NzJhBfljTeRfk z?JA5)P2u6-P({*V}s_Bsq*^7OHhIiyrMw3_9((^wo8sus@N zF=+P&2@Z}i1ybbmQ;3^Lhcn)iI_v+eSo>Z2tsmO+9CS@b5ydAhz7NKul%=sZ zvU%JIu37(bc2-}G{tlJpCkTlVjuFTQ+>#l$FQ7q>c=fl)UCCdmt0Emhicjq!W7e@Yl-@lWR(*#+0t>2FJ$rq-hs}Tug4sGGvKCxWQvyYpZ6oo} zd1ch7-yJ%g2 zgy=iBG&Vze)`rsLy~m^<H#EG`0JW;5>%GAPJ zAd^8LLQcEt*~!;$dr81^`$%ofE7X+`fsq_kaXwn|_5QQS80G||eJ7|w`n)Z98q(meD;hFXuIjtTLVGt;ER z7FtrFl`MU!ee`ncEc9mUs_Mv#PqcRa!Gddguk{UdqvnwoefA(H;sgEg#qD6c%0`dk z=jSRUrLrnf(Kx59AWTrbaESiS?#Z$%qBV2d z_1HPHBc|x43gHoiFbe|bS1eNFKXaQuvN}lxmPnzJgkP)(D>yF=+g!eOcK!tA$8(SK zEs9j%>WREt9bHtD)%oUA(SnwEvuez%>+7=&AGhnk3vQ^9FHKKt0C&@%NkV342Vms{ zyNcqMBxD@-3JNJMY^Cv)XXNR4UG3%t4#3KPFKBC7TUJ<`%?&B4*ptE)*zFgxErsS@ zQB*&w#%cxf{ap2CwK#0BUE51E*4kmFsG_}eiBDsQleDlMFVq_{7*1PRK*bL65cCRQ zm^c|Ba=Y1zX}!icpV2fPICya^5y^UOS`wdm=vqUNasIX=Q$a6dD!7?oae>zp9yt(_ zh#(k7ujQnC{mfh8=0ez;fH|gUK|?0eGNH~K-KRJNwiQoZiabtyApR2rHVDP*kl;C} zK%KOI%aHGsV7xnFrLvauL2;vC(Yb74t#V#~_(q9|*I@KenmO8lU}T@0iqEe+1kX2_ zH`KSmoPs#Tr#w(Rwh7}>qrzJ-P^U}WmTM-wuJD|mf~c>&J72qw4aTX81({s|i4n>i z;fpaLJ$bNhiqGsO7P>rvuO@+k0Q$o8hN z&3r#~oj56S6H5!__OaE*8riD4TVDIKA3)6Ue56%Icfy;@cd+YwD_x!*~rS-{;J zacXWA>1VX{D(K0ZBH2g=JpI)M}8q}?~bbJ|)@zf~$PvQH)vzQ{)S zQHOMvOuNu`ePzSlbL>y3`Us0@bxc}VOv($=KMH7MU$BUF-rtO%I z`i7ArCJ^lvgW#C44I%bRMCvb__>-YMI)nZ#_R?6=B(GUAb#7i1)9*)PCbYMuK953E zIi=xEyb2fO&3Qjw2R4p8Of8GU+On2L5fS@7S>o^_B_abUY4*Ny55VaMNo}>iv2Q<| znoo?@>roGO*KJxzmfc4G&M!5lKjHhvs)L+y8*8}CC6HXA$C8fZPb3i@5+qnCA`1}ew2H)vw(mK|h==fJe>H4$R`;IVBy^J~<*tUv(=HFu5q5A!%xBw;A28sI`>30 zZYn9#QEa*gXI4FNel=&a-#8&^)$i%vPhLNmmFzJ`wp(LHYh=I1z90{Adgp)A933wq z&?iMvZGqw7eM;?f5dv#4yP}`IJ6khxn%DdJH(jxh%d4U8k1cO0U2{n|_S~$qestxi zonEh*-=uuQ7YQ@R?mu|c4tjK9TU zdpk9VZ#U1o{oq&J%+Nml{8X7-HePs0^x~=0LFrZc`n{zopVeA?9Vg(6`VzR~n9d}{ zQafdDCnQ95%**M^y>2`DFnp*vfE!uQeOem0Qg_F4Ty&PSkc|lQZD;RvT}hDVU_4$WcwM`--g%Yn={OU4MpO)0DvFstt;64x1) zqr7Y}VN2SHb+764j~?UXaKngB>dRkabE1e;>KT6&>sT=An`;g8p6|8!6Rv}m!tg4k z(jK3dc`jDTiaO<;BB0r^g!*hWotvri@3A_FA8_kBDS|RaF%{BWx1pP*)KAT2XH(UW z;8mp{=KP#b7R%@i>h3J1kV-p!`@>;t0}R{9hY1UiIM(!})?>x(&3jO$pUys=V3 zc1jRzr9!#gTQAs8A0&I|FNk`yjkL}AH1}}&3B2@ew_4KJf3pS!Q$3(Fc~L-EY+(~L zXD0d+q*Pzqzo%+n5GzcGziNVEzRD6lw^|?ID4~urs5`TrekbVV{xL3@dOHk54)u^WkrM9M-USCrAjy%39P{u@m7GNSyJ0) zDNmG4=8abnQ$FS)BN;D$$R>jS9j>Ho7lMSCJ!8R)?C*2k>dX+9_l06|@@tk3#n`mF z|I78B17gGd5@96esu8`RksoR$*?%SwbPGNcJKWJ$)ji1)=l>iXCM?bEaL(f&MQI;$ zJt=@+{#BPbskeB+5xr_g$1+$cj_(7ih!GTGMA^ zV-(p4!BC8zTxxydHx#Cs=XD=QSYaM-&HQBu zLpm-BR?0Jko;&8Gc_~Sgr`>171Ij2+wW9v^HU$VJP=VRnb!3FY9vCCPKfXN(7~9sO zV5V(VN@@^A>S-;C7bOZw!1dRJJnbe!A9RFC>PC1;Uu-L64O?N9O}b=odMZKI4g4EM zT|Q5+8Xh_-^2DXeThGX>B8)qU81);})72`;?P5-JwVYv=Uzm0HeU>P5raV-})^7jU z-hJq9iNd|11JMk>kMM1k_Y2yml1b)oV(mgAYhOEUPX2sHB^~6MV(hY+-65@Dm8R@Q zHXs_e%nET!cBRAnl_F8^pLvJhw$Sj>0v&~4W7HodZa&XT;-f$|={?7S7Y=|^{fbK_ z3{K#C*>BFTPGkE9u)~-tUCR{+LwHNA3FJ{*YmnyRouaYnLRv$)h@E!c5>k6*-#dI9 z!7ga%OEZ4heSg{Y(w!}wpM>oLj2idsjsbbfy(rSmFm5kF3y}*W3Tthc(^_5PFm{ir z)1N5)bJJg;TtUQD6ox6h*42_9V-Xr}qljSp#?jgzrJ^vrzU68y305ZdFK+$W?pHv5 zac-*KD8wTm8Zoq-7*Uo73-6?`7g0z5igLFxEcMC{&OLy0qx6k`~&-0%1oj<=ZWDE!6X5V|Swbxp6 zUh|sQb)+@0@|;Tb0ZFml$FR?ldKOwC`@Al(>2qiIc(}GK>c5NM@7mhx7M^$hB!n7# z`)TIulUCjB&!>q!?8=fqwiTC6LWwf0xD+aj%j2p_SfV-REnYvaH}JAnvdp}jV{k*b zklw|?;NGNb@V!#D&sP&e9%=7cb#&e`F`9P^UBf!gD~skFR@!_Dp;C8q8Bvy(^ONq7!GyiilQRKWuGtx161A;)-kQ8F*MO?A&I3-PdQo$oa(y{@7@ zu?z})cJj_Ws<*-EDC%=jzch=>!tqsID-;WpHe++iDFT*d6GOE_mPi}i&4s$-Hq20QzNe;@S7+M_jAs;>z4vEuAm$X~Zf{$%+f z!^&0Yv!yGkAc9Evj-*Mfqd|N_D4kB8S}ANt)_Xiph`LuR*a-inb0}?dQ1yBGz>A^5 z7CEKge@0BRmX$ZNs_ic6Xy6-yckW;5C~tey7S;5B!Pkh<_)YQ=_2H5RUM~CX<>jvH z%gecxQV7fXOy3BTmt`4~;4QJ*pJs+vgH4~e#+w;UQCWbCFW>DeVlj~Z@@D)^u?2xR z5??i~(fi5c9U9W^ISoED-2zgUuB~i@^|N+WKhEX71+Zz3&?6Xo>ic&;zKX#Yvf6o7 zrcN27p;Kk)de~IQhFF{%71X};4SGpLUw$PS-Eh5$dJ_x7m6zGr3p;e3e{01%NwHq5 z))8Cz%a8t#*{_H0efzDBx3K)ks0ztDNgH=rCbm>AMYZkGtjo0wC3$<23`0D=S$R1` zne=nEDx+tEuBmWv-o!Qm6Q>g<&w#?N;4#aCL!+LI->-T|`4s16rhfmCtPJHBkOuxHcJ&A!>$1=-o<6XSfrSDtqU#6qHL=!cGiPDa&^&rhkP8JffRe zseS8Ri8eP01(%2X)3>me{M1J7lqBooX}5nY@SYiTk*X>4Z}e=G`q-#E;}Tz9D@&`S zfLbh!l&>XKN$(7;EQfT{SKc7-^OwibYIX(3Gu!(6TLdrFs!;~M(7z~P)9U&p+CDR_!2=cS ze~Q@l^dYjO>D5Gci3tRw31S`h>z`N;NZ73F;+T{)dw0x>=a$G3)P6l`)_nF$@$I5w zRC(8jPjN)v*Zg_1CbpJ-Xj_Z1esD`Zb}GCmqSaJ*K#Bj}dL#{ZAx+imistW~q~~OQ zr*mGhIGn@{F*5Zdr-phY0lbs2x{yZ5nP^Wo#iUw-|1=O>iBcTtYlLsTS&CXsFHcGeR; z5<`Pa_^aB~4JynUBwO@C0&0Kf!kj1cEdeq6_R?%0i6O3eeN@eD6>YX+j+a$9CWl&3 z4Sg!1>a#v8Oi?S(%~XRb$^GoR$1!g9n9Ezr0CsN}>1;oG6!(a3{kU7TyWCo5(%t9w z5=$Qqh0Qan(nPYJmubHsISm%30!YJ zz2fPtio71dU2$LCSxwyQscgMJaH;ZB9)5EONj?@F{EU){d7iXdZ$QXUt&z0Z9v?u( zN|O5UJCpN1UQ*KOUA*7kU}l1gKj@`i-2%3j%5g5c#mpNTE<1ccrd%=^10C_T2;Pg= z!2e;7b8{sCSy$UX&(5PxRZC3OBK1^C)~UF-!Y3wNv~{+sQZKWT7LGgi7D7Phve{F* zGt(OLaxb0{+_HA$S{*i3X@C?~y}EHNifzM9d>m0x9Ly8b%h$7gI6!9XDLiZ6wJcpW zO5+`B=hQ4E?R0lx+6ViC3bX$Hq^`z`ZuiF4(JFR9^lvhqlj%^SyKvX7+Mydk*ej_4@^lC7PJwTdZawX@&LAX{DaH#2|QZ(zoD=#HlD zu|CMLEGLGt^DXw|q9Qs^jQ8JpSouER zB?mACnTUKH4+fu3I2lMTb)SJ)SvYu|0F@heAdRnmueVowZRmr`ejj(7)6%s%B{|g^ z7oOXUrcIp1M#ALBnhv!e#n zKcKT3{H~EdQi-4D>$FO`obNc8j{GF?ZSFYUX^ddjLx$T9Xx4trdr23_bNJu1=GvM3Nv{aD4K*P1*{vQwGw7iMK@Qcmv%?L~`k8ha z$!>lrJkXBgaDE;jOj;gpHhu^^w)SHTGn-Sm6a+Zw*ql6Nv+oK3gjO8PB#v)A&c z4fLl=U5CpcuDkDyb$;#=$#rBVpEK4L$d^n0bcGv128aJ@AFOtdY}nt#SZ$`wt|QXJ+{q*Jp0kKH0`G(_?_d7J};P$tY zk6F0l`Ho^2_sd-Z;+|%&{In23uosFuR|Z7Z#|~IdPQKV~xiW@O2ioME?X=2)E7w<` zo`bZ56oYD;m5So2r#Y2;&~qR==JIDa{PP53J0=#+hFUY1J+E44&q{8M3Za_lWL&h`mk%_>hP2|hDZRh6Cb=PC|b7>fk{Ofaf|l-wT%Mj!4$lyI%wOeDm^-@Xt&}o_&WY zMDp;w84|8gS7LTHQoQyMWZDP?rG6Q+rj(R#lpJ#J{}NTCBLIi>R(SP+-wF=jn`QIY z;O#Fc+~X=y#m9d>g10^xIHsba@%{9!GJP=9 zdbk*xg+82xA(+9in~9S;Es&DBSQeRl$WxDnt|=rz!Dis%ej(Iw@oIQQ0ZNz5pe0c@ zS5sYG4O)h`p+^E3tggE4!K@Pw)1Za6(gEF|FEdKqF3Zz8TBU;@xSnlrLGMJ_q)?ci z^U)@_?o}$5TT|3to<4@jTsYfOfb}yC=GI2PW~9l}28=|_G^ECZ1;m1XNE0@IH}B=8 z9fBFIz)fXI^T9r(ONeS zWwR9>gz}YfTz3EPYf2wCEI4Yy9Ec#C5nGn8yu>HH$o^ehHOUxMc@fEc^&>_N-AJM9 zb#)VcPUvG8A{gn=cpfpww-8qJn75B$Wx6%^oP8>kd&!Mf8mOo6-luad)w?joe$!2+o zPNRm@lFEK>=|VQO8}<#&%k#(g(Bq&HAS5l0oEA!z$1@NG7`!Y`hzuw$HY z;mubnd^5}j!bx>?6^Q1GkL5Omh3}6NJ7Nl$m5Y6}wx%fH4F>u;jBt|KI6>|n^w91c zIZP$3`5BRIjJJlZQczO|UY#$CDwmjc5L=uhtbca*ny-ct<3+)mRAAkBf1)IUgILfm zpBcgEG6&-fZ0_@I+CK-RKr4rB@kw!w(Ll=sF8e5G@j#kcUIwLb{**I|i5Gqf>L(w; zSSE1NeEDEFp6W?kyn@DuVAqRH;bf@+7$MjZjmCv84BXBoGwXgilSR131Djv_PcAtHdL%++B$dala8ro1UPQ?@6A7O$& z#`mW(`fvv-`s2G}MCi^BFo~0ectl<`luP&0A|twYxDS4#!?9RXGd1ykYvyfyX(tLQ z>h^>UR$t!q#hc)!>LW}ln#@PAn6(-_2)B>&8vj3u@u%B+dynDJ0|{-R9C;Q?O)O;O zrZ?#jh7|`90qJfwds;(w;L*f0#E^lmOQ1jffh%yr(aBtm7^<5D43NR7B(FSdV??S1 z$Dw?0xwKrpH~uPa?I2ysf!X+XZ0;};bm-6*o54&UUmQ8p{*-^{bSbW>_ z5-jIND-K#|ORoMTyOpcg9*)W64)^l$wI4Y5|6t1Xs1|_X6_L0cIB*?E{gN_tb>MK- zOqi#zdkbC&k0?qS-$BDg23nyI{Lh|vh$g@l>9lb{5WLA|HU;7 za48OLPQ6IQeX(6i%U*?+*u6!r?eePGKXXOYb>JC22~~De>7>c#U zSr1I*Yy4%}LkwqV!6esAQ*u2yxP1#rWKac5F3w>RP&N}eUQW!`qW3@Hp^TgZ`*4MZ9 zZ{Ds)wV}0h&0S0yS{;lAS=`5*v74DCwK!Jw5X;RjEgwb-T2zY_o*f2N8&Hk0@b&FQ z&X3q&TI){n6p=o^?w`o3WaRy3WQBL>^?8z~rkHZesQ%H?K=o zcem=LebQah0tY;lj7pKob2=jqBfT+eeH3w2x6kxvNHrXSH%f?_PEvSap!QvK=>_k5 zy*ZmLXC9C24X>tA&AIBu;}9#p3u({s8PC-@U5WW*D;S&4PrXM)^vhVjcmUS$HRsk; zK|vU5X1>1Seq>h<%F9pi2ncqj-Vc;r90uSYZkb1~uX7_}0|>gWZ`WOyxewi2KFC)m zz2P9a+0eMQGwHB}XsJUSo{0X9W^KKRGB-r*lB3eP-OV1J8R3)kOs`|Dsrj)Mn~LL3 zv)BFS>ER|Hz+(m?Z^=^g4TLJ*^_#ZTtgNvi)VO8y0pm`yU%bjKA0>C~TwR_K*l+PR zy~e6;QqZWbUue$@{`O7GD&Jc{-6@7^Yh9!>?DM^630$Dz*GhVZipBj5zgXFS)Ku&8 z+`;>+;fzn?Brk;T0^s@NFnw_Y6y`ZdNja@;_Etu$Zlp=%ybh*>4nQyj6n5Ha7M{2a z(AK^Q9JxG4$3MrzwY(2umz3VL3FCwz6^mFDzQc_H9Cz+dSbCO_f((rpk!y2?3 z>A<#PI$jcJG%zKYcLd#i;ouXTno!q9;=qlt5e1#VRP}29n)6)@Qn&MIXjJj>?WUxR znV%0#D|FnkK!glJ8fH^24^>L&8m6bWqWIEai8X|l=g>K?=~?$~-JD+feaFI`gAc!# zvm568*rSMiV}VB3?qQs(6dvhSa2W~V*Oi^;VSId#DN{K}{WtZxsnvE&ez{8|^9oJX z5QyX_VQtj6ryR`;tU9eW^QtZCV%KREexyten_Z{~zwLcr*4d4MFUfIUSsC4x?7bDu zs0vwY?J~EEiWrqZWv7`b=oSl{W(*2Ay!RuQyN=F#;&{wX?YgI;cf_=+(;rqui>spN zEBhb1=h{vCUo0C_6-fn(e>bj6SD92X{^Y*xE*31r3xUXHym5th*Yeh!4h92HrmuJ{ zi^WAdp{>RJe4gwz*z!HOIvqw;5F?m0+v{Z1*zR?!`O-KGSsk0jR5u)0ie=jhU=nZ# zdLzMkvyVBXkBpBLsO@8hHp^ zC$!Xpi|`$$X!_q-!~Va2n?XMt!bz4;-7$iF`n+Ldr*^MrxGR#yH{MO%AKvVZu`QU$ zB$d*>rsf>s6ltro4U+r3ReW1jd-ysn=-RsrR_o&q-yvUm``CAJ117gtZ?s@EeXxhi zY4!I`qTQOl>1aVTDGz79Zo9I&^Gd#TsRLXGn=l;QKt+QVMd#7l3YyAoG7x!5a{gES z?oG|Prpid}6FGQL8*&Qb-3c3ue9d}hA-_MpJM(Ff{E)i4U+%B4fW&&>!%iF!+yi?u z71OCIUr?$1u2dMeypm?XY}9`b(Z@93q6KY(klGNJf6(uP!$zpV+}5@Gw%;HAmmTsx zdotU%jXiVCZP28TKGOY%_Ic4$9$nBZB6G2H*j`;;YpIgD4f zvyV*YWYD=OncPbKkf`^gd_?fDCTnVNh4n*&(kdw}Q>2B>M&<9`H0fN}^v=nOyHCZY zHto3_XjFa>jr7$Oz3;f}?FoJI3Gi`TXr%CnDt6eycHXz7aznJHUR~;>40%DPFlch# z#Blx^uHhQEzFtLpxMEI>g+;RQRL|zyf4Bf+#hSyppAl=aCsqZtsBd9l=+89~-e+5v zf<#p+^$I%EVE>{J!HMN8o?B=a?d`OH4?{m-U)JyoPjn}|=xzynd-IG93i4MwyUa7t zziRoD4;qgF_tDH(q_sN_&%;97Z3Pn!y}A-^X7#x1SeTVJg_U|r{FZ>s8w>#GvC`kK06DFad8J=OyTj#ZcTDB z1#}yuCcqmL!|l{ExU{PWZHZu>x^RB-Jd94MvCQf0h3LEW6zSDh5cpl9>ZYDufq zICGoG1iz;sdFK4RZ@PX)!oS!bcxc;5VCKDuNp>URmQ|!D$o}&5fyzj17dI-?ERo+R zAz5x|G-FBWXInFhSQ>eXDd*9R%XOh;IoZnV0hEf{dj}1}3K~|XALGLXR@+$}y$E7Qw;v+N)*pYLr?^8l#SP@d^)*1Iu*; zMm68c=g`dCIli=6iMqX(M+}K3=m>0IjaF`L(`4?u&rg@Lwu^63-hKNdQOKFG|0TAR z&n-R_JO#Q+wA|-*__jG^o8$~WA1hYL)A8`h#XpHsCw?Kqxh3-EF;Dr2rK46>cSnnd z9{k90(AmGx1B-Y$25)3U#U zn`!E+oMV4dQE^ebd%V^8=OCaQ39OPtUCy1gwe1lraJvZ?H-gPfwK&fz1)JiO<^5qL zRH~EbBHJ^2YOU!^+1@v=?b=_&O)@B~dc94_+-E=RsBqILIagjh%bQ>~>i>|fROsCu zebsu0kz3tv84-0VFEbaWON%J(1||+UX&b({i#FFT?oUy5aU*<=ioWv`+8LVKxB6F%&VF7>2`*S*>8mii^epXWv-{%2j)`r|I> zGz@V*j}k;Is)!C6BPudFOvB0^^tt6 zk7|{309B}^6hI#T+-$Y1QRiUQUy&}%WJqI><7k5ABM6b)C9aHz0njNP`>C7*J^aC; zp`xbiylJN)!3^NWaHp>RGh~LG1#^l=n|%QHVSH?8(AMvDU9M zDe>`BDbK5&syo?RfdnTwT;18{_;@}vK*Pi@@5i7qNFK7=EZ4OD5J}E+t|=|04rk!t z{pIH?TBfgYw8`T^*9pzz!Ql%0j*hpkU2~9keUc zo^HgNZfzyYOA-n3baX7MDHH~zr;H<0)gWJ-;&%DNYwdRfTB1Ze43Lf4HT>GGo@4gS zU5uNiI_LOE&@=QFEvZ%b_p`+J%_rhNIb=q|x`;g#|NX}fNB-f6!sqv8Ym$$zA-g>H zV7DbvJ#{j=g;6;dL0MiES1HkA`$rJDvReGle7>Ufp^VEqnWM^X-WXfxTS1+{YmoRS zG{lr=!PH2HP!4YAdiv1mJSO+dz$Y(!a;sE5OJ01maQUvyQdQ^qi6oQR*n^rghMP+A z#|t6Dw4t%jS9qx;x2EP1 z>FC~4x8_upU{^HzbtENuLlA4-TcV#^AH_>bR)G#)*=9S0qiGm@<(~lqWc$ikz(nT$ z&YG~GV1M4Ufc^Th58@5}_9#%BIr8MFmhi=3Uy>khs$_himlttC_D|cDPsVD=H1n;2 zx-bj)Ap^2@mok##+R#pII9l*DG0}ba{QYQ|)eDf|)h}oakf?K_O%mi?kOC%s>?$U?Y3MA^Yb;h zLI;gmL-ph6*`4<_H>({qQ$BETgu^MK3%wFldQ5)I-iqVrF+Ba|O8 zBXZVo3}UuWnY3W1g&-!o$?wKWmG&$S(>#%&jj~}aO@d$-E%mqA%czyk1~C0JxZ^@x zs(x%u3bwzz<|kz?>l+k>EMX`i}Oc>Ooo0MvN@;sOOiakgo)61 zLN7Dg#(oo2s=WlEfkor5;sNPvOA~B}?Qb=H?IK~Ru(!rwbAo#3=qP8<`JbzCVtk~~ z+|Mrf|PMTAbzqu z%N)A!8<%`RP@f}F=lG&sKrBY?hR>_&hcKmbm>qvP^*yjZN}p3Kb$?)8gq6Z?Ff9mo@Fk2Mi6`d#CMF|689R6n!V1x!)+ zlhjR){G16c~xGrLhPYeQyfC^_(pfZB0d9>-sX72ZxVe1stT@`*0*=ZdV3j}L=Q&z9o%r)-L{-(RC^oYjb*qEK`HFN% z@RX)(#2~Z6pw@w!@Z-n#fwYj=+{x|eQxZ}Tpc9Ys7=X9X6D$60 zAgRN(ySRlR!|G?l^u*Wy-UaSglrs;ms5UyZhMY9{ETxk5tTVPG_0!QY%5Q5x#tS`TV!Nok&(?ez5CJKAnwN41fq?XX9hnVwn~v8=W}PQRTT)K z!k}F}KN!9aIztYWB6F8#Ue7G1&;d#B0N(~bi8KoGq-*hRmkdx&L?_|=634@Z&~-^m zLj@Ek>FvhZ+4PmTSeFD;>nMaV0hCXBVL9^zA`M^lyvE_-=*7PsLs|(2j7%$bTi0=KBy}p&A5mPq#oKtF8_)vTPA;Q98vjk|rl*{Q#H2$z0-eRT> z3WP4hkVa#{!t_L6>4v+KE2?j7j9ple1^JbF2x4+W<6k4ze#?Ka!r%VFr1u+xA8Rmw zICV*t`0x!BOOU1<=PBSX+F>Q^He!u~F0)&KVc&$w5W7wbZBtYBLvHTxOgj2t;v}H1 zer*~IF%uJCLTM=;F$duNvv|BCz-DoY?&hY!X(4Z+$|dW>J+b50ULfE5 zm=^CE8t0RM>UXXV0MJ4N?ALgl{q&l?UgDE6pPV{FIl=%9&F6*9 z5;w#Lz#9M)4Z{2PD|fansX0&8FHeV8x*~Sarrl~i+S*!RCvbq{hewi!6%Kx-mfb}Q z=yhaLq?3o;EoOaPbbpmKpsC3Wai|?`bX*)^X)Uz1LhOm5Tx#AkRvcY!oAD7S74k%B zz@q?bj_Dx1`+`y<<$FkoAP>yLEs1E0mBqE^oWLj2>#g01P_i#!A;@#p_7@rmPr13F zz>CW>km|p<&`t>;+qBT^pmg%TT zOi`F>E0kiNB|9B^TKr<~3DeoG684%COO50!48&gh8(gHDi7mQxJHC%*D_U_}M|f52 z^-7{7DC9xm@nVy8jfR#*TG{xAR^v^iY?V^HkK5aKp=6C+t=`&~oCb^KMgrs>knbbk z#lhj%(y~g?%-5*RMJGMK1(EW?Ea=)PD+|49xDRgXEJ#Ah-Y|fca0C&vx8M*i-|{hK z<8pFBxpCu|qc~qA#FCo_!_k@O*6rKrPjvDXnWDSlJjA{~T9!0DUb2y4>#C}Xd~s@r z^6s=dIElEWwBy{ZvADLb!$ zAm_T~>Hh5rn_eV{c^V-30h>YTu@bY{-(jev_c|a2Yc(x-X1~6j6(Hv{so;D#3Vwh) z&p^j@Za`825lir=BuE3|FwGt-@qRGBLix(|>H-IGxM0Z*Jmm5zUggKG3ybGZaEXBN zsMP5XrKu7zC#D|01tFX%cLf_}&q6|Vu?c%XpXlUuOy$xT;=0LD& zKvGg4B;WzL8d^NqEH^-cBKku%dp-)G{Z`{*wPD4@Mg0CEBMJz5Ooq*KpF~4^mz}MO zgh|RRv^ErkzpQGK&1w6UoPpt*Z}TU*PIx1~2at@*o17z}f{NrI$}d?cK8vO&w{M_S z6s}zKyaRefURYIfo1WW*rq$Kc;emiVcCU4TZQ%+&y-!ocqZ=Kjn;&+f#k=fsl9Fzs z6aDrLq998KB}9-9?O$=&OAb_rvn&!gJ*1AB_rTLud!h_`f0HLJRh*a!j?<-X7089- zH4aW)U3np<|Dlj)1qDb@PZtKd3S9Q4+vOhezB35`ut2G(1{y~ky^4Jwgidgu>RL%+ZKgeoM`?drX|49V>5BlLUE zZiD_FlyT`4w_`d@oZi2mU0(iNSxE{@87W-npo6xzg8M4cfC{t<=^7e7In8-{9d~LF zfM6ujSgA#Om6Pv__iSJO{22<>FC}3${w3E+LrM8fsgP7>dqx;U2fauu!ohD&jLLE#DUDg9mkid<-@;m9{GlSwn*m$scZA)%4dq7F7qpQ>TRz2?vKwZr#^g zX+?Hen5=rKC=c->j}?y@T|v%MXh`S|GAu;T*l8|VV{kjKfNE?65bEq(+-3 zn9=$*FhBeF&!6ZGumi~>P;$uPa1?jn`-((GC zzm*+4CMqU<^DZrNVIxLJ+xn&&b)KM{wa@v0a9f3AT!;prc(nW8E#Eltl_|xfEho(4 zXujoP%+LC6$O%nP2F&X;exVl4_xDol7+-O_P7=K87eEtt4sbho#+gTDOMLbyE=?Z$ z0rL%Ue)c)OHNnQE*d1eAcBRTCTpT+_QlgMfS6OzduN?0>RHhdyx!J0GQEfp(GuP4S~6ztQmv9;hZ*=?t`D60~JxCIsS!6M)w08B*V zAB=6-0~h8CM0L-I#6iv(Z*$YUscC)TPu~E6p$1`*=IZcimt+Fdi+%M2BH~~y^)p0S8ur{Ien6TI_(*_9I2rL*HTzO;2uzGXNNTu9*N+9dss(?jEI1sn)-rTj{N*)uKwB( zBaQi$m_$uoi$B*3mt)laerBUlYs+R--rCxh{**glNT!Df4!p3lz>p{$nD2M5FaG~daymV3A6cF|l1H<3D*>GIxr!7V&79y?R|mV zyfQGYJzBtFHwjv}9$XzTRYD=L(jlLea~kXgm70}(0=>|()P%zD-}>3V6=NnUCMr~; zD(D?ZpL{)fD5Vi~=;YqkGykkCBWOc2{88yUp1(p`f%G~ z;Lhtp)EC=E4qX-c`%VkB3*jT}oqoc^HdvXzv^+{4c&7F0O2lt`%6`%&XS?jI{b?H2 z560{6e=Va|lWPNMcV-l2YXIeeiU;LmwVBOI>g(S?V^q5T%iEU({KL5$v}W;~p<=_i zB;dy*AmGuLtJX=AClv~j+Uda>+KV9EP_Np=ZI-}BY*K?vYIQ-pIFD+mkaY_w>~u>KOP<|e#A!xAE%jpJ|G$P|9EtH zS%U=S9EkhQQPBtl699m*WGU~Wqv=@upm*&EcZibUwWdlzk43g@&#{x*zWG2=N3yDq~4=;3B|3Jp45?I+f4=GdzuO=_~g4WBXa#uJIy62c#`24dCGW z4jMNuP1WfM=dn{g!McY<9Z8Go0~lv1HX=H%Nb5_dRj2gx;UW2ohk50<_*h@ z*}K%)IGuH1y?1r<&wLZ?;nJMuQ$VM1wq-AV%Jkv%1|m|0w@(Ye45d=@rwC-wzUEG9 zRV`<1SR_jte8j^?hrsvCMeq{D@pr8n*4~B-vpU$7F;kqZmcHX^Y%_i$+!J0$- z9_cRjlJM}AN+8G4!?$BZN#sSL9nN7JsmCLHe@^T84Bub9eT!TB(eI#4FRuZpt8Gkt znmh-XH261;j)}*9rx-q6%oQQNZOe!ZF2;!>C%5cY?w?*55ql>#B#;Uk#C%III3%HU5kSL2A>}g zrv4eVd61(b+@B$%l9oNT)p@kW9u&)UrIK#}d64PUIUj;h5YpaNdsUs#v1gJ@_J2nA z4}ikHcy+mj!h2!M3Mj`6po@`uTc_7uc;a@LueThqqc-$f5WIT%@D`!`ANibHonV#Tu_vW%H)Y$Rs0= zywLHV%1L?}K#l0lRm+N9efy@Y>QYC{PiJW;J^c;hw4fQcJF9R`xb-b0 zq~&DK!CGDpaJHeoHhb7;CX8+#nz~zjJ`CWOob{|3^JSEEB2g0XJ@7$-ScZzVSt4(lbAn>cv}upQ)n(>YJORY^nUXp+$DL&4 zm2>)%t>433L-LYjqh7pBe~*Y@*@q7|4DRt=GVJaa>>Od$tPF$JemVOE(W?)#)%;A1 zjM1JLJR>z1VkE^NraRk{bh`3W7>Z(;iSLZRbHpcSta;v2_*>m5@94;;Q#+-lk>m7{ zKG1#k>7C8s9X$MI&$ppH{VBE5@=K>m&^2^p_S7(JYx_om-5aJf>23*>30s`coa%1; z<+O=@pZfV)h^_u-{p!Cie^O$~;jNx$FektjjAtdv?AJi%J+CCNtR%^})!W%AB*m~j zeMPF>85VM{37s9Hm*Q8~XKvl&$)d9*A8#vce4DAZ5=4nx8~3x2v3eAP{oP%2kH2Bw zPA8-H!tyeU$&jT)yhOt!&t12xcicRAJe?U2e+!6+FgZCz-t#YiZmg@>m$dPKH%4W+ z8{mwxWZAX2_6_O>GD!;5n%ptEt;IkA=PhT(F_BajilMZr99Z1y_7+3=Z6DCSx3~^lGCrcT}+? z-qPUAyM;ZA{?ofPMCs;lmUq`!NNyMdgxo~nQvalCiTVORpZtT<|K}suf9gs|M%^6$ zM#*2I;CxpqNY5vwMJ%Ftvx0_nq@^wUX{=Pnq~*!SP!11_PXK}4D;ypCS5yl z8nNf+FPUj^2zLF{BP<@Wz00Z_pA2v?e4bjw#i&??i@;G4c^-g(em4mtL(jE=2yJF- zmLZ&6&S8=2`|qS$Vf)#CCDlaXt@tRfT-H6##*JMtZvRTp=uxX2PAO?cu4ABG=hI8o zEAvDm!x%+jJLef>-#Am!`1ki@W_D>CcGf?S`tJ93dHJ+U*)e2e`X_ETDTh}})+oks zsLT_YRAUd7##x3yQJi}dcrHA~m%Xj8ttMKWap!z@^V8{#Z*vNs{Mz)!n`rO~iP37z z87<4KjdytRuNkq5RH~A8NxGe*ohtX5{)-;7L4URfis2L1_9CNfYDmNFYe03ylhP<(X>dEC5+;dWhF$i?HpRJlc!c79B`rs)R=C$v?Q6(- z9-m$nrQO9Lu~TCpwPtO^szp6DZZI=o#A}>G>@Q^Tcs{yK`GFrmd;fbIksW?pZuE41 zMnQ+^hVVQgEB2`VHIXkuC4y z+EV#N4m5amiiq0v;;(^H>Z2+$!V+GQp;3)(V~6_&kw81HMR$}MV{XmW z$9SES5HrmA?yC|L*yZ~2azzx{>(Gl(aGkh4H+^pb%g86ZGAhOf^_Gbp`%7`@Clb>r zT58*v=KfQ)7zXS$o~7Z0-AVDOQeIYnxL-dDy&;#GOn$HW?K@}c%)rQI1u_$fGKRIIKKRDHWY-}o+rcG!!&q#2H{(DBEkt)s5#9vH0{ z?8{hR5nJfQt6>-YKEnbTW9fHUawEAuZI{Bv59PLyS{ew7~9{&(F6m@Q73}PnJtVbb<`0?6}|1><$F>TeaAC zSYsAktS#Sv@!@(DEzwgo?8(bM9HRsJ!ZKZR$xmX$Ole_ryQsH+ofXf=Gal+r1t$+? z77B-mifxAZKc=W8P@%c?O5E^cqS?zV@p+AvIW`AGEOm&;#{|o(^5|w<8={Ju?~V}2 zn7>M~u2DDsQN?3eP4rLBs`l)LLtR|uo#GbUkY^Ano|7KS+26xK&bSv?UcD{q~91Xlal z6(>z85;C$&zB0IGV5r*fJO6#fB3SBsIo{m}k8HlnSKP@f8oZYBtl|0~1FWskw++E= z=*2y_uN&Rp-IX*qelWX1t=Y}>>N?-IqMHCXk3qBXqjY+<_Ubv8SmiJ3W~ls!Wjm1u z7Su3UBhT9cv~xJ$-T1jkJ!9d!oMW(6q5t9f_`S#p`eFi=C%0ai{h6Z7%Z>hf0JC@L z>Gw^mh%1(%B4KN}-rH3F?_{+?o@Py{BzjKgDq-#V6_SX!(H!Bod{TB%noat!yBtfX zX!DnznXPAtWHrSgEXl0jyOPT62b~cRw&W)&neEgWC z#WHcc2QK$bTva}uRR!uV&mR|`;|5JiK2$+_!g+r4nz^7O-d0^@v&r|0KZfEsh}B3_ z;1^ov7{6uqF1b^E@%Qo+R*ky^wHC^!53FTgYe<#@8Sm0K0|n*Ao(F%sgYyl2)-XF# zz>zA!ey=&=f$(P}jIhFZoS{pn?8NRT0dDuFbKTOe5~Ko_G7};#h)Nn*JoYb8Bd3dN zFYC+12TQw>D4(j*zoRqgl&oX?6)V2wVDIwc(a!krueal2Ri+CC!O>&-;7~9fH~*Nw zjo!eZI{KTIA0!9rlQ+&SyizqB!j7KC@4&Y7C2mwFKKcKzLL4yYUP43CL7r z^QT>Q2-8NNi%Ph>Y4^sW-6&ijr8M~f>1J1PEUo&oX+;%*c3)5_{P%)$GJ}MJZ`!6@ zoX|DfF}Bh!MrO2Nf%W_2JgZSM5o9^D$3dB28FPo0ty^rSwYZN+kPd_I$iWd-KHj2G zRTBO~_LTQ~oRY{&WN3Jvjcd-lNyp+9y0x~DYVjqP)Q3(w@=Dj#A$*g~YnO_W5kt8y zPrq-}^oArEiRM1w_m;DFsilo$Jk$B$&lM}C)T6{%PQ7Q`c<|hoHhayYkEC0-{18=Y zZ)vjg!;zp4b9?$=l*%ufmq_I)_-z50AIIu%N9P_Z4;TgpA{ zXb`&SHerz1W!jiu9--zc-O?WN!S55NjTDadXB=jeGf0IUAkA`$5- zY5z(f0KP{U{rKOkBr)#4IE!KTMha1CFvc{jxHP(JA&s0k#hgI4KZ`v|{W+yakcAzS zx;XNtJOA3RCvRRiJ`A!dBVDUr-nF`X7NEvVF2%vCz>xARiC%}Gi3e`wrVto}O4(3wR^>mzARJ(J&bu@6p7=n;6FK zlp?j0Q4F_AM|laJfe1 zK)Uh;!Gndfn-=zwv!&Cjw>!qc^SYD}F{Ja`vI1v>RjPP;=8&LQM0}3zj~2B}9+$~) zj3*{`=p+ApLiR@v7l=_JmPOlpD=Y`hKD63RT@_gWa-broJDh_=u*sx3j0<>qW6U3^M$h$v*iKu7En&Gf-#Rv z_P4;38TnswcUKLkuEzKMl$7Yt*i%l9jXoKaNduE8iFk6;L-`K1f`*LDGUUq#V)uOT zy$W7ZBcjt0wmZ0CmUp-i1W;CLQca(>&KT>Qk^&DmmgS1NSS`VcIH}PL4DJ<*?G~H9 zglFh}L39K9kKlT?S3d0~ybct%jj3(!r?KL~0*{lKdL}ysR5xa91G^x`$T%@0n!ZxC- zMvIJ}ekkxxOT?f9n+GVlj=HF-+dG;%NG@crhNtCeyj#cj7RUE~B!xZN_gTwd58*7e zbg-IUQ}s#LUBPaeqM+7V5e7A2@SVK#o6Axz+!@P;{on)6P^rfuI9`d2P{SwpvYj22 z?a7RIk@j_#Qh+;2&w9nX6cha5xxPzt8QHz5!V8!#XN^M78m(LR6Ym)kHu*x$>RsHU zKy1Xd7(+deKCDqC`;|Cz@{7ucX|EeQ>r_Yw|HfGJ0k zV*OFZ8lF6uL>5dSvmnMb9yL+I6JuK4%^_}8%u%X~Ss>gM4)CY4Jz&s_1@ za(2`!RMY6rs78S=)m+Ol1-*{F9KpJ@uc|Qw64KA|o(|P)#R&9CiQlpa^hrSbGDIZi zuHTCJA{Ri>;Z65R2vYSzqMclb!UcU2;|xl~d2(^0Y-|xH&&@)i*Mvw!?;Aq(NhC6H z=%o^E8$uO_|AkZaiJtCzySc3X38D!4Ox+$-K{Xz=-IKZ|Ul>Lq3B;Qo{T8lbytW?Gbh%m-{74l`218`&_Z-pVF;dmCw(B6tm!o5I_pql-%eAeW# zL)F?1o%AUUun*vjSyxIFJ?mnPUailI>|iNX&TP?`#kFu;o`V{;eQrT87B&^7<``dq z>oLClT;2GWTU^?3<;QHR?e-cYv4Qe&rwiJL41(^kunar?(f$V zT-DawG~{%S^$#&5cE7XWg=Cg|FRee;>hfiB8Ljf2 zZ?5+<-)QQSj-@_E;>~#Jj|cfhmlD#S(3!ZWLlZ4c4-#3+N$8@vOP$@dg%cKSfDwrVBXvvfo-P&3y@$rgJg+3g5mkc_2;q z?e1CpOROSZ{AhBW1e-tWrD1z+>qm2A{*(hOKM@}pRJi!&+C5q;f+y+wl7~qcOHLp1 z(QBPbtWj6tU#S-)6i?UKh>1?wF3&DsX$@v1e{Ra6WOcWn%~3 zN;EwR1QIl331|1HC5Sy-kF4yjOI+l6rBSAR!HK9D&Y95qv`n=u8|R5q`<)Ff_ejVJ zMr3_CahJ2{11(0MoY4;Bg+mi_ zW%!r~dua<-r0AvC76oOwsCNN#yl5Lt@7bD#6kGXy&B^ZT^diDRirsV>y3dHa)aA>G ze5=j81&lX03o&noj8ZKO_9l=^)V4-Np#d{tM5T}q+&DQU0xa_30uP44E7T*}r`gEE zfPotmZ7SUBST2u88!OmEqy%s_H-QU+-ROW|`(bT$9q+682-{v4$Ns9!LRiz8ntoH> zi}!67N5ZIoLvKc0e|xPMuskJGG7GMMeqPaNXJc!ghm3Zk5h zecbx|Qg>^Yhci~wPwi(Fp2V>B3@efUw^XrcDj>Wlwv62IHA3cml~7lF@k{%(?SOQCCKYXt?u08pZ7kAidMwQ04QbbpSdNAY)Gc_k(YKBQh2BjQ&Q+d= z8a4HQsX2Sr2(;4d+-DqA@+eY|WgNMV&wZ(cMBk`z))-e+UCBiz#eDAcA)ImL3TAiH zT(10Sm>BYAV}7Ek=@bTa4r+CMvkkTIim@dcSq_T3W1e+ul5dsgRDzyF`AE;y{-eSi z^vB&`O$d7p7oR3w5^eq&e^#Rb<7XSZ)fBF!ebk*ge`3b0d}LHzrh5Gv=29cdb!GgV zaZDqa>k`*;C$U$Y_e}$jn~J@4w?fv2=kN#5$7t=`(t>hm8U8I@`EjavYP{GAHW=xL z1RD$9=xA9-M0B2<7_J{A+GY;m=g^7hm(9+z(yikkd=(h>DVi(d=rAT9C=lE}Y@HDPZP zz9&1NCcG+k4bfKN3sgJyRWW9XAk~90@4H<*wzD46bB3xCC?1Wpd2ky;*3>F=bXIw7 zM}EUOss4_#9UP7Gy3%g6L92XpztIIeoVVbwMOdRWQt?c2(KM-r6$I}n;n@E^{4l}%GWUAYM2z?XsXXARli8Q9#-$B#+(=gs*Mq@Nw#>IL%Rue2 z&TJ&p;hg*|Wu#X+sLOLruj;798CrA|{cjuwZ;nrv2$R;Q7_Y=f`5LY2dV_pmFKgGt zNH4K0V%aYYapC{Xz1>w0&{31#Nyz2IuN9Hh1=x%7z1Nnj_38-AV<7-JQMZQs@4<0K zA;-E(yVyKiWc`!0{qp$CPuAhct>RR7e!l5-$3O_Ke@0d?QzC##Tg= zH6I3T)OVAzVrWMAum70RixiJ$%I}ZvG&7>-aJ*Wb@O>kCMZ|wD*=53YrAzX@k#rS( zEDZjh|INz7kuX|Je-%Dcz{QOWWUmD8m-}>vbjokkl3kW`9i~-!R6|{c)Sqf*4-k^;yn%!TmSdNAzqRW^{;e^aH|~P9Ex~ zCnaI2v1bUN=JT66pbCfO(l6U%zRI zv`8c6dzWCY zz~wx#hhd?BR(bNr;<-~iO_#?h`6?XPlE8D|sbzc?o6eRZe6=qjRGa%7{_fXp$9i5# z#l)xY_OQaI_CY;*l2D+sZDf7<6M z&ce6iXL7qZB-)ImUCP*9x>*PEILR%_%<0jXg1*gxhxkEHnOQ)Z=525t+TBgoWzdDK z!->1t9Vkl95o^BtygL&d)*Myvxn};itPaaSp3-|9bjk`J()_a7&zTCES}of_slS)C zr^}H^#X=8j_qpiqGa;y1Ekv3|+D1fwB}Yny+XR=6#TGmxML~xIL=Hy3?mF9_2%Oto z0@qVO%4dl`%^wMlX#Q!h`A14mY&f6a{V@xx{&Z-ttN;8rd@vY;OJ-4_d~5AEm4SA9 zw?qI5NBpN1rgTq}RInrT3Be`$Q2QcPAKy-H+xunnqN|^;2Zp0%H7>Cl%v-%#wfMv+~glAt7qcI zdfWSXyt=F4jm-9rQ^qIuOz_u+Xf!V$3=XwgY_C@@1`8Jq&8RXXOV8WSrtc=Lr`5`% zHua`O)38QR|JLDVtM)vlHs2$KXPDx0Jj^F73Bskn_4#BxCU`8b_=)U;4_x3|baZ&7 z8?;WJV>1`I&+pzGd>9gd|Aw-Q;)>|~X3UL2y_J88R#pB>9xUIrgU#U)=zSkSW3#)8 z=Y(!<3p_0tEc8|WEVA(K;IZM`mymR^@Yp^nUP0FfxdV4Dc`Qs}Uvm6DDIVqgMFZvU zQ;qokRZ`AV7NS~eSr(9QIgG30&`p`fBCXFaK$9U%-?k@RC0{n2y(=o5!YuZ>H-1u4 zXm{bXf`efi%s}e$*zCy~l%DgAjR|GYyin+7QWU|#50vbD)c4}rq>3@EtN2%&kn)uOK zLdQ8z%`rL<6GuZI^;77po064(rrx0uT=Pg|O6PvuW$NQ&LWUN`_#v9JzIe*(PT`j+ zu@p@2iHo>+iB&PYI{&EmUZu7wf1pD+RNG?U&@)U8y%>S=ZQNwR<&|)sTOZ#8K{3vpUanFav@E6d zM~!aTIPa-K#G~Dwa%Oz8vh8`m3xXCrGN?dmmJ$j3y@fcJHo~F0#pm8%^}Th$YvXG} z+ZE1|ewM?ZXrqxJD^?{Sjn>`Y%RG#8o0?hCi7H4e`)6C*8`x9@r6zDy9QSQW&i!r= zdZKq{YM?Ma_#_udoaYhG2uYdDljit+({~C|xY;YEUNK*e#oUYzGiLXX`u&(HQw|OF zTX#p=$m8M73dI=HT?jp27ARB%g$9OYU#+!F+(}?PfKUr&m;O61V54Djfbh-D%>k= zNfG>pCbS6Y($Cor?UmAQIF6~qKa!7Cue{|yKctTsv)w4*)DTMPNb|%Z(~?p=p-4eL z#Wv6pd`g$KWizL?94?UGZ@6oIb&@}w;D1Ocm|wHrd1qwpAfE}L@r18!)C~&4-SkM4;KLwq7e+P}5lg%1q zrlp zvPdu22+Z{4^69*Kq4Yd?^3??;q^6DVC=AYDXXoUa<0x8c3ZHtZRmPEP`b&vaZrm>@ zr2cl>t1Ns)Rgpjc3tvq9;Yxo0%Oca@T}w@E!a&dTx{4R2P)Qo)sa3@Dj#)BcY>sGV zbw}pvhl=p$+QGPHu{G?&+CdvELEDzmhQc8ck|SxA6o*Q_*qs&en_GP|z0t*zhxxK6 zY09i&_R*=4776+oY6UIB_umBVTO2&q(uZ@*`>xNC3_l*HSs*9<5MjQ4a-O}rRcr|3 z&yaBH!l_`Iy3?}qq3DR{4~2emQD$7lE4>Sl>nXpeOE#>`Hq!V$ah@o~+d9i-b-XqV zu|Z0(+B;ISos|ADvN>2#d@^@LW^;xi(;^o=%f|h1M&1Cq1WVRbQ>C@F>e(*jjz(39 z#CoUkKE2ayqlVpLFO>g|4gxwx(KK^H-r zh!R;tk8w^uK({x~XzSwp5zaOp0i}nisK6AQQbKJC?X1p^X@qgeBEDyeq?${^8cn!d zN?txrDN9D*)?$I>_|!}#elu?9`90R(t${DJ@0Y~W52ej1=7|$TM(HJ5qYr&=W2^|X zE1{3P9f}N!;)O%;y|7Cb@KU&GIb{_WtqKUX6IOXD1*wdFp(dn6k?ikApmyn*iRq9N|a7V z{+4@k)`TEzS%_&LD9m#S?W~|QR@NRE=N)&p5XvEk#7CMIStMoxb?W*;Zi zO6&m@TRA?w<^IAa^?nP=R~JYoA#R5;lWU{j3$=rXpTf5e@0LzELR?}87QLd^p*UWv zegeTElLe!zIO~t??smxLLu8nR9}0Tql9O6=@K#ViAJ_x-LRvpY8&l>O;BsIV=4#Qg zmYYEFBr9=nQ`Sdi^o*+tuXDv1W#~p+kQ(90QlYb)Os?z}5Yx?nl8k^%hFnNOV?p|x zCe&8%jIUZx&SLuZ(tX0YF<)$`B8oL`(77QGrl9z9x-3d;0R`Vsps%vGxWR2#lNdf- ze!Pfo#AV#j%6@uANqA0Du{?@~wpgp-E|9i}3X4p^RQ^F~%s{3W{j)1_1BNjkCy8D++f4USvp4E4&|W?uqrCki3%GTggk|p|}xDedqzdMfnjz@#_H$PAkK2YcK z4r>lrpVy&=s`PI<=a;kJie#!CnAH+1Z1`bLw^$pP*Il4)SWZdwaJ77Q$FM2&UP0=a zr&4)4)k|OjV{5F#1qKX`_17g)a$>Zqy%V*bB<&ylzmRYfIe5~R_Yfo9g4Xu7WV(;I z9MF7$Z7oEeQqX#YH{7T>3?K+C#0 zkm{;pG9e8L>@Ol^k4gT{dDm0hG!P@xxQcOs(yz8y?sS@K*^9f8eD8lgZ?vjR@upcT zd}ovb|P?5h+^suOY3*%!CQ{cBJVI2^PbR z?HmNp6h=>VTYUZ5^huUUx=NU` zyD#`>XFS%nwxG)|?E80!v$M0J)OCleklnAhVa#Dd=oR}2omh=As;TZVBWJhL?kzvG zi3MPYIxTc9uosI4bxp4>S@V+cqvM#6GHvoDS_It^?D4#1mXB>5Y&z>71Clr#ycH62 z6{6fxL`Oa)?I99RKk6Wv--Tp79;a1Zw@*)FLL|2d6LbhtIw?6FbUVSrY-d&!s~=HMbSzwq>^cBU+Mx(vU_YJJyDe%pGAk;%j^ z8o4IqV#(i&yg$pV|*8b*GQU7A(Sy91(gepsoX>ARQZ}@145$Bx_HY7A5ZK- zhn)qe+PYUy6sKqB7#yVNpL5=yaPOQCW#w$Xt3OkfjPKcDvSfDIc7l*aX^!#PsYW-a z`yP)79mEk&x=uUA!pd0r)!eEI)5hkKrsa^156ld1{Ct!(5kG(FwUgCIeWPt~mGkt% zK2sXsOUuQ8R=xIUt#V|kf{NduANt~OJ|6P5tHw2#*P{asXdlXT*v|pPU_X=b6wnKB zipNuT1XT+quP|=qs+q_}*KFeOsz|#v8gy7MMl}?yoo&96mmf2kuX$iJ_<@qaCHEQ& z0g7Iu4meDd8LIcYy|s37DlHq^UDiMEW0v}8n3~;WglUxv!SHsN&yi*KiXV;IEhxhA zH|DJcSu9)S)iKXg$VF>5V~~1gjv>YmlxKoMWjY9OO_ne)R0{YVYrO@4_A;h{kyQRm z|7lMBFW{Q^ZVyANdDCixX+}7onp%GM+RzjCJA#(*4B})K@GDsTaXzrK$G(O}`jwKR zr6V|M&bGe0+eZ@4(+*;>mSr~P`yl5{8fPmFyMxQoIE1d+-o<+ObD%3D-3lJ!EL1C` z#CD z^+(GEMZjhf7Uohey7>i#Nc%b{g`cn^OUw#DVdNcwZTHDa?iU$;zdrr7B{#y2;#w_T zz-9LHTTnl07$0ZeU49k=cfJQkGmSupoFyqKsom9qFciYhFs>EP5CA&6-0j92SK}Z+ zz2<+sprW3P-o9tITxffKs!dw<(jE*#H&ZRwr2~EafM3C6HWkdauiolO11_eM0Wh@d z<%4R=LkHZol);*Wq@>QnjY*s&IRX@kwkK!oP@!jd( z<;~@{kV#5G6R(#`v)r+soHd^KWk~LQunb)&vMWx;D)S(>c z;IT-qwcUgQl=s2TpP4@cImC2zgR0-5qA8}%%m@t{GQaSyr4qkMr-WqXeG%;mi{3|( z$XB#I(qQ3seE1~y8_DaLo|N>Udvw%$s+e#kls$!u+V7LZgh_z45`vxE(NVQXJ4O*{qB2l z{S7unYV^fMr*AW5PoRxYss6s61BsiPF4dDO_;SCt!h9BIZyFgqJajzHGhFb#fBjnZ z^GDJJeN8vFlM((IC>h&pNs3yEmC+u&E1p#QQwQ~}d<)R@KD#RV`m zjG0RTSs?`P_C0vCC^%e!zkac?ovYWFw}S~c+xmpIwQaV<-V@5vBGSc zC?kV@wDB4X0^leDgBtY5zaqe#7#z${feFItc!03GtBTHsL4&%SE=Uo_XC{@Uv z!sE2Po8#7iAu7Peh8I|vB(0?M%j=skRjNM+Bm!xnPFDeeqs?fQE%5!Q6K?^T=4CAc zLf+p-Cm6SD0-fm+!HXk&`Q6Jx#R8^f%tRIwr1fsz_R?0*KD!ZK!(;;7#4jT$_yEWT z4N;|r=y7LH&hy~b-qE_fGrC;={IoQ626AMZ^_+6^S$E*$5MjAEw;XkY2KSaca#Qqk zWMAi`_AS}Awr2P6@R;3w^;M<8q6&R(&~r_cN-2uK1nJmUG$+Q{i`Q!a z)A+>q{9r+^83bBPT3;~qZdZ8Z6cm`>^A)xuqoehTL7!OKzeEHos%U)fE7kpmcYu08 z%HvK5(da1rw?q>jB1A+l|5i*aA9#_QPM%fdudChH(-y0-ZvIV21+7Yw@P=A7B`%?!%(j;t2=fnuN!D70?|Oe6fE` ziW8c!)GTOiXICC$XI)0YVvnNP81@19Rxle%>UW1c0}ARGZjja1;5IhDCr+V?Rl7dZ z`J~D*#9x3`aJ|41cD}g=b|37I_xxfyI`7~yhpCi$s;}%+0gvA0usU~V`dAFSv2eaS zh|ixdVPWfIDN>wYGcY&_2tqIat$`)#Jp2$UY@-qhhL@2;>4HlEru-u|TT$z!oqd&o z`%1(*{n6sR#1Dt=p5vMp?eaDLsq2maWZj#S&r{c*@);2p7d1I;H)`eg8E!oX<8%P= zcaVH5!hzNNYxsCB`)kllL=u93|E0d%^XYb;Ej5_?oT_Bsb?yB0bnSXsB77VVqh{f* zr3gy5&z0NWSZUSsX(N)o_*hV2?qpmh#t4T(5=+M-4-<4yGMATo#j1mMqR4KGTToXh zW+?Zf<^=-xN&Yj07gdHbEs7JoRze;R^5+*>QxXnxQcWqQU;!9NIyD4hcJ^>81-@@! z9u+h_0JhLTa%@V9*zr=P6)BJ75zi-AS8`xzRAtPVH}S9^+L)#7wb);zN*I}t002`l z+qA*g5@H5Y_nWbyO;2}jN@~l&3@u&9tyZODOw&P9FhrK@CbU6~|3s>_pxg6Yrf;9Z zsp;%)ZC?Q+6k4a2++1$2r`t!wu4)hl$HpuBlf8Itv@Lpnc@8FX-}>)?0eRv6_pg{t z9yQiqsLQwCyMWe=Uc(?S_W-P`g5d*Mr4E_L`49sjW+Zq%rhGeE80lYp z0)SA!cAaZgj&1%MQdD3_2(!D(;(MZtcIt^IyQt_K=GU$wZf6jK@#m1erUNW-MS6 zg8U>Pz~phyCml-c^my&@y7_WTPfiNhTE?;^D4ShFw|-J+#kPtH1e%H= zo}3LZtZy1%`%URHsWM~)YqR1YG8+vS$#;PkJl%;rxxC3e`Af}xRw5$rz(5$ltg=3@ z{rXV&1xzow#bUMUcc2%r#iLNQmOg~ltmbdpX9%w3l(Mo-Qi|MB@NvI?&&yIr+aE3X z?~bQt8Vt07E?XFdTt12I;f|l7QlIh_t--qoNJtU}hE&5LD6k?rvZvysqWVu(Ut_cG zeI_QBKHEwp9Bp=k2D$^ZPV3E8ZG-)T063B8k7ZE+_nxM+{yK3h1u**mW#=}@ls9N} zI{vgjC8b(rOuw{5AS5Dk-b1LZP+P)Jr;bF<$k?UkxY>^wg2fmIXxympY$7^4(QsJu zUVoC6_0ZKr1w^5PIfpsKRgv z6YT7|y}yh&tyi!Rai@yqlLTOF3iGu+Z-EQ!8Ss>%yl$VJpHGZuHe#|`Y7$qP%abDk z)S>Q8(7VoEwzBdK!sKHRE-_fvLJpW<2=tnBuT;9Jk{H+dFLp*D%R3q{pr&9t^0F1d3h3GszZGb384iWfAs9vCbh>q$f<7CPv03-RaJENr%P!_ zL|Zy<&l$nSMogL&I#dC0UaJfB!2o6xvYkr!(r!ydNeMVI(n>+CPRA$^V9z!fh-oc8 z#pCykaXeH@8#RX5naF1aP&IPmwHFTz=s!uEr4TXOc(DxH5?Wd8B>azLI8vl0 zBaiGeOb|%_qu+3*7qeNCx^`CZen87b`(ZtH)VRU4er(z9`F`0pDH(sZOh+u=KSbPN z6E=GP@v~InBv86WKon2_Z4gHAn0$YHteI~xX&ODW9l=;-F`pC|cnK1K0h-c5z1=Y- zHUqcIz0Rd(Q2-!K0|N&1hxQW9fTGaWetBxTdrQzZb|wxTZw6& zgNp#w9h%r(VQ{Y6`XtfdV5XgY{554_Lh<485qPT9($K~xB}rOZ9!bH{ zGcldzOprV^|2s-9d*iMIR&^|POAZ|!uS$=50xn1MA>jA`!qJ=m-t!9-J%BXo2CqCi z8azj!l(SDiWAF? zMs#d#ZEb994EH8(2jdvuQBXh=lVqAq(dI2UC~gE0dS)98kc0Wq-PV>OmH4Fla3j0_ zkJbSsjnO6-y{2YfF)=X;unRRfJkHi0_px?=f2>=CInRPn5{oGhRUKuQK) zW$DU=FCrHBgXIbaC*)VtNc*YO1dv4DMYYmO0xQ{weARG8*;kS1Qb>Yej zU_v0#tI+G=6A7VQgf9Xz#$>O;6P89sK%kutA)BRH%L^37j`&`35=AG$fGfTAZv2-m z223#kjQkEVCSbR+{E{5}_#sTI!I3+5Iax~hM=xB8oC(yP>?r2-34=okc>NglwAO2v zYtAPW($Ua&zc$@$Gwqv=k^TaTo7rM606-yq_@7|56Rr3tD~q!A;v9iM2$`+a&eCqB z7&V>%3Kd+mg$Ildo|_fsBz`OIETQY8Lu{rERnLdhNVwW!n{_Cj#|ue3{6oh0L0UEa zM(qR^lU^YEUS2E&0YS;lt&7Un?MX>;X3_8zoxTVqa3t^&Z~T5dB7QF|WiM^MLVLX9 z{V9;XGAc^=fijPe*@$lhVEc!swM(-sHN611EumQ53G#2H5rtY+UBFv-Ww2-HL0bR+ z1Q~S~wI51t!kw}P?SODy9{qpT8G0~gtGcPHDq<(#U{o)wBts)^hQ&Xb2Xsa}LSTw@c`8&_9 zpy#j4$b@`>s~vQ+jcd*lC51Ej3W?%UH1!95up~vHqq<<40IPyQL$$uR0j`)-FH5)F zDUgJgVkd$LW4TvBACsApadLXvHai;+k4gW{$VfDq%i)WdSlhRcE4#ZOQzdq7CgA4g zet4uq_S9~2e&^)mR8dg@gMhHn{sX?Qp&=qQ75RH>EC1EiRjtG8uGYkt{B3PZ?8_IO zi9G0Idn};OEF+nigOQMsnoio`4;Jbp0X2}(?aEwUULLS?8Gv#L0P>iGhbIZFEi86+ z_K1jxnFa@%u&}Vf6y8LzV*|gZK6R_+u9rXg3b`lO*L4FvlmEF3&|}U9qJbm$b^S2H zfr&Ce2L^gYMqrnzr-OHIHj?&I`SR=sgT=?g3;g*LARvAJ{P_fiL3zZ=`r*U(x;l=9 zg@wStz?C8PWud}JV4-KW-?7Wb$5*7;h>hj|kOT4u@660h zhuhxXFA*dl4{{_Frz1cMg33`(NjxIY2HsWt9N!1u8^hhK6i(YKruc z@&D@BQuZeGEyJS@-IslPYshPMLfbY0BxGm?h8Twj2X)q~uK*WrqEIEgvr{M|BLfDu zJVXHv7k6N#%~woPa%0hHnT(Nf)bO^jafK~j67+>qt*x718PPvtpw@86P(YA^QK#L0t_r(dMf z;~KKecog|!hcQU2S%ewXav)wryI;WZI`BjyVr2Z$21rmVe{4W5_C`*QF)P~uW1(X~rxn!BwUHAM13&2rdfdnQ3RybFO0g!(yHos}P z9ct#tJcmmy!ov1l9Nu$iHu$~A;Q}P*9=nkt-EndW5zGB4%@BOm-ip}(vbWI4`cp;W*qmo%PzYF}uC9jl zJvuLuexEIZ&!hXJt{>SJK)werdo5eOyqdEsE7j9Qwb1W*>P<*QLQ*P*R(TM>PLG_G z6&({36Am7J)UL^Cm&+X=M!TLJ8~_EC_Q$E6bZzq3G; z7SCZ2iT{2{E*rqUnw67NX*&4|6pT6>kLfr5re6YV2IjIyZ5X-KE7h`ZZ$-l%{Kd10 zN%c9>(|zMuc40xQOlcESm{{bJVP{|)NF-reA8SHqEBQA8;c>0^w}O!9@t=`W3~%q| zI%h__G8R{H*QZ;?!PM3`GKnQ%W+1g=@7mrT1Ll+nNE(DhEGs>=9gmkltt=5hS~b9K z92gR^70%z11EPUi4W1<6-yS#D2Ii)~ZMH$*pIt9Q$FuJ1VbI1|Xr_v1X8?0H1YAS6 z#gnUfc(Coh0j6xd2eYYVZr7_!*YV=n6|*%?%bLc;R)=$Rpe!`obc+l00xT@{aN1{H zIqK*t%f%2-sn$E&Z~^`;=o^f${BG5vI;0oQ`*q9aD|jBkm?N30 zl^;MEL_kd~r#dC#vh`+79UwTfM)>K{-QD^9fW-BvZ^yP5}NeCSQU74Q+Gm z-RT#^B){0M*melY77i4N8AySHEyjRwRH6 zV55^LsE5iu-7jYYqva|!sr*eKIgEyBARaEpkF)zVn=Q!p=bO2G z5OE!?cYYc0eDQ5F9zv+Gn8$+vr97b6@)UYX7aoE4tvUpt({>YjJ*XbpfGy-6i}TDt zB-HhnTqePv<>lN3uJngTb!GQje-^YKDA6jGhNmI`lY_$=;kMe9O!g91q<}wezq|GW zuK|mhPDx0xR4CCm@A^lG=PUAbAwcQX4`6ytnX)$B?Ky*bl79SUY)B=s zNG2K5z!gpZB7+P+Zv;@CS zzpx*;C&}kq9R5v52M}7w6~IzAT5R~Jp_wcuF#tiUT5m>Ge^gY22dK^3ma{=MdY~Q& z@p4YHvXW*S-my@hy1KR14$lyxv-8(8iO-{@{f?&6D;OIAD)G)TUpc$g!a()3` zBQbPdWQe7%J_lZVruRIE^PKu)&Iu5keM zIhTjiY2Yy%JyE<5EO%wb%XBom!&AF+q`X%5_dSLPZwcJX7<63Sj@obg%_!A!wzs$Cblf@G=0A*r*l zH4T(K=+vqxjdst3MMWcj|CT#)&m8>%=qa$Uuu3KBff4`6SZV1L$v=ItNl6K6xgbqn zo*M<|v9Cnap8h@HLR3#ksM4 z21H!-WtEBVkO0LeY&hgvKEcIi(J)qMtom|3hx8rjW131WK;Ww}S2biVRw~Sy+7zd* zUy8V-LW9Ggy=j%-l!%G{M-NBbmt}!~*)==cXQ-yy1CD)UyTg&IyZzWcz+8V0%=aW%q0omSD(5FDD>?M+b8Yc_zn<62*9qHkz8R;*qtUiy)aE))nX z0I@Bl`9@UmqSXTT^q-$3?00p&ayw9-anRY(f^#v^4a)R-X1UQa!6_llb$l0?aWB6O zg!3OGWJ1Eir{D}k#niyW#6(C)=!>A-0^2|76vcdPDmb|m9UG54wx`T^MImiY8?992 zLOm@jDIr1p;g2`}6NhWS8d$|fn}!$+T1{Vfji53!Xlogrot@LhcZ)Dr$+WB0=*r8> zZO!uQivN8tXXlr+YE_ZBDSJV)2Oybg87KPLD8GplWLOFLgE%Hzf~0qdu6^hb=?9Hp zUQIu+{?cbsij!+nv+DtYWM=MJqlf zBI3J9WH0;jfzI`jL@g&D2!e8!hH^~wYnHN1m2ruQ!I6=hHN?^4F9EU>ALzW_fC7Iq zXZD)YjSUVO+KPww5uB{lkEj1^{OajR(AQVKa~XegKMzh2KDW0^t3R{B5p_=X57CNu z3ojrBjjR_H(E@APA+U|T0i`GuU>_2Bt^s4y16G&ZaPmNg+4P)UUFlwJfkBvtvgFmrR6&&0|zcI z^<$ygs7+1U`T2Qf;B7RI7ly*FVv~829zc-c`FJ*C^)#AzqOwDYgvkIGya)cyP! z(qVsU^R$OB79lgQJje?HEMcADBu=o!fg?RRIXO^ac!^{$A0QV7m#W$X&doqZ1L}M< zl+pe37>e%hJn!DU1GUJNnqq~8WbrHiy@LbuWJ{*_EOy0z3)|GP;9GyI|3gnpOUlJ{ zcO`rg4yt5L&CS4WXWc@(w$2Uo2L4wXl4_f(T7(2l&yVe4GW=-(!sed>^~=9fYS)j@ zD!+)i)^Vah9O?f~T~bYxRngW&{-?~I$%2L8#N}@rFPX!Q?~}LsGBIDCQ0JvwcW39q zE>=G&=INT@FCh2+`PgYu7jVCl8()yhurfX)gLrIg>a~{9B`oCR{$NG-Ap~*%&(|k(Fn|N86{KQ88x}tP&`(r~taQqPxBq$UHXhWIU;Sth zMUat^?YWX!Y3we|%*|~+I5HzQU1_UX zIlvnT(j;)=!ULmb^*fV>{?J*h2yUx+SBJ!1ZnC36B4AUTun3(zWx18AYNxKe>b7rk zMEQTPr)EnvR_t18B;|7L;)h>~?K(lN;Nc)yl=xLKD2726|w4gtlV zFGnlI;PMhk4b>A9`DD*hH2c>cTxY=u9J7y&ZuLr3=oh;SFvXw! z2@68@9G4dQ*H!Wwuh?47#I>Q2%*8)@zpGZW8`ncwTNVLXcD@2ivn#94cn&kIR@1d~ z0I5)RpHg03p;GN2arD>J%w!+KX6;PXQWeNv-dlcKX?NE`l13Uzbk_y$rhvwt*6Vm$ zV7mp%_tvcL5;{dJ7&Mt&$?Q&dH&RJ6p)DS`dQ4O{*1sr}{OYh-a0co&LB}`b>jY44 zb2%SMJ+}WUpcwSe;N}c42EL}Y855I_exh@FOQ9EXQ%7|=!f%o6^)T~}2mT^UKOz4( zSERUs7t{I&7plu!@}>pT;c35F1aEI|7L&OP=>XdvN;J4CHM%VYC2clxF&S_<+|BpE zBFsx9%$qqD(Y~$+srqi}=}$zG$)9mmrR+-3bcuau>N%8DW&ImBJ$kbZ#}K`BVP=nWTBbhtL+y-d6z`U= zY6-lgpTm}UAM?0fImOK8^~MYqHg@R1u@L5agb9KZ%A8J%X!Y<}N%sQCQZ+~x+-pqi zM(r%hCz(WI&lGCBL>{SPX+5#|2|`J(#M`cIP;_^j1qGs1kE>a!*_6U?F(t*Vo5v=S zfZx2D;!<7)I!vjO7x`m%P0jega*mZeQXVHrU_sZgGJ;4@4V;@8ZDNba9g6A6ElipU z7{2?EcRpUXh#E9-s~16wa*=MI6)VNx(Wy^ z`jvpP2vh_$BKhdWoo3Yl zW>9bWARRH<>BFsk`X45xntAVR}qr(4!H& zjic;44ef!hH~3t>*lxuUc8Pr1H6znCJ*msZ4nj!`LKd_cCcJceOko|NNv}mS>?su; zool=jZx91|hsB7<`vRA~wRg#hk$54hg^pb{A^rW8V39S@!JymACA!sRA=JG~N%_jH z*e4Bw6?}Up83xf=kN08T9ev?92S2I^YgV=>(Z{ZU*4~OmN21L>RdEZ_K=8 zwy4#w8lxID!1}vkA!+s>X|Fzo0bu`I3O)gwRcN(v*p4I*yxi|vcp8@oklsI7@NWpM z^8~dX=)u?b&Wyw-3ik+`%0+EhKs!Sk5mFzC1;Oa`2Z`5W%Y34#@2u9bZaxaXbwNvs z6P0^VPUMJ!%fol)KNR&8KJ++0wYYz;I;wM%OOUSII87NcKb&n587Rd#=CNbu%;JGS zqE^B18VOU@_zl%=b=4#eG21JYZmHR9s%W)` z(5rK3C{z%%zuT+<_}T%oB4bdY_@cOl`M)vuJk4_ zpp{JFi7(M?1m-zfTuw)W{n0c(fBsx;JZ{n3?2k5|tAYiUE>ITS9nFMpeY&H;WYE&@ ziXbx%5pnnR`P%GSJ@m5H^}B-5fs2mo)j=Pyy!?n03Q`1b@BunjRwES#19>W?1gI3! z8*5#`pfvx{Zc7ph5l3hsh7MfFx(A1wAVEt31HfZoVAz{3wQ6MUH-@O^pf8Nv!>pRUY z)rxk}7_}ZS7o~!ha<2YbE8@8AAuaaTjJTmpa0UAF8u}zNaKb{5;wOg**z~z-aYJ2@ zt_B#L7(aY)p}<6mHT<(!3fmmu88lbS*f0pcftTc?*KM;VZPD5K^g0_SnCw}doQw=y zq>}~ZQ|Hwmm~k97#NaC8H^6P0nVnq)*z(7BI^c8&vk`uWLK zz{$m{?U7XIZ_6zn;E59{SAlICFERlbtS7DXkLu)r`35q=}Yg_3W+T-rMV*%1t}{qlCbt z1pyxJrXN#n@Nc=2Uc3Ifx;`h>;`{vALTGo|$;Re61DEYfNH9boy1NjVbz@xPK9;fp z&u!D_L@h?466tBf{Ues$`tCaR)Qk)3{*UPFS!)X3JO}Qz^!Y$Y*Z=qC_izc3L*iw+ z^1MnP-~VClt%I^$-~CZkl#-N??k?%>?(Xge3F#2&?iT6p?vUmm>)3ogY8zcr1iO(n79SG0S=Eejy zUjen=cC$*%&Ym2__q?Fl0B}P_##o>_`-FHzK}E+xofU?zt}f^y(&x&wfN)07 z-u6J%N{2Mb(ZRuRFqRYu2hu@Pcs{S^W4|+ksamEPpju)A-plL8V6mF3v|ZtJ;>0yD zFaRq%P$G`ZfHe)+F9TZ|54NPN&tft*N={Dz|y_dc|GY&AK!e1>+8^U46O!+ zKd3l0^RC$nw8gWBG7~Ahms{Kl(4{oF+PgkUvESFz-*~pJI(F6#ieFc_<9#n=c}FoY zN?^WjhN`>T8G?VG<$T^gT+=Zj;jQ4K}Vbi>zvtrb7%Q(;eFs&X{ zM>A}$g%*n?S1*!(b25AR;=}sm-Nhr2KLC@f-^6MUI9#i5l~b_ z0eT*@rFt70?Z#-(1R-W_7&-jsRRE*}%&#T|%w(1o9$%rh(3#|-HaLOHl{Lh~Xf=;) zp3kI%eHhAA0cr73iny3>5C~s1Wd>-PIf^FGadW@WeaxFfQ`=lrG}-48{ky*-YoPsE zWYEN==}3bf(&*Uak`jtioLhXg>0|;8)fW@UYO~}x{1vyqm&hq;x9(4~8{<$Y=bH9L zr`1KyU8O2MERJS63+7FLmq4R7Y5FNS;+FL=yl*VTH||EARm4Q?Z~l(ns-R`_w)4ni zqfKsK&pZ9yEkCWJ^3NBBl#&Yq&W6Yw5@Pn{xLtcP8A!`6z!Jy*h<%g)#ef_(AzyhU zpn1XScom(NCgLqPjR5xm0Mu%L6KB6)TwLtw@2>%ry=W93eA7Ih4>&fR=MWU#FaHU2 zct3q+FocZaxmM3h3=0k>prQ(0ZS!~+9TOvNdX{Z8za!ttpY)Gs5ZKi7&K*Wu6bIQqp|;*P+6>)hqU+*MsE5oMOn zN--O`rKc{TAj=(M#x_~_WPWgsMtYP@ut$JpLp@9sP&9Krl}W=HWcC!qaD5*hKg{)2 zRu7I}z?KoVPN|4p>K7Z}{RDF+*SEJtKyUln^0M3in3#~4!hQc9@EKmWcX!Bmcw-G~ z-eH5rL`+ND26FYvsI0YK8rVJ>|m~B}d6f4_<9!D2@2_bK2 zHNU;(j)i;=GVMCA#wqBcj9qnubH;y!=sTSoK3A6ugnmKQ$D}vW(WagHKc)*{_oVOO zQ81uLKg7L_!;Gy7*A{1vR1^um)&c@0qFbQQA}^oJkTRM)k{BMZTOgEy-Cu;?9FuASiXZqPSga+}n$@Xwh%ftJ z(jp+(ISMJ6Q@^B)Y@vT1q-D-hE$Y-4)%q;qeJ{d|ec9Qji&!n^sckw^w>n5c$c+=bO2@vyA&AL!pt$GlvUXk{SrUZi)&(m6bD zB`ciM#Ug8qN?bY0RHZU_U$Mj!oBby+E0#frDXv?(YC8D46|wZc8Cp%*iE*NlNJbFKMiPum7$o#m~4x=mB;znyJ{y)EH8v0mGFj z$M=K^Xx^oi?Zq-W zxo~8gM(EJ$b5|{n3HF1`|(F4>o(R5V|1D)mfsD;q4sn3nIC?%n>PTw}EPRgpXF6Bnoh6Hhf9+|1Nh{n> z98}c26M@Zh?!7 zr}odC6f~kb6qTAkC15M8azt0Xm>nu7zQDmIiMnp#bY%_~bUq+2TRr*vObeirKG`TG zwTb#N44>x&Pp!h41r3`YyM;6!8lzmd2|c{IYlK1|AYTi2dDj7(@r^c2wImPR;W%Kh znDfyepo~`3>|Q~G`#)NMdTR-QcZ0SZqEx#HC4KBXM>L>+i|S%`ya1>UoDSy7E=OR? z38|;`X)3bR8Cdj}l&sz0MJ*^`?Q@v5pI&5w_r)>Qhl4fryoHcE0gPfdjoj{L*2zLm zV@vUzc4evh^+<4|zK}9S#1DD-v79@u@L^X~NllEDa1p2%al(?gt~X z;sAym!f-zv)_~G`62K835b;Jp6=^i33+`Tg?^{Ap6N=?2Vy=xRJmx~(1yAgdW=+Qv zshG(36TyV!5f7ERdh!^%K3dd$bBV_)@38A{3OsovTIh>m&R=t4AWM(M>j;WY+qn7;}-8+etfmNTuSMuufvwavo-6J<88IGxKG8 zBA&ITaHEygE%FiK26?|AJtpO*T^Zx{HLr`KhP88W#!ojnnt?4V3WN>BVv)vo=da2j zKVX*w!tLQC`ilEhWiTBC_+ej0;`Hfyv|egfbLj=iPER z=5#^=^~qfsY-slP&Tf8a3er2AXtl$l>?%dGul-ZM zK7J$mP`vDD+W#R6%X!X0DQAn{y8TPFQZ2)`4(UZ}G~TCMYgiu=M}8X6i~J3CW3 zL3>h_fTVQ1tz7-V;(DqN-t5Qa3vx*HYU2=zwtxT3!Jz7hNR{~a`k>bW7fD}XxG<3c zcz|R_DN0D6K7E2;0!^>zgQ#*Agvm)5NJ$7)jM!-*I3woAFU{M!ch5P{tJ2=7M@XoD zi8_80@uM_ZH&Ex>Zp_hLhsxLE5jy zOJP48Gg4|zj@#b=#Qj5Nhg~ENhoLe#35h=t7=OMdCO#Rp$eYi7Ygo0QAHgieqU)I~ zmGVZ`97cu7;d@059CKZ%Fy@_ZS5UsbKr;^*-PIc+ z@01j^mD7cm|7t&d&%#lHH{rEvk9N-sW>? zTF+Z-Z0sCZ{#jMI}Z`i-q_xgJld;on_Nn-{wasNxxuU&t9q(}sg7;xCYt_w-F% z_a|wYG_W(Cxrkd^O7F4CB0nXe&fFw!Y!Hw#$wkzZK^Dzi8ffRtDrkSuibT)8z!DcW z)_Z(>tgM;tSWFl+CPUuif9a%88m_9V6TzB5vw9KO!ub^}s{(jSg40WdX_~Om+BLkV zsreVA#8j>L6~+uzA^uFpXRezFgcYx(wgl>M7YM1#Nd*Cu)3^|I;IdPk(4CM6=JUS63D}=$@vScPwsP19eV^##C-B6Q2sD{O2 z>7S9o=k5LM>M_4_yn@r!y;Nf{Z3@owv(wX_m6dm5V&u7sUZ;>v9@sy-lXy|@-v5%d zOf|6=GlbXWqa`3XMa{`+RPHb1F0qXN2C@I<`X4P}7aZLi-;OBgr<(!1ryEIm)c3z= zMl{jobm@A>g#y$3{68fPSJuTMZBdhx>Vznkb@$8k)iI-y!s6B^61}w=j+PWA(H;^z zbA(c~%_WXiUte}$wcy%}F+42EQtod0sKzOJO~}lQss=V4w>j{K0ggYycBOg61;XKm zRs9Yzo7u!~kfThrKY^L_PDImK5&7G4UL&VC@D#@W%oi-0Gq58j%S`+jA}qX*OPb<_ z)kB2Ld#t#On-@=2tKC+XtNbR>0r}0UqBTtbw5l8|%V>4u#&=p)R@U1;D}Oie^Q9DN zw~3mWJ-!B(HCym|9Ri5UwQ3`dQ(rkqE$c{6=Um@f{o%l88L`gtx%zS5|z zL7z5vddpF;L)7t1jl0$wOm_28f;tH0j|T#}vu-@zL-+@t4u0!hIg2?r*eE$sqVfFS z6G96o8U8{SDdNV7x7;oBJ!@1fLIGy{9zgUAdME}(RDqMUMx%ZN-iHxp%XE%XY6bKf zIF@)S+C2tum_)q4g{W@vB(&=z&w8iVc7ol%Ufz}bK`p=~BtEv8I!;7kV8?ps6bI@P zQVF;w=R6Dbl|-s6Xc3Ou11nV2E5UX;6=@m zg(5=cEJIHS!2ffwrrOfRG-!evFX3v-@6v-Jm2>Sc_qT@Pg8M-Zqw1}O<6Re_hR+WYL(BhGH zsFq+-NYw)CXSiLAf7nQ2>{ZWbL}b>a)cFk(4=HX``?cm_Ko6<0CS0W+o}ltAap+%+ zO037&A3=W)dA(e^G70tB$UkprE6*Y`h0oyHb=k$x7deD)gT-juCzu zTxCN|F%tTz<@Nn3uZ^8GP2AvF$JQ1n)F&)vKqn1uXycQhObrd)uSxWV>U0WQ)n7}> z`!k;d<|&LVtd5s-4IMBsn~2=&YWY*VPYI={PnikcH$(YJJBQKR!41QJq0O(K;wZP_ z>;(VP_&8UVfBtEDQ~?c9-_@iJSFjEK;`G#|*Hkss~Ryg&~%Hk zU`i8ALII~}kIt1v*&IT3fSQL{K+#_P!Nm&Muovy87gTo0ZE9&6RMqI>W%L&MZ9|bo zqKFThOhPEpKgU$fHzun&9JNN6d9djkIWejwNgZ+v-S>Df+@tFh0|l zwMNXlYgYG%FpVHOGj16I;{}WMxcoHLfM56sH%ZfQOuVkp!OSntGCh$r4B6wqA&4T* zzCKCd(m)Lv+T2u&;ADfL4nb>sfG=ev>0sQY`4d~~qh#z`;J-GGK}Zn>&idC6;t#Me z)oBD%JP<;b(bN8<56V2^FS-$>Uj6c;+WlDflb@s}t5R7=ULKm&_BU$53d>BARFAqi zGlY5Bf#Bq~oa>{qZvzg7G4Gw+DE#D2$y0f3tw====F*A!6SX7n{5$)|t4~8i{=9>05rVvafb7Lz8W@NaGkstrRi!mwWcdCEcUS3tnkm>4aobsdY_ETJvRVu# z@|g!ObouQIFF2cmRXx^-8mecOM-<=L-!@7V9ho*OYpvrgMNv~K6joK;+CkmM1dBM? zY9TiL@mwuu-1hPC{;!1yiT6|Tg66}2s$RnCGtuIq%t#v)6e%&uihiYGk>9wF0k62-8=a zCuF=$#LN+H(ZwS#_QEiV_H!PCZq@Jk;jN#TD$&f0vUvP_`WOALQ~jF%k-dkhDdFmP z8%YWhoTS1$dt&EPNf9wM~JGTyGqL1vk8pZ6icz)ygE zz5kMPm>9jK!T+Dn`d|IIYIWJ`cJc1|e2Q6$VvDnc1XMi@iv{|&teZ`0nH59!M6~IW zp)tn|-M*$L#!mrN8a1W~R6%G8rg&M*-?&0A*9xsIGV)0x4%>vJBTF2{W6+l7w_F7_ zJV8~AjjLpgL+04uUG)Q&ThsEV$z-@g@tnEDsQl&*#fE3`2Nx)YI?3br@|-TL$h(SY z8g87PJbB`z8(2Y<8b+Isg)2dImhK}@ zQ-!Dnp2yxQqY&wgXGR{6$jzCe(b?jg`6_S)gH(dZ&2@b+5E~y%`hIB;Mn`hBESjml zrI;v!ZEEp>RDJfVyvFw*VStV)wd4~`FGf;1)<9h>P%z0TS5!bnaz&vD!{pF(K&$un zA14&6j;yD*Cc3&D|G9F-3o*xf&HVWp3X}R*ck$xa8I0W=B{bENmQqhz_4{=luJ~## zhMS7aX?rfI2t9cyV|3C&hw+sL&u^u9h{B{ctX_Mt?+bPnVq3@lHHt$<%E|&k)pL&R ztR)Koo*<#1E)HwP9nQBTcE-{@*4)9}3jW*X;p4xHNnBpfWWYF7n?~?D*p^pLDQ5%AwyH>*9lcExbd+@ zJ;Sk_=VvZzX>`{T@vi#Nq%5pMkBPvFGDebQU`0vRpdJ>H7yJVS7a>9~=W@q6H<>ET z1#U*WDX(i-MAAMbkw6bl@uYBIM2Q$V?DQh~uQh#EuC$axYA8wox(7CcudYL`A~IWz zvhj}P#J*GGAE~pe_*kt%2FsePsQ2@>)PuBB>-z**#db5@Q#VXZOvoX^rRr60zdt`k ztnsTkcf4Yl0P0pQrs17}`ki{?NO6i<klVp~5)w5%*RgrjG% zCMiaoL^`AWyHWuwK;7^~!~cmXPN^s=+0}eIU<5{^(MTYYSKk@a36GMarJ>z+b;lC( zr>CVgnkg*W+D4OCR_=OvW&`SdEzGgCwlsjdegd*L(1QxxKFpimU%ppYAFy|-HR}zH zs;sWwDydKfs`n2)h7687tr8WwxEjq)xCe7KLNw^pWlKyWKkq^(TkTew!wH4RlvMKx zXlP~*>j1EZ*d27U3C3&!YdYW+Ux)Srg%k*I5Cn?d%|010^DtZ0O1<8iPS2+;&~)^N z>+{_%M4?^>b${g3P$I2|%(354a2OZx#*B)QpfKq3v#ol$plH<}ZpXPU=iL5V}@@87=coPUVpBwiox)%-5dBT`UMY&_nTv|dhqiNupxpUOM1 z248lZS4%)YGvl`;4(d!?VSC4YfK51pPC``u z+o)Lb-_`2K72ln6bwUXgh<=SfPrhwJ^w6Jw_m!6V&8C#cA| z@qwg>535{diC`s0Cw4&;(ufz4*pL>UM?~VZL~Q=yxZo}p{q5jqJN=7u?#pA1gq|U? z>-(!LnJvb1`f`55weMWifs-5#taH!r6ynj95-$nO5bgT&RFTr}pAf5bAOiNtn?A7x zXlbO>`Z!a`!i!}J$O;T0ko22vqRp%njxL{M6bvWlEzBGX@2AN8qk=(D=FJ0~`qnGq z4j$F*tt**KY7fxXi%UvwOv~|^%$Msxe)z!X-Rf=Y_v6O`#wS1Zq8?&`?}ddFbb9S0 z@svuyDQyOn_@8Z->bJqbY~TY)07T>IFntF=Ec`@svRqD9o&HVu0$dhYox1kXsG}{I zT_GVW4Z1(%ydGL$3*CbXxCH=l@Nf^AoH!7Dc=L4i?KMY%rK0US$KIvUh6gM|aSsMzt|3nEGzK+1EQ$vO7FebOEkZIA>>-0%%E@w$baO4#2oN zpI^Y8UCj=+x?SLX!iwKe43F=tE)%)i#LN&BxQx7 zT9@O@4+jEd?RN*Hxv{Q$H8uNIa_k7}Z93Cyv9+~ts07m2da0RVBXRltQLs-Cw(z_n zl*q>?9*!Vk$GkNyd^GD&gbi~I8(VL5xUsMMrhGoPbXbQe9VOP{U2^0>T_Y{uFfr%t zZQ;1RPl}|bgm-_Bzel*7+95KQWv|`#OSVKIO@3FGi0vvdYqZ3}Yy*1=imPMQ_#}da zYaHzbow($uVwJkIvokBOW}5+_z(@vP2H2v8Mn+)i!P~Xpk=eDLec0@e+FfpPoGH^v z3ahG$M@OA7+gIkj|3?fwg6g&A$ge_|OrOja_bVzu$_mn;*8tuP{67fwW+zI(W|A{A z$AenI!Q@0&NDJ*?rO7b}jan561LJ15Tbb=uA`Xm^4oyG7@2PRSFlDt}4$jEHm&}Xh z@wkpoNs(xAK57I%8>~=Zc6&uX`y#OWU(Jg^LkG-(`IVJjv0JIP&(iB5`7&vyWV~Sz zFfh9k;F6S07k%SS%E)nt2%%Xw1y#r8&g=_3fGGGrco21(LO{F!_pcUMy%l<9^|mWP zNl9G5StMF89h0QS-{yXgL3s3s#cZv8ZExc5uWXaZFpM~h$!rF&lz@pDiw&VvF>uIy zmHRUUA|eLZmrc&Jv$@{DB`ui;OHYpo(bcV$T>Dxs`o8PG>v&lTS1lo>AD{Ww*z6GmMpAUVQvjimF4U#!;PFZ~hvN>)Xc`o8g5=p*5wNnrEw*t*qSIm##|=V2!@-d< zoMlh8>NS2H)i<$PYd6U=f`=(W{2mte2^_3}M~{z08=G;-j3zXh9Ul}F;J~qo-g>+7 zYODiSn91q-uY^^oo%r6^SjEsVsUl#-gh*qff8V*Z@*)&o`l97O=pK$IBTjsmo zbYhAcxh$%Oi|rUy$F;wxdRl&rFNoZJ{X{jDS-bITSKaaI`X^Yy309xZBcHw(v!`F; z@-(HF_2pc(n1|YBiSvmI1pesaGOH{?`%u*I(IycscVkW;GBwsIe(`L%H8*qHQE$aX z65L`R!NZ0V5D<8M*soqCX~69RHv^D;g~Skx2`Wr_^)F;p`f6M%gW{hofiZE>tlg0Ur_Mv(VxAt-gh59LaYN9X&#_}AV74Ik%@_j zswz4}ndTmTBE5EFC(zPBn6I_B3Anw79M0|}7NSdbLnC#di;7vTNsSjN4F+xn8 z6f0Q$-3Va(quAu&z@{f-Ao{jCnKzinV_l;IsvaSy(X)(HGaaD}ff=iC{!E2L_1B@+ z6yD2eL(%+(Zmxd1ntU`gm0FE8`~DmdpBBGQ7@h3?e4qz53Li2uu?0BMt*lCdrt-gc#!1)BNga1& zzEmrV8Awah5tHeXQiQ%``2i|(XnE~?pMUu553CTWu}j9b2mGR`vFJuVY+Kr;$?f?> z^{R%zyh`a{J-D4L2W{<%^5AU+s!`!Q#hm(L5n4ns5=E_{c&tZDuD==`*qkw>L^1ZE zA2GOqf&D|?i08mv$A&d|KEVw$V~a$*dR?x-JHBNs`0UkV42qG~?^8|K&SOF5yoWFH zCjE{Nh94PQ)COYsg!pp=t(ViHoo~sFFb{iCw{!$8nUIUDK7VUF_^xhP{{l660}>Pj z04oa8Ui$xNb{KXIt+s1^b98jPyI!&j2@NFzbX;=sXOIPm6b@4t@_)1dVZDX3mZgVB zqxEQ5SVJJ@Mi$%|z#R2z>;gjdsbUpsaB~kVR2ePSm?6Gu9Dt?gRX2CG*$+5pT##^Q zYuo3`gvD&$3B_-Soi13gp%lNELPkJz*?!b#sukTCG{T@6f~Yd($rMm@C8W2`1JXo)p>_8IDNvg zSQ2cOu7O!xNS-2|M(^1%4}Hw8<0*PxFT*b&00#<+3lyPYb#-VUUj(!zf!Wi0$!sUI z+}zqJoL3?ML3$G--cxDdB{StGEPB0Dkl{R$)%_JvvbKzBvj#gOY9Mcg6PvXsb9Vps zddUp}q#z~65En3-jbZa|-~6uVI5zB$d{?S{7oyN2l{jL$HP8SAzptiCA0K>BVD~bO z3vZm9bhn(yZmhWQF}a<|FXFIRDxcs-T~&aa0|?IOXavxZZsRPu<^eJG8!siE$|+d* zhG;p-$Fh!dEYFfX2K}@GhKAsj;FbKW`+&pk2mdg{mz4TPD{QdY9(67Me!yC>UlfoW zsWT1HVQ2BWokh>XGjJ{6Ra3+SHi8<}(e-s)As#vx2fB9UV;?`M`i2$VEVG_(u8A$1 z5{`eoM{3gc-yg5vcNH7A0RZlytljNm1(bv@ zm!73tnnSX3-E~*wu91Afj0cbbyXXcbBYCIGM4Is0kVG)OYHGwo3xeI8H$TjSdkt~I zj1+Q@$p1CrQ#7^Xr86SNEO`Fv-QPGqj!a5Q@`l-ew*jJoEiI{z{?rLkB}~X|MB%-1D2nPrEs%{09 zD6r+{1KU)5Lc$qHv`DVSKtt;th#>|!ksKfqi_u#gjVA0ZVoYDeK^o1&!|kTa$0eh_ zk02IIKopQ&k38M=;v^d-6{{81h-Iq7?OtLamQ&Yzv$8TDhui!okr-W2W1|Os!m7uK zN?biU-A{{pL`O!?n-#IZqjMbZkdUR1{rPek>LyPH-S>>v$rj~14uXPMUqLh2?QLvq zmvaHq^+-sM7!Mn)F}q@jJCbWJhNyE~w-XdZ`}?Azm2J?M9S2N|S4*^1W6bsS}XE|@!6pKUCPKE#pj`D6?` z5+&+o4DI~$HYyYEb-Q2pn}=UQOG+~}Ss`U(%fREovy()7g?||7avi75`Twv64v>x}Bi)o0-(Y_ypI`p%rKgB+Dz<4%Ze@Oc%x$jIom65S$33 zx{+s79Z3OIL`Xu-`m0C+dzVysSBJ!-VQ*F+`D(hSvLNZQwmC&*2xP=_He z3y|HQfBN*QD0RBK`*u&-(i#9{1J40?(3RQV!T z9Xw1_r44sjIx7xMazN*w+itI%zxU#NndAIo|kewj|6CMbgIJ@M9ga&6M zIW#x|h!4^_r~LrR=ILq4W6OY-y!-25%yImi&$1yj^b7?g_)bOn`5NeTsnwF>2`j5c zbL0w2o-K-cB5(fvj~KvxICbFB%pacx99+z_?1vpZpv_rNl?#qTVUyCtTRQWTBEbCHFPYnQ^ys@z% z4o+xbnCSL8uvx55GRru+hbCd(KK-jiqjOIj6Vvv3(<2}_Lw>l&d|ZRr*pNj5!80{A zn_f#TZcORGGM~zZm~S!deYo=QuDpEgWe4da_lTS4#i*NqP=o%d{F{XLBOfMW*Nxp@df8|mD>fIe-I+e`2i{tk}J13#<+P{gDHJzTCZ|_;NYJk z2I}1_{X>tcS<70-Xx`aC#;0{5)T=@M50_Tu^Z3J#>ag6r|4{*Cvv{Q?@J{i*e?Is} zK{snpEeHLE{#4)CbanQHUh6Do@gkw^t5)Ob169J$pu6ny>UwMIQXqZ!Jv4-(rM0O& z2|^D+kY&iMB03@td!%3%Fovx^Bzi3@+u;qn(a@nGhFl$7-8m-F>GYRrVUDB~L_MY_ zshzU-qJZ7@eP&HYDK8s3b4;ddHpG%Ld^>c*Cp}m+??<)zyF!b^UNk6c0L1^EKSscK z`JxkRNr^F;mr|FKs^UmeB=sK^2UDKMZMc<*wuqoA$bRjLsuA<;AlkZQNHUQAKRoj`bo zKzFM-Pf_hpN60|C1bCuSM z+5lVLn>KqpHiiJiO2PRu*bMHMOQ1^KI5>dk2V!t=@C_I%0-yOuho0Va3fJe`jEd>JLNvpvund1UYXc1%}@IHQp0g%|^lhwOQ*E1}T$`GhnWV}0u1|VD} zw{z=qT^W%qc}AN*knT5;Uut9G;=~$k=|L8%|0o1@8n{Z9JL2NvcFit`;D`k-qpy9D5rR|++42-X77BQ$ zx`^`K-+ttv49IBm;_?GeFd5tk;OZ|K{MP6|8UXXjlqhLfzGN2o4=`L^8>{V&XdHLx z`T%&4nCQUG6ES@s4}u<~*V^wcT?j%Cv#$M=3plEiC(emlcGOvEo92HlD)1r6JMSZ(+JRXN(P%Qq&FeluOo*MexnF%KkhR&F zDRKm<7cHsF%btcto3EFc=l!0;CoAJ#cVL{VG3<5U*zgu4L76ODg41q}AKA^Q0FiOx z;LzySZ%_ko**j499=r4~(=*wKxkkx_`s}59X!y zN=5KKU1|{#doWo{iKC#5fjA12Y?^&1PUjQdUa-M{JlB`=TkD8!PG#EW z$0)e&%m$*1pZ*RVkdpi)2jCv(x2avkk!QBD* z3XVNK3YP0gne2}F_4FS&!WPeBIXIkuwQssf13_OAWo7X7^{ilfejcMtxF;{Zy(OtJ zq9F&ZE&{IRn|uE=RnYv~st+bW^vSB* z?xz_`cnb@ce}AqphlWro5~x7b_Otb{=byY#kTv^VtAX+Md|2a#)(QdSfCvfCI;2Da zcBvx6mxh_#0)|be+sf-Z-mB33bQYT#Yi60XCwrC z#%H6PpN?lfuPaP!l`DMcR1yRCyQ<4#1DgB}PpS}CqC)XR3QM^~ox4ec+=9=NG3rhd z@vC$s3JDI51H#$4{wHT$h)|I1Ibab$`kt+7#q*li!QeI{r;F_{z&azw#?u-;AL;4p zhY1taYCfIRs+O=k+R@sLKu(%A zj1C&e1{QD8WCZPu`bmf{2uhC-u6kYw>AG7`Z1!R9uCS1|G#yN|+=NM|GXDT+<)`3# zd_B@E9vq&17`*^!K5~c^MK(H(TugDE+IWJQeUCa z4+JU>&uEi1)liVC$`&o)_krQ-1VP;RZ$GH%3Z?Z9dMEhZn~Sb$mp8uszd^j?LaQ4h zh@CRno8kcJKyM(x9C?$ri3!oi=LZW|xU01lfU^yb)90#`kR2}FaAm6Du-UB&4JQ(U z%nTe5FoObITU8Ps@L0Ew8$Fm1*GF9LdQE^(0+kw>3>FH0hQDGFNb_^p=+Q`Jfn(LG zXYA?{1io>62mrSTi+H)OJ-V4$J7*-dG~$mx?db_u&j1-e3pO%^mIpwAQH zV#|e#=KgMyZEC*q^awzUJo*dLH+%E`_Y4ieg&r)XqxqoXo{jM6EVRlI|vdEN@2n{2c#H? z@du&7A0R-~P>xX0UmVWMoJDtly@6{EOQ)s%yEGZdoMHu;`G7m81_{=zYhE{S;8;&) zwE~>Q?D|^KVB6)kyw>u^Z71|!2%Ny+0VxOP%OdqbdrPJ?; zUVo-IiQz(JJ0#>SR)WoRJ|%EdA<)t75Eon@%m)Cq3lbhLYJ_Natp&Y`*?#zI=>tx{ zjQ)2}bJZR<2F>3*e5)DXuX!@{=SBc@@U;%9s{`{XBJ-qVh947#%Db&9B0#Kk5pefh zOi6XSZbmeL=>#+vyK;au+C96tAp0`WFy+Pzt|2JIUzvr4{$NnSyGrLHvyrq0|I<@+ zfZDA4?iT*UWFlj9K6G+EyoHYt9j-QUw0Ch~XhNjM2ExitKVlZMw>AHN$W5&U?SaC7 z#@#mNul96OdGy%>PU|6)1;eG5r<`}NQ5>7XmNvhGF?W0VTK8xN?rlR(rf`^D4RUk_ zbkdG0N2f=q;hWX+7ik5W0#4YR|5+67VVQIM_Lw*=@?A|_<*qYFkyhRE%OvOv3k&)N z2Fc1jrpVG*U|i zV~8)mf}TFm9Rd_Xj4+-X0QWpzDG85kYH6wTdT@xlrrKG9LqH&5uwQzDx+I^RtiU8P zngdL?NqHxjhT(89X8-|ECmVKNuY2L{Yc;(#Jqs^@s1h%NTFSgyXYn)jSPsYgD#I2q z72xkel^%7%CV*I(tQ#z*!!x|69+*>G5OPG}zbO72s?Z8Uj{rgWc6na$)9qf=uyEta zIC{;s=euv2v zIDQm#(}pLD{y*Y%%&oCv9h|w6HWDXH3~B1&`?~J<(yM!kWJ`Slf?>1$Q?CdHF1L*lcE_bayrG9iof^4LOruSd9zu z&qnj>*8jX9_Tdeo{SyICe-=&LUX#jgb3)DvUt!_v-tlonE-o)ij1=iWWy}2wYLt-Z z;cZY{5yAfpt$QJGK#&tIKuJ7@2A{|Irf<~gA)jRY=0R=oMKK>pUw>JTXrY&p80Ue+ zF#+=BM@7n3FUVF+Fqr}xZkM3^=x0P*I_@_iz21UBq^)|qcr?tQ!a2(qZT^BXcfxep z0wF8Wz}OjD)a54MVv2Vmd0d=F8B(%!SWeCR^xItCRq=t}Xignsc$r0zGwsvN2#uiB z(-2FE)zPg!$d#B>EsHJK-M)7~>=?QVOFP?V_-NC|TPwL~vPKHqCZe#*620@+4;mi6 z7kn}a`uh8)^Q169Cej=8`EpzkQqm@o0p#WELG;_lcEtEYpZ}wv{G|<6q{-Y6Igr9T z8GyHEMY(a0UjXg8gO=btZ_&^A@@hmV-6g(SiZ{VAFe((i|OPzuceFQVykGe0(Eri??l@C4v`mD zFs+J|(_JBN_oYZ0WKX|YY5>C_nk=Sy30bd^K=r|D^8o-Hq1bpG%ZHou6Su#k)?W-K&{@$Z>JHc{oS)6S)+ z@Cs6!sJZ?2Q^r7$`IR{3a2 zJn#c&n%ZBOavsc|H2VmQys*CLfGFCb$+o869N_lLodwfa_pCe6rFN<5v z(o=s5ZGLPCFvIvVhRs|FzM zZEpjitrHzS7$BxJ1#}g2bBVxFe)@ESAD5vw@cm8PM+MpL?jR5!ZwAIyuwKqq8n~c* zYA~>{`0a559A&}KOqd-&Qwju=JNvWB00WuMmjQDQpmW?1VD|?>#P2KA)!HiP{b-L2 zFkaA{g#lbBJ~8pNeg)p_N$W*04&{6^YN@imo{07cfmn$+VG<~eo9F^nq@(l{2mPx%d0O&rTyGdEDz*$Aty}CMgxPZlW3)$YG=79nIwCyZ7Rqr9x|(FR7q- zYwC9m&F%gRa(JWTh#2R8tR6Whiyxir>I)w3#@=3F zhYutrCDg0-D?J8G_(}mP=Uor_TaWct?xvPiz3rW2Rwx z+D=LbjH&5VZVY&t2mS4SNJ;PbZ%pw6D0Mt;zUumTA&`>hscUL}z5U7!xYT@=5?}C=lija8Q#ilz zTFqH!>2-|x95kn3zwAw8RQ|suni0Cmp}j;P6}bzXipfm7)T-sn-!n4UB=bUn_L_j{ zg6`-K{NMdqFVo@sd-vDF6u_7Hjg9^wHW`ev;ujRcM#gZ71uzis58|1Qe0kzQL_pYj zy3sQOy6v96J{3+@@EX8Q1w<1OAz>RP*Z)P?TL5+4cI&?=2&hPxG}7H&(t>nKE8R#- zDwNS8>rNK1FafAPHU-v4)>vuDnn8J~G(F!=F}`(F22*L8i|pv}%U zRJr-weny^-g(WUZ%s05wE(KC`k1uvwWj-l--G#qlX-Ng+z|MFEa%^JaUY5B?D?D7(rZxdMuUO1QeU8ZO)f@KN!0Y*o73t?qno#vfr4UE;js{~F;FoXk z$4&+)|NgxZWUxa#&3Z)5VNP~O+fT-N-KJ6uDgwWB7@;CUsDhM=%Ig64~j zpnMdBCEJ)fIoTZ~frv2HT^>l6KR;@H_Kl)@^|;Vx%;H(~ju*r(N2z_ufu3AKWHIL{ zApI6LHc(#&2j4$EJyt`0Kt7vfAN_7>F(Oh;)q7JQn zrbDd$@#kkz)!b%?qgMgZb#IeX!@|QsK5=ca-I$%7KN=k6m-p#d{`OtU%s~7#q%~4J zaRx?dER$v??OT42C{8B5>KGrr%OYUAeLIvQQ$B%AUg9$)(l4A}J;Pkv zvA?grwteVjfS3Y0oPOstpQE(SP&_7tXZ5d2X8x|19%uGMl-2Z$v(Tv|ztb+rySp9p zE{7>&^+b=q>)s$qdVs^RJLPyY z%g>rVXOZ#E_Hq-3^RD|Xc!&0WL1epMEuVY1o!GEnwB_z}b}*IJ@13gNO=>dS+!kx{=Et`aR#Skv7p0teI-p zVHsQLh%1{o+wvORtzr7l+?OVX1LV^zY_tc6> z00FhN(Nse}!RzQ8XmJl-D~lO`99N9X`$QvbW&7&5=@6^~9~>99nt@j|K0Z@!g=46b zmv5b)E^@;F9Qwop+|#t$HMhF;qDoWqWzZwH(xvxG(#Fj%EVP~OCs|IEdYFk!PwQ8E zj!X|_=j4=gdTA%r)iG%oFXNDqbPi_Ug(9P6`4oe6GKJ=;*6v~)2F#p#ryTs+ytW%m zHD^H(;_>@UCbVHwEA6OI@7}$sXny<%r(du0g^8-Elnp!qvAUM*)Pj}&jS`yCziKge)h zX9rQLI6PKURo6N-7rn{UEv=FpN26GQLJ`>CN!TaJ1;se(QrBALtqoQ~s2_M?N02C# zZDG@)R;inGG0!GSu7}msn%q`;Ve%54IH0?Xg)?Dug|J{Ndq6CN_n7c(+GGSd)Su#_ z40?qSzk!2Bc0mYLLoj(`)Vp^o_4U&ea6=%g?$-XY2>2V=%FGp+V@-{B|M0PN-+&Zo zXg(S?v_tXsP_*8`ECY3U>&<<9;f~+UQJHEC57{&5$jIz3){TlGrCtLNUr>;8I#fxCG;!}t3A`x-DG)GOJ!Z#N*q zXtEH^AD_kZBYc^k|MOk61G8T_0JpOSm{Xg`v9LINJP_R`j9lvshziA&n51WG7O>w& z^nu(Z-hn39b$qb(M9nskw^(vdK5&9z%=5KhBbMB{%l((we0&6zwi7+klu?<3mXM=A zwrOAIx;|?&@#`VbX+rpB->W8{5{q4tf$0jwc$;KQt7FANAT`5V=uieo2rs|jsC{=i zI2?ZD$d#eq+gtgPN49*rGWYz?4^`eOQXcDXGtP*h@U@~1n6OO!7#fX|-9Rm8J9kC*G*N$Bb1=KZU}N%7tiXr+@F_3*#< zu!%(!6fAX4@FA;?*b$SFwFHyv4lqG$fi=xz87pOpMC?j0fwLIH7qWPi6U3VKx|_aM z&eZI8bf+_kw!(an!|K;+_Yz)H(^2G$^=U@YbBMFk-O!%zO=jU8ki^{5sPO$(^ys-Q zL9}AcXrO|*Qmlqg0yWMqgA97E?1dd3eqhSrPtLH(12KEQF>Rr6vo*q=Uk=7mL8=Z< zX%*f*SH%pRT1n6rH3#LwSA+8<#qE?-@3(Lhfz8vYYcWAo_o9`oV`L;5;ubR-3m&0L zkWLTNGYesV9FI8}I9Z^ben_Niu8KzQ%9Kpc!WX0aTVwx|KLu)4XNp7rVjrKysMXxJ zZ|14|s{34j4l}KJD_Ez1h?m7#rZ=+OH>bmbgOs_8Dd~34y*wyUN56LHhFT*rQ_Al% zQTsHXP$l0jADz}!ocO`J(_$oXO!#HbgT?%>KaI5dGgquR&8&R$))Seq#%WqPiS3^x zYgw0TO!h91uA8GR&mqne3E%Q9CFWzh9=SpeF`*rdneP!9Lp_CC^teb&#l&EfKU7ZJeGlAjz7Onw>&(00@389s`jThNXn}h)8tqpvaN^$;j7`L00OW#qlSljyNi;VE=mvC zl6;sPMkknhrl$7U?u5D??sm-S-U*YIrt!Ym)hF{E_q<2hYzt#$%ZggR$KMFisYl#t zkTOT5zR^z)!d>O)9e8G!f%?2t`TO0UNXq8N?ZpM8D)O{(jt&@DNT?(0c!r(DcMlEj z&nv|yxF)D(r_nO3abBN|QA4BTiBi92nzs{~XTztCV zFKWDOg&oX{=x-$;jd3Pf>{=jPhKhs3Sx%w;b#^u)SVU!?Ji&zhk3v8oVbAHo&652N z>vHwyJXsL>W`uk$1f-R~vG9?oXj)(pG9sK4IzX}oXj=k7xB4UiUc^SfOpA}_1`;w6 zxM2)^PZ8a=MWx^$)zPV8HoU+GfJ&9%obyVo$6lAm=Mlz#QO+L%j`OAqP@sLE9vr02 z{%h29M)N?q7vB9rlE~_l=XCw&54OI+rkFACiwnDnII_rL##N?CY-VZ->ImlU9v+aD zLC1g`Ts)ny%TUQ-BL~C)#u+fa7(wVCC0tzS)YQ2gU0s)(t}o$?5nDKU@Aqa^(<7+V zfHdN@wKh=iF`zrVJEAQHxTZ@WBEbZ-?O-ixZ`-daQh^pM3xPv66kDTW`7N4C6*t};)>6nse@L@<8%oF?5{t1dIB7p ze3IsTrp?u#xBh((n^eX-Cn*BZ}YadQ5`Cb1C z>s2zhf`d@$;}#tkS1^jS&V!_#W2i zLqG7tfN07-L)t`Z&2YxUA{6Gdt`rQYc79(ltepiT36YHf-O_88O0jnBN z0qDU|LCF1?Kvng)#BDPvFgO^hqbZP=GZ`9g>DR>;8%}$G;u>%D zpql@}8Tq(Gnlg!lU67=LvUT~)X;ZAuCs40gHi{l3_^?gKC#9gQpY0FuLp9h8BoRm; zl_=EG*&NG#>b2-3;OLn5M838cdV2`KB&CKm1-=428?Ki=k@YpsVmS_T_OCq*rReBn zVGTuC9W6ve2niv0_U*R-0?;euot*MVN| z$_!3hiIJ7r>!dm!%n9*Z5`@4|adE8q`OJhB03`Y%qi@K;N`j!Tp9(aNM?&X};0AM> zYM94_SNBy&fy#X3DD3^ikN92PqOk;?~3fbcqCcvKT#h0%_}I$5{Sc%t;!&TZi+p9E zNJk_BrI9ywt3JMhXI1w10Xv`BcNvVat#`UFi80d(1WA*USuGuKJ5)}{fFIPX!cL>Y zCqJ!h$wRMd1k#)zdtc~4W9*5`0e>W^UX-q#{TzsVfJ9C_QFlxS-b0w!6ipAf)fqZG z)l2V)Qx^TvaC`)KnL@OOdxWr0cK*@NznarO^v+K-Gn^&7st$RqYB~L{O;F!_Q0ApI zyL^r*(awInBV*gUrr=asvplA;j&$Kj_nNfS+c=qT)=F%!XhskBuU!hl3Ce4oTkL_56NU*f*Ove>!BGP|9ILa0E2Kpq7`kwnk=U z?FV@DxX8*G)otm_U7LFCXn&Ra5tL=`lj&lLU2`S3$GX%nqEpFK~tPR4Z z0sW2DlawOc*H^r(U86efP4L%1PEMyH;M=fif2zf+i`}G&>RpU*nULb9%4^cSO0cN| zmmQ6Kwu(~)>7UbRLq&9R0C}$ac9BBrE3u)xCVQ^OHiM4>#RIa|W-o!mF0nRQ5iqiX zMM456LmcqMCpE1g22sAZ^q0=Xd)`zX>W|EHU7sd|)Ar}C(=*4YFqj3NFvTb=uaHxn zi@k2HqRDA@qLEd0YsBg@Z5cC=v&@L~Hx4QL;`!kfQzr}OpU<&_f>Lk0+ogv_9wDx% z9U`65GmJbbf8a_%^HkaG&8@fkGW!U4vs?GNxv}NeJiE)Ww^*HYk-w-in(;=Z8`+lA zmnm|gu;#3FvT^)b&&;TO+6aDk3kwTyaKk)=0Ra}w>jxbrmvyDK6P(Mv$tHZy>Pd$X zHS*09I+^eB2)HsrydYIk(dZEVG(Y+8)j>(dbULJJmo8zuC?Eq9^D>usg%cmAaGIg1 ze+n-dm&sHC-^!HM`Q$y!DDvyVy_K5-YJKs`#ZES@sm6=aQxCC#=EnnR?l42JSv~Ze ztZE9*pzsU3#KGph1xX5)Vb62^2m@)>%C)ypuc=BG9}lk!`eS-5#gNb6_0JixYD5O6 zk2m0BVvlV%4)^RTM&MvEQJ5YVN9A>NVd^dd-{|AX8r?qETXH|);z>Km z*608uCUfEg5<*4mzq8%Pb#9m2?K7wt81tq5uflr5S<)l6f?&|;k7_YAe?i!#4VBClz8%1UY z;Wf|t5wH0yWm12&=?_D4tvN0kjg2PVjf!}Rm0C?5HP&C>a3LkD6tn!!8X2N}cf zA|uU5@-=gEa=t+V1Gv|uZEZIyUMy{AI?OeKvpQ{Y(bV@@EpEc#lgCm>z(FY)cYq{o zm@Q$91vPGWK)QIbA_k@;#4!L{jajcUJUSW^PLncDPMiQQya}hrqLP8s1(YCkQcpY2 z*Iz*V{t!}+B_ti*|JDUob<^*knLRGsR|B*J&6xcOtS5ZL!~7DWucE^`oyEWG~C_)I~hCiI#wu60(nQ=nqr4roBTFyP(E0aStT+m%fV@EJ3@<1Nj(-y#vFlyoL}(8cxsdNOED2Tp z+G>nqPqc`x+Sc(tgI4a8h1I8NyX%v&Zs8_7vP{ygw!%}9MSEgp`!{Sa3~05cQlS=x zez8`uAq0loygJ{k67W2rPvLVghalb?;Dqq?#XdOAFv-c4VLHGM@Qx*E>1iPw{O$UE z^scTh@4YU%i;J?;ttOB6*ZU*_PDnNS{Xi&!bOGe&gIUrCYeT^hpM%e$`=iEgim@lZ z)(FxBAd1=yZZ_O#@|I*S3x3}Veh}9LpkM&+q6yTLx6j#UtbFm=Ame>flA`5j;_XJ8OW`~UZtgvHF)CW0zPP}1`Hs`Az85_B&#>sP zX3k_2uQxj|iJID@bq-#t{w@;nr?q2psu0?0FVmU|6r`Jn@Iv^? z5kyf&o-YJGWZ_ODPMI+GJWle8XS%!2@$dl;FBnRfZ(#zU!V+H4r2!C6l{?I(-2nWC zhIFdzNpa{V(M27GK|HtUnb?d_XYVM7 z-$9JA%A!ksPEpE~gY}A3ZqCc+r@vD=3aa%L3TvYsgW#!GMBc(CZ65tKA!C(Qynt)2 z>-zGEbR?yBj|r{?UDiICf6B4FpxA}cL5-}O5UJkg?k(@>C0x8z@wGiP`8l$3RP+x`5YOU0**O@+G0cZoV~L17Y_OfJfguS%`wcxt80;xH#N`o2(%Y z4i0eWW{$0c-n)#x7@`A6fJp$v6hJB1d$7mo;M(6{V50ywG|7zzF+**AESTi!wAIz` zIz*8&S>>NTt@h*z`141hr9~KWsV*;0^ImDGS_;Qk7Cj1&4JnYu4j?n|_gY1`hu-@* zuCnkf*8Y(Fj3=Is)i-d`lKBQeAbh(xO5$_f=*aMlj#7WF*xiO6VZWqbT-cJ$Rt1-& z!%nvoLS9vPe%K)kc~W~jG_vV!lnGXUn~LDsEZ$)J)BEHHs#+tOCQ~S{F41H2`N5qUk+vFD> zMch=HMM)*ZAK$%qFW;3wBW(X@?-32nTgWmqAlCBbZ)|M5*%W|sk`Cl0@FFp#bm)J3 zehXHA@M&;Bq!Q#?gCh_ZqRv71N5;?35B5vW8%`m-T>!pAC5i|tZanMGuZOCG3tqfL zW*rGr)10L~^qX4~Q>drxeDMnTqtH2*i>0i$cQ*pZP8h{-1jK*~SK125>Fe_f2;8Zz zt{!&Jg&z0KP5HxSt@`=nE^1R!&(yV|qZ2cOj?4k_T|Ntec}0!Snodg8Rxe%SRa9bKYh;)`T0*ypz%(Pf2% z`m1G+e7iV$7e=1ROZ3!y&=M(O;jlNJ_nZQOjMd30?pPZ+%&Fp1;e847$7#ETuZc+p z`ic{6BMIA2v70iecf%Op##1~)ibRMRs{7=3NO0j8Stmx=b?Nf zTb|W={p#Xmw>y2R!p35E)*sFcRVq5kX$ediCGHMH5MT#aI65&A$OzwFvCW1Z`^`5{ zaP#tVg>8Ni`Ym9Jh(H-|)f$t2D1~HgHRw*pkED|7h%^%-&}o_!@}V40T~(O1`SQfM zP2FXSSpIR<1fc?>JljQ}dp}CK=MLZSmXR2Udz>mC`%vPFeHU_=)+^^J0-|MuUp0}Ccnx~tc?4Mi4R(>oW zO0gmpN%qIa$+SCv-St?$Me9tgCT%g0C3WHy>(XR&9!DU#e&2#I_-Aos^$C`BHq1zA zvfH-=6(_Y)2B?Xi4sD1Qyeb&)#^*&w%+{NaIifsW(-7Lxx<(k^cNL2+r16{6t()Rm z);8(FtJ|aw5ql4lI8Zda=>x`+X+3XzL{5j$3G1S~MK^1agkGxB^2D>2Izz9m4y4Ji zKJgah&8>dyPPvGK7)I-cG;s^db7^6YDON(OG~r4wxUB>b6x+#6@8NA-*}dGqn`<`E zA^z#RhTFsb^jp1>tJ-kIV4tx}mbN=1uM$h~Kyl{&lqIKFxNXh-l9pNyDeRvQGcBBw z+?G!=;L+4!$}n$TA^PH|fTG-2mewK<4iqFI=! zXG^2>VURyTl6{N*x&URx*=bJsq?SpA5h3p?!Awhbnx5dF>%~XrzTBu}9H}zz#-Xaq z>PVxErt}D|0cuNMS&Gir43*9uPMYUG6I8c^kd>R#Eq|HAkKTYk^+nUE-o+w1T(G-g zJ5O$vJP^$<-Cwe7msLn|GPzIcz?-Bdo9)AJA@?ztN~{l2z&1O{wA+x=qSs>jd4hlW zg|4PPwFNBWFvQChGJw*Fa+oD-D5qI~E+WPE3bbnX zKk|PVLgzS1ySYiId_Csos$Zgq3J(v32DkDbg`$fphbcK*J|qp`Jx72}Q>Mv%S(4$> z?ivD-5f5C_eE@rkI~wHjW(8mGFIr_B!HTONT!`t)3Vo z$HO;sS0wRoZNO;HVXGwEkw|F_NIf9cnp(1dXt&#V@k_9qt*~rTDaq@HHNpcQUtxii z?XqWDQ*U^s%vC=}z-0Gp1Y(l+PwNWdLAttjyC^!VakmyJW7YUhlDq#r7N}Jk5d+M; z8WH7_Eq0@rTwxU@$NngAU_<&cpjN~~8JFz0QqU+L8*+k6WmW3?t~chNi{}5bVC1CN zxYe}9()K;UsYL59Las18bp1U_7MAie`=B+ecLKiuyvLY0`e4uWv8mQ$Sf}`KYS1vt(ZvO{Us0zo<5H`V~x(t&4U)9V14EW6KH1yBVN; z8M()X7iAdAM7n6>*Zz;uJ;N^ui z_TQgzX1tG?OeAl~MN6gd-WOEDsXL}qq&0(G;xa8XR6?wk)n*9bJQ7~fFy%Pe_++#!a|DG4n-CQ4u2iBd;y!v_z-RpJtB&dEybA=U3ikz5w z5-OQF5{9}PGv0X+v42jFTH&aDpNC?wuuZeyY;n&nQ`SdY?&k6ZT60hKLYZFqGKFWj z*Vx62FRjk#EvpGBva=oISne`mb*zcuWUsQEx|mtR@U9Fo`d|7XqL+>*7JjF=P7e{Y zTUCiU|JE^9y;bE@{dA`Ri`8tkla)PMJ?n=Y&3sO*?bgE5{F6G&J7oQQMI6^@UbPIX zTgYks9v5zcNr7s4O~=&#-2Trvxu(Oz?xcUEumO2|{{ctYxZrTWTDFGeP?dj#LRMKo zc;~IMcN=0juVdA(Gx_Jsru3iMI3<$}*l+({Thg4<{K9wd?QJnJvFQib(s7D=VTTGQW@YJlsaW`CE{}&{RHZe+oyHhjQ4- z+L8=;ZZm2=J|B|>%Glgz@chHVYWr7cxfODA1tZCudNIUEC|L>{ZK&V|&{wSaakq$z zDm;lr#ee&O=ST0Kvh2&BpRN_8Gc5m?QB75pmgp4I60zKq zQD^OHBD&zo>!RsS`egc%@5O%jCigs}uNJnU^}bwPlPsI1^+kg|VN_>3l-J4CRr({DHB!2{oq!fn^@d~Hb?I<%aeh6)h)>#B#&VtPzjeGu}LqMq|#R(`ziFm+q+ z!KaBI+g-Y2cydWbD^Nbdjg@}C=_%3BFO2{_S`;;1e{tybM2El z`}UK`_)%9!Nq<#8@mSz0ievn$IVJ=K@6PUS3F-~-=^+&Tkb?Cm*&?k(CvvihZnlBI z@h~dHEowyYiTKn(xHXsD(5FN5pBafyVo78>YEhacT0g11k)q%Lmk4EMVo=qIUb{!@r{Wy4&6 z9vt&OX9l~6Do&5&!UBj~JaKeIV2E&cM=gs_o;sJ9o-yI2TF*OFt@%X?x~lI_^9LXGfQ(Q-qpB%&sGXwj~n7T(Koh;n3vAJ}N)3;C(%n&|tJ@)>@ zcG*7n6liO3Fr&vElg%7mKZN;@Gb9t`v^#5`AOB#mMFVl3ZPBrd`p<5<;KGw}{p*(d z0iYtF;Y>zLRybfhrHk(Ai(|qd8pZ~(XDkiMzaP{m@(9k~>1k^SwuB$Blo75Ly|uB2s$ zS|Zl&s-TnccINMvyS3BDM4~ScJ14jgf=u2UL5Oz`h_iQgc3@_at&qYSfrx@09Uc80 zuJ`~nkU^bE!@;ra4E-^dDHD^Jbr&QlDR$@^^rwmRK(tTw`Bt64%ijnPzjc#?A0LmK z$Y#`^uUYUeBBITb+i5`L_-B=a(P*)eGPI(_m<>X^Evcae4mse@HmWQJ$b3)cQDA_6 zd3I=Wb#V$KOk-o?CkhHb1_xu{W<#EL3y5%U(pT&2Q(>LpF#drGEsO8a%7*4NXc7~; z;^-C@79=e#Kbr-NQ5tr!@TwI#n?CE6AVKuZ9>Z5j+__a6R}T*wEpzO-TQT1`f;xMb+DD&u{Y=!!rEDZ4fot&K92w!}8!50+a zeK06nA?UYa?Jvzfzx}DArhRNIdA@auLe2?#r-;c4PC*zBt+lRnZCv57U>!a_Si;(} zghyaCCy01R4f^FI#SugE8&i?-CIw%Qo{H4mYx=aA&!WfqL8wZ;je!4TMkV!fa(-kv zru*>TTeKP*ex0?X@jWZ;QnsyT5o_MPEdK8MYAVR+8Tu%*ednsa6N2NPEg2!16jC?m zy!Rgz*YDjk^1I}j^F3#|$&CgUA6Q+w{=po8K|#0NvU#m9MF5a>2=)8@LgjW-iOQm< zIr1~OAc;+bq`bIy?@*z!(6TjCH&Nw4E-EVeU#)CtmHxYxoemMaH?3^IYl28H0#Jp{ zHyr9>!wB8NWgxFZ$aug_iwT&gTHe`YX0hngRr5TCPyd6V|Q6!nYBe^_xrE<`WHD=&#*kkN9~ z8K1_}g13GwaynkJ+THU`g$>0U_ojhn9WkBhlcEbKIPs##crc3L~Pu+EkaqCy?by_erlVg&)U)TKy%Ei7^|K@< zF%J&RRcbS$*MM!|yf$tvF^T@8!-0k|DsgeU3?09KR}(@LZ^5>a2{HT$Vg&g3AUW^~ z4Gn#wtPE-nR~T?($;(^Yra+uGMN-PP(ILbOLR1Nt@5L*Kd{8O4ya{@fmpA_Y`W6BN z=fuUwOF`Sa!85t6G+QqR=5d8f7Qd3hqySi>=K<47>Q;+&P_wf;aLU$Wn zEyd*J=#F6pakuG4Xfz_X0_W<&H*yT#V>cBsD<@Tucd01#zcnbY_af>y?6brsizsvF zr!rDPN=6H)MBV=MF`9|=o$sp<52Iv~WhhWq0Tp4zinZN-n@T~IeISLQWxH;%0hR!K{R=gA}*DLGPpwb zoVn3d(|+Vr{v=Jw-vPW$f&ZlwZlSHWoj=45in`+)4!6^iJg^@H+&0eMy&J?3F;&%S z^M&yb3=KgkDW)3_8JC9CU7VP}JizavmdmeqR8ch?Nx3VNJy=@mTHW!o;^$*WbCUdV zuNV|`s&6Cg`XaQHLNj-=O^07%vQNe*TE2=evQ=2TD0)l~W3Jeq&DEqbPgg ztnYPq!L~7T(KVR?=7LP>wtih4qK}(0u5McDdB_A?grHPNkXMLMK|c0SpADA2$RL5_P8vIIm7tFbTPDAyF_f-ET02QGdF$2jDE0VShqMIM>csH&=~( z+KDPJOuqPXgTR#36Q?E{gAs)f&Li^Ijg|@GxKN*L0P|E0=2>B>x`#<_vpg%mgG>K5v9!> zlO^{Ozs%K?wUE07PJVsgXAMT;+-YHhEk`tIf{m{UF{+CYC3eH6U@R#ay7?apdT+<* zvDrkaU8m`>=D9<6yz*BJDsJOHL2uw)@WD*J(Qbeg4$f?^vWn?qi@qDzG^3Ke8B3QN zHdwd*yTwem@+&=XmWK=>*Md68e@KI_+zO%p(oZ_YnNa<&^C2B_pGIRWv+bJMzEy(N??nd!-Xo zKh2qlJ#yd4Vc+7>xJR|uV?^nIEi;!_X~JA1b@hf|S7Sxh#gw%$%Ysr}DVy8s&R*$# z`XXkDk$Nt7#fy)nIq4gtRF9rSSVU>}&4>^AwLkA}uNyG##+faftQ7Wm(Eq|j<^1rQ zuKUI~2M{h4l$6lnCuVCr@dq72!6t&s#QD#q_BUOYWxKIlF7faE*CzHK_y+_qu&_Y7 z$J_Gqa+_P(B-Lqm(>Tr85u(JdzVs~sADaSj^Dn9%1h&h_eBAnZa{%{C#{S)tlzn%f z?>!ev>|m+{d-7x2R`4eENO)L|vhiu|e6L*U{qXBfP0L_befxoKYQp1>n!X2<+NfbN0|umby)s#TCJyVsN@)bbWQXHrFHu zS!-@fE9rj76m)dKkk%jcfY@A93ETw}b?$5kpz1c;c;<}%HA~_3+xrB%n|yv(-q3$` zDEVq_fbdBnxdpg0%$2J2xXe1GKk|k3ZvBB2YbHPYv7(P{UiV$=?RgS&UJr*}3OC~G--Hv0fTjUf-3DRz46MR8>p-InwqP8?J8E# z8{C0uvTkrH;Mh(F9mz8sT~WCoSr527pfBudTk~;j!Npe~*YamI8DshScQfy{j2o{J zwRW#812-$wf~enKrEsyK*+go@Dzv%xPZ@}->>Oh8{g2jsWq>prAI%$a*LBwM>LsE^n(w2o9PZ#UPvuD^#dMY_+C&eCfhcM@Vh#+lTmlM}&b#h=AH@FV#@ zn~jqrzuhL3aB1-pT8Dv6Nu2-J2r(9>dnX+4&7Y4sex^03_{3kJw~54` z^vPl#pJxEw?u~|1Oz3tRt(}b-@;62ks}FrkeEA>5>vfWC1V^j;zOQP%%JF&PE2t4U zXtGe@hp=&4OWrve+vHF$NOuE?8}fvbe)+?AMr@p-Xcs0i^b zcs5OL%e6d<^>1ADpDD_FEuhkCEuFmRf61Y(_!{5YZSZ+T<)i1*HC%>Bq3+Z)%L7I( zl6cTq!;s&n?%*+EC*H%^*>^P_>M+P}i2k+oQHrsy%)c!lujemxvPhwm^5}bW8LbPg zkukF1Z+Ya{$}BzWR?;8MgYQFWc`6zUD2KVgL)i|6htas!q5I^8&(r?lGN#$@k!4ra z=jVvIJR9T){iZ8JdFm-=y@{*=5q$@PT$qS*vaCkD zWRR3~d-En0n?{N8E}iD)Kyy!Pj2q=W;Zz$x+X$uULEEoH#^CR);TFM}Yv|6VYFVB5 z^)9_2NCZV$Rja6YyTi4u;8nv?aja>UK1#B5r2fcBEK^0svviq0<@wvM^u7ApNrZJR z2;YLk&^co@>U5u=IqPOqP*IB_=&3Mcm-vE=PMwIAzV!5QSmsG(NQ?43KsLhKE^J5O z?K|-lSRj2a;p57+lr(zP$3yT}PqL3$tKyRS>s)aS@0rQB5zFX54X^wx8k;5@tc<4BLkDF{V=TQ^l1eA5Af9&oRQ3nPk)R-&x1%hSs9?5wA^ zz4s@}xjs3!oUIqIw_mnE)nvqzH`_EvfNBVuQIH(2DudQ8V2kGAmEN4g)@Zgu#m)Rc z0D879eR~M{ZzM91oP$)6!rajxE{A6^Ef46T*+Q>OWzM>vS?hrEECn}7&U8_{$52_t z)9uU18E2tDwk33}`Wreh@$lY8MMX)2H}QSvXVvWYJT~|P!X{*%aQI1s6n+;$QlQ|J z3n(=HcW)*o{l1bV36Ugpg9B4C5$cOCac&xl^V`%_2|D$mhvM(A{Ehz-C34EC;$&b~e~SbBMT{?*y&?W;=tN&laX^1j|IePnUF?c9|U zU~)I$zV)&xO%(0@zFRy`azrt?r^bEPfwHdpO;MD+WNw|m>I_nX9y=)coQ$WAk%C=w z`gSmyzcA#kombahU%zy7%vcFzQ$0U^tQ{*kvFj1|v`b2)7WwsSRTLIlG?XV@!#IS4 z!QZ~IgJMU8p1Cd;7!)_?02>#l^2PS)%H|bOvzsNwMEo%3=>IortBJ)_}@>v zIX?=2Toxq_5)KEVp9L-kZrYw@P&ws2u75;F<^F(<=@MH{bW{GQO{7}3uU#dzdu`K! z%F3zhtT0Mbr1btlV0mQw(9qCwSqK0v>F9bUQup`vc8(fnr5X77--n}}Q+@d&Ocf)9 zGE&(WC?oYBvkq%-^OA!WCzrQLcWsaP8Bqv=2F5X7E6l%+ljYi<4%Io2L0ekXAD8Z_ z%bO>|45{-Yp7xfon%H-YX6R&5$jsRx_>UuEa$WTYg|Q&ush zJi2T4T3~?K&W@@aFyQJ8jS~kn`OhEH6wxUm)z~Rk64?N zLG(NJx9#oiD?}MUg6QPz%rs|I=SmJuI?39g@#m}me9r25sXltvb;ayO zWjfi&B&%!dx|2uEyKb^D z`Gfx4uV6K@6#mZ<$}(4&p}qWMpvK*PQ_kt9RqAKg6Ls4=pS#O<7v|R18e%XdC=Rea zi(77IJz{+RLi(}3*_@enTRLvD0l}1wj)9MvI8uz6_MI>CsuaH{53nU3P)krW(8VbT zHHoz&NtnlCqTb!T(kB?}wHl}ySnOp#o*wY%ugN{|G`^cDVwA}~Z-bjM(OCVP8!`P9 zV-`!YQ)CZ$%agdR!yF59_`RrlWwwlX!W9>&s($~Sf4VQ**x|h_GHh)*yyAf5j9St6 z?mF6m1lg*-{GPh!*H$x-kL3ECA3|3ruWHZhkc#+^qSKFri?Xp;%zO#Pm)LWLuNs%j+AU|zELcR>HV(xb-1Lv|&`-No>&tDQ7M&bDvnw6OD$ z+%G@xZ_~o+?U_#5A3uFv`@2&^rBj#IQG6|N@McN&=_YL2Fg3;-J>K1Y0aTKNN-O!P zfZe1AxJD7pzFf}-e?Bo&eHZk_b=@53lcL0YTJ>Vv4sA16%{JS!2?&rY2O2%Y?*jvQ ziO1t4Pd+dCpi%~Y4j&p+DabbAB0xK<+b2&j?x*8gW^h8U4`mR+Z%Z{=a8t1I>J&Tl z!%e%4%?fmgmMWQ#?asn{041RvV9YUb)OTf@@7%xYd3{Tn)AHx5Sx*~L0#<6r>&v)X z<8{ZVqM{#5CTyQE<4;z(dq2%pOmW*epHpT_feIdfeayiOyt8P8JJeJ%3V*ujjDA=$ zFQ+*8K40!VzV+=HGq;`KHwmvgH_{xhW7*Zg1y$e?86iO4NP?(O`^|TwRd{trTJ>4O znQYptKWrfMjS~-O=kmMSbJ{dDHyDod81HM>r%4oL6idWI)yy?|#dLXTdsDe_2IIny(W_m0NB z#0x2A4+7s!PsT0@N!kQyN+Q~Vk?tu6WeZ5L-I%H>wY{pav4W?O6AU|K5i*j+h9-nU zN4`b+a^kAEM;ihPEB$r?;0UClf%D!wxACiQFD_5^)323OW3UJa5bNB@&95%_R%b6& zA+k7pxsU3-=%pRBr-Sn>MzUR%Kb{E!Mvao0IZ&1?SzbwrOh-rHtD#7Gbo65g0!jl6 zR)$tVjmz4-l9B@02lFfjI!+eI{ftH=Er_mK>ltnsek0i!}7sp$Y zy&uo9(tXba^OTK#L!3P|`_J_At#grJ45RHgaUVW3zvrNOwbvEQ@3e^PynJyJ9zQ+5 zJNs2RomEP<%Dma%1L@A`TzC2g{y0wCN}5-abeQ?*FVR3u2@TnV?95T^(X4`J4(D0~ zBXYQSUq`+6d9ZI@KuVjLS^-kQ^2I3!zW6>Nk3D9Cx=J=;+(L_i8xf@<1nls;Z(*aL zr~Z!eBN>3;3J#*Mhuoj@S}S>o9$<*Lki%m~#m)Wh4Wd^D{XO6^f^GEHI8Gigbs)q1 zSbl+-kyGuNWsc*548m7~I)vBXzCEW^^2Q4g9|*y*09@mpjHgL%2;kCD)7MwaY}nb6 zfz#{lBl)!(gx*dou$TM|9mKXEGX z;d1F?S2m&Y<@wKyw2e8x@T^Bv0LuI`qCJZ@&oA64H%GN`sV$Al=<9-QBIo0%?&_knWc5F6r(D>F$PiEcf2OXJ6;M?>Xn6 z^M}{w2#n4kRW=~vU-ui_Txkzf9=%0#@;^dWDHaap> zWow4fb?BnwUsdoR=F>vLpMj}}AYk|d^ORH4LEr)jKS>Z!dIAUMJUVuJ=5+!P0@>pIP&UX?w z@nHGa>^AO#m2U2D7CH`;)vBmD8qdukHKL&7R~OYa%sUnqCbmz0yw+a^rto zF+S1xwR{ND%7{M;%1cPV09{tQ2BR8uJO%Nw;XoF-wrZF=Ja~6)$Lf362b!16$C(F6 zUc*Se1bl8Ipc=55@*H4M69oMDE3`drOb0waNk*HN8MF^+6mj7(S43(o*15da^V$~% zEt?Kr5%8A3nlrt-QoMV(9J_wFB}n#hWdtJ_9@9-6c;6e^j(JC${kWkc5V@}g(2qn_ zSl1 z>1s&yOTHwS{JiG!l&9?75Zx{(O-_N1w}*S_uH1SSXsG-9g-ynQ9Em|1#m@PBXR&Ov zFV08dg6~C3B%6_#ipG*@Iq)RW15PXT)_Oo8G+ml;cTaNeIbFGXE&^rjE9OBK2M#ojgj7W7Lxtw&&`GW! z{60FCF63Zzp%A`_Np#yDH4%$U?p2n5r=s@5`uEO;JA*uq^k#gFvD0!3i`y$2iU3S* zM=i~YS^L@Z@u=_a>V~Vt4}Q6;i!Z?>bzsBBwn@NUjIF6@adizp(aS$>$w?{pjE*1%*PBG9B03(vLmd)gC|D#1{c9ZDAG>sF6aiN@PFk8Vhr{UY>t6$EoHEPkMB0@=W9-ka zSW(A|&@o_& zM53_lvM_nB5|g=?n%FGRsK4tkl?9KRdX(tVFaNG*W12B;@2KWnU2Pl{G(Gru0A{-B zPrY*UoHn&@qLL?*^>_+C>2PE_hU9x@$F7nDhtM(SKc8DPQ`F&Z5H`>adSNL6?i>1b zq4BUWE4)q@0aC6>7o_w+a1(#8Lu3FfJ2}k%`Sv)MlcH|7!l7o-H--6ve?FEgU2Idb zOR)0>9$pgfQ1!pQKpas!;qvVKyHMIlSC+GlF5=7o{#UEc;xKLePv1DzK8;1efs~1> ze-63jUGNmDy;ONV11|-+IEWQbO#e_$Pi1O8<51d@I3qQ63YGnVpD_e^{aerSZN=pVj ziUXcJMwGu7r1+Y>KgWFd0Mfg9Sm!ZTAnYX65W;3I{A3O-g9(0#7aXe#8vBv#I|w1*6cHPQQb=ae*N1s+;i z8Q*ji=W;T;_>qTsUVTq-^dBglVVqHH{PbC5V0^0A@bDt}&LReVtddg$##REWBvZTQ zr)>%`S#FlYhx;qp%^(eIQEI$-wC4TddZNmZTTgCryIQrWw0T^$L?K1w??qqT2Sl_Y zAZM^l#k|DDyov2L-i^BEQzD<;Aoa{MLr&!KXz%!1yO}}{<;^hFx3uaJq1XL|XvCMR zfZJfQC`O0*DXl6R_tJ&;^@csoz;&rs_~O*0Zvom^C8-rtL`Pq_U}9AM5MiB79D3;{sv>7=7+L zf84Vl0){d=`xW^0jlf=u}x}dASW`y0027%Ck^*zL- z4?XIq&eRAP3U5V8-Dx#<|l*%P0iD#wgQ^@$>;QWGGy*cCT zomuIugj6Z!R>rEzx7ZhUoZ%sI@kM?o9c*`DrlU?cFNG@1IVbAY&|qe+@dkCOh8we< z6kS|Is4Bi-XaA;Fq`jo}_L4nT3Zhpc9$Zqx*!){eCq0;~2+e%lWh#kh$(;J&+Yh;c z^BSUjzvB6ROJzF7Ko_r5MImyN;TlAX*@{=m$rnQmNpeAI+NC?XH$)!p?y2EKA=-b8 zjQ4$?bpAa2z(TLZ#l@O^%5rz>E)mN%kbM6lLrfId%?M}Yk>k24HgBJM*16h9Ej0~j zG(Yg@`?ypT3u6g=@d{DPQp#miWHjlCpk!@{m3`bo$x7sL=P*fXQKRZHbRp$YR+*yU zFh4IU8!6*g#(mGz|D4ow0pr=&xslnrwXW zGYWo}IN&G9UOiN;($SZy`6$7bi0_r@VisU8o!)ZxUXjY^N}W zOWVLe5(a;+9?L86illaKTqR(O_Y)$rO&PMDOR6Qu8X=2?Wos8;ZgH}{m__?s>^Vm$ z?K?N+H&Jz?rb#kcO&E7KF@Faqt8%z`WcvnhD4O9_Z>^BXW_KSGOHaMOR1rn$01t}w zE8My)({;@^UY#|V=D*g z6l|Tq4?lKLkr~&pS=qxyON)p;Hl#BYACA>>JU8)T?dq`1d0WYJAYq+Dvmx4Vh<+}= z)z(@K;-oJ72XA`VLX`t~6l=L?-CYP7;obLs6lzm*tW4@@_0Snh%9VUbgAj4CC$6Fa zuMV0eyJI0$)(=G-q>BkmvdoMQ`ofM8w*n>;eJyZF#e;pjbrkHa!N`m|Hsw_ z!n3*)VRy&Y`ZpRVN z+c;0yz^?v{&cRwk!VpZ8A0D4UBGsI9EzZ*+7T^67GNAWu3j%OEqgS6q3i zFZ#R!FQr-&M716mzNlPzlk*cP+roC)_|a+SOlK}{ z90-==@C%cVV=D{tigxQ!s%VRh2XJQEkx33h)|`Eg(C#P^qnj+IWp958fL!8)lI8~@ zJ3Bk5QN?(k@=UXz062#NQAA$QP;sE(Wi<)8CxE6wR}Ca8Cdxb&7i9w`Ay8~inx#<$ z992QT(&%+*+8KgNMNM4_)qNLgv~CO}mTDD+k-Yi#1PBU)HTLaesa)h!#jBWrB{yJ`tQUh}^;LT42 z3=9MS#+1_a(jzIM-^U{K>6#ZJ|Emr*jbe9?Rk-NhK7xf2>k1ZTGF@Z z8jjGA*$&fAk&KS6sLkiwuh;)v%B`7`%-mrmEH? z+hTJqkDc3@pV?MC3S%*ci>nX;UkONO;^`NZvDd#c7<4mqzSydrH*>9c!ZvUi<4#LR zaH%q=)zW(J=i9}Ks=u4pi92ytUOCz2A+>$7FTq=v-sY+e$!YYqpuX^APp3XX75?tQ%BmXoO)SPkm((4ezoH z%M?9}^Cv9X+1amFLs`DRHbY0nXNFP=(BoKO?R~52aHd*0;f5kP#$=)ut3^vx@hQhtrIOUQE6RTN&zBeY>-U~E$-A7Y4^?6IlOgq za|3c_85x;p0NMgsX-NQT35;b>PoLTi4i8_?iq|td-CF1y}bl`;)N9 z4M&|ToO1hjwYy8Qq+oF1k>1!V*81c2$0|z7Z5X|z&D2XIip)c=j$+Rr-{ISjY%UqK zmLe)huU-=23t&w>>o#>-L=?$TGvI%GWg7j%Rah^}p+vn$;Mf3iKI+)dVKG4rstQ3< zGfU_VdDZsXBP>&k0xu!Z8~-n%!N$Ow4p~NEjJE& z>`#l9SdqneCi+&5(C)S3ILdp$txM;@&dZBr>}2qXQH4` zvpf*M7Q%uPQ*3Vgv$&PBi@1(}8hl2|8v{7l<8ftqRjYbR@d&^dE4VJ`xVmy7BO?PB zgaCe@J=K|!3~@LpSqw6OVcsh!U=|k_XXfO<4L5qZ!GMv?8X^iM6 z7g;fpj!W>CPJ{VFi_$2TYib7zqt#GM9Y$iO#0`YBV(Tp~_mVvk=V5rFz7tsjAqG8e z+&8{EA~&%j&f(i&(F+?@%Lbv@HL`hhhQwy`y`OG$76)c=k)v9>u=yS0Z+w^u`c56Z<003|l6 z-=4LOl~T1$9x!Eii!U`-e|+~#t7!dmQL9Dt4=W0Rb)>ohj8t?&If=d%clSrKiS1$y z8Ecxu*3xow(_~4^ZRiXbts{?^P=zpHF>Io~ieJD6@TPHbgtZCnK(w9s4Un z-k?%YtQajevde-5FH}e=A0l_(4mO3Ur{Y--f~9eXJz$p5M?3%cz z`$5^{Eexbn3Ngv~KP-S6p6zdH#`j+0Se;5>j488NbFNjvvr_jdVALC!T;6J+XRM;7 zjBJYPhjaSo5bhlY_Kn{huP9&ghOdoqf3rAq7plB4IP(h_&fd4jFqd`^)0w%0Ax9%B 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

lL(x?os>ecMZzI?2=X@0kn=o~Qx;WwWr~ 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̫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îvszIK&a%pjSR9Z&IrM2MH=hQ^buSB~D zKTMn&NZtLlbiwt=bl8eJyQru44&BPsXoIVXS+;gpZa;h+i|sC({rWvKY8c1k$IGF9 zC@us6JcrV8{IIK|+E&5`jt51Jg4Z`wzO=M%i}2;Kbm}T}vvYdAE-6q~d$ik_+<2LM zeJjp0B1QThoeiqv_g~-dP@|j+umcrR7D@Qbx=%^dqOqBhxKkpRIxpSHp2WnJeEPhe z!bL>AqoSWi23<5;su3Ltgc_D?-1KCR;f6zN4of6eK5f>}`wt64YOrlSJ@dCUyiIAY zRBEm@X)rU%Yix_@|318!+YwogfVsrBw)ab2{2_17jW3$n1@c6EFO=2Z7vwefresI+ z83k)~dANKif&aeiO*E#>Z=RyqLmMsE@|i7BD)Ct%o9W$H`MoK(!i=j*G) zTyn~<8Z*1P@9_O2og`^{dobWQ0B(a1x72DIB~koZ@9(sC1^gBz6P5O#aBEvovm@E9 zlf_C-jAJ>7lUPnmaoZC!7D8qt`Ix66MWWSup9-ZbzH>!V(b2R#^Uc4-md9T_%Ui>H zlk^`JFwg+HvW1{dlMwbroSPH$?$8I3P0Ht{SHva%D#}LtY(bkM+gRMPxxv!#r7{ye z7ug_-97P+C6En(*7wU4;y%*BbaK#Zz=|)3^1h=yCWQKo)@x1=^VO z=K2?g9DV)QqVo@(6m{&69<~tD&>h%z;{NMgET9vOhyPV#sqd%)rH_?_0gJ}bCa!^{ zVkyY_#^%x}@UlbXPW?@c?DrA&-)G>1i8%4~^A1WB{nN*)cAYLZR_({?-P4!mbV~IR zFoQmC_KXK@UYDe}|HD8AYJm(U{HK&yX`r6;uHPWr0siG*-{}bfGu+%6j{d8k0Zchd z&Qb?9^!PFs5)%AU<-7SA=bQ>gFB3~qx`#)|uHRw`ZGFHp)?e!SJh{s3<6NN$_e8O6 zm`N*p>W*Th@ydHd-T9kKD={Vh6)gUCByWC}o+!*4OHX0>J-FV|4oXrR+L?InB|rSgJ-Genoc(F9%MiZ1Sry_Y9fWsYetvf@{4bZP*iIcU zDJkg&HC9$ujvVr@KH_qD7M~*ivigIZu>7sqi-QK6*+6$v+Ex|YzOOgbb~QH}>o+*N2FUfLHAKz{_iVb<9u9{7dQ&ij*Tp%Di+$CPHk@{@ z-|@J-QJCiO&#HhNrDKiOv~{IMeNJvJe>~%fnPA`KF3|wIK|O;mH$|L#p2{@1iEi@< z@8Q`5UA4LSORyekfH)fo*2nDX=~Uz1YdN|chVH~_&D;@`x#?(|nV6P)ta1b)pZ&gJ zuJPBI^2jN^k1`%uU5P_EwR*7N3PeF#BYYKi~)EIPz!PV5L z29zL9w~YMZ9kKLaT0GngCoI+kdddl#SC?($BSrfSFcN|EdG4EoAO255rRo zcg@`5#FAxIe>yw~aC@qflN;tE6{gff0n5ROjqj(64w0=$ytG~zfv>c{Gp|C5Jn+c@ zE%=t+7R)etX}A=&#^EBIU+%v<2K~yoaT3acmZ7t%%gdZ1uXMmEn!u-TgKn$-x49<&dhM5? Yv@!)y-o< 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 AkpKVy literal 0 HcmV?d00001 diff --git a/pypot-master/pypot-master/samples/notebooks/image/snap-right-click.png b/pypot-master/pypot-master/samples/notebooks/image/snap-right-click.png new file mode 100644 index 0000000000000000000000000000000000000000..ab257e9f824ba20427db9104576dad64d45effdb GIT binary patch literal 66414 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

H~*ioZl z5V^kHMTxTfLz(ot2nZN_cNEVlcN4*p8&j^+*Bh`yEa}5CCtH$d52skF-FPjDtcmST zt1V=zWn;|%4M5Y31vx!^nH~nk&GDjo1$^z_>@m#MhS;#8hK8TFx3_rsBY{IJ^QrF^ zu;yaA*9+|!<2}?U-pqZKol$oIII5!kIdsM%4>Ui#zaN-N$1bG9)m-Ols4(y8G+wcL ze<7H%$0L?%8wBPHAh=>$M z~v2YVQK$8Qb?sJ-4trq>{ zg(E!@vlj3dK6{tfN)7;@?^qY0F4R@#k&zBO?u6yY3!|TEe-un@SLC z%Kg2yNRQ4bswX12BLZo~huN|3lA*OI4-HQYH{I9ZElmL3B#xGKLo$p9BN!0=o!AWZ z4RrMAw>ay;#GK&Cw}{6x{=ey~1`sGRMgXI139mjbV; z3%EWRs#2lYy0~xvp`x&cwz!IPf=p6Lza=|6o695(m>3bGjnTYphLy#hit4WV!p0Th ze}buBi}O|ExjI=+xjvk8T^mCsnnbGKcvVtK5V5af7R{t$m6)I_FG zL>z#J+QNi&Gft0_S9@rfCrG|$`X

Gx-eY1=+Jn=(m#=F?MMWje#H{ehRLC*DwfrW# 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 z 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 literal 0 HcmV?d00001 diff --git a/pypot-master/pypot-master/samples/notebooks/image/snap-slider.png b/pypot-master/pypot-master/samples/notebooks/image/snap-slider.png new file mode 100644 index 0000000000000000000000000000000000000000..ebafd48f3299cd0182269c8be5d8f4632900cc0d GIT binary patch literal 28963 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

=MhE_D|UhXCTjiLIzh3=}g~2=v;GUIJ8P zNevfoqimes4^2!X?hm+rOD12lEvYK1t}Ghyszu)mTW(}WiV7J=@)+=ENMC+J;E8o5 zp0hcavCH3KJ2606$g$ppgyj644kAG~Y|KQsp=b2}8UD{Y;1X9)DSD%w#8)mNQExXU zf0#6Jw72ck24jAe%(BbvO6J>$a6~c$XemlO(Bx@DU%}InT!m_+u8=X36UNbCj4~}! zsxXKqG=dh*L^wrz1ZZN&Z)1xHY?6^5z!mb=B52v~Q4Sn|3Qr?>+(6!OghV52)T8sr z|Hov0^u6cY-U+9Vh#S1a_>K=*bsDtazxNdLwF3)vxW9(EJKj{LM!R$xX~*7!t%Gnb o=4udJORG-#AOhk1b!phosFr|4`oI#Iz~!0i#+F9ahAxqR0o}`icmMzZ literal 0 HcmV?d00001 diff --git a/pypot-master/pypot-master/samples/notebooks/readme.md b/pypot-master/pypot-master/samples/notebooks/readme.md new file mode 100644 index 0000000..cc90d02 --- /dev/null +++ b/pypot-master/pypot-master/samples/notebooks/readme.md @@ -0,0 +1,83 @@ +# Notebooks everywhere + +In the [Poppy Project](https://www.poppy-project.org), we are huge fans of [Jupyter Notebooks](http://jupyter.org) both for development and for documentation. Most of our tests, benchs, experiments, and even debugs are now done using notebooks. Thus, we have decided that pypot's documentation and more generally all the software documentation related to the [Poppy Project](https://www.poppy-project.org) will smoothly move towards notebooks. + +We strongly believe that they have an amazing potential: +* for writing pedalogical contents - by **mixing code, explanation, results in an integrated form** +* for easily sharing - they can be easily **review online** and then **run locally** +* they can also be run remotely on the robot and thus **no installation at all is required on the client side, you just need a web browser** + +We already have written a few tutorial notebooks that you can browse here: https://poppy-project.gitbooks.io/poppy-docs/content/en/programming/notebooks.html + +Other notebooks should shorty extend this list! + +In the next sections, we decribe how those notebooks can be [viewed](https://github.com/poppy-project/pypot/blob/master/samples/notebooks/readme.md#browse-notebook-online), [installed](https://github.com/poppy-project/pypot/blob/master/samples/notebooks/readme.md#running-notebooks-locally), [run on your robot](https://github.com/poppy-project/pypot/blob/master/samples/notebooks/readme.md#connecting-to-a-remote-notebook) or [locally](https://github.com/poppy-project/pypot/blob/master/samples/notebooks/readme.md#running-notebooks-locally), shared and how you can [contribute](https://github.com/poppy-project/pypot/blob/master/samples/notebooks/readme.md#contribute) by writing your own notebooks! + +# Open Source +All the resources content from the Poppy Project is open source. This naturally also extends to the notebooks. + + License | Notebooks | Library | +| ----------- | :-------------: | :-------------: | +| Name | [Creatives Commons BY-SA](http://creativecommons.org/licenses/by-sa/4.0/) |[GPL v3](http://www.gnu.org/licenses/gpl.html) | +| Logo | [![Creative Commons BY-SA](https://i.creativecommons.org/l/by-sa/4.0/88x31.png) ](http://creativecommons.org/licenses/by-sa/4.0/) |[![GPL V3](https://www.gnu.org/graphics/gplv3-88x31.png)](http://www.gnu.org/licenses/gpl.html) | + +# Browse Notebook Online + +One of the great features of the Notebook is that they can be read directly online without needing to install anything on your laptop. The **only thing you need is a web browser!** + +Thanks to the [nbviewer](http://nbviewer.ipython.org) website, you can read any Notebook online. You can also directly view them on [Github](https://github.com). The Notebooks from the Poppy Project can be directly found [here](http://nbviewer.ipython.org/github/poppy-project/pypot/tree/master/samples/notebooks/). A list of the "best" Notebook is also maintained [here](https://poppy-project.gitbooks.io/poppy-docs/content/en/programming/notebooks.html). + +If you want to run notebooks yourself and play with the code you will have to use one of the other techniques described below. + +# Connecting to a Remote Notebook + +The Poppy Creature we developed are usually provided with an embedded board (e.g. a [raspberry pi](http://www.raspberrypi.org)) with all the software tools needed to run [pypot](https://github.com/poppy-project/pypot) already installed - this means a python interpreter, the pypot and poppy pacakges and [Jupyter Notebook](http://jupyter.org) server. Thus, you do not need to install anything specific on your personal computer to connect to a remote Notebook. + +When plugged, the embedded board of the Poppy Creature should automatically start a Jupyter Notebook server providing access to all the notebooks tutorials. + +Assuming that you creature is connected to the same network as your computer (see [here](https://github.com/pierre-rouanet/rasp-poppy) for details), they can be accessed just by connecting to an url such as: http://poppy.local. + +**It's important to note here that the notebook will actually run on the embedded board and not on your local machine!** You will thus not be able to easily access a file on your machine using this approach. Similarly, if you need to install an extra python package, you will have to install it directly on the board (e.g. using an [ssh connection](https://github.com/poppy-project/raspoppy)). + +# Running Notebooks Locally + +If you want to run Notebooks on your local machine, because you are working with the simulator for instance, you will have to start the jupyter notebook server yourself. + +To do this, you will need to find your way in the sometimes [confusing](http://captiongenerator.com/30052/Hitler-reacts-to-the-Python-ecosystem) [python packaging system](https://python-packaging-user-guide.readthedocs.org/en/latest/current.html). In details, you will need (this is not the only way to install all the tools but this is probably the most straightforward): +* a [python](https://www.python.org) interpreter (we tested with *3.4* or *pypy-2.5*) +* the [pip tool](https://pip.pypa.io) for installing Python packages - [this documentation describe how to install pip on your system](https://pip.pypa.io/en/latest/installing.html#install-pip). + +Now that you have a working Python environment, you can install the [Jupyter Notebook package](http://jupyter.readthedocs.org/en/latest/install.html) using pip. You only have to run the following line on a command line terminal: + +```bash +pip install jupyter +``` + +Linux users may have to run (depending on their python installation): +```bash +sudo pip install jupyter +``` + +Then, you need to install pypot and the software for your creature. For instance, to use a PoppyErgoJr: +```bash +pip install pypot poppy-ergo-jr +``` + +Finally, you can now run the notebook server from a terminal: +```bash +jupyter notebook +``` +You can also specify the folder where your notebooks are, for instance on my machine +```bash +jupyter notebook ~/dev/pypot/samples/notebooks/ +``` + +# Support +The [Poppy forum](forum.poppy-project.org) is the best place to ask for help! You can also use the [github issue tracker](https://github.com/poppy-project/pypot/labels/Notebooks) for specific notebooks issues. + +# Contribute +First, please report any bug or issue to our [github issue tracker](https://github.com/poppy-project/pypot/labels/Notebooks). + +Second, you can discuss, suggest, or even better provide us with other Notebooks. We hope to gather as many and as diversified Notebooks as possible. They could be pedagogical content, experiments or just funny behaviours for robotic creatures. The easiest way to share them with us is trough pull requests. + +Finally, as we are not native English speaker [your](http://www.troll.me/images2/grammar-correction-guy/your-youre-welcome.jpg) encouraged to report any spell checking or any sentence which does not make much sense ^^. Translation to other language are also welcomed! diff --git a/pypot-master/pypot-master/samples/notebooks/robot-client.ipynb b/pypot-master/pypot-master/samples/notebooks/robot-client.ipynb new file mode 100644 index 0000000..ca260b2 --- /dev/null +++ b/pypot-master/pypot-master/samples/notebooks/robot-client.ipynb @@ -0,0 +1,116 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:9066a0365d9e68ffe50fe55b615e37151fcf20e4c270599513e57e5380ee885d" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from pypot.robot import from_remote\n", + "\n", + "remote_robot = from_remote('127.0.0.1')" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "for m in remote_robot.arm:\n", + " m.compliant = False\n", + " m.moving_speed = 50\n", + " m.goal_position = 0" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'RemoteRobot' object has no attribute 'arm'", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mm\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mremote_robot\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marm\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcompliant\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0mm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmoving_speed\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m50\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgoal_position\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mAttributeError\u001b[0m: 'RemoteRobot' object has no attribute 'arm'" + ] + } + ], + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "remote_robot.primitives" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 3, + "text": [ + "[]" + ] + } + ], + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "for m in remote_robot.motors:\n", + " m.compliant = False\n", + " m.goal_position = 0" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 4 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "remote_robot.my_sinus.start()" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 5 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "remote_robot.my_sinus.stop()" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 6 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [] + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/pypot-master/pypot-master/samples/notebooks/robot-server.ipynb b/pypot-master/pypot-master/samples/notebooks/robot-server.ipynb new file mode 100644 index 0000000..530443d --- /dev/null +++ b/pypot-master/pypot-master/samples/notebooks/robot-server.ipynb @@ -0,0 +1,100 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:25f974945afc9b1b27aaa5b6052b2450ccd9a439db8fbffa8906951404958c87" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from pypot.dynamixel import autodetect_robot\n", + "\n", + "robot = autodetect_robot()\n", + "robot.start_sync()" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from pypot.primitive.utils import Sinus\n", + "\n", + "my_sinus = Sinus(robot, 50, robot.motors, amp=10)\n", + "robot.attach_primitive(my_sinus, 'my_sinus')" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from pypot.server.rest import RESTRobot\n", + "\n", + "robot_server = RESTRobot(robot)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import zerorpc\n", + "\n", + "s = zerorpc.Server(robot_server)\n", + "s.bind(\"tcp://0.0.0.0:4242\")\n", + "s.run()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stderr", + "text": [ + "KeyboardInterrupt\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "pyerr", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0ms\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mzerorpc\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mServer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrobot_server\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0ms\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbind\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"tcp://0.0.0.0:4242\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0ms\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m/usr/local/lib/python2.7/site-packages/zerorpc/core.pyc\u001b[0m in \u001b[0;36mrun\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 169\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_acceptor_task\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgevent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mspawn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_acceptor\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 170\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 171\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_acceptor_task\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 172\u001b[0m \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 173\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python2.7/site-packages/gevent/greenlet.pyc\u001b[0m in \u001b[0;36mget\u001b[0;34m(self, block, timeout)\u001b[0m\n\u001b[1;32m 256\u001b[0m \u001b[0mt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mTimeout\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstart_new\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 257\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 258\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mparent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mswitch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 259\u001b[0m \u001b[0;32massert\u001b[0m \u001b[0mresult\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'Invalid switch into Greenlet.get(): %r'\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 260\u001b[0m \u001b[0;32mfinally\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/usr/local/lib/python2.7/site-packages/gevent/hub.pyc\u001b[0m in \u001b[0;36mswitch\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 329\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mswitch_out\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 330\u001b[0m \u001b[0mswitch_out\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 331\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mgreenlet\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mswitch\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 332\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 333\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mswitch_out\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "prompt_number": 4 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [] + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/pypot-master/pypot-master/samples/notebooks/sum-of-sinus.ipynb b/pypot-master/pypot-master/samples/notebooks/sum-of-sinus.ipynb new file mode 100644 index 0000000..15b2976 --- /dev/null +++ b/pypot-master/pypot-master/samples/notebooks/sum-of-sinus.ipynb @@ -0,0 +1,393 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:b0c3d5b1e224252a084a368e1eec8579db0889da6b38e5feeab39603ec211247" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import pypot.dynamixel\n", + "import pypot.robot" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "ports = pypot.dynamixel.get_available_ports()\n", + "print 'Found ports', ports\n", + "port = ports[0]\n", + "print 'Using', port" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Found ports ['/dev/ttyUSB0']\n", + "Using /dev/ttyUSB0\n" + ] + } + ], + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "io = pypot.dynamixel.DxlIO(port)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "ids = io.scan(range(40))\n", + "print 'Found ids', ids" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Found ids [11, 36, 37]\n" + ] + } + ], + "prompt_number": 4 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "motors = [pypot.dynamixel.motor.DxlMXMotor(id) for id in ids]\n", + "motors" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 5, + "text": [ + "[,\n", + " ,\n", + " ]" + ] + } + ], + "prompt_number": 5 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "c = pypot.dynamixel.controller.BaseDxlController(io, motors)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 6 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "robot = pypot.robot.Robot([c])" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 7 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "robot.start_sync()" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 8 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "for m in robot.motors:\n", + " m.compliant = False\n", + " m.goal_position = 0" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 9 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from pypot.primitive.utils import Sinus" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 10 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "s1 = Sinus(robot, 50, robot.motors, amp=30)\n", + "s2 = Sinus(robot, 50, robot.motors, amp=5, freq=2)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 11 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "s1.start()" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 12 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline\n", + "\n", + "import time\n", + "\n", + "pos = []\n", + "\n", + "start = time.time()\n", + "while time.time() - start < 5:\n", + " pos.append(robot.motors[0].present_position)\n", + " time.sleep(0.02)\n", + " \n", + "plot(linspace(0, 5, len(pos)), pos)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Populating the interactive namespace from numpy and matplotlib\n" + ] + }, + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 13, + "text": [ + "[]" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 13 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "s2.start()" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 14 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import time\n", + "\n", + "pos = []\n", + "\n", + "start = time.time()\n", + "while time.time() - start < 5:\n", + " pos.append(robot.motors[0].present_position)\n", + " time.sleep(0.02)\n", + " \n", + "plot(linspace(0, 5, len(pos)), pos)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 15, + "text": [ + "[]" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 15 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "s1.stop()" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 16 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import time\n", + "\n", + "pos = []\n", + "\n", + "start = time.time()\n", + "while time.time() - start < 5:\n", + " pos.append(robot.motors[0].present_position)\n", + " time.sleep(0.02)\n", + " \n", + "plot(linspace(0, 5, len(pos)), pos)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 17, + "text": [ + "[]" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nCQmNj0TgCQkJCQ2KROAJCQkJDYpE4AkJCQkNikTgCQkJCQ2KROAJCQkJDYpE4AkJCQkNikTgCQkJ\nCQ2KROAJCQkJDYpE4AkJCQkNikTgCQkJCQ2KROAJCQkJDYpE4AkJCQkNikTgCQkJCQ2KROAJCQkJ\nDYpE4AkJCQkNikTgCQkJCQ2KsgT+fmAX8ATwv8qHk5CQkJCgizIEfiNwM/A84DnA/7YSURNjYGAg\ndAjRILXFNFJbTCO1hRnKEPh7gb8BxqceHysfTnMjdc5ppLaYRmqLaaS2MEMZAr8S+C3gP4EB4Hob\nASUkJCQk6KE95/UfAJdWef5jU59dCrwYuAH4FrDRanQJCQkJCTVR95b1Ofge8D+Bu6ce7wFeBAzN\net8eYFOJ30lISEiYj9gLbHb15f8V2D7197OAA65+KCEhISHBLjqAfwIeB34G9AeNJiEhISEhISEh\nISEBtgK7gV8Bfx44lpD4MnAEWa3Md6wHfgzsQDaAfSBsOEGxAPgp8AiwEynLnc9oAx4Gvhs6kAjw\nFPAY0h4PhAigDUlgXo7YLY8AV4cIJAL8JvBCEoGDVDW9YOrvXuAXzN9+AdAz9d92pCT35QFjCY0P\nA18H7gwdSATYByzLe5PLs1C2IAT+FLLZ55+BNzn8vZhxD3AydBCR4DAymQOMIEcx9IULJzjGpv7b\niYieEwFjCYl1wOuBL1KuOq6ZkNsOLgl8LXCw4vHTU88lJChcjqxMfho4jpBoRSa0I4i1tDNsOMFw\nG/CnwGToQCJBBvwQeAj441pvckngmcPvTmh89ALfBj6IKPH5iknEUlqH7GzuDxpNGLwROIr4vUl9\nC16GiJvXAe9DbNg5cEngg0jCSmE9osITEjqA7wBfA+4IHEssOA38K/PzSIqXIgfj7QO+CbwS+Meg\nEYXHM1P/PQb8P8SS9op2ZCfR5Yi/N5+TmCDtkJKYorD+EVkyz3esAC6Z+rsb+AnwqnDhRIFXkKpQ\neoBFU38vBO4DXhMikNchVQZ7gI+ECCASfBM4BJxH8gLvDBtOULwcsQ0eQZbMDyPlpvMRzwV+jrTF\nY4gHPN/xClIVyhVIn3gEKbWdz9yZkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQ\nkJCQkJCQkJCQkJCQkBAe/x/Cuc9Mu0bHBgAAAABJRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 17 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "s2.stop()" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 18 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import time\n", + "\n", + "pos = []\n", + "\n", + "s1.start()\n", + "s2.start()\n", + "start = time.time()\n", + "while time.time() - start < 10:\n", + " pos.append(robot.motors[0].present_position)\n", + " time.sleep(0.02)\n", + " \n", + " if (3 < time.time() - start < 9):\n", + " s2.pause()\n", + " else:\n", + " s2.resume()\n", + " \n", + "plot(linspace(0, 10, len(pos)), pos)\n", + "\n", + "s1.stop()\n", + "s2.stop()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 19 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 19 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [] + } + ], + "metadata": {} + } + ] +} \ No newline at end of file diff --git a/pypot-master/pypot-master/samples/profiles/ergo-jr-rpi2-idle-light-syncloop.prof b/pypot-master/pypot-master/samples/profiles/ergo-jr-rpi2-idle-light-syncloop.prof new file mode 100644 index 0000000000000000000000000000000000000000..60fcf6b5543ccce5cca870430aa7c27ca0beaddb GIT binary patch literal 29797 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.6', + 'tornado', + 'scipy', + 'ikpy==3.0.1', + 'bottle', + 'requests', + 'opencv-contrib-python', + 'wget', + ] + +if sys.version_info < (3, 5): + print("python version < 3.5 is not supported") + sys.exit(1) + +def package_files(directory): + paths = [] + for (path, directories, filenames) in os.walk(directory): + for filename in filenames: + full_path = os.path.join(path, filename) + paths.append((path, [full_path])) + return paths + + +setup(name='pypot', + version=version(), + packages=find_packages(), + + install_requires=install_requires, + + extras_require={ + 'doc': ['sphinx', 'sphinxjp.themes.basicstrap', 'sphinx-bootstrap-theme'], + 'zmq-server': ['zmq'], + 'remote-robot': ['zerorpc'], + 'camera': ['hampy', 'zmq'], # Extras require: opencv (not a PyPi packet) + 'tests': ['requests', 'websocket-client', 'poppy-ergo-jr'], + }, + + entry_points={ + 'console_scripts': [ + 'dxl-config = pypot.tools.dxlconfig:main', + 'poppy-services=pypot.creatures.services_launcher:main', + 'poppy-configure=pypot.creatures.configure_utility:main', + ], + }, + + include_package_data=True, + exclude_package_data={'': ['.gitignore']}, + + zip_safe=False, + + author='See https://github.com/poppy-project/pypot/graphs/contributors', + author_email='dev@poppy-station.org', + description='Python 3 Library for Robot Control', + long_description=open('README.md', encoding='utf-8').read(), + url='https://github.com/poppy-project/pypot', + license='GNU GENERAL PUBLIC LICENSE Version 3', + + classifiers=[ + "Programming Language :: Python :: 3", + "Topic :: Scientific/Engineering", ], + ) diff --git a/pypot-master/pypot-master/tests/test_crashed_prim.py b/pypot-master/pypot-master/tests/test_crashed_prim.py new file mode 100644 index 0000000..da3312e --- /dev/null +++ b/pypot-master/pypot-master/tests/test_crashed_prim.py @@ -0,0 +1,19 @@ +import unittest + +from pypot.robot.controller import MotorsController + + +class ShittyController(MotorsController): + def setup(self): + raise Exception("Sorry I didn't do it on purpose...") + + +class TestPrimLifeCycle(unittest.TestCase): + def test_crashed_at_setup(self): + sc = ShittyController(None, [], 50.) + with self.assertRaises(RuntimeError): + sc.start() + + +if __name__ == '__main__': + unittest.main() diff --git a/pypot-master/pypot-master/tests/test_dummy.py b/pypot-master/pypot-master/tests/test_dummy.py new file mode 100644 index 0000000..7779a49 --- /dev/null +++ b/pypot-master/pypot-master/tests/test_dummy.py @@ -0,0 +1,44 @@ +import unittest + +from pypot.creatures import PoppyErgoJr +from pypot.primitive import LoopPrimitive + + +class EmptyPrim(LoopPrimitive): + def setup(self): + pass + + def update(self): + pass + + def teardown(self): + pass + + +class TestDummy(unittest.TestCase): + def setUp(self): + self.jr = PoppyErgoJr(simulator='dummy') + + def test_dummy_controller(self): + for m in self.jr.motors: + m.moving_speed = 10000 + m.goal_position = 25 + + # Make sure it was synced + self.jr._controllers[0]._updated.clear() + self.jr._controllers[0]._updated.wait() + + for m in self.jr.motors: + self.assertEqual(m.goal_position, m.present_position) + + def test_empty_primitive(self): + p = EmptyPrim(self.jr, 50.0) + p.start() + p.stop() + + def tearDown(self): + self.jr.close() + + +if __name__ == '__main__': + unittest.main() diff --git a/pypot-master/pypot-master/tests/test_ik.py b/pypot-master/pypot-master/tests/test_ik.py new file mode 100644 index 0000000..d59f2d6 --- /dev/null +++ b/pypot-master/pypot-master/tests/test_ik.py @@ -0,0 +1,14 @@ +import unittest + +from pypot.creatures import PoppyErgoJr + + +class TestIK(unittest.TestCase): + def test_lowerlimit_correctly_setup(self): + self.jr = PoppyErgoJr(simulator='poppy-simu') + self.jr.close() + # TODO: We should also make a unit test with a real/vrep robot. + + +if __name__ == '__main__': + unittest.main() diff --git a/pypot-master/pypot-master/tests/test_import.py b/pypot-master/pypot-master/tests/test_import.py new file mode 100644 index 0000000..4c79a00 --- /dev/null +++ b/pypot-master/pypot-master/tests/test_import.py @@ -0,0 +1,23 @@ +import os +import random +import unittest + +from setuptools import find_packages + + +class TestImport(unittest.TestCase): + def setUp(self): + self.packages = find_packages('../') + + if os.uname()[-1].startswith('arm'): + self.packages = [p for p in self.packages + if not p.startswith('pypot.vrep')] + + random.shuffle(self.packages) + + def test_import(self): + [__import__(package) for package in self.packages] + + +if __name__ == '__main__': + unittest.main() diff --git a/pypot-master/pypot-master/tests/test_primitive.py b/pypot-master/pypot-master/tests/test_primitive.py new file mode 100644 index 0000000..1a40ac4 --- /dev/null +++ b/pypot-master/pypot-master/tests/test_primitive.py @@ -0,0 +1,81 @@ +import unittest +import random +import time + +from threading import Event + +from pypot.creatures import PoppyErgoJr +from pypot.primitive import LoopPrimitive + + +class TestPrimLifeCycle(unittest.TestCase): + def setUp(self): + self.jr = PoppyErgoJr(simulator='dummy') + + def tearDown(self): + self.jr.close() + + def test_teardown(self): + self.jr.dance.start() + time.sleep(random.random() * 5) + self.jr.dance.stop() + + self.assertEqual({m.led for m in self.jr.motors}, {'off'}) + self.assertEqual({m.led for m in self.jr.dance.robot.motors}, {'off'}) + + def test_set_once(self): + class Switcher(LoopPrimitive): + def setup(self): + self.current_state = False + self.old_state = self.current_state + + self.switched = Event() + + def update(self): + if self.current_state != self.old_state: + for m in self.robot.motors: + self.affect_once(m, 'led', + 'red' if self.current_state else 'off') + + self.old_state = self.current_state + + self.switched.set() + + p = Switcher(self.jr, 10) + p.start() + + for m in self.jr.motors: + m.led = 'off' + + self.jr.m3.led = 'pink' + + self.assertEqual([m.led for m in self.jr.motors], + ['off', 'off', 'pink', 'off', 'off', 'off']) + + p.switched.clear() + p.current_state = not p.current_state + p.switched.wait() + + self.assertEqual([m.led for m in self.jr.motors], + ['red', 'red', 'red', 'red', 'red', 'red']) + + self.jr.m3.led = 'blue' + self.assertEqual([m.led for m in self.jr.motors], + ['red', 'red', 'blue', 'red', 'red', 'red']) + + p.stop() + + def test_start_pause_stop(self): + self.jr.dance.start() + self.jr.dance.pause() + self.jr.dance.stop() + + def test_start_stop_pause_resume_random_order(self): + cmd = ['start', 'stop', 'pause', 'resume'] + + for _ in range(10): + getattr(self.jr.dance, random.choice(cmd))() + + +if __name__ == '__main__': + unittest.main() diff --git a/pypot-master/pypot-master/tests/test_rest_api.py b/pypot-master/pypot-master/tests/test_rest_api.py new file mode 100644 index 0000000..59dbeaf --- /dev/null +++ b/pypot-master/pypot-master/tests/test_rest_api.py @@ -0,0 +1,504 @@ +import unittest + +import requests +import time +import json +from typing import Union + +from pypot.creatures import PoppyErgoJr + + +class TestRestApi(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls.jr = PoppyErgoJr(simulator='poppy-simu', use_http=True) + cls.base_url = 'http://127.0.0.1:8080' + cls.headers = {'Content-Type': 'application/json'} + + # Make sure the REST API is running before actually testing. + while True: + try: + requests.get(cls.base_url + '/') + break + except requests.exceptions.ConnectionError: + time.sleep(1) + + def get(self, url): + url = '{}{}'.format(self.base_url, url) + return requests.get(url) + + def post(self, url, data: Union[str, None] = None): + url = '{}{}'.format(self.base_url, url) + if data: + return requests.post(url, data=data, headers=self.headers) + return requests.post(url, headers=self.headers) + + def assert_status(self, answer, expected_code, request): + self.assertEqual(expected_code, answer.status_code, "request " + request + " failed!") + + def one_line_assert(self, method, url, expected_code, data=None): + """ + Makes a get/post request and also verifies the answer code. + :param method: either self.get or self.post + :param url: an url of the rest api + :param expected_code: the code the request should give + :param data: body request for post method (optional) + :return: an assertion + """ + if data: + return self.assert_status(method(url, data), expected_code, method.__name__ + url) + return self.assert_status(method(url), expected_code, method.__name__ + url) + + # region misc + def test_ip(self): + """ API REST test for request: + GET /ip.json + """ + url = '/ip.json' # OK + response = self.get(url) + self.assert_status(response, 200, url) + + def test_index(self): + """ API REST test for request: + GET /robot.json + """ + url = '/robot.json' # OK + response = self.get(url) + self.assert_status(response, 200, url) + + def test_paths(self): + """ API REST test for request: + GET / + """ + url = '/' # OK + response = self.get(url) + self.assert_status(response, 200, 'GET ' + url) + # endregion + + # region motors + def test_motors_list(self): + """ API REST test for request: + GET /motors/list.json + GET /motors//list.json + """ + url = '/motors/list.json' # OK + response = self.get(url) + self.assert_status(response, 200, 'GET ' + url) + response_json = json.loads(response.text) + for m in ['m1', 'm2', 'm3', 'm4', 'm5', 'm6']: # Checks if all motors are present + self.assertTrue(m in response_json["motors"], m + " could not be found in the list of motors") + + url = '/motors/motors/list.json' # OK + response = self.get(url) + self.assert_status(response, 200, 'GET ' + url) + + url = '/motors/base/list.json' # OK + response = self.get(url) + self.assert_status(response, 200, 'GET ' + url) + response_json = json.loads(response.text) + for m in ['m1', 'm2', 'm3']: # Checks if all motors are present + self.assertTrue(m in response_json["base"], m + " could not be found in the list of motors") + + url = '/motors/tip/list.json' # OK + response = self.get(url) + self.assert_status(response, 200, 'GET ' + url) + response_json = json.loads(response.text) + for m in ['m4', 'm5', 'm6']: # Checks if all motors are present + self.assertTrue(m in response_json["tip"], m + " could not be found in the list of motors") + + url = '/motors/unknown_alias/list.json' # Unknown alias + response = self.get(url) + self.assert_status(response, 404, 'GET ' + url) + + def test_motors_aliases_list(self): + """ API REST test for request: + GET /motors/aliases/list.json + """ + url = '/motors/aliases/list.json' # OK + response = self.get(url) + self.assert_status(response, 200, 'GET ' + url) + response_json = json.loads(response.text) + for a in ['base', 'tip']: # Checks if all aliases are present + self.assertTrue(a in response_json["aliases"], a + " could not be found in the list of aliases") + + def test_motors_registers_list(self): + """ API REST test for request: + GET /motors//registers/list.json + """ + url = '/motors/m1/registers/list.json' # OK + response = self.get(url) + self.assert_status(response, 200, 'GET ' + url) + response_json = json.loads(response.text) + for r in ['goal_speed', 'compliant', 'safe_compliant', 'angle_limit', 'id', 'name', 'model', 'present_position', + 'goal_position', 'present_speed', 'moving_speed', 'present_load', 'torque_limit', 'lower_limit', + 'upper_limit', 'present_voltage', 'present_temperature', 'pid', 'led', 'control_mode']: + self.assertTrue(r in response_json["registers"], r + " could not be found in the list of registers") + + url = '/motors/unknown_motor/registers/list.json' # Unknown motor + response = self.get(url) + self.assert_status(response, 404, 'GET ' + url) + + def test_motor_register(self): + """ API REST test for request: + GET /motors//registers//value.json + POST /motors//registers//value.json + new_value + """ + url = '/motors/m1/registers/present_position/value.json' # OK + response = self.get(url) + self.assert_status(response, 200, 'GET ' + url) + + url = '/motors/unknown_motor/registers/present_position/value.json' # Unknown motor + response = self.get(url) + self.assert_status(response, 404, 'GET ' + url) + + url = '/motors/m1/registers/unknown_register/value.json' # Unknown register + response = self.get(url) + self.assert_status(response, 404, 'GET ' + url) + + url = '/motors/m1/registers/compliant/value.json' # OK + data = 'true' + response = self.post(url, data) + self.assert_status(response, 202, 'POST ' + url) + + url = '/motors/unknown_motor/registers/compliant/value.json' # Unknown motor + data = 'true' + response = self.post(url, data) + self.assert_status(response, 404, 'POST ' + url) + + url = '/motors/m1/registers/unknown_register/value.json' # Unknown register + data = 'true' + response = self.post(url, data) + self.assert_status(response, 404, 'POST ' + url) + + url = '/motors/m1/registers/compliant/value.json' # Wrong value + data = 'wrong_value' + response = self.post(url, data) + self.assert_status(response, 400, 'POST ' + url) + + def test_motor_register_values(self): + """ API REST test for request: + GET /motors/registers//list.json + """ + url = '/motors/registers/compliant/list.json' # OK + response = self.get(url) + self.assert_status(response, 200, 'GET ' + url) + response_json = json.loads(response.text) + for m in ['m1', 'm2', 'm3', 'm4', 'm5', 'm6']: + self.assertTrue(m in response_json["compliant"], m + " could not be found in the list of motors") + + url = '/motors/registers/unknown_register/list.json' # Unknown register + response = self.get(url) + self.assert_status(response, 404, 'GET ' + url) + # endregion + + # region goto + def test_motor_goto(self): + """ API REST test for request: + POST /motors//goto.json + position & duration & wait + """ + url = '/motors/m1/goto.json' # OK + data = '{"position":10,"duration":"3","wait":"true"}' + response = self.post(url, data) + self.assert_status(response, 202, 'POST ' + url) + + url = '/motors/m1/goto.json' # Wrong duration + data = '{"position":10,"duration":"-3","wait":"true"}' + response = self.post(url, data) + self.assert_status(response, 400, 'POST ' + url) + + url = '/motors/m1/goto.json' # At least one value is missing + data = '{"duration":"3","wait":"true"}' + response = self.post(url, data) + self.assert_status(response, 400, 'POST ' + url) + + def test_motors_goto(self): + """ API REST test for request: + POST /motors/goto.json + motors & their positions & duration & wait + """ + url = '/motors/goto.json' # OK + data = '{"motors":["m1", "m2"], "positions":[0,10],"duration":"3","wait":"true"}' + response = self.post(url, data) + self.assert_status(response, 202, 'POST ' + url) + + url = '/motors/goto.json' # Different amount of motors and positions + data = '{"motors":["m1"], "positions":[0,10],"duration":"3","wait":"true"}' + response = self.post(url, data) + self.assert_status(response, 400, 'POST ' + url) + + url = '/motors/goto.json' # Wrong duration + data = '{"motors":["m1", "m2"], "positions":[0,10],"duration":"-3","wait":"true"}' + response = self.post(url, data) + self.assert_status(response, 400, 'POST ' + url) + + url = '/motors/goto.json' # At least one value is missing + data = '{"positions":[0,10],"duration":"3","wait":"true"}' + response = self.post(url, data) + self.assert_status(response, 400, 'POST ' + url) + # endregion + + # region sensors + def test_sensors_list(self): + """ API REST test for request: + GET /sensors/list.json + """ + url = '/sensors/list.json' # OK + response = self.get(url) + self.assert_status(response, 200, 'GET ' + url) + + def test_sensor_registers_list(self): + """ API REST test for request: + GET /sensors//registers/list.json + """ + # There is no sensor on a poppy-simu robot + # url = '/sensors/camera/registers/list.json' # OK + # response = self.get(url) + # self.assert_status(response, 200, 'GET ' + url) + + url = '/sensors/unknown_sensor/registers/list.json' # Unknown sensor + response = self.get(url) + self.assert_status(response, 404, 'GET ' + url) + + def test_sensor_register(self): + """ API REST test for request: + GET /sensors//registers//value.json + POST /sensors//registers//value.json + new_value + """ + # There is no sensor on a poppy-simu robot + # url = '/sensors/camera/registers/resolution/value.json' # OK + # response = self.get(url) + # self.assert_status(response, 200, 'GET ' + url) + + url = '/sensors/unknown_sensor/registers/unknown_register/value.json' # Unknown sensor or register + response = self.get(url) + self.assert_status(response, 404, 'GET ' + url) + + url = '/sensors/unknown_sensor/registers/unknown_register/value.json' # Unknown sensor or register + data = 'wrong_value' + response = self.post(url, data) + self.assert_status(response, 404, 'POST ' + url) + # endregion + + # region records + def test_records_list(self): + """ API REST test for request: + GET /records/list.json + """ + url = '/records/list.json' # OK + response = self.get(url) + self.assert_status(response, 200, 'GET ' + url) + + def test_records_values(self): + """ API REST test for request: + GET records//value.json + """ + self.one_line_assert(self.post, '/records/unit_test/record.json', 202) # Creates a record 'unit_test' + self.one_line_assert(self.post, '/records/unit_test/save.json', 202) + + url = '/records/unit_test/value.json' # OK + response = self.get(url) + self.assert_status(response, 200, 'GET ' + url) + + url = '/records/unit_test2/value.json' # Unknown move name + response = self.get(url) + self.assert_status(response, 404, 'GET ' + url) + + self.one_line_assert(self.post, '/records/unit_test/delete.json', 202) # Deletes the record 'unit_test' + + def test_records_record_and_save(self): + """ API REST test for request: + POST /records//record.json [+ motors] (optional) + """ + url = '/records/unit_test/record.json' # OK + data = None + response = self.post(url, data) + self.assert_status(response, 202, 'POST ' + url) + + url = '/records/unit_test/save.json' # OK + data = '{}' + response = self.post(url, data) + self.assert_status(response, 202, 'POST ' + url) + + response = json.loads(self.get('/records/list.json').text) # Checks if move has been created + self.assertTrue('unit_test' in response["moves"], "Move unit_test was not created") + + url = '/records/unit_test/record.json' # OK + data = '{"motors":["m1","m2"]}' + response = self.post(url, data) + self.assert_status(response, 202, 'POST ' + url) + + url = '/records/unit_test/save.json' # OK + data = None + response = self.post(url, data) + self.assert_status(response, 202, 'POST ' + url) + + url = '/records/unit_test2/save.json' # Unknown move name + data = None + response = self.post(url, data) + self.assert_status(response, 404, 'POST ' + url) + + self.one_line_assert(self.post, '/records/unit_test/delete.json', 202) # Deletes the record 'unit_test' + + def test_record_delete(self): + """ API REST test for request: + POST records//delete.json + """ + self.one_line_assert(self.post, '/records/unit_test/record.json', 202) # Creates a record 'unit_test' + self.one_line_assert(self.post, '/records/unit_test/save.json', 202) + + url = '/records/unit_test/delete.json' # OK + data = None + response = self.post(url, data) + self.assert_status(response, 202, 'POST ' + url) + + def test_record_play(self): + """ API REST test for request: + POST /records//play.json + speed + """ + self.one_line_assert(self.post, '/records/unit_test/record.json', 202) # Creates a record 'unit_test' + self.one_line_assert(self.post, '/records/unit_test/save.json', 202) + + url = '/records/unit_test/play.json' # OK + data = '{"speed": -1}' + response = self.post(url, data) + self.assert_status(response, 202, 'POST ' + url) + + self.one_line_assert(self.post, '/records/unit_test/stop.json', 202) # Stops the replay + + url = '/records/unit_test/play.json' # No speed field + data = '{"sped": -1}' + response = self.post(url, data) + self.assert_status(response, 400, 'POST ' + url) + + url = '/records/unit_test/play.json' # Unknown speed + data = '{"speed": unreadable_speed}' + response = self.post(url, data) + self.assert_status(response, 400, 'POST ' + url) + + url = '/records/unit_test2/play.json' # Unknown move name + data = '{"speed": -1}' + response = self.post(url, data) + self.assert_status(response, 404, 'POST ' + url) + + self.one_line_assert(self.post, '/records/unit_test/delete.json', 202) # Deletes the record 'unit_test' + + def test_record_stop(self): + """ API REST test for request: + POST /records//stop.json + """ + self.one_line_assert(self.post, '/records/unit_test/record.json', 202) # Creates a record 'unit_test' + self.one_line_assert(self.post, '/records/unit_test/save.json', 202) + self.one_line_assert(self.post, '/records/unit_test/play.json', 202, '{"speed": 1}') # Starts a move replay + + url = '/records/unit_test/stop.json' # OK + data = None + response = self.post(url, data) + self.assert_status(response, 202, 'POST ' + url) + + url = '/records/unit_test2/stop.json' # Unknown move name + data = None + response = self.post(url, data) + self.assert_status(response, 400, 'POST ' + url) + + self.one_line_assert(self.post, '/records/unit_test/delete.json', 202) # Deletes the record 'unit_test' + # endregion + + # region primitives + def test_primitives_list(self): + """ API REST test for request: + GET /primitives/list.json + """ + url = '/primitives/list.json' # OK + response = self.get(url) + self.assert_status(response, 200, 'GET ' + url) + + def test_running_primitives_list(self): + """ API REST test for request: + GET /primitives/running/list.json + """ + url = '/primitives/running/list.json' # OK + response = self.get(url) + self.assert_status(response, 200, 'GET ' + url) + + def test_start_primitive(self): + """ API REST test for request: + GET /primitives//start.json + """ + url = '/primitives/base_posture/start.json' # OK + response = self.get(url) + self.assert_status(response, 202, 'GET ' + url) + + url = '/primitives/unknown_primitive/start.json' # Unknown primitive + response = self.get(url) + self.assert_status(response, 404, 'GET ' + url) + + def test_stop_primitive(self): + """ API REST test for request: + GET /primitives//stop.json + """ + self.one_line_assert(self.get, '/primitives/base_posture/start.json', 202) # Starts a primitive + + url = '/primitives/base_posture/stop.json' # OK + response = self.get(url) + self.assert_status(response, 202, 'GET ' + url) + + url = '/primitives/unknown_primitive/stop.json' # Unknown primitive + response = self.get(url) + self.assert_status(response, 404, 'GET ' + url) + + def test_pause_primitive(self): + """ API REST test for request: + GET /primitives//pause.json + """ + self.one_line_assert(self.get, '/primitives/base_posture/start.json', 202) # Starts a primitive + + url = '/primitives/base_posture/pause.json' # OK + response = self.get(url) + self.assert_status(response, 202, 'GET ' + url) + + url = '/primitives/unknown_primitive/pause.json' # Unknown primitive + response = self.get(url) + self.assert_status(response, 404, 'GET ' + url) + + def test_resume_primitive(self): + """ API REST test for request: + GET /primitives//resume.json + """ + self.one_line_assert(self.get, '/primitives/base_posture/start.json', 202) # Starts a primitive + self.one_line_assert(self.get, '/primitives/base_posture/pause.json', 202) # Pauses the primitive + + url = '/primitives/base_posture/resume.json' # OK + response = self.get(url) + self.assert_status(response, 202, 'GET ' + url) + + url = '/primitives/unknown_primitive/resume.json' # Unknown primitive + response = self.get(url) + self.assert_status(response, 404, 'GET ' + url) + + def test_primitive_properties_list(self): + """ API REST test for request: + GET /primitives//properties/list.json + """ + url = '/primitives/base_posture/properties/list.json' # OK + response = self.get(url) + self.assert_status(response, 200, 'GET ' + url) + + url = '/primitives/unknown_primitive/properties/list.json' # Unknown primitive + response = self.get(url) + self.assert_status(response, 404, 'GET ' + url) + + def test_primitive_methods_list(self): + """ API REST test for request: + GET /primitives//methods/list.json + """ + url = '/primitives/base_posture/methods/list.json' # OK + response = self.get(url) + self.assert_status(response, 200, 'GET ' + url) + + url = '/primitives/unknown_primitive/methods/list.json' # Unknown primitive + response = self.get(url) + self.assert_status(response, 404, 'GET ' + url) + # endregion + + +if __name__ == '__main__': + unittest.main() diff --git a/pypot-master/pypot-master/tests/test_snap.py b/pypot-master/pypot-master/tests/test_snap.py new file mode 100644 index 0000000..354ed4c --- /dev/null +++ b/pypot-master/pypot-master/tests/test_snap.py @@ -0,0 +1,44 @@ +import unittest +import requests +import random +import time + +from pypot.creatures import PoppyErgoJr +from pypot.dynamixel.conversion import XL320LEDColors + +from utils import get_open_port + + +class TestSnap(unittest.TestCase): + def setUp(self): + port = get_open_port() + + self.jr = PoppyErgoJr(simulator='poppy-simu', use_snap=True, snap_port=port) + self.base_url = 'http://127.0.0.1:{}'.format(port) + + # Make sure the Snap API is running before actually testing. + while True: + try: + self.get('/') + break + except requests.exceptions.ConnectionError: + time.sleep(1) + + def get(self, url): + url = '{}{}'.format(self.base_url, url) + return requests.get(url) + + def test_led(self): + c = random.choice(list(XL320LEDColors)) + m = random.choice(self.jr.motors) + + r = self.get('/motor/{}/set/led/{}'.format(m.name, c.name)) + self.assertEqual(r.status_code, 200) + + r = self.get('/motor/{}/get/led'.format(m.name)) + self.assertEqual(r.status_code, 200) + self.assertEqual(r.text, c.name) + + +if __name__ == '__main__': + unittest.main() diff --git a/pypot-master/pypot-master/tests/test_websocket.py b/pypot-master/pypot-master/tests/test_websocket.py new file mode 100644 index 0000000..f19242b --- /dev/null +++ b/pypot-master/pypot-master/tests/test_websocket.py @@ -0,0 +1,48 @@ +import json +import time +import unittest +import websocket + +from pypot.creatures import PoppyErgoJr +from utils import get_open_port + + +@unittest.skip("tornado.ioloop from jr.ws as well as js.http must be stopped by jr.close() before launching new jr instances") +class TestWebsocketsCommunication(unittest.TestCase): + """docstring for TestWebsocketsCommunication""" + def setUp(self): + port = get_open_port() + self.jr = PoppyErgoJr(simulator='poppy-simu', use_ws=True, ws_port=port) + + self.ws_url = 'ws://127.0.0.1:{}'.format(port) + + while True: + try: + self.ws = websocket.WebSocket() + self.ws.connect(self.ws_url) + break + except ConnectionError: + time.sleep(1.0) + + def tearDown(self): + self.ws.close() + + def test_connected(self): + self.assertTrue(self.ws.connected) + + def test_recv_state(self): + state = json.loads(self.ws.recv()) + self.assertSetEqual(set(state.keys()), + {m.name for m in self.jr.motors}) + + def test_led(self): + obj = { + 'm1': { + 'led': 'red' + } + } + self.ws.send(json.dumps(obj)) + + +if __name__ == '__main__': + unittest.main() diff --git a/pypot-master/pypot-master/tests/utils.py b/pypot-master/pypot-master/tests/utils.py new file mode 100644 index 0000000..8b9cafe --- /dev/null +++ b/pypot-master/pypot-master/tests/utils.py @@ -0,0 +1,11 @@ +import socket + +from contextlib import closing + + +def get_open_port(): + with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s: + s.bind(("", 0)) + s.listen(1) + port = s.getsockname()[1] + return port

6n^x|mWic@wcb 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

qzBmXmp?|D>s-3NI!c2YBh^L5vqEF_j1 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∾ucL#(7UU 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

#8X8?- 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 literal 0 HcmV?d00001 diff --git a/pypot-master/pypot-master/samples/benchmarks/controller_sync.ipynb b/pypot-master/pypot-master/samples/benchmarks/controller_sync.ipynb new file mode 100644 index 0000000..51f8f76 --- /dev/null +++ b/pypot-master/pypot-master/samples/benchmarks/controller_sync.ipynb @@ -0,0 +1,131 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:09bf66c9635fdd5b044dc696fff5a395b17ddf045dfe10fdf837d88cee3fe276" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Populating the interactive namespace from numpy and matplotlib\n" + ] + } + ], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import pickle \n", + "\n", + "# get the file here: https://github.com/poppy-project/pypot/releases/download/2.4.0/data.pickle", + "with open('data.pickle') as f:\n", + " data = pickle.load(f)\n", + " \n", + "dt = data['controller_rw_time']" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "to_plot = (('dell', '2.7.8'),\n", + " ('dell', 'pypy-2.3.1'),\n", + "\n", + " ('odroid', '2.7.8'),\n", + " ('odroid', 'pypy-2.3.1'),\n", + " \n", + " ('pi', '2.7.8'),\n", + " ('pi', 'pypy-2.3.1'))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "indices = array([0.5, 1.0, \n", + " 2.0, 2.5,\n", + " 3.5, 4.0])\n", + "\n", + "width = 0.4\n", + "\n", + "with xkcd():\n", + " fig = plt.figure()\n", + " ax = fig.add_axes((0.1, 0.2, 0.8, 0.7))\n", + " \n", + " x = array([mean(dt[b][p]) * 1000 for b, p in to_plot])\n", + " \n", + " i = arange(0, len(x), 2)\n", + " ax.bar(indices[i], x[i], width, color='r')\n", + " \n", + " i = arange(1, len(x), 2)\n", + " ax.bar(indices[i], x[i], width, color='g')\n", + " \n", + " ax.spines['right'].set_color('none')\n", + " ax.spines['top'].set_color('none')\n", + " ax.xaxis.set_ticks_position('bottom')\n", + " ax.yaxis.set_ticks_position('left')\n", + "\n", + " ax.set_xticks(indices + width/2)\n", + " \n", + " ax.set_xticklabels(['2.7.8\\n PC',\n", + " 'PyPy',\n", + " '2.7.8\\n Odroid',\n", + " 'PyPy',\n", + " '2.7.8\\n Raspberry pi',\n", + " 'PyPy'])\n", + "\n", + " plt.ylabel('time to read/write pos/speed/load (in ms)')\n", + " plt.title(\"BOARDS COMPARISON\")\n", + " savefig('controller.png')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nj4exY8cCsHHjRoYMGUJmZiYDBgzgtttuY+TIkWRnZzNgwADef/99hBAEAgHy8vLo1KnTIaP69957\nj27duuFwOPj6669ZsmQJp556Kps3b46/l0GDBvH5558zfvx4Xn/9dW6//fb4FBsQfy91ngPEppdW\nr15dr626KSIhBHq9niFDhvDiiy/W+04gEOAf//gHl1xyCRaLhWAwGP8dAZx55pnMmzePsWPHsmXL\nFoxGI5JWisqGSdKKue+++0Tfvn3Fk08+KaZOnSpKSkpE//7944HOW2+9VWRkZIg77rhDrFq1Sjzw\nwAMiKytLXH755XFP4sEHHxTdunWrN1p2u93CbreLFStWCCGEaN++vVi7dq0QQojKykoxadIkYbVa\nxaZNm4TX6xWAWLJkifD5fGL//v3iX//6lzCbzXEvYvr06aJ79+5ixYoV4tNPPxUvvPCC6N279yFB\n3jqeeuopkZ6eLqZNmyauueYakZGRIc466yzh9XpFIBAQ/fr1Ez169BBPPfWUWL16tbjyyiuFwWAQ\nr776qhAiNvrW6/XijTfeEEIIMWvWLAGIZ555Rggh4iuFdu7cKW688UZx6623HiJDKBQSRUVF4skn\nn6x3/P777xcnnHCCECIWuO7Tp0/83FtvvSU6duwoRo0aJcLhsFi6dKmYNm2aAMRll10mLrvsMrF1\n61bx3XffCZPJJP75z3+K7du3i3fffVdcf/31Ij09XezevVsIIcSmTZuE2WwWl156qXj11VfFSy+9\nJHr16iW6desW90reeOON+KqoX/PII4/El7ZKWictYhi+/vprMX/+fLFr1674sbVr14pFixaJ559/\nXjz//PNi5cqVLSGKpBlZs2aN6Natm+jfv7+4+OKLxfPPPy98Pl/8fDQaFQsXLhRnnHGGyM7OFiee\neKJYvHhxvemlefPmiWXLlh1y70ceeSRuGP7617/GFVbdfR9//HGxdu1aEYlExOWXXy4sFkt8SqVH\njx5i1apV8e97PB4xa9YsceKJJ4r27duLgQMHiocffrierL9l6dKlYuzYsWLChAli3bp19WR2Op3i\nH//4h+jZs6fIyckRZ511lvj000/j591utygpKREHDhwQQsSmrYYPHx5fChqNRsWJJ54oXn75ZfHC\nCy8c9vldLpf485//fIiMFRUV4pJLLhHRaFR8/PHH4rrrrqt3fu/evWLq1KkiGAyKESNGiBEjRoiJ\n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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 5 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [] + } + ], + "metadata": {} + } + ] +} diff --git a/pypot-master/pypot-master/samples/benchmarks/cpu_load.ipynb b/pypot-master/pypot-master/samples/benchmarks/cpu_load.ipynb new file mode 100644 index 0000000..24729e5 --- /dev/null +++ b/pypot-master/pypot-master/samples/benchmarks/cpu_load.ipynb @@ -0,0 +1,133 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:139f5039e4216784ffa37cf89131cc2bd44141391b1b22b7c9d22ff517637ccc" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Populating the interactive namespace from numpy and matplotlib\n" + ] + } + ], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import pickle \n", + "\n", + "# get the file here: https://github.com/poppy-project/pypot/releases/download/2.4.0/data.pickle", + "with open('data.pickle') as f:\n", + " data = pickle.load(f)\n", + " \n", + "cpu_load = data['cpu_usage']" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "to_plot = (('dell', '2.7.8'),\n", + " ('dell', 'pypy-2.3.1'),\n", + "\n", + " ('odroid', '2.7.8'),\n", + " ('odroid', 'pypy-2.3.1'),\n", + " \n", + " ('pi', '2.7.8'),\n", + " ('pi', 'pypy-2.3.1'))" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "indices = array([0.5, 1.0, \n", + " 2.0, 2.5,\n", + " 3.5, 4.0])\n", + "\n", + "width = 0.4\n", + "\n", + "with xkcd():\n", + " fig = plt.figure()\n", + " ax = fig.add_axes((0.1, 0.2, 0.8, 0.7))\n", + " \n", + " x = array([mean(cpu_load[b][p]) for b, p in to_plot])\n", + " \n", + " i = arange(0, len(x), 2)\n", + " ax.bar(indices[i], x[i], width, color='r')\n", + " \n", + " i = arange(1, len(x), 2)\n", + " ax.bar(indices[i], x[i], width, color='g')\n", + " #for i in range(0, len(x), 2):\n", + " #ax.bar(indices, x, width)\n", + " \n", + " ax.spines['right'].set_color('none')\n", + " ax.spines['top'].set_color('none')\n", + " ax.xaxis.set_ticks_position('bottom')\n", + " ax.yaxis.set_ticks_position('left')\n", + "\n", + " ax.set_xticks(indices + width/2)\n", + " \n", + " ax.set_xticklabels(['2.7.8\\n PC',\n", + " 'PyPy',\n", + " '2.7.8\\n Odroid',\n", + " 'PyPy',\n", + " '2.7.8\\n Raspberry pi',\n", + " 'PyPy'])\n", + "\n", + " plt.ylabel('cpu load (%)')\n", + " plt.title(\"BOARDS COMPARISON\")\n", + " savefig('cpu_usage.png')" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAYsAAAEBCAYAAACJy4k1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXmcFOW1v5/qpXpfpmdhYASREBHjCir8jEbBlZggxhW8\nqNFoEpcbNcbcuERQr2JiTAxqNBoTb+ISowZNjIkJqBg33NDEJeICCgNMz0zv+/L+/ujpkhF6oYeZ\nqob34dMfpruquk7V1Jzvu5z3HEUIIZBIJBKJpAomvQ2QSCQSifGRYiGRSCSSmkixkEgkEklNpFhI\nJBKJpCZSLCQSiURSE/OCBQsW6G2EZPth+fLl3HLLLTz++OMkk0l22203FEXZbL/+/n5eeuklenp6\n6OjowGw2V/zOYrE46DuSyST33XcfH330ERaLhdbW1kH7f/zxxzzwwAPstttuqKq67S5uE9tDoRDv\nvfceY8aMGbTtgw8+YOXKlWSzWVpbWze79g8//JBisYjT6QRACMHf//53JkyYoO27ZMkSFi9ezLJl\ny7BYLEyYMKGiLZ+9Ny+//DJPPfUUwWCQjo6OQdefyWRYvXo1PT09JJNJVFXFarVu9fXncjlefvll\n3n//fXw+Hw6HQ9v2xz/+EY/Hg9frHXRMNptl+fLl7LLLLlt9PolBEBLJNuSYY44R06ZNE/PnzxeB\nQEDMnj1bFItFbXsulxPXXHONcLvdwuFwCEVRhN/vF7feeusWv2/9+vXic5/7nHjrrbe0zx544AFh\ntVpFR0eHAMQxxxwjuru7te0LFy4UgAgEAuKKK64QPT09W/zuYDAozj//fDFmzBjhdDrFjBkzxIcf\nfljx2qLRqDj33HOFoigCEK2trdq2devWiVNOOUUoiiJcLpcAxKRJk8TLL7+s7VMsFsXnPvc58c1v\nflP77MknnxSA+Oc//6l9tscee4hTTz1VfPvb3xaBQEB873vf26I9N998s5gzZ86gz/bdd1/R2toq\nbDab8Pl84pe//KW27YILLhDAoNfYsWNFLBbT7Lv//vvFlClThN1uFxMmTBC33377oO9//PHHxa67\n7iosFotQVVWYzWZxyimniHQ6LYQQorOzU0ydOlVkMplBx7311lvCYrGIaDRa8f5KjI0UC8k2ZcaM\nGWLx4sVCiJIDbWlpEX/961+17RdccIHo7OwUS5YsEcViUWQyGXH77bcLQHzwwQeDvqtYLIrZs2cL\nQNxxxx3a54899pgYO3asEEKId999Vxx55JHigAMO0BzW1VdfLY466ihx1113iV133VW4XC7x+9//\nftB3JxIJ8fnPf17MmzdPvPLKK+Kdd94RS5YsEaFQaIvXlc1mxaGHHip233138fzzz4ulS5eKrq4u\nIYQQ8XhcTJ48WXzpS18S77zzjhCiJESnnHKK2HPPPbXvePfddwUgdt99d+2zK664QgDixz/+sfbZ\npEmTxPLly4UQQqxevVo4nU6xZs2aQfasXLlSWK1W4ff7B4nxF7/4RXHLLbeIdDot7rnnHuHxeMT9\n998vhBAinU6Lnp4ecfbZZ4u5c+eKF198USxdulQ7/kc/+pHYaaedxEMPPSTef/998dRTT4kVK1Zo\n3/23v/1NWK1WsWDBApFMJkWhUBArVqwQo0ePFj/96U+FEEJMnjxZAOKKK64YZG8+nxdOp1M8/vjj\nW7y/EuMjxUKyTZk+fbr49a9/LYQoOftdd91V/Pa3vxVClBycoijihRde2Oy4qVOniptuumnQZ/ff\nf7/weDziy1/+svjWt76lff73v/9dtLe3a+8zmYzYfffdNYd13XXXiVmzZgkhSj2Zm2++WaiqKn71\nq19px9xzzz3C5XKJQqFQ13Vdc801YuzYsWLjxo3aZ2Une+2114rx48eLeDw+6Jh169YJQLz//vtC\nCCHuvfdeoSiKMJlMIpFICCGEmDZtmrBareLss8/Wjhs7dqx47bXXhBAlJ+vz+cSbb76pbc/n82LK\nlCnilFNOEYD46KOPtG2HH364uPHGG7X3Dz/8sHC5XINa+qeeeuoWeyt+v1/ceeedW7z+QqEgJkyY\nIP7nf/5ni/fmS1/6knY9559/vvD5fOKZZ54ZtN/nPve5it8vMT5ygluyTQmHw1gsFnp6erjsssvo\n6enhq1/9KgAPPPAAs2bNYvr06Zsd19XVRU9Pj/Y+Fotx8cUXc91113HssceyYsUKbVtfX9+geQpF\nUfB6vUQiEQAsFguFQkH7+b//+7+54YYbuPTSS0kmkwDst99+ABx88MFceOGF3HHHHaxfv36L15RK\npfjpT3/KzTffTEdHx6DzAtx33338z//8Dy6Xa9BxnZ2dmEwm7bpee+01Dj/8cMxmM2+88QbBYJAV\nK1bwjW98g3fffVc7LhqN4nK5CAaDfOtb32LChAnsscce2vayrbfffjsTJkyoem98Ph+pVIpsNqt9\nlkgksNvtm13nIYccwg9+8APOOussrrnmGp555hlt24oVK9i4cSOXXnrpZsd1dXURDAa1+73nnnty\n5513MnfuXDZu3Kjt19LSQjqd3uI9lhgfKRaSbUokEmH+/PmMGjWKRYsWcfzxx+N2uwFYtmwZhx56\n6BaPW7t2LaNHj9beL1q0iGKxiBCCxx9/nDfffJNUKgXAhg0byOfz3HbbbVx55ZXss88+bNiwgW9+\n85va8eIzWWwuuOACXC4Xf/rTnwDYfffdeeutt5g3bx4Wi4Vf/OIX7LbbboMcb5klS5bgdruZPXv2\nZts2btzI22+/vcXrWr9+PcViUbuuZcuWMXPmTPbZZx9efPFF/vSnPzFx4kTmzZvHv//9b4QQFItF\notEokydPpqOjg48//piHHnpIE6ZQKMQPf/hDjj76aH7yk5+QSqUG2bxhwwZeffVVfvKTn3DGGWfw\nla98hSuvvFL7HQDk8/ktBhQ8+OCD3HHHHYwbN45//etfHHXUUZx33nma7XvvvTctLS2bHffJJ5/Q\n2dkJlMTCbDZz4okncvLJJ3PsscdqAm2z2bYY7CBpDix6GyDZvojFYtx7771MmDCBf/7zn9x8883M\nnz+f++67j2QyOchplVm9ejUrV67k/vvvB+DJJ59k0aJFCCG47bbbmDp1Kqqq8vrrr3PggQcSj8f5\n8MMPNUd26qmnctttt2kRONlsdrOWs9lspr29nVgspn228847a99RLBY5+eSTueGGG3j44YcHHfvO\nO+9wwAEHbNHBlh3hlq7r0UcfZdKkSYwfP55gMMjrr7/OLbfcQk9PD8uWLSOdTnPiiSey5557atFV\nXV1dCCF4++236erqwuPxDPrOuXPn0tfXx0MPPcTUqVPZbbfdeOmll7Tt8Xic2267jWKxiNvt5o9/\n/CNHH330oO9wOByDehplVFXla1/7Gl/72teAUmRbubeRSqU2swVKovzoo49yyimnAFAoFCgWiwDc\ncMMNHHHEEZx66qk8+OCDqKqKySTbp82K/M1JtinZbJbJkyczffp0LrnkEq688kqWLl0KwIwZM/jD\nH/6gDRFBydlcccUVTJs2jV133RWAp59+mn333ZdwOMw777zD7373O/bdd1+ef/55oOTUDjvsMF5/\n/XW++tWvcv/993PNNdeQz+eBkgO32WyD7FqzZg0rV65k2rRppNNprYdRxmQy0dnZuVmPBGDcuHG8\n+eab2vcLIbjjjju46667GDduHLvssgu///3vBx3T39/PokWLOOOMM4CS43U4HOy3337MnDmTZcuW\nsWzZMo4//nh8Ph+77rorzz77LJlMBoBdd911M+cci8V48cUXufvuuwmHwzz11FNcc801vPrqq9px\nqqqyZMkSfvnLX+JwODj//PN54YUXBn2PzWbTrqXM8uXLBw0ZAVpYcLFYZMaMGTz//POsWbNm0D4P\nPfQQb731FieffDJQ+v3ncjkArFYrS5Ys4aOPPuLUU09FURQsFtk+bVp0my2RbJeoqiquueYacf31\n14ujjjpKWK1W8bvf/U4IIcSaNWtEe3u7mDFjhrjvvvvEn/70J3HYYYcJn88n3n77bSGEEKlUSvj9\nfnHvvfcO+t4f/vCHYtq0aUIIIW655RZx8MEHa9v+/Oc/i1GjRonjjz9eFItFcfHFF4uDDjpIbNiw\nQcTjcfH888+LffbZRxx33HFCiFI4rt1uFz/4wQ/EK6+8Ip599lnx3e9+VzgcjkGhrmXi8bgYP368\n+NKXvqTZ4Xa7xZ///GchRGki3mq1ivPOO088+uij4u677xbjxo0TBx54oBahdfnll4v9999fCCFE\nJBIRZrNZjB8/Xpsk/6//+i9x4oknit7eXlHpz/LnP/+5GD9+vMjlctpnqVRKeL1e8cgjjwghSpPj\nZbtCoZA4++yzhcPhEE899ZT44IMPxM9//nMxefJksffee4vTTjtNXHnllUIIIU477TQxZcoU8de/\n/lW89tpr4je/+Y34/Oc/L8466ywhRGky/6ijjhJjx44VP//5z8UTTzwhLr74YmGxWMRtt92m2bPn\nnnuKW265ZZDdGzZsEBMnThSAFvwgaT5GRCweffTRQREbGzduFDfddJO49957Bz34kUhELF68WNx1\n110ilUqNhGmSbcyRRx4pvvCFL4hDDz1UXHbZZeJf//rXoO2rV68W5557rthpp51Ee3u7OP3008Xa\ntWu17b29veL0008f9FwIUYosOuOMM4QQQjz99NObRfN89NFH4jvf+Y4oFovir3/9qxbCCQhVVcVZ\nZ501KFpp2bJlYtasWWLMmDFi4sSJ4tRTTxUrV66seF1r164V3/nOd8TRRx8trrnmms3WbvzjH/8Q\ns2fPFoFAQIwfP178+Mc/1oRCCCGuuuoqcdlll2nvzzvvPHHPPfdo7++//36x1157iXQ6LebPn79F\n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\ndXU1ysvLMXv2bADNCdAenuh6mJycHPz9739/bJKzl43IyEgUFRXBzMwMEolEOLe9uLhYyLPUs2dP\nrayaarUaSUlJmDdvHgIDA2FnZ4f09HT0798fEREReksrsm/fPp3PLycnB0FBQejRoweA5sUOupxF\nTU0NSktLMWfOHL3oexExMTHBTz/9BKD5+6NSqdChQweQREZGhpCLafLkyZg0aZLGteXl5bh27Rom\nTZqExMREJCQkoLS0FKtXr4avr69e9Pr6+qJnz55a5SSRk5OD1atXC2V79uzRud/j0qVLCAwM1NnO\n00Tcwf0csW7dOpw5cwbbtm17rN0vv/wCOzs75Ofn63XTmMgfQ69evbB27VoMGDDgsXYbN25Eamoq\nduzY8YyUiTwrzp49iw8++AAXL15sNe1R7969sXr1aq2VfU+bNhGGaiukpaUhJCSkVbsLFy7grbfe\nEh1FG6SqqgoNDQ2/6k321/YXkRePkydPYsaMGa06igfnhAwcOFDvmsSRxXMEyV+dPPG32Iq8WPza\nZyv2gbbLg5/l56kfiM5CRERERKRVxDDUExAREQFnZ2f069cPe/bs0ahrbGzEtm3bEBERgbi4uD9I\nociTcPv2bSxbtgxhYWHYsmULGhoadNr5+/ujvLz8V7ebnp6OpUuXapUrlUoMHTr0SeWK/AY2bdqE\noKAgLFy48KntdCeJ995776m09XspKirSyOygD0Rn8QScPHkSGzduxLp167BixQokJycDAO7cuYM3\n33wTu3btQkpKinDyn8jzz/fffw9PT09UV1ejW7duiIuLw7Bhw7QOtgGAq1ev/qYTyGxtbYU0DQ/z\n4GRCEf1z6NAhWFlZgSQGDRqEhISE392mSqXC+fPnn4K630/nzp21sic/dfS6i6ONMnLkSF68eJFk\nc6ba8PBwqtVqjho1ivPnz6daraZCoeClS5f+YKUiv4bKykqam5sLSdrI5h31zs7OzMrKItm8USsl\nJYV5eXns3r07GxsbWVRUxKamJubk5PD48ePCtSUlJcLuX7J5E+XDmQXKy8t59OhRnjx5kkOHDn02\nN/mSI5fLhQ2sV69eZbdu3YSEfUqlkunp6czOzhbsKysrGRsbS39/f6alpTEjI4Pp6em8cuUKb9y4\nQZJsaGigk5MTCwsLeejQId67d0+4Xq1W88yZMzx+/Liw8bKoqIiNjY28dOkSf/zxR5LkzZs3qVKp\n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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 5 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [] + } + ], + "metadata": {} + } + ] +} diff --git a/pypot-master/pypot-master/samples/benchmarks/cpu_usage.png b/pypot-master/pypot-master/samples/benchmarks/cpu_usage.png new file mode 100644 index 0000000000000000000000000000000000000000..0bf6828f209a6fa8fda7697abe3eda135b796cf7 GIT binary patch literal 30143 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 literal 0 HcmV?d00001 diff --git a/pypot-master/pypot-master/samples/benchmarks/dxl-controller.py b/pypot-master/pypot-master/samples/benchmarks/dxl-controller.py new file mode 100644 index 0000000..6f51c14 --- /dev/null +++ b/pypot-master/pypot-master/samples/benchmarks/dxl-controller.py @@ -0,0 +1,43 @@ +import os +import time +import argparse + +from numpy import argmax, mean + +from pypot.robot import from_json + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('-l', '--log-file', + type=str, required=True) + parser.add_argument('-N', type=int, required=True) + parser.add_argument('-c', '--config', + type=str, required=True) + args = parser.parse_args() + + bp = args.log_file + if os.path.exists(bp): + raise IOError('File already exists: {}'.format(bp)) + + robot = from_json(args.config) + + # We keep the controller with most motors connected + motors = [len(c.motors) for c in robot._controllers] + c = robot._controllers[argmax(motors)] + + print('Using controller with motors {}'.format([m.id for m in c.motors])) + c = c.controllers[1] + + dt = [] + for _ in range(args.N): + start = time.time() + c.get_present_position_speed_load(c.motors) + end = time.time() + dt.append(end - start) + + # We'll use raw file instead of numpy because of pypy + with open(bp, 'w') as f: + f.write(str(dt)) + + print('Done in {}ms'.format(mean(dt) * 1000)) diff --git a/pypot-master/pypot-master/samples/benchmarks/dxl-single-motor.py b/pypot-master/pypot-master/samples/benchmarks/dxl-single-motor.py new file mode 100644 index 0000000..710c8be --- /dev/null +++ b/pypot-master/pypot-master/samples/benchmarks/dxl-single-motor.py @@ -0,0 +1,94 @@ +import os +import time +import numpy +import argparse +import itertools + +from pypot.dynamixel import DxlIO, get_available_ports +from pypot.dynamixel.protocol.v1 import DxlReadDataPacket, DxlSyncWritePacket +from pypot.dynamixel.conversion import dxl_code + + +def timeit(rw_func, N, destfile): + dt = [] + for _ in range(N): + start = time.time() + rw_func() + end = time.time() + + dt.append(end - start) + + # We'll use raw file instead of numpy because of pypy + with open(destfile, 'w') as f: + f.write(str(dt)) + + return numpy.mean(dt) + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('-l', '--log-folder', + type=str, required=True) + parser.add_argument('-N', type=int, required=True) + args = parser.parse_args() + + bp = args.log_folder + if os.path.exists(bp): + raise IOError('Folder already exists: {}'.format(bp)) + os.mkdir(bp) + + available_ports = get_available_ports() + + port = available_ports[0] + print('Connecting on port {}.'.format(port)) + dxl = DxlIO(port) + + print('Scanning motors on the bus...') + ids = dxl.scan() + print('Found {}'.format(ids)) + + ids = ids[:1] + print('Will use id: {}'.format(ids)) + + if dxl.get_return_delay_time(ids)[0] != 0: + raise IOError('Make sure your motor has return delay time set to 0') + + print('Start testing !') + + print('Using "normal" pypot package...') + def rw_pypot(): + dxl.get_present_position(ids) + dxl.set_goal_position(dict(zip(ids, itertools.repeat(0)))) + + dt = timeit(rw_pypot, args.N, os.path.join(bp, 'rw_pypot.list')) + print('in {}ms'.format(dt * 1000)) + + print('Using pref-forged packet...') + c_get = [c for c in DxlIO._AbstractDxlIO__controls + if c.name == 'present position'][0] + + c_set = [c for c in DxlIO._AbstractDxlIO__controls + if c.name == 'goal position'][0] + + pos = dxl_code(0, c_set.length) + rp = DxlReadDataPacket(ids[0], c_get.address, c_get.length) + sp = DxlSyncWritePacket(c_set.address, c_set.length, ids[:1] + list(pos)) + + def rw_forged_packet(): + dxl._send_packet(rp) + dxl._send_packet(sp, wait_for_status_packet=False) + + dt = timeit(rw_forged_packet, args.N, os.path.join(bp, 'rw_forged.list')) + print('in {}ms'.format(dt * 1000)) + + print('Using raw serial communication...') + s_read = rp.to_string() + s_write = sp.to_string() + + def rw_serial(): + dxl._serial.write(s_read) + dxl._serial.read(8) + dxl._serial.write(s_write) + dt = timeit(rw_serial, args.N, os.path.join(bp, 'rw_serial.list')) + print('in {}ms'.format(dt * 1000)) + + print('Done !') diff --git a/pypot-master/pypot-master/samples/benchmarks/load_data.ipynb b/pypot-master/pypot-master/samples/benchmarks/load_data.ipynb new file mode 100644 index 0000000..b31af6e --- /dev/null +++ b/pypot-master/pypot-master/samples/benchmarks/load_data.ipynb @@ -0,0 +1,114 @@ +{ + "metadata": { + "name": "", + "signature": "sha256:6886e71181444b36c7a33b59039603d34808e3af4a3cd70cd03670eb5d8d59b2" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "code", + "collapsed": false, + "input": [ + "%pylab inline" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "Populating the interactive namespace from numpy and matplotlib\n" + ] + } + ], + "prompt_number": 1 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "boards = ['odroid', 'pi', 'dell']\n", + "pythons = ['3.4.1', '2.7.8', 'pypy-2.3.1']" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 2 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import os\n", + "\n", + "from collections import defaultdict\n", + "\n", + "cpu_usage = defaultdict(dict)\n", + "controller_rw_time = defaultdict(dict)\n", + "\n", + "packet = defaultdict(lambda: defaultdict(dict))\n", + "\n", + "for b in boards: \n", + " for p in pythons:\n", + " bp = os.path.join('res', b, p)\n", + " \n", + " l = eval(open(os.path.join(bp, 'robot.list')).read())\n", + " cpu_usage[b][p] = array(l)\n", + " \n", + " l = eval(open(os.path.join(bp, 'dxl_controller.list')).read())\n", + " controller_rw_time[b][p] = array(l)\n", + " \n", + " for s in ['serial', 'forged', 'pypot']:\n", + " l = eval(open(os.path.join(bp, 'dxl_single', 'rw_{}.list'.format(s))).read())\n", + " packet[s][b][p] = array(l)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 3 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "data = {\n", + " 'cpu_usage': dict(cpu_usage),\n", + " 'controller_rw_time': dict(controller_rw_time),\n", + " 'packet': dict(packet)\n", + "}" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import pickle\n", + "\n", + "# get the file here: https://github.com/poppy-project/pypot/releases/download/2.4.0/data.pickle", + "with open('data.pickle', 'wb') as f:\n", + " pickle.dump(data, f)" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [] + } + ], + "metadata": {} + } + ] +} diff --git a/pypot-master/pypot-master/samples/benchmarks/packet.pdf b/pypot-master/pypot-master/samples/benchmarks/packet.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4501ff1647ba1343a92975d791b8b88e798d1168 GIT binary patch literal 126735 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 z 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