13parser = argparse.ArgumentParser(description=
'perform an offline trajectory via position commands with fixed period')
14parser.add_argument(
'--remote', default=
'/teo/leftArm', type=str, help=
'remote port')
15parser.add_argument(
'--joint', default=5, type=int, help=
'joint id')
16parser.add_argument(
'--speed', default=2.0, type=float, help=
'trajectory speed (deg/s)')
17parser.add_argument(
'--target', default=-20.0, type=float, help=
'target position (deg)')
18parser.add_argument(
'--period', default=50, type=int, help=
'command period (ms)')
19parser.add_argument(
'--ip', default=
'pt', type=str, help=
'interpolation submode [pt|pvt]')
20args = parser.parse_args()
24if not yarp.Network.checkNetwork():
25 print(
'Please start a yarp name server first')
28options = yarp.Property()
29options.put(
'device',
'remote_controlboard')
30options.put(
'local',
'/exampleOfflineTrajectorySync')
31options.put(
'remote', args.remote)
32options.put(
'writeStrict',
'on')
34dd = yarp.PolyDriver(options)
37 print(
'Remote device not available')
40mode = dd.viewIControlMode()
41enc = dd.viewIEncoders()
42pos = dd.viewIPositionControl()
43posd = dd.viewIPositionDirect()
44var = dd.viewIRemoteVariables()
46if mode
is None or enc
is None or pos
is None or posd
is None or var
is None:
47 print(
'Unable to acquire robot interfaces')
51p.put(
'ipMode', args.ip)
52p.put(
'ipPeriodMs', args.period)
53p.put(
'enableIp',
True)
56b.addList().fromString(p.toString())
58if not var.setRemoteVariable(
'all', b):
59 print(
'Unable to set interpolation mode')
62if not mode.setControlMode(args.joint, yarp.VOCAB_CM_POSITION_DIRECT):
63 print(
'Unable to set position direct mode')
67initialPos = enc.getEncoder(args.joint)
69print(
'Current enc value: %d' % initialPos)
70input(
'Press ENTER to start')
71print(
'Moving joint %d to %d degrees...' % (args.joint, args.target))
73distance = args.target - initialPos
74increment = math.copysign(args.speed * args.period * 0.001, distance)
78while abs(distance) > abs(newDistance):
79 newDistance = count * increment
80 position = initialPos + newDistance
81 print(
"[%d] New target: %f" % (count, position))
82 posd.setPosition(args.joint, position)
85motionDone = yarp.BVector(1)
87while pos.checkMotionDone(args.joint, motionDone)
and motionDone[0]: