Move recording and playing¶
The move module contains utility classes to help you record and play moves. Those Move is simply defined as a sequence of positions.
Note
To keep the move module as simple as possible, you can only define 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 move module to:
- record moves,
- play moves,
- save/load them on the disk.
The MoveRecorder and MovePlayer are defined as subclass of 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 Move, it will be played slowly resulting in a slower version of your move.