With the objective of testing my kinematics algorithms, an experimental setup was planned and commissioned. This setup was based on a bilateral control with dissimilar master and slave. The master used was the Phantom OMNI, manufactured by Sensable. It is worth noting that this device presents 6 dof of positional feedback although only 3 dof of force feedback. The first three joints are the only ones creating torque which is able to render a force in in the master tip.
The slave device used for his experiment was the industrial robot ABB IRB 2400-16, controlled using an SC4+ controller shown above. The robot controller is equipped with the operating system BaseWare OS. This system controls every aspect of the robot, like motion control, development and execution of application programs communication etc. For additional functionality, the robot can be equipped with optional software for application support – for example gluing and arc welding, communication features – network communication – and advanced functions such as multitasking, sensor control etc, although that was not the case of this experiment.
In a figure below the interface between the different elements of the experiment is shown. A PC running LabView 2011 was dedicated to interface the different components and provide the human interface. The master control was written in C code and called from the LabView interface. Both pieces of software were communicating with each other by means of TCP sockets. The master control was running at 1 KHz.
In order to interface with the slave, only a serial port RS 422 was available in the SC4+ controller but no Ethernet was included in it. Also, there were no real time communication utilities or multi-tasking options like those ones used for correcting the trajectory while welding or painting in the manufacturing industry.
The lack of communication utilities was the main drawback when teleoperating this robot and it was the cause of the very low loop frequency obtained. In , the research of a Swedish university, proposed to use additional hardware parts such as a PowerPC board, a PMC-PCI interface and a flash disk which are added to the original SC4+ controller to be able to run software in a fastest way and improve the communication capabilities. Nevertheless, this system is still under development, and it is of extremely difficult implementation and there is not enough information for its development, so it could not be implemented.
In the figure below it is shown how the human machine interface (HMI), running in the PC with LabView, is connected to the robot controller via serial channel. Independently of the communication channel used, the information transmitted between the LabView controller and the robot controller corresponds to the diagram below. This means that only the reference value of the 6 joints is commanded to the robot controller, liberating the SC4+ of accomplishing the laborious inverse kinematics. Thereby, the robot controller function was just executing a continuous loop that reads joints reference value coming from the dissimilar kinematics algorithm and writing real joints’ value. A loop is executed continuously to read the new target joints’ values, execute the movement and send the real joints’ values back to the PC controller.
Different approaches can be used in order to read and send information back to the robot controller depending on the instructions used to read and write data on the serial channel. For the RAPID language used on the ABB robots and basic serial communication, the following variants for reading and writing are available: reading instructions and writing instructions (See tables).
Reading instructions in RAPID code
|ReadBin||(Read Binary) is used to read a byte (8 bits) from a file or serial channel. This function works on both binary and character-based files or serial channels.|
|ReadNum||ReadNum (Read Numeric) is used to read a number from a character-based file or serial channel.|
|ReadStr||ReadStr (Read String) is used to read a string from a character-based file or serial channel.|
|ReadStrBin||ReadStrBin (Read String Binary) is used to read a string from a binary serial channel or file.|
A string based communication was implemented due to the relative easiness of use in comparison with binary based instructions, with ReadNum and Write instructions. .
|Writing instructions in RAPID code|
|Write||Write is used to write to a character-based file or serial channel. The value of certain data can be written as well as text.|
|WriteAnyBin||WriteAnyBin (Write Any Binary) is used to write any type of data to a binary serial channel or file.|
|WriteStrBin||WriteStrBin (Write String Binary) is used to write a string to a binary serial channel or binary file.|
|WriteBin||WriteBin is used to write a number of bytes to a binary serial channel|
Writing instructions available in RAPID code.
The additional StopMove and ClearPath instructions play a crucial role in a teleoperation software. Ideally the slave robot should follow perfectly the master’s command with minimum error. However during practical implementation it might be a common situation when the slave manipulator cannot replicate the master’s movements as fast as it should due to mechanical limitations or due to a slow loop frequency. If this is the case, it is important to be able to correct the trajectory on real time. When the slave is moving and before it reaches the target joint value there might be a new available joint target from the master.
The only way of issuing a new command for the slave is interrupting the current command and executing a new one. To interrupt the current path these two instructions have to be executed in RAPID, StopMove to stop the current planned path and ClearPath to clear the planned movement. This strategy produced a discontinuous robot movement because move and stop commands were continuously issued. Ideally, if a robot with an open control architecture is used, torque commands could be issued instead of position commands, improving the control efficiency and speed. But unfortunately, in a closed system as the one present in ABB, this option could not be used and only position commands can be issued. Other alternative to improve the control smoothness could be to perform velocity control in a way such that the robot does not have to stop its movement in each iteration. Unfortunately this option was not available either.
In the next post I will explain the delay issues found during this process.