I completed a summer internship at the Technical University of Munich with a focus on controlling industrial robot arms with a haptic joystick. I was involved in implementing communication protocols to interface a KUKA CR6/2 Robot System with a controlling computer configured with the QNX Real-time Operating System. The programming environment used was Simulink with the RT-Lab software for interfacing with the QNX system. The second area of work involves interfacing the joystick with the QNX system which is accomplished using a Windows host computer for the joystick and relaying coordinates to the QNX controlled computer via a UDP connection. The final area of work has involved workspace control of the robot as well as singularity avoidance in the inverse kinematics algorithms of the robot controller.
The RSI protocol, defined by KUKA, requires that the maximum interpolation cycle must be no greater 12ms; i.e., the data must be received by the user, processed, and sent back to the robot controller within a 12ms interval. If this 12ms interval passes without any reception of data by the robot, the robot with stop with an error code.
The controller was designed so that sending and receiving commands could be performed asynchronously on the QNX. In the send block, there is an existing command to wait for a reply before the next send. This reply is given by the receive block after getting a packet from the robot controller. So, the QNX receives a packet, notifies the send block that it is ready to send a packet, and then after sending, the QNX must wait to receive another packet before sending. This allows for synchronization of the asynchronous functions to ensure stable execution.
In addition to sending the position information, the haptic joystick also receives the force information via the same UDP connection. The QNX system sends the two force values via a similar block structure as the RSI interface blocks. The two force values for the x-y axis are sent and then the controller waits for the reply packet with the three robot position values. The received force values are then converted from Newtons to the range given by the joystick function and then relayed to the joystick via a predefined function.
To help with singularities, a pseudoinverse method was used to provide an accurate path for the robot to travel with a scaling on the velocity vector to a maximum norm velocity. One remaining issue was that the orientation of the tool center point was not always constant in the world coordinate system. The Jacobian matrix appears to work in the world coordinate system; however, there are some inconsistencies between the coordinate systems which still had to be investigated.