DoF - a Robotiq Community
Warning sign
The Dof Community was shut down in June 2023. This is a read-only archive.
If you have questions about Robotiq products please reach our support team.
fratz

Hi,

we try to program a solution which is simular to the Active Drive Toolbar but we want to use it programmically in a program. We know that we cannot embed the Active Drive so we have to do our own solution but are struggling. We took the "template_sensor.urp" and modified it so it looks pretty much like the code below. It should do nothing when you press play and just acts like the Active Drive when the digital_out[0] gets true. So we can use the digital outputs to regulate the Active Drive-Feature.

We receive the forces and torques from the sensor in the Thread_1, multiply with values < 1 so we can use that values as velocities and transform them with baseToTool() to the tcp frame. These transformed values we pass to the speedl() method.

When the program is like this the robot behaves shaky. We don't know why and changed all parameters, tried to change the parameters, added round-functions but nothing really helps.

We thought of using the force mode somehow to achieve this but didn't try it and want to get some opinions here first.

Do you have an idea how to realize this?

Any advices and hints are highly appreciated!
Thank you in advance.

Frederik


$ 6 "Script: fromTemplateDefinitionen.script"
def tolerance(value, tolerance):
	if (norm(value) < tolerance):
		return 0
	else:
		return value
	end
end

def forceToVel(force, multiplyer):
	return force * multiplyer
end

def baseToTool(vec):
	tool = get_actual_tcp_pose()
	tcp = p[0,0,0,tool[3],tool[4],tool[5]]
	tempt = p[vec[0],vec[1],vec[2],0,0,0]
	tempr = p[vec[3],vec[4],vec[5],0,0,0]
	t = pose_trans(tcp, tempt)
	r = pose_trans(tcp, tempr)
	return [t[0],t[1],t[2],r[0],r[1],r[2]]
end

Programm
	Init Variablen
	VorStart
		socket_close("stream")
		socket_open("127.0.0.1",63351,"stream")
		Script: accessor_capt.script
		Script: airbus-fromTemplateDefinitionen.script
		speed_Vec≔[0.0,0.0,0.0,0.0,0.0,0.0]
		tol_Vec≔[10.0,10.0,10.0,5.0,5.0,5.0]
		forceToSpeedFac≔[0.004,0.004,0.004,0,0,0]
		timer≔0.0
		Einstellen DO[0]=Aus
		Einstellen DO[2]=Aus
Roboterprogramm
	rq_set_zero()
    Schleife timer<0.3
		If digital_out[0]≟ True 
			speedl(speed_Vec, 10, 0.008)
		Else
			stopl(10)
			Warten: 0.1
Thread_1
	Schleife
		data≔socket_read_ascii_float(6,"stream")
		If data[0]≠0
			Fx = tolerance(data[1], tol_Vec[0])
			Fy = tolerance(data[2], tol_Vec[1])
			Fz = tolerance(data[3], tol_Vec[2])
			Mx = tolerance(data[4], tol_Vec[3])
			My = tolerance(data[5], tol_Vec[4])
			Mz = tolerance(data[6], tol_Vec[5])
 
			SpeedX = forceToVel(Fx, forceToSpeedFac[0])
			SpeedY = forceToVel(Fy, forceToSpeedFac[1])
			SpeedZ = forceToVel(Fz, forceToSpeedFac[2])
			SpeedMX = forceToVel(Mx, forceToSpeedFac[3])
			SpeedMY = forceToVel(My, forceToSpeedFac[4])
			SpeedMZ = forceToVel(Mz, forceToSpeedFac[5])
		 
			speed_Vec≔baseToTool([SpeedX,SpeedY,SpeedZ,SpeedMX,SpeedMY,SpeedMZ])
			timer≔0.0
		Else
			speed_Vec≔[0.0,0.0,0.0,0.0,0.0,0.0]
			timer≔2
Thread_2
	timer≔timer + 0.008
    sync()