线程评级:
  • 0票(s) - 0平均
  • 1
  • 2
  • 3.
  • 4
  • 5
输出6轴机器人的关节位置
# 1
你好,

我使用jointsspeedaccelerator .py宏来导出6轴机器人的关节位置。我想知道输出的每个轴的位置对应什么值?有极坐标吗?
我认为宏导出关节的位置在直角坐标系下用欧拉角表示。

谢谢,
Yohan


附加文件
.rdk 新站(1).rdk(大小:416kb /下载:772022世界杯国家队名单)
# 2
你好,

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

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

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


#仿真比:越低越准确
SimulationSpeed = 0.05 #一个程序需要5秒的实时时间,在模拟中将是SimulationSpeed的1倍快(如果< 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)
如果不是prog.Valid():
引发异常("Robot is not available")

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, dofs):
"""如果关节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(["Joint " + 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的运动模拟内部时钟
joint = robot. joint ().list()
如果joints_changed(joint, joints_last):
if 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(speed, speeds_last, t_delta, ndofs)

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

打印时间+S: %。3f ' s' % t_sim)
Joints_str = ",".join(["%。6f“% x表示关节中的x])
Speeds_str = ",".join(["%。6f“% x表示速度中的x])
Accels_str = ",".join(["%。6f" % x for x in accels])
Xyzwpr_str = ",".join(["%。6f“% x for x in xyzwpr]”

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


请阅读论坛的指导方针之前发帖!
有关RoboDK的有用信息,请访问我们的2022世界杯32强赛程表时间
# 3
这个脚本只输出关节值,不输出笛卡尔坐标。

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




浏览此主题的用户:
1客人(年代)