线程评级:
导出六轴机器人的关节位置
# 1
你好,

我使用jointsspeedacceleration .py宏来导出一个6轴机器人的关节位置。我想知道输出的每个轴的位置对应的值是什么?有极坐标吗?
我认为宏观输出关节的位置是欧拉角的笛卡尔坐标。

谢谢,
Yohan


附加文件
.rdk 新站(1).rdk .(大小:416 KB /下载:57)
你好,

脚本导出机器人的关节值,以度为单位。
您可以修改脚本以添加笛卡尔值。

代码:
这个脚本生成一个模拟关节的图表,计算关节速度和加速度
#提示:使用脚本jointsplay .py沿着记录的关节移动

从robolink导入* # API与RoboDK通信
从robodk导入* #基本矩阵操作
从时间导入gmtime, strftime,时间


#模拟比:越低越准确
SimulationSpeed = 0.05 #一个程序在实时中需要5秒,在模拟中SimulationSpeed会快一倍(如果< 1则更慢)

#采样时间:我们需要一个新条目的频率
SampleTime = 0.05

#为了得到更好的结果:
#选择工具-选项-运动
设置最大路径步长(mm)为0.01
#设置最大路径步长(度)为0.01


#启动RoboDK API
RDK = Robolink()

t_ratio = 1/SimulationSpeed
RDK.setSimulationSpeed (SimulationSpeed)

#让用户选择一个机械臂(机制被忽略)
prog = RDK。ItemUserPick('选择程序',ITEM_TYPE_PROGRAM)
如果不是program . valid ():
抛出异常(“机器人不可用”)

robot = prog.getLink(ITEM_TYPE_ROBOT)
ndofs = len(robot. joint ().list())

在RDK文件所在的文件夹中生成一个文件
file_path = RDK.getParam('PATH_OPENSTATION') + '/joint -' + prog.Name() + '.csv'

Def joints_changed(j1, j2,公差=0.0001):
"""如果关节1和关节2不同则返回True """
如果j1为None或j2为None:
还真

对于zip中的j1,j2 (j1,j2):
若abs(j1-j2) >公差:
还真

返回假

Def diff(j1, j2, dt, dfs):
"""如果关节1和关节2不同则返回True """
如果j2为None或dt <= 0:
返回[0]*自由度

Res = []
对于zip中的j1,j2 (j1,j2):
res.append ((j1-j2) / dt)

返回res



#无限循环记录机器人关节
print("记录机器人关节到文件:" + file_path)
使用open(file_path,'w')作为fid:
Joints_header = ","。join(["关节" + str(i+1) for i in range(ndofs)])
Speeds_header = ","。join(["Speed " + str(i+1) for i in range(ndofs)])
Accel_header = ","。join(["Accel " + str(i+1) for i in range(ndofs)])
Xyzwpr_header = ","。join(["X", "Y", "Z", "W", "P", "R"])
fid。写(“时间(s),”+ joints_header +”,时间(s),“+ speeds_header +”,时间(s),“+ accel_header +”,时间(s),“+ xyzwpr_header)
fid.write(“\ n”)
joints_last =无
speeds_last =无
t_last =无
t_start =无

RDK.Render(真正的)
prog.RunProgram ()
虽然prog.Busy ():
#t_now = time() #使用t_ratio进行估计
#t_now = float(RDK.Command("SimulationTime"))*0.001

t_now = float(RDK.Command("TrajectoryTime")) # RoboDK用于运动模拟的内部时钟
关节= robot.关节().list()
如果joints_changed(关节,joints_last):
如果t_last为None:
T_last = t_now
T_start = t_now

#计算时间
#t_sim = t_ratio * (t_now - t_start) #如果我们使用RoboDK的SimulationTime则不需要
#t_delta = t_ratio * (t_now - t_last) #如果我们使用RoboDK的SimulationTime则不需要
T_sim = t_now - t_start
T_delta = t_now - t_last
如果t_delta < SampleTime:
最少5毫秒的时间,以获得良好的准确性
继续

#计算速度
速度= diff(关节,joints_last, t_delta, ndofs)

#计算加速度
Accels = diff(速度,speeds_last, t_delta, ndofs)

#计算xyz
xyzwpr = pose_2_xyzrpw(robot.Pose())

打印('时间+S: %。s' % t_sim)
Joints_str = ",".join(["%。6f" % x for x in joint])
Speeds_str = ",".join(["%。6f" % x for x in speed])
Accels_str = ",".join(["%. str = ","6f" % x for x in accels])
Xyzwpr_str = ",".join(["%。6f" % x for x in xyzwpr])

Time_str = ("%. "6f," % t_sim)
fid。写入(time_str + joints_str + ",," + time_str + speeds_str + ",," + time_str + accels_str + ",," + time_str + xyzwpr_str)
fid.write(“\ n”)
T_last = t_now
Joints_last =关节
Speeds_last =速度
#暂停(0.005)


有关RoboDK及其功能的有用信息,请访问我们的爱游戏ayx高尔夫球在线文档通过观看我们的教程YouTube频道
# 3
该脚本只导出联合值,不导出笛卡尔值。

您可以使用SolveFK计算机器人效应器的笛卡尔位置。




浏览此线程的用户:
1客人(年代)