urcontrol/tests/pantilt.py
2022-05-31 15:05:06 +02:00

84 lines
1.7 KiB
Python

import rtde_control
import time
import math
import socket
rtde_c = rtde_control.RTDEControlInterface("192.168.1.101")
import rtde_receive
rtde_r = rtde_receive.RTDEReceiveInterface("192.168.1.101")
def toRad(d):
return d/360*2*math.pi
'''
actual_q = rtde_r.getActualQ() #current joint rotations in radians.
print("Actual Q:"+str(actual_q))
fw_actual_q = rtde_c.getForwardKinematics(actual_q)
print("forward Actual Q:"+str(fw_actual_q))
joint_q=rtde_c.getInverseKinematics(fw_actual_q)
print("Final Q:"+str(joint_q))
'''
pan=0 #-=left, +=right, degrees
tilt=0 #-=down, +=up, degrees
joint_q=[0,toRad(-90),toRad(90),toRad(-180),toRad(-90),toRad(0)] #start position
#rtde_c.moveJ([0,toRad(-90),toRad(90-tilt/2),toRad(-180-tilt/2),toRad(-90-pan),toRad(0)],0.1,0.1)
rtde_c.moveJ(joint_q,0.1,0.1) #move to initial position
# Parameters
duration = 20 #in seconds
velocity = 0.1 #0.5
acceleration = 0.1 #0.5
frequency= 100
dt = 1.0/frequency # 2ms
lookahead_time = 0.1
gain = 300
speed=0.1/frequency
def constrain(v,_min,_max):
return min(_max,max(_min,v))
print("Starting Servo")
for i in range(frequency*duration):
start = time.time()
joint_q_aim = [0,toRad(-90),toRad(90-tilt/2),toRad(-180-tilt/2),toRad(-90-pan),toRad(0)]
if (round(i/(frequency*5))%2==1):
tilt=20
else:
tilt=-20
for i in range(6):
joint_q[i] += constrain(joint_q_aim[i]-joint_q[i], -speed,speed)
print(joint_q)
rtde_c.servoJ(joint_q, velocity, acceleration, dt, lookahead_time, gain)
end = time.time()
stepduration = end - start
if stepduration < dt:
time.sleep(dt - stepduration)
print("Finished")
rtde_c.servoStop()
rtde_c.stopScript()