แม้ว่าคุณจะมีแกนภายนอก เช่น โต๊ะหมุน คุณควรจะสามารถใช้ไดร์เวอร์และหน่วยประมวลผลกับตัวควบคุมหุ่นยนต์ KUKA ได้ ขอแนะนำให้ใช้ระบบพิกัดแบบมีหมายเลข หรือระบบพิกัดที่มีการกำหนดเครื่อง (machine definition) ที่ถูกต้อง ซึ่งถูกกำหนดไว้แล้วในตัวควบคุมหุ่นยนต์
ไฟล์ต่อไปนี้ของตัวควบคุมหุ่นยนต์ KUKA จะช่วยให้คุณเข้าใจว่าระบบ KUKA ถูกสร้างขึ้นอย่างไร:
1.KRC\R1\System\$config.dat
2.KRC\R1\System\bas.src
3.KRC\R1\Mada\$machine.dat
หากคุณมีโต๊ะหมุน ตำแหน่งจุดกำเนิดของโต๊ะหมุนควรถูกกำหนดไว้ในตัวแปร MACHINE_DEF ของไฟล์ config.dat ผู้ที่ติดตั้งระบบของคุณควรมีตัวอย่างการสร้างโปรแกรมโดยใช้โต๊ะหมุนที่ซิงโครไนซ์กันโดยอิงจากฟังก์ชัน BAS
ตัวอย่างเช่น หากเรียกใช้ฟังก์ชัน BAS ในไฟล์ SRC โดยใช้แฟล็ก ex_BASE และดัชนีที่ระบุ (เช่น ดัชนี 9):
BASE_DATA[9] = {FRAME: X 0, Y 0, Z 0, A 0, B 0, C 0}
BAS(#ex_BASE,9)
นั่นหมายความว่าเราต้องการใช้ดัชนี 9 ของ MACHINE_FRAME_DATA นอกจากนี้ คุณควรตรวจสอบคำจำกัดความของ BAS และ EX_BASE เพื่อดูว่าตัวควบคุมอ้างอิงดัชนีเครื่อง (MACH_IDX) ใดโดยค่าเริ่มต้น อาร์เรย์ BASE_DATA ที่กำหนดไว้ก่อนการเรียกฟังก์ชัน BAS ในไฟล์ SRC อาจเป็นเพียงค่าชดเชยของฟิกซ์เจอร์ที่ยึดกับโต๊ะหมุนเท่านั้น
หากคุณมีโต๊ะหมุนที่ซิงโครไนซ์กับแขนหุ่นยนต์ คุณอาจต้องเปลี่ยนตัวแปร $BASE ด้วยตนเองในหน่วยประมวลผลหรือไดร์เวอร์ เพื่อตั้งค่าเป็นจุดกำเนิดของโต๊ะหมุน
ตัวอย่างเช่น หากดัชนี 9 ของ BASE_DATA ใช้งานได้ คุณควรใช้โค้ดต่อไปนี้ในไดร์เวอร์
;--------
; Replace this the $BASE definition by the following 2 lines
; to make the KUKA RoboDKSynch driver work with external axes:
; $BASE = {FRAME: X 0, Y 0, Z 0, A 0, B 0, C 0} ; Comment this line
BASE_DATA[9] = {FRAME: X 0, Y 0, Z 0, A 0, B 0, C 0}
BAS(#ex_BASE,9)
; the BAS ex_BASE function links to a fixed MACHINE_DEF index
; visible in the BAS function
; The previous two lines are equivalent to the following,
; if the BAS function uses index 2 for the Machine definition
; BASE_DATA[9] = {FRAME: X 0, Y 0, Z 0, A 0, B 0, C 0}
; $BASE=EK(MACHINE_DEF[2].ROOT,MACHINE_DEF[2].MECH_TYPE,BASE_DATA[9])
;--------
$BASE=EK(EX_AX_DATA[1].ROOT,EX_AX_DATA[1].EX_KIN,EX_AX_DATA[1].OFFSET)
ในหน่วยประมวลผล หากคุณต้องการคำนึงถึงค่าชดเชยระหว่างโต๊ะหมุนและฟิกซ์เจอร์ คุณสามารถแทนที่บรรทัดก่อนหน้าด้วยคำจำกัดความ $BASE นี้ในฟังก์ชัน setFrame ของหน่วยประมวลผล:
$BASE=EK(MACHINE_DEF[2].ROOT, MACHINE_DEF[2].MECH_TYPE, {%s})' % self.pose_2_str(pose)
หรืออีกทางเลือกหนึ่ง หากใช้ไดร์เวอร์ คุณสามารถแยกระบบพิกัดตามขั้นตอนที่อธิบายไว้ด้านล่างได้ (จึงไม่จำเป็นต้องจับคู่จลนศาสตร์ของแกนภายนอกใน RoboDK ให้ตรงกันทั้งหมด)
ตัวอย่างเช่น เพื่อให้ไดร์เวอร์ RoboDK ใช้งานได้ตามค่าเริ่มต้น จลนศาสตร์ของแกนภายนอกที่กำหนดไว้ในตัวควบคุมหุ่นยนต์ต้องตรงกับจลนศาสตร์ที่สร้างไว้ใน RoboDK นอกจากนี้ หากคุณมีโต๊ะหมุน จุดฐานของโต๊ะหมุนต้องตรงกับตำแหน่งโต๊ะหมุนที่กำหนดไว้ใน RoboDK
หากต้องการใช้ไดร์เวอร์กับระบบพิกัดที่ทราบอยู่แล้ว ให้ทำตามขั้นตอนต่อไปนี้:
1.เลือก Tools→Options แท็บ Drivers
2.เปิดตัวเลือก Provide Cartesian coordinates with respect to the reference

1.แทนที่ตัวแปร $BASE ในไฟล์โปรแกรม RoboDKsync.src ด้วยระบบพิกัดที่คุณต้องการใช้
ตัวอย่างเช่น หากต้องการใช้เฟรมอ้างอิงหมายเลข 5 ไฟล์ RoboDKsync.src ควรมีลักษณะดังนี้ (บรรทัดแรกถูกคอมเมนต์ไว้ อยู่ที่บรรทัดประมาณที่ 25):
; $BASE = {FRAME: X 0,Y 0,Z 0,A 0,B 0,C 0}
$BASE = BASE_DATA[5]
ระบบพิกัดนี้ต้องถูกกำหนดไว้ล่วงหน้าในตัวควบคุมหุ่นยนต์ KUKA และ RoboDK จะไม่เขียนทับค่านี้