The communication diagram for remote task control and monitoring is given in Fig。 2。 The communication is described for the case when user performs task execution of the robot manipulator and remote monitoring of its execution。 User initiates remote control through the “speed dial” task execution message and the ProgramActivity that is located within the Android framework forwards remoteExecution message to the Client。 The Client is connected to the Server whose implementation is located within the real-time system’s Remote_Control_Mode component。 This message contains the object code which comprising parameters for robot manipulator path planning。 The Remote_Control_Mode component uses functionalities of the Interpolator component to calculate the reference position value that is sent to the Servo_Controller component。 The Servo_Controller sends reference velocity value to the Robot_Interface component that is connected to the real manipulator by using MOTENC board。 This component calculates the velocity output from the real manipulator and forwards it to the Servo_Controller component which contains the Client implementation for the reverse communication。 The Servo_Controller calculates and returns the current manipulator’s position to the Server within the Android framework in 15 ms intervals。 The Server accepts and forwards those values to the MonitoringActivity which performs 3D visualization of the manipulator’s task execution in real time。
3。5 Real-time Control System
The real-time control system is structured in layers [25]。 On the bottom is the real-time Linux operating system which kernel is patched with open source real-time framework Xenomai。 Xenomai is a real-time development framework cooperating with the Linux kernel, in order to provide a pervasive hard real-time support to user-space applications。 OROCOS Real-Time Toolkit (RTT) is referred as middleware that lying between operating system and application level。 The RTT provides infrastructure and functionalities to build robotics real-time applications in C++。 It allows setup, distribution and building of realtime components, which are the highest layer of the control system。 The client and the server for communication with Android device, both in control and monitoring mode, are implemented by using C++ programming language and Socket communication mechanism。
The application layer consists of components。 Component Remote_Control_Mode contains Server implementation and receives messages for remote control or remote manual positioning of robot from Android device in control operating mode。 It process received message that contains information about message type。 If it is a message for motion tasks execution, server receives the run file。 In this case Remote_Control_Mode component sends the run file to the Interpolator component where it has been executed。 Interpolator is a trajectory generator。 It calculates the reference position values that have to be sent to the Servo_Controller component。 New values are written in 5 ms time intervals。 The Interpolator component implements algorithms developed at the Lola Institute [6]。 The Servo_Controller component represents an abstract system controller。 The Servo_Controller sends reference velocity values that have to be reached to the Robot_Interface component every 1 ms。 It uses a position feedback law to calculate the velocity output from measured and desired positions。 Component Robot_Interface is connected to the real robot by using MOTENC board and it contains implementations of required drivers。 If the server receives message for manual positioning, it receives axis number and motion direction。 In this case Remote_Control_Mode component sends obtained data directly to the Servo_Controller component。 When server receives command for starting or stopping the robot’s work, it performs the following operations: preparation of Robot_Interface component, engine breaks releasing and enabling of reading and writing to robot’s ports ie。 stopping Robot_Interface component, brakes raising and disabling of reading and writing to ports。