R6 Robot Teach Pendant

// Copyright (C) 2026 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
import QtQuick
import QtQuick3D

Node {
    id: r6botRoot

    property bool showJointAxes: true

    property alias worldPosition: worldNode.position
    property alias worldRotation: worldNode.rotation
    property alias baseLinkPosition: baseLinkNode.position
    property alias baseLinkRotation: baseLinkNode.rotation
    property alias link1Position: link1Node.position
    property alias link1Rotation: link1Node.rotation
    property alias link2Position: link2Node.position
    property alias link2Rotation: link2Node.rotation
    property alias link3Position: link3Node.position
    property alias link3Rotation: link3Node.rotation
    property alias link4Position: link4Node.position
    property alias link4Rotation: link4Node.rotation
    property alias link5Position: link5Node.position
    property alias link5Rotation: link5Node.rotation
    property alias link6Position: link6Node.position
    property alias link6Rotation: link6Node.rotation
    property alias ftFramePosition: ftFrameNode.position
    property alias ftFrameRotation: ftFrameNode.rotation
    property alias tool0Position: tool0Node.position
    property alias tool0Rotation: tool0Node.rotation

    Node {
        id: worldNode

        Node {
            id: baseLinkNode
            // Joint: fixed, axis: [0.0, 0.0, 1.0]
            position: Qt.vector3d(0.0, 0.0, 0.0)

            JointAxes {
                visible: r6botRoot.showJointAxes
            }

            Node {
                id: baseLinkVisual

                Link_0 {
                    // Cancel Y-UP balsam rotation
                    rotation: Qt.quaternion(0.7071068, 0.7071068, 0, 0)
                }
            }

            Node {
                id: link1Node
                // Joint: revolute, axis: [0.0, 0.0, 1.0]
                position: Qt.vector3d(0.0, 0.0, 0.061584)

                JointAxes {
                    visible: r6botRoot.showJointAxes
                }

                Node {
                    id: link1Visual

                    Link_1 {
                        // URDF <visual> origin offset within link_1, plus
                        // cancel Y-UP balsam rotation
                        position: Qt.vector3d(0.0, 0.0, -0.182)
                        rotation: Qt.quaternion(0.7071068, 0.7071068, 0, 0)
                    }
                }

                Node {
                    id: link2Node
                    // Joint: revolute, axis: [0.0, 0.0, 1.0]
                    position: Qt.vector3d(-0.101717, 0.0, 0.182284)
                    rotation: Qt.quaternion(0.6830127018922193,
                                            -0.18301270189221935,
                                            -0.6830127018922192,
                                            0.18301270189221935)

                    JointAxes {
                        visible: r6botRoot.showJointAxes
                    }

                    Node {
                        id: link2Visual

                        Link_2 {
                            // URDF <visual> origin offset within link_2, plus
                            // cancel Y-UP balsam rotation
                            position: Qt.vector3d(0.0, 0.0, -0.168)
                            rotation: Qt.quaternion(0.7071068, 0.7071068, 0, 0)
                        }
                    }

                    Node {
                        id: link3Node
                        // Joint: revolute, axis: [0.0, 0.0, 1.0]
                        position: Qt.vector3d(0.685682, 0.0, 0.041861)
                        rotation: Qt.quaternion(-4.329780281177466e-17,
                                                -0.7071067811865476,
                                                -0.7071067811865475,
                                                4.329780281177467e-17)

                        JointAxes {
                            visible: r6botRoot.showJointAxes
                        }

                        Node {
                            id: link3Visual

                            Link_3 {
                                // URDF <visual> origin offset within link_3, plus
                                // cancel Y-UP balsam rotation
                                position: Qt.vector3d(0.0, 0.0, -0.144)
                                rotation: Qt.quaternion(0.7071068,
                                                        0.7071068, 0, 0)
                            }
                        }

                        Node {
                            id: link4Node
                            // Joint: revolute, axis: [0.0, 0.0, 1.0]
                            position: Qt.vector3d(0.518777, 0.0, 0.067458)
                            rotation: Qt.quaternion(-1.5848095757158815e-17,
                                                    -0.9659258262890683,
                                                    -0.25881904510252063,
                                                    5.914589856893349e-17)

                            JointAxes {
                                visible: r6botRoot.showJointAxes
                            }

                            Node {
                                id: link4Visual

                                Link_4 {
                                    // URDF <visual> origin offset within link_4, plus
                                    // cancel Y-UP balsam rotation
                                    position: Qt.vector3d(0.0, 0.0, 0.077)
                                    rotation: Qt.quaternion(0.7071068,
                                                            0.7071068, 0, 0)
                                }
                            }

                            Node {
                                id: link5Node
                                // Joint: revolute, axis: [0.0, 0.0, 1.0]
                                position: Qt.vector3d(0.112654, 0.0, 0.110903)
                                rotation: Qt.quaternion(0.49999999999999994,
                                                        -0.49999999999999994,
                                                        0.5000000000000001,
                                                        -0.49999999999999994)

                                JointAxes {
                                    visible: r6botRoot.showJointAxes
                                }

                                Node {
                                    id: link5Visual

                                    Link_5 {
                                        // URDF <visual> origin offset within link_5, plus
                                        // cancel Y-UP balsam rotation
                                        position: Qt.vector3d(0.0, 0.0, 0.113)
                                        rotation: Qt.quaternion(0.7071068,
                                                                0.7071068, 0, 0)
                                    }
                                }

                                Node {
                                    id: link6Node
                                    // Joint: revolute, axis: [0.0, 0.0, 1.0]
                                    position: Qt.vector3d(-0.085976,
                                                          0.0, 0.133436)
                                    rotation: Qt.quaternion(
                                                  0.7071067811865476, 0.0,
                                                  -0.7071067811865475, 0.0)

                                    JointAxes {
                                        visible: r6botRoot.showJointAxes
                                    }

                                    Node {
                                        id: link6Visual

                                        Link_6 {
                                            // URDF <visual> origin offset within link_6, plus
                                            // cancel Y-UP balsam rotation
                                            position: Qt.vector3d(0.0, 0.0, 0.086)
                                            rotation: Qt.quaternion(0.7071068,
                                                                    0.7071068,
                                                                    0, 0)
                                        }
                                    }

                                    Node {
                                        id: ftFrameNode
                                        // Joint: fixed
                                        position: Qt.vector3d(0.0, 0.0, 0.0)

                                        Node {
                                            id: tool0Node
                                            // Joint: fixed
                                            position: Qt.vector3d(0.0,
                                                                  0.0, 0.185)

                                            JointAxes {
                                                visible: r6botRoot.showJointAxes
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}