Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5

Starting Pose in Project Setting

#1
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?
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


Attached Files
.png   螢幕擷取畫面 2025-07-01 134730.png (Size: 98.08 KB / Downloads: 6)
#2
The preferred start pose is defined by using setJoints on your robot machining project. You should provide the joint values that correspond to the pose.

This line will set the preferred start joints:
Code:
milling_project.setJoints(target.Joints())

If you want to choose among all the options you could also do:
Code:
pose_base2flange = robot.SolveFK(target.Joints())
joint_solutions = robot.SolveIK_All( pose_base2flange)
for joints in joint_solutions:
    print(joints)
  




Users browsing this thread:
1 Guest(s)