07-01-2025, 05:51 AM
I tried to define the starting pose in the machining project settings using the API shown below, but the project doesn't seem to use the pose I expected. Did I do something wrong?
Thanks.
Yen-Shuo
Code:
from robolink import *
from robodk import robomath
import numpy as np
import json
RDK = Robolink()
TAB = " "
project_name = ""
robot = RDK.Item("", ITEM_TYPE_ROBOT)
target = RDK.Item("Camera", ITEM_TYPE_TARGET)
reference_frame = RDK.Item("WA", ITEM_TYPE_FRAME)
tool = RDK.Item("T1", ITEM_TYPE_TOOL)
if not robot.Valid():
raise Exception('Invalid Robot.')
elif not target.Valid():
raise Exception('Invalid Object.')
elif not reference_frame.Valid():
raise Exception('Invalid Reference Frame.')
elif not tool.Valid():
raise Exception('Invalid Tool.')
project_name = "C87"
pose = target.Pose()
point = [[pose[0, 3], pose[1, 3], pose[2, 3], 0, -1, 0]]
new_curve_object = RDK.AddPoints(point)
new_curve_object.setName(project_name)
new_curve_object.setColorCurve([1, 0, 0, 1])
new_curve_object.setParent(reference_frame)
new_curve_object.setVisible(False)
milling_project = RDK.Item(f"{project_name} Settings", ITEM_TYPE_MACHINING)
if milling_project.Valid():
milling_project.Delete()
program = RDK.Item(project_name, ITEM_TYPE_PROGRAM)
if program.Valid():
program.Delete()
milling_project = RDK.AddMachiningProject(f"{project_name} Settings", robot)
milling_project.setMachiningParameters(part=new_curve_object)
starting_pt_ref_frame = RDK.Item("WA", ITEM_TYPE_FRAME)
robot.setPoseFrame(starting_pt_ref_frame)
robot.MoveJ(target)
# milling_project.setJoints([42.140204, 25.947566, 36.314816, 0.000000, 27.737618, -137.859796])
milling_project.setParam("ApproachRetract", "Normal 0")
# milling_project.setParam("Visible", 0)
machiningsettings = milling_project.setParam("Machining")
machiningsettings["AutoUpdate"] = 0
machiningsettings["PointApproach"] = 0.01
milling_project.setParam("Machining", machiningsettings)
#
milling_project.setPoseFrame(reference_frame)
milling_project.setPoseTool(tool)
milling_project.setJoints(target.Joints())
milling_project.setParent(RDK.Item("settings_calib", ITEM_TYPE_FOLDER))
prog_status_out = milling_project.Update(0, 3600) # 1表示檢查碰撞
prog_status = prog_status_out[3]
print(prog_status_out)
if prog_status > 0.0:
program = milling_project.getLink(ITEM_TYPE_PROGRAM)
program.setName(project_name)
program.setParent(RDK.Item("prog_calib", ITEM_TYPE_FOLDER))
print(f"Program {project_name} created successfully!")
# program = milling_project.getLink(ITEM_TYPE_PROGRAM)
# program.setName(project_name)
# program.setParent(RDK.Item("programs-calib", ITEM_TYPE_FOLDER))
# Provoking an exception will display the console output if you run this script from RoboDK
raise Exception('Program Finished')
Thanks.
Yen-Shuo