11-easy-rob-chapter-09

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View 11-easy-rob-chapter-09 as PDF for free.

More details

  • Words: 13,701
  • Pages: 28
A P I

- APPLICATION

PROGRAM

INTERFACE

API 9 Application Program Interface The Application Program Interface (API) provides the user the ability to develop own functions written in C programming language for user defined • • •

inverse kinematics (API-INV) motion planning (API-IPO) and dynamics (API-DYN)

The below text will give a basic overview about the topics • • • •

Kinematics Forward Kinematics Inverse Kinematics Trajectory Generation

Kinematics is the science of motion, which treats motion without regard to the forces, which cause it. Within the science of kinematics one studies the position, velocity, acceleration, and all higher order derivatives of the position variables. Hence, the study of the kinematics of robots refers to all geometrical and time-based properties of the motion. A very basic problem to be solved is: How to relate the robot’s configuration or pose to the position and orientation of its end effector. A configuration of an ndegree of freedom robot is an n-vector (q1 , q 2 ,..., q n ) , where each qi is either a rotational joint angle or a prismatic joint translation. This is known as the forward kinematics of the robot. This is the static geometrical problem of computing the position and orientation of the end-effector of the robot. Specifically, given a

IX-1

9

A P I

-

APPLICATION

PROGRAM

INTERFACE

set of joint angles, the forward kinematic problem is to compute the position and orientation of the TCP relative to the base frame. Sometimes we think of this as changing the representation of robot position from joint space description into a Cartesian space description. The following problem is considered the inverse kinematics: Given the position and orientation of the end-effector of the robot, calculate all possible sets of joint angles which could be used to attain the this given position and orientation. The inverse kinematics is not as simple as the forward kinematics. Because the kinematic equations are nonlinear, their solution is not always easy or even possible in a closed form. The existence of a kinematic solution defines the workspace of a given robot. The lack of a solution means that the robot cannot attain the desired position and orientation because it lies outside the robot’s workspace. In addition to dealing with static positioning problems, we may wish to analyse robots in motion. Often in performing velocity analysis of a mechanism it is convenient to define a matrix quantity called the jacobian of the robot. The jacobian specifies a mapping from velocities in joint space to velocities in cartesian space. The nature of these mapping changes as the configuration of the robot varies. At certain points, called singularities, this mapping is not invertible. An understanding of this phenomenon is important to designers and users of robots. A common way of causing a robot to move from A to B in a smooth, controlled fashion is to cause each joint to move as specified by a smooth function of time. Commonly, each joint starts and ends its motion at the same time, so that the robot motion appears coordinated. Exactly how to compute these motion functions is the problem of trajectory generation.

IX-2

A P I

-

APPLICATION

PROGRAM

INTERFACE

API-INV - Inverse Kinematics The API for inverse kinematics is used when a robot kinematics is created based on universal coordinates or Denavit Hartenberg (DH) parameter and the inverse kinematics problem has to be solved. Many exported functions from the EASYROB™ data base give full access to all needed robot data, i.e. kinematic robots lengths, software travel ranges, joint directions, tool frame, TCP location, etc. Mathematical routines to handle homogeneous transformation matrices are available as well as trigonometrical functions for angle, triangle and trapezoid calculations.

Cartesian location Robot Basis to Tip *inq_T()

Prototypes: Library:

er_dvlp.h c-header file easyrobw.lib

Folder: VC++ project C file: Functions:

.\easy_rob\er_dvlp\ er_kin.dsw inv_user.cpp inv_kin_user_1(frame *T)inv_kin_user_12(frame *T) Cartesian location, Robot Base to Tip frame *inq_T() Set of joints/axis values float *inq_q(int soln) int soln = inq_config() is the current robot configuration Warning vector int *inq_warnings() [WARN_OK, -SINGULAR, -UNREACH, -CNFG, -NO_INVKIN, -SWE_EXCEED] Standard Robot RRR:RRR type, modelled in universal coordinates with 6 DOF and 8 configurations int inv_kin_user_2(frame *bTt) Dynamic Link Library Dll er_kin.dll in folder .\easy_rob\

Variable Input: Variable Output: EASY-ROB Data Base Library: easyrobw.lib

Example

Kinematic lengths & attributes

Result

Result:

Joint solution vector float *inq_q_solut() Dimension = DOF int inq_num_dofs()

er_kin.dll

Figure API -01: Interfaces for inverse kinematics The inverse kinematics routine is called during TCP jogging using the mouse and during program execution in CP mode after every interpolation step *inq_ipo_data_dt_ipo().

IX-3

9

A P I

-

APPLICATION

PROGRAM

INTERFACE

Using the function call •

rob_kin_inv(frame *base_to_tip)

forces the calculation for the inverse kinematics solution. This function can be called from everywhere within the API.

Kinematic Robot Chain Output: Robot Joints *inq_q_solut()

Input: Robot Base to Tip *inq_T() = bTt *inq_bTt() Robot Base to first Joint *inq_bT0()

World Origin

Word to Robot Base *inq_iTb()

Figure API-02: Transformation Chain

Figure API-02: Transformation Chain

IX-4

TOOL: Tip to TCP *inq_tTw() = tTw TCP Tip Robot Base to TCP *inq_bTw() = bTt * tTw

A P I

-

APPLICATION

PROGRAM

INTERFACE

API-IPO - Motion Planner In a similar way as for the inverse kinematics solution, an Application Program Interface (API) for the motion planning respectively the interpolator exist. The build-in motion planning routines inside the EASY-ROB BASIC module implemented for the point to point (PTP) and continuous path (CP) motion type. The continuous path motion type covers linear (LIN) and circular (CIRC) motion. The API for the motion planning allows it to develop user defined functions written in C for the motion types PTP, LIN and CIRC. Before the robot starts to move to its new target location, the preparation routine, which returns the required motion time for that move, is called. Afterwards, supposed the preparation was successful, the execution routine is called in every interpolation step to calculate intermediate locations for the robots TCP. Many exported functions give full access to the current motion planning values such as programmed speeds and accelerations.

IX-5

9

A P I

-

Joint & cartesian target locations

APPLICATION

PROGRAM

INTERFACE

Prototypes: Library:

er_dvlp.h c-header file easyrobw.lib

Folder: VC++ project C file: Functions:

.\easy_rob\er_dvlp\ er_ipo.dsw ipo_user.cpp Preparation: int ipo_jnt_prep_user_1..12 int ipo_lin_prep_user_1..12 int ipo_circ_prep_user_1..12 (void **ipo_usr_ptr) Execution: ipo_jnt_exec_user_1..12 ipo_lin_exec_user_1..12 ipo_circ_exec_user_1..12 (float ctime, void **ipo_usr_ptr) Preparation: Pointer for user defined data structure, Start and Target locations Return values IPO_OK: Preparation successful IPO_IN_POSITION: Target already reached IPO_ERROR: Preparation fails, no execution user defined data structure **ipo_usr_ptr required time for this move float *inq_ipo_prep_t_bahn() Execution: current time ctime user defined data structure **ipo_usr_ptr Intermediate locations and speeds Return values: 1: execution is called until return valus is 0 0: execution is called until ctime <= ..t_end see ipo_user.cpp Dynamic Link Library Dll er_ipo.dll in folder .\easy_rob\

EASY-ROB Data Base Library: easyrobw.lib

Variable Input:

Interpolation control data

Variable Output:

Variable Input:

Variable Output:

Example Result

Result:

er_ipo.dll

Figure API-03: Interfaces for motion planner

IX-6

Joint & cartesian intermediate locations

A P I

-

APPLICATION

PROGRAM

INTERFACE

API-DYN - Dynamics The dynamics option allows to consider the dynamic model of the robot and the position controller during simulation. The build-in dynamics routine for the dynamic robot model uses a simple uncoupled 1st order model in the discrete z-space defined by the inertia, the viscous friction and the gear ratio for each joint. Based on the system step, the discrete model is calculated. The build-in position controller is represented by the well known PPI Cascade Controller with pseudo analog PI velocity controller. During the robots motion a green trace shows the desired TCP location (generated by the motion planner) and a red trace the actual location of the robots TCP. An output window shows the errors in joint and cartesian space at any time. The Application Program Interface (API) for Dynamics allows to develop user defined functions written in C for the dynamic robot model and the position controller. Herein it will be possible to consider the real non linear coupled model of the robot and use an integration algorithm such as Runge Kutta to solve the inverse dynamic modell. Furthermore, a special position controller such as an adaptive or a robot modell based controller can be implemented.

user defined data structure **dyn_cntrl_usr_ptr()

desired joint values q = *inq_q_solut()

actual joint values q_dyn = *inq_q_dyn()

user defined data structure **dyn_model_usr_ptr()

PPI - Position Controller Control Signal joint error dq = *inq_dq() uc = dq = q - q_dyn *inq_uc() v = kpp * dq dv = v - v_dyn + aux1 * v_solut dt = inq_dt_cntrl() Integration value uc_kiv += kpv * kiv *dv * dt Output: Control signal, uc = kpv * dv + uc_kiv

Robot Model v_dyn uc v_dyn = f(uc,data) dt_sys = inq_dt_sys() q_dyn += v_dyn * dt_sys Output: q_dyn: actual joint v_dyn: actual speed

actual joint speed v_dyn = *inq_v_dyn()

Figure API-04: Interfaces for dynamics, position controller and dynamic robot model

IX-7

9

A P I

-

APPLICATION

PROGRAM

INTERFACE

The above general structure shows the main important data flow between position controller and the dynamic robot model. The algorithm for position controller and robot model could be very complex, depending on the users requirements. The position controller with following I/O data.

Desired and actual locations and speeds

Prototypes: Library:

er_dvlp.h c-header file easyrobw.lib

Folder: VC++ project C file: Functions:

.\easy_rob\er_dvlp\ er_dyn.dsw dyn_user.cpp int dyn_cntrl_user_1..12 (void **dyn_cntrl_usr_ptr) Pointer for user defined data structure, Current desired and actual locations, Control parameter: Example: PPI-Cascade *inq_cntrl_kpp(): superimposed PosCntrl *inq_cntrl_kpv(): P - underlying VelCntrl *inq_cntrl_kiv(): I - underlying VelCntrl *inq_cntrl_aux1..3(): auxiliary values gear ratio, robot attributes, etc. Error, actual joint error, control signal float *inq_uc() see file dyn_user.cpp dyn_cntrl_user_1(void **usrptr) Dynamic Link Library Dll er_dyn.dll in folder .\easy_rob\

Input:

EASY-ROB Data Base Library: easyrobw.lib Control parameter, sample time

Variable Output: Example Result

Result:

Control signals for each joint: float *inq_uc()

er_dyn.dll

Figure API-05: Interfaces for dynamics, position controller The user defined structure allows the user to store all needed data for this specific controller (adaptive-, state variable feedback-, force controller, etc.), such as parameter or status data, which are needed for the next sampling step. When the routine dyn_cntrl_user_x() is called for the first time, this user pointer is NULL and allows the user to allocate memory and to defined all initial data settings. In the next step, EASY-ROB™ will return this pointer, thus all data are available for further calculations.

IX-8

A P I

-

APPLICATION

PROGRAM

INTERFACE

Structure of the dynamic robot model

Control signals for each joint *inq_uc()

Prototypes: Library:

er_dvlp.h c-header file easyrobw.lib

Folder: VC++ project C file: Functions:

.\easy_rob\er_dvlp\ er_dyn.dsw dyn_user.cpp int dyn_model_user_1..12 (void **dyn_model_usr_ptr) Pointer for user defined data structure, Control signal from position controller Model parameter: gear ratio, robot attributes, etc. Error, actual joint values: float *inq_q_dyn() float *inq_v_dyn() see file dyn_user.cpp dyn_model_user_1(void **usrptr) Dynamic Link Library Dll er_dyn.dll in folder .\easy_rob\

Input:

EASY-ROB Data Base Library: easyrobw.lib

Variable Output:

Example Result

Robot model parameter, model sample time

Result:

Actual joint position *inq_q_dyn() actual joint speed *inq_v_dyn()

er_dyn.dll

Figure API-06: Interfaces for dynamics, robot dynamic model The user defined structure allows the user to store all needed data for this specific dynamic robot model. This pointer works in the same manner as for the position controller. Inside the API for the robot model, it is possible to integrate high sophisticated calculations to solve the inverse dynamic robot model with consideration of nonlinearities for frictions, coriolis and gravity forces, inertias and maybe elasticities in the gear boxes. The solution for the complete model can be solved using Runge Kutta for example.

IX-9

9

A P I

-

APPLICATION

PROGRAM

INTERFACE

Example for API-INV Load the robot, "univ_inv.rob" from the .\proj folder.

Figure API-07: univ-inv.rob

Figure API-08: Selection Dialog

Figure API-09: Input Dialog:

IX-10

This robot with 6 rotational joints is modeled in universal coordinates. The yellow colored coorsys show the active joints. The robot base position is in the world origin (green color). The TCP coorsys is visualized in blue color. The Tip coorsys is in white color. Menu: Robotics -> Robot Motion + Kinematics

-> Kinematic Data will open this Selection Dialog box. The user is prompted to make a choice. The transformation from the robot base to the first st (1 ) joint of this robot is translated by 0.5m in Y Direction. Procedure: frame T=*inq_bT0(void) returns the pointer, to read or modify the values.

A P I

-

APPLICATION

Figure API-10: Selection Dialog for inverse kinematics

PROGRAM

INTERFACE

A selection of "4 - Inverse Kinematic No" in the Dialog in Figure API-08 allows the user to choose the function for the inverse kinematics solution defined in er_kin.dll. "3 - DLL inv. kin #2" will select function "inv_kin_user_2(frame *)"

Example for API-IPO

Figure API-11: Input Dialog for Motion Planner ipo data

Menu: Robotics -> Robot Motion Planner -> Ipo Data will open the Input Dialog to set the control data for the motion planner, such as ipo step size, vq = joint speed, vx = cartesian speed, joint acceleration, ov = override, etc. Inside the API, you can read and write all ipo data, using the functions: vq = *inq_ipo_path_vq() vx = *inq_ipo_path_vx() ov = *inq_ipo_path_ov_pro()

IX-11

9

A P I

-

APPLICATION

PROGRAM

Figure API-12: Selection Dialog for joint motion planner code

IX-12

INTERFACE

Menu: Robotics -> Robot Motion Planner -> Ipo Joint Code will open the Selection Dialog to prompt the user to choose the function for the user defined motion planner for the "Joint" motion type. This selection will enable the 2 functions, ipo_jnt_prep_user_1() and ipo_jnt_exec_user_1().

A P I

-

APPLICATION

PROGRAM

INTERFACE

C- Program Examples Inverse Kinematics The below C Code Example code solve the inverse kinematic solution for a RRR:RRR robot type with 6 revolute joints. The robot is modeled in universal coordinates. Load the robot, "univ_inv.rob" from the .\proj folder. You will find the source code in file inv_user.cpp in directory .\er_dvlp\. Please open the VC++ 6.0 Project file er_kin.dsw. The RED colored Text is comment for explaination. /* EASY-ROB Development V3.0 12 user defined inverse kinamatic routines are suported. int inv_kin_user_1..12 (FRAME *) 12 user defined functions for mathematical joint dependencies are supported. float md_f1..12 (void) The EASY-ROB base program "easyrobw.exe" provides more than 100 functions, see header file "..\er_dvlp\er_dvlp.h" Stefan Anton Copyright (c) 1996,1997,1998,1999,2000,2001 modul: inv_user.cpp To build a new er_kin.dll, please start the project file "er_kin.dsw" with the Microsoft Visual C++ Compiler. */ #include <stdio.h> #include <string.h> #include <math.h> #include "..\er_dvlp\er_dvlp.h" #define NUM_DOFS_2 6 #define NUM_CONFIGS_2 8

IX-13

9

A P I

-

APPLICATION

PROGRAM

INTERFACE

EXPORT_C int inv_kin_user_2(frame *bTt) // frame *bTt points to the transformation from the robot base to the tip of the // robot. The transformation from the tip to the tcp is substracted before. { double *achs_length,*achs_offsets1,*achs_offsets2, *sing_tol,*joint_offset; float *q; int *warnings,*verpolt; int num_dofs,num_configs; frame *T,b0Tt; int i,ii, jj, kk, soln, warning; double nx,ny,nz,ox,oy,oz,ax, ay, az,px, py, pz; float l1x, l1y, l1z, l2x, l2y, l2z, l2, l3x, l3y, l3z, l3, l6, ly, rx, rxy, rxm, rr; double c1, s1, c2, c3, c23, s23,s6,c6,s4,c4, cabs; double theta[KIN_DOFS]; double delta_theta1, delta_theta2, delta_theta3; float sig1, sig2, sig3, sing_tolx, sing_tol_q5; num_dofs = inq_num_dofs();// number DOF, should be 6 num_configs = inq_num_configs(); // number of configurations, should be 8 // Check if the loaded robot fits to this solution if (num_dofs!=NUM_DOFS_2 || num_configs!=NUM_CONFIGS_2) { char b[80]; rob_kin_user_msg("ERROR inv_kin_user_2()"); sprintf(b,"dofs %2d != %2d",num_dofs,NUM_DOFS_2); rob_kin_user_msg(b); sprintf(b,"configs %2d != %2d",num_configs,NUM_CONFIGS_2); rob_kin_user_msg(b); } // Set the pointer to the axis_length of this robot achs_length = inq_achs_length(); // length in z - direction achs_offsets1 = inq_achs_offsets1();// length in x - direction achs_offsets2 = inq_achs_offsets2();// length in y - direction joint_offset = inq_joint_offset(); sing_tol = inq_sing_tol(); warnings = inq_warnings(); verpolt = inq_verpolt(); // sign of the robot joint [-1 or +1] // lenghts l1z = 0.5 l2z = 0.6 l3z = 0.4 l4z = 0 l5z = 0 l6 = 0.15 l1z = achs_length[0]; // see also length "lz,lx,ly" in ’univ_inv.rob’ file l1x = achs_offsets1[0]; l1y = achs_offsets2[0]; l2z = achs_length[1]; l2x = achs_offsets1[1]; l2y = achs_offsets2[1];

IX-14

A P I

-

APPLICATION

PROGRAM

INTERFACE

delta_theta2 = atan(l2x/l2z); l2 = sqrt( l2x*l2x + l2z*l2z ); l3z = achs_length[2]; l3x = achs_offsets1[2]; l3y = achs_offsets2[2]; delta_theta3 = atan(l3x/l3z); l3 = sqrt( l3x*l3x + l3z*l3z ); ly = l1y + l2y + l3y; l6 = achs_length[5]; sing_tolx = sing_tol[0]; /* [mm] */ sing_tol_q5 = (float)sin(sing_tol[4]); /* [rad] */ T = &b0Tt; // substract the transformation from the robot base to the first joint ’bT0()’, // see also Figure API-02 Transformation Chain // see also in ’univ_inv.rob’ file: => ! base to Joint 1 "bT0" mul_invT_T(T,inq_bT0(),bTt); px = T->p[0]-T->a[0]*l6; py = T->p[1]-T->a[1]*l6; pz = T->p[2]-T->a[2]*l6-l1z; rxy = sqrt(px*px+py*py); if( rxy < ly ) { rob_kin_set_warnings(WARN_UNREACH); return( WARN_UNREACH ); // TCP pose is not reachable } else if( rxy < sing_tolx ) { rob_kin_set_warnings(WARN_SINGULAR); // singular pose } if (fabs(ly)>0.0) { rx = rxy*rxy - ly*ly; if (rx<0.0) rx=0.0; else rx = sqrt( rx ); delta_theta1 = rob_kin_atan2(ly,rx); } else { rx = rxy; delta_theta1 = 0.0; } sig1 = -1.0; sig2 = -1.0; soln = 0; // soln counts the nunmber of solutions

IX-15

9

A P I

-

APPLICATION

PROGRAM

INTERFACE

for( kk = 0; kk < 2; kk++ ) // kk - loop for sig1 { warning=WARN_OK; sig1 *= -1.0; rxm = rx - sig1*l1x; rr = sqrt( rxm*rxm + pz*pz ); if (rr 1.0 ) { if (cabs >1.0+KIN_EPSI) { warning = WARN_UNREACH; } if (c2>1.0) c2 = 1.0; else c2 = -1.0; } c3 = (l3*l3 + l2*l2 - rr*rr) / (2.0*l2*l3); if( (cabs=fabs(c3)) > 1.0 ) { if (cabs >1.0+KIN_EPSI) { warning = WARN_UNREACH; } if (c3>1.0) c3 = 1.0; else c3 = -1.0; } if (warning==WARN_OK) { theta[0] = -sig1*delta_theta1 + rob_kin_atan2(sig1*py,sig1*px); } else { for (i=kk*4;i<(kk+1)*4;i++) warnings[i] = WARN_UNREACH; soln = (kk+1)*4; }

IX-16

A P I

-

APPLICATION

PROGRAM

INTERFACE

for( jj = 0; jj < 2 && warning==WARN_OK; jj++ ) { // jj - loop for sig2 sig2 *= -1.0; theta[1] = sig1*(PI/2.0-rob_kin_atan2(pz,rxm)-sig2*acos(c2)) - delta_theta2; if (theta[1] < -PI) theta[1] += 2*PI; else if (theta[1] > PI) theta[1] -= 2*PI; theta[2] = -sig1*sig2*acos( c3 ) - delta_theta3 + delta_theta2; if( theta[2] < 0.0 ) theta[2] += PI; else theta[2] -= PI; c1 = cos( theta[0] ); s1 = sin( theta[0] ); c23 = cos( theta[2] + theta[1] ); s23 = sin( theta[2] + theta[1] ); nx = (T->n[0]*c1+T->n[1]*s1)*c23-T->n[2]*s23; ny = -T->n[0]*s1+T->n[1]*c1; nz = (T->n[0]*c1+T->n[1]*s1)*s23+T->n[2]*c23; ox = (T->o[0]*c1+T->o[1]*s1)*c23-T->o[2]*s23; oy = -T->o[0]*s1+T->o[1]*c1; oz = (T->o[0]*c1+T->o[1]*s1)*s23+T->o[2]*c23; ax = (T->a[0]*c1+T->a[1]*s1)*c23-T->a[2]*s23; ay = -T->a[0]*s1+T->a[1]*c1; az = (T->a[0]*c1+T->a[1]*s1)*s23+T->a[2]*c23; sig3 = -1.0; for( ii = 0; ii < 2 ; ii++ ) { sig3 *= -1.0;

// ii - loop for sig3

theta[5] = rob_kin_atan2( sig3*oz,-sig3*nz); c6 = cos(theta[5]); s6 = sin(theta[5]); theta[3] = rob_kin_atan2(-ox*c6-nx*s6,oy*c6+ny*s6); c4 = cos(theta[3]); s4 = sin(theta[3]); theta[4] = rob_kin_atan2(ax*c4+ay*s4,az); if( fabs( sin(theta[4]) ) < sing_tol_q5 ) { rob_kin_user_msg("inv_kin_user_2 WARN_SINGULAR"); warnings[soln] = WARN_SINGULAR; } else warnings[soln] = WARN_OK;

IX-17

9

A P I

-

APPLICATION

PROGRAM

INTERFACE

for( i = 0; i < NUM_DOFS_2; i++ ) { q = inq_q(soln); // q is solution vector // consider joint sign and joint offsets q[i] = verpolt[i]*(theta[i] + joint_offset[i]); if (q[i] < -PI) q[i] += 2*PI; // solution within +/- PI else if (q[i] > PI) q[i] -= 2*PI; } soln++; // increase the solution number } /* for ii */ } /* for jj */ } /* for kk */ return(WARN_OK); } /* End of inv_kin_user_2*/

Motion Planning To be defined, see example file Ipo_user.cpp

Dynamics To be defined, see example file Dyn_user.cpp

IX-18

A P I

-

APPLICATION

PROGRAM

INTERFACE

API - Tables of Contents The tables bellow show the all-available API functions and short descriptions. Table 1. User Vector for Testing Nr.



Name         of  the

   Function        

               

Description                   

                                                                   

Table 2. Kinematics Nr.

Name of the Function

1

! " # $ % & ' ! & ( ) * + $ , ( -! * ' . / 0 ( ) * + $ . 1 2

2

! " # ( ) * + $ & ' ! & $ % , ( -! * ' . / 0 ( ) * + $ . 1 2

3

" 8 ' $ % & ' ! & ( ) * + $ & " # 9 , ( -! * ' . 0 ( ) * + $ . 1 0 " 8 ' ) ! ' & " # 9 2

Description

3 $ % '! ) '! 4 )* + $ 0 % * -% 5 - * ' $ 6 * 7 # " $ + 8 6 " ! 8 * 3 $ % ' ! ) , 9 0: 0; 0< 0 = 0 > 2 ' ! * @4 ) ) * " $ + 8 $ ' * ? ' " ! 8 A < 0 = 0 > " 6 B ! ' , 9 0 < 2 . B ! ',: 0= 2. B ! ',; 0> 2 4 )* + $ '! 3 $ % '! ) % * -% 5 - * ' $ 6 * ( ) * + $ " 8 ' ! * 7 # " + $ 8 6 "! 8 * - 3 $ % ' ! ) , 9 0: 0; 0< 0 = 0 > 2 3 $ % ' ! ) ' ! ( ) * + $ "8 # $ 9 % * -% 5 - * ' $ 6 * 7 # " $ + 8 6 " ! 8 * 3 $ % ' ! ) , 9 0: 0; 0C ) ! ' & "# 9 C 2 ' ! * 4 )* + $ ? 1 D $ ! ) "$ 8 ' * ' "! 8 # $ E $ 8 # 6 ! 8 ) ! @' & " # 9 A B 1 & F G H I J B ! ' F . B !@ ' G . B ! ' H < K G IB = B @ 1 & H G FI L B M ! L ' H . B ! ' G . B ! ' F L < 0 B $ "6 0 @B 1 & G F H I B ! ! N ' $ G - %. !B ! ' H . B ! ' H =@K>O B @ 1 & H G H I B ! 'H . B ! 'G . B ! 'H K ' * $ 5 N -" B @@ 1 & F G FI ' N # B 1 & B P GI B ! - - P " ' % D G * Q 0 B ! 'F . B ! 'G . B ! 'H 0 @B 1 & R M < 1 8 !I ' R ) 5$ * - * ' '$ " ) 8 $ " ! 8

IX-19

9

A P I

4

-

APPLICATION

PROGRAM

INTERFACE

" 8 ' ( ) * + $ & ' ! & $ % & " # 9 , ( -! * ' . 0 ( ) * + $ . 1 0 " 8 ' ) ! ' & " # 9 2 1 & + * -& 1 , 4 B < J . 1 ! 0 4 B < J . 1 "  0 4 B < J B & + * -& B , 4 B < J . 1 ! 0 4 B < J . 1 "  0 4 B < J "8 & 1 , 4 B < J . 1 ! 0 4 B < J . 1 "2 + 5 -& " 8 1 & 1 , 4 B < J . 1 ! 0 4 B < J . 1 "  0 4 B < + 5 -& 1 & " 8 1 , 4 B < J . 1 ! 0 4 B < J . 1 "  0 4 B < "8 % ) & 1 , 4 B < J . 1 "!  0 4 B < J . 1 "!  0 "8 ' "# 9 2

10

! "# ! "# ! "# ! "# ! "# ! "#

11

! "# "8 % ) & B , 4 B < J B "!  0 4 B < J . B "!  0 "8 ' "# 9 2

5 6 7 8 9

12 13 14 15 16 17

! "# ! "# ! "# ! "# ! "# ! "#

. 1 " 2 . 1 " 2 J . 1 " 2 J . 1 " 2

% E : & B , 4 B < J . B ! 0 4 B < JJ . B "2 + 5 -& 1 & E ! 6 , ( - ! * ' . E ! 0 4 B < . 1 0 ( -! * ' . E " 2 ) ! N &  " 8 & 1 & + * -& 1 , ( ) * + $ . 1 " 8  0 ( ) * + $ . 1 " 8  2 ) ! N &  " 8 & B & + * -& B , ( ) * + $ . 1 " 8  0 ( ) * + $ . 1 " 8  2 ) ! N &  "8 & ( ) * + $ & "# $ 8 ' , ( ) * + $ . 1 2 ) ! N &  " 8 & ) ! ' , " 8 ' ) ! ' & " # 9 0 # ! 5 N -$ / 0 ( ) * + $ . 1 2

20

! " # ) ! N &  " 8 & ' ) * 8 6 , ( ) * + $ . 1 0 # ! 5 N -$ 9 0 # ! 5 N - $ : 0 # ! 5 N -$ ; 2 ! "# # D & ' ! & ( ) * + $ , B @ = & O . ) # D 0 ( ) * + $ . 1 2 "8 ' ) ! N &  "8 & ! "8 ' & ' ) * 8 6 , "8 ' ! "8 ' & # ! ( 2

21

"8 ' ) ! N &  "8 & ! "8 ' & ) ! ' , "8 ' ! "8 ' & # ! ( 2

22

( -! * ' ) ! N &  " 8 & ' ! & J  , " 8 ' ! " 8 ' & # ! ( 2 ( -! * ' ) ! N &  " 8 & ' ! & B < , " 8 ' ! " 8 ' & # ! ( 2

18 19

23

IX-20

<== 4 ) * + $ ' ! $ % ' ! ) "8 # $ 9 0 % * -% 5 - * ' $ 6 * ( ) * + $ " 8 ' ! * 7 # " + $ 8 6 "! 8 * - 3 $ % ' ! ) , 9 0: 0; 0C ) ! ' & "# 9 C 2 6 $ $ $ % & ' ! & ( ) * + $ & "# 9 , 2 4 ) * + $ 5 -' " E - " % * ' " ! 8 1 !  1 @"  . 1 "  4 ) * + $ ) " $ 8 ' * ' " ! 8 5 -' " E - " % * ' " ! 8 1 !  1 "  . 1 " 8 $ ) 6 $ + * ' ) "9 1 !  "8 , 1 "2 4 ) * + $ 5 -' " E - " % * ' " ! 8 1 !  "8 , 1 "  2 . 1 " 4 ) * + $ 5 -' " E - " % * ' " ! 8 1 !  1 "  . "8 , 1 " 2 8 % ) $ + $ 8 ' 1 ) * 8 6 + * ' ) "9 "# 9   A 1 "!   1 "!  . 1 "!  "# 9   A 1 "!   1 "!  . 1 "!  8 % ) $ + $ 8 ' B ! ' + * ' ) "9 "# 9   A B "!   B "!  . B "!  "# 9   A B "!   B "!  . B "!  > ! E : "8  * ' ) "9 B !  B " 1 )* 8 6 (! )+ $ 6 * $ % '! ) E!  1 . E" 4 ) * + $ 5 -' " E - " % * ' " ! 8 1 "8   1@ "8  . 1 "8  4 ) * + $ ) " $ 8 ' * ' " ! 8 5 -' " E - " % * ' " ! 8 1 "8   1 "8  . 1 "8  K $ ' 6 4 ) * + $ 1  # $ 8 ' + * ' ) "9 > * -% 5 - * ' $ 6 4 ) * + $ 1 / I * 8  -$ " 8  ) * #  ) ! @' & " # 9 " 6 @ B 1&F 0B 1&G !)B @ 1&H > * -% 5 - * ' $ 6 4 ) * + $ 1 1  , "# $ 8 ' 9 0: 0 ; 2 > * -% 5 - * ' $ 6 4 ) * + $ 1 ( ) ! + O E * )* + $ '$ )0 6 $ $ > D * E '$ ) > D $ %  6 Q $ ' D $ ) ' D $ ! "8 ' "6 ) ! ' * ' "! 8 * - ! ) ' ) * 8 6 -* ' "! 8 * -?

! "8 ' & # ! ( "6 8 5 + N $ ) ! ( ! "8 ' B $ ' 5 ) 8  " ( ! " 8 ' " 6 ' ) * 8 6 -* ' " ! 8 * > D $ %  6 Q $ ' D $ ) ' D $ ! "8 ' "6 ) ! ' * ' "! 8 * - ! ) ' ) * 8 6 -* ' "! 8 * -?

! "8 ' & # ! ( "6 8 5 + N $ ) ! ( ! "8 ' B $ ' 5 ) 8  "( ! "8 ' "6 ) ! ' * ' "! 8 * B $ ' 5 ) 8 6    P     ?  "( ! "8 ' "6 ) ! ' * ' " ! 8 * - 0 $ -6 $  B $ ' 5 ) 8 6 P      ?     "( ! "8 ' " 6 ) ! ' * ' " ! 8 * - 0 $ -6 $ 

A P I

24

-

APPLICATION

( -! * ' * 6 6 6 , ( -! * ' N $ ' * 0 ( - ! * ' 6  0 ( -! * ' 6  2

PROGRAM

1 ) " * 8  -$ > * -% 5 - * ' " ! 8 A 8 A N $ ' * 0 < 0 = B $ '5 )8 A >

alfa

B

INTERFACE

C

beta

gamma A

25

( -! * ' * 6 6 * , ( -! * ' N $ ' * 0 ( -! * ' 6  0 ( - ! * ' 6  2

26

( -! * ' * 6 6 *  , ( - ! * ' N $ ' * 0 ( -! * ' 6  0 ( -! * ' 6  2

27

( -! * ' 6 6 6 * , ( -! * ' 6  0 ( - ! * ' 6  0 ( -! * ' 6  2

28

( -! * ' 6 * 6 6 6 * , ( -! * ' 6  0 ( -! * ' # $ -' * 0 ( -! * ' 6  0 ( -! * ' 6  0 ( -! * ' 6 2 C

1 ) " * 8  -$ > * -% 5 - * ' " ! 8 A 8 A N $ ' * 0 < 0 = B $ '5 )8 A  * + + * 1 ) " * 8  -$ > * -% 5 - * ' " ! 8 A 8 A N $ ' * 0 < 0 = B $ ' 5 ) 8 A * -( * 1 ) " * 8  -$ > * -% 5 - * ' " ! 8 A 8 A < 0 = 0 > B $ ' 5 ) 8 A * -( * 1 ) " * 8  -$ > * -% 5 - * ' " ! 8 A  8 A < 0 # $ -' * 0 = 0 > 0

B $ ' 5 ) 8 A * -( * 0 ! E E ! 6 " ' $ * 8  - $ ()! + < J 9 * + E -$ A <   0 # $ -' *   0 =   0 >   0

  ? * -( *  6 * 6 6 6 * , < 0 # $ -' * . B < 0 = 0 > 0 2    ?7  . B <

beta

alfa

D

B

gamma





delta





A

29 30 31 32 33 34 35 36 37 38

( ) * + $ ." 8 / & 1 , ! " # 2 ( ) * + $ ." 8 / & N 1 ' , ! " # 2 ( ) * + $ ." 8 / & N 1  , ! " # 2 ( ) * + $ ." 8 / & ' 1 Q , ! " # 2 ( - ! * ' ." 8 / & / & 6 ! - 5 ' , ! " # 2 ( - ! * ' ." 8 / & & 6 ! - 5 ' , ! " # 2 ( - ! * ' ." 8 / & * & 6 ! - 5 ' , ! " # 2 ( ) * + $ ." 8 / & N 1 Q , ! " # 2 ( ) * + $ ." 8 / & " 1 N , ! " # 2 ( ) * + $ ." 8 / & " 1 N & 6 ' ) ' , ! " # 2

B ! N ! ' = * 6 $ ' ! 1 "E K * + $ * 6 . "8 / & 1 , 2 B ? = * 6 $ ' !  8 ' ! (  "8 ? % D * "8 1 ! ! - ( ) * + $ A B ! N ! ' 1 "E ' ! 1 > P , Q "6 Q ) "6 ' 2

$ 6 ") $ # 8 ' * 9 "6 * -5 $ 6

$ 6 " ) $ # ! " 8 ' 6 E $ $ # * -5 $ 6

$ 6 ") $ # ! "8 ' * % % $ - * -5 $ 6 B ! N ! ' = * 6 $ '! 1 > P ! ) -# ' ! ) ! N ! ' N * 6 $ K ' * ) ' ( ) * + $ A Q ! ) -# ' ! ) ! N ! ' N * 6 $ ! ' $ A D $ 8 B 5 8 * 6 " + 5 -* ' "! 8 0 ' D $ ) ! N ! ' Q " -- 5 + E ' ! "6 ' 6 ' * ) ' -! % * ' " ! 8 0 6 5 % D * 6 ' D $ ' ) * 8 6 ( ! ) + ' * ' "! 8 . "8 / & "1 N , 2 * ' D ( 5 8 % ' "! 8 * ' * 8  K $ ' * ) 8 "8  ( ! ) * -- ) ! N ! ' % ! 8 ( " 5 ) * ' "! 8 6 Q * ) 8 & "# 9@ A L










39 40



# ! 5 N -$ ) ! N &  " 8 & * ' * 8  , # ! 5 N - $ 0 # ! 5 N -$ 2 ! "# ) ! N &  "8 & 6 $ ' & Q * ) 8 "8  6 , "8 ' Q * ) 8 & "# 9 2



















IX-21

9

A P I

-

APPLICATION

PROGRAM

INTERFACE

< B & M B J < > O @4 L < B & & J  J3  J J

K * $ 6 * + $ 6 6 *  $ "8 ' D $ + ! 8 " ' ! ) " 8  ( " -$ moni_msg.dat > * -% 5 - * ' $ ( ! ) Q * ) #  " 8 $ + * ' " % 1 "6 ) ! N ! ' N * 6 $ ' ! 1 "E ? , ) ! N ! ' N * 6 $ ' ! 1 > P " 6 * -6 ! % * -% 5 - * ' $ # 0 . " 8 / & N 1 Q , 2 2 ( ' D $ ) ! N ! ' ! "8 ' "6 ) ! ' * ' "! 8 * -0 ' D "6 ) ! 5 ' "8 $ + *  $ 6 6 5 ) $ ' D * ' . / * ) $ Q "' D "8  I P  0 P  > * -% 5 - * ' $ 6 ' D $ " 8 $ ) 6 $  "8 $ + * ' "% 6 ! -5 ' "! 8 ( ! ) % 5 ) ) $ 8 ' -! * # $ # ) ! N ! ' ? N 1 ' A ) ! N ! ' N * 6 $ ' ! 1 "E B $ 6 5 -' A . " 8 / & / & 6 ! - 5 ' , 2 ! '$ A 1 D $ 5 6 $ ) # $ ( "8 $ # "8 $ ) 6 $  "8 $ + * ' "% 6 ! -5 ' "! 8 , < P I  3 2 "6 %M * - -$ # " 6 6 E $ % " ( " $ # ? 8 " $ ) 6 * - > ! ! ) # "8 * ' $ 6 A $ 8  ' D "8 H I # ") $ % ' "! 8 6 $ $ $ 9 * + E - $ ( " -$ inv_user.cpp "M 8 ' " 8 &  " 8 & 5 6 $ ) &  , ( ) * + $ . N 1 ' 2 @ 8( ( " 6 $ $ ' ) 6  * 0 - - $ > 8 !  ! ' )D # " " 8 8 * F ' $ I # 6 " A ) $ % ' " ! 8 M 8 " $ ) 6 * - > ! ! ) # "8 * ' $ 6 A @ ( ( 6 $ '  0 -$ 8  ' D " 8 G I # " ) $ % ' " ! 8 M 8 " $ ) 6 * - > ! ! ) # "8 * ' $ 6 A BM ! ' * ' " ! 8 * N ! 5 ' F* 9 " 6 8 " $ ) 6 * - > ! ! ) # "8 * ' $ 6 A MB !8 '" * $ ' " )! 6 8 * *- >N !! 5! ' ) # G" 8 * * 9 ' $ " 6 6 A MB !8 '" * $ ' " )! 6 8 * *- >N !! !5 ' ) # H " 8 * * 9 ' $" 6 6 * 8 # O A 1 ) * 8 6 ( ! ) + * ' "! 8 ( ) ! + ! "8 ' 8 ' !

J! " 8 ' 8  A 9 * + E -$ A ( ) * + $ . 1   "8 / & * % D 6 & 1 , 2   "6 ' ) * 8 6 ( ! ) + * ' "! 8 ( ) ! + ! "8 '  ' !

! "8 ' 7 K "8  5 -* ) "' : ' ! ! ! "8 ' ! ( ( 6 $ ' P ! "8 ' $ ) ' ! ! 8 $ 6 $ ' ! ( 6 ! -5 ' "! 8 * 8  - $ 6 % * -% 5 - * ' $ 6 N : ' D $ "8 $ ) 6 $  "8 $ + * ' "% 6 6J ! - 8 A % ! 8 ( "  5 ) * ' " ! 8 8 5 + N $ ) 9 * + E -$ A ( -! * ' . /  " 8 / & / ,  2 6 ! -5 ' " ! 8 * - 5 $ 6 ( ! ) ' D $ ! " 8 '  % ! 8 ( " 5 ) * ' "! 8 * ) 8 "8  "8 ' . Q * ) 8 "8  6  "8 / & Q * ) 8 "8  6 , 2 6 $ $ ! "# ) ! N &  "8 & 6 $ ' & Q * ) 8 "8  6 























41

! "# ) ! N &  "8 & 5 6 $ ) & + 6  , % D * ) . 6 2

42

"8 ' ) ! N &  "8 & ! ) ' ) * 8 6 , ( ) * + $ . 1 2

43

" 8 ' ) ! N &  " 8 & / & " 8 & ' ) * $ - & ) * 8  $ , ( -! * ' . / 2

44

"8 ' ) ! N &  "8 & "8 , ( ) * + $ . N 1 ' 2









45

46 47 48 49 50 51

# ! 5 N - $ ." 8 / & * % D 6 & - $ 8  ' D , ! " # 2 # ! 5 N - $ ." 8 / & * % D 6 & ! ( ( 6 $ ' 6  , ! " # 2 # ! 5 N - $ ." 8 / & * % D 6 & ! ( ( 6 $ ' 6  , ! " # 2 # ! 5 N - $ ." 8 / & * % D 6 & ) ! ' 9 , ! " # 2 # ! 5 N - $ ." 8 / & * % D 6 & ) ! ' : , ! " # 2 # ! 5 N - $ ." 8 / & * % D 6 & ) ! ' ; , ! " # 2 ( ) * + $ ." 8 / & * % D 6 & 1 , ! " # 2





52 53 54

# ! 5 N - $ ." 8 / & 6 " 8  & ' ! - , ! " # 2 # ! 5 N - $ ." 8 / & ! " 8 ' & ! ( ( 6 $ ' , ! " # 2 ( - ! * ' ." 8 / & / , " 8 ' 6 ! - 8 2





55

IX-22

" 8 ' ." 8 / & Q * ) 8 " 8  6 , ! " # 2





A P I

56 57 58 59 60

" 8 ' ." 8 / & $ ) E ! - ' , ! " # 2 "8 ' "8 / & 8 5 + & # ! ( 6 , ! "# 2 "8 ' "8 / & 8 5 + & E * 6 6 " & 8 ' 6 , ! "# 2 "8 ' "8 / & 8 5 + & % ! 8 ( " 6 , ! "# 2 "8 ' "8 / & % ! 8 ( " , ! "# 2

-

APPLICATION

PROGRAM

INTERFACE

! "8 ' 6 " 8 " 8 ' . 6 "  8  " 8 / @ & $ ) E ! -' , 2 5+ N$)!( 4 5 + N $ ) ! ( E * 6 6 " $ 8 '? 5 + N $ ) ! ( % ! 8 ( " 5 ) * ' "! 8 > 5 ) ) $ 8 ' B ! N ! ' > ! 8 ( " 5 ) * ' "! 8 5+ N$) ! '$ A  % ! 8 ( " 5 ) * ' "! 8 ) $ ' 5 ) 8 

@O L " 8 $ + * ' " % 6 B =& O .J # D  " 8 / & ) ! N & # D & * % ' " , 2 9 * + E -$ A < % % $ 6 6 '! O E * )* + $ '$ ) ! ( 'D $ ( ") 6 ' ' * % ' " $ ! "8 ' A

D   ?' D $ ' * 0 D   ?#

D    ? * 0 D    ? * -( *

O L "8 $ + * ' "% 6 * % % $ 6 6 '! 'D $ O E * )* + $ '$ ) ( ) ! + ' D $ E * 6 6 " $ ! "8 ' ? 1 ) * 8 6 ( ! ) + * ' "! 8 ( ) ! + ' D $

! @" 8 ' ' D $ ? B = & O .)# D   , "8 / & ) ! N & # D  & E * 6 6 " , 2 E * 6 6 " $J & ! " 8 ' & 8 !  2 9 * + E -$ A )# D  I 'D $ '* 0 )# D  I # ) # D  L I * 0 ) # D  I * -( *

O "8 $ + * ' "% 6 * % % $ 6 6 '! 'D $ O E * )* + $ '$ ) ( ) ! + ' D $ E * 6 6 " $ ! "8 ' ? 1 ) * 8 6 ( ! ) + * ' "! 8 ( ) ! + ' D $ 'D $

! "8 ' ? B @ = & O .)# D  , "8 / & ) ! N & # D & E * 6 6 " , 2 E * 6 6 " $ &J ! " 8 ' & 8 !  2 9 * + E -$ A )# D I 'D $ '* 0 )# D I # ) # D I * 0 ) # D I * -( * B ! N ! ' < ' ' ) "N 5 ' $ 6 A O ! + $ E ! 6 "' "! 8 B ! N ! ' < ' ' ) " N 5 ' $J 6 A * 9 ! "8 ' K K ! ( ' Q * ) $ J 8 # 6 Q "' % D B ! N ! ' < ' ' ) " N 5 'J $ 6 A "8 ! "8 ' K K ! ( ' Q * ) $ J 8 # 6 Q "' % D B ! N ! ' < ' ' ) "N 5 ' $ 6 A * 9 ! " 8 ' 3 $ -! % " ' : B ! N ! ' < ' ' ) "N 5 ' $ 6 A * 9 ! " 8 ' < % % $ -$ ) * ' " ! 8 B ! N ! ' < ' ' ) "N 5 ' $ 6 A * 9 ! "8 ' 1 ! ) / 5 $ 6 B ! N ! ' < ' ' ) "N 5 ' $ 6 A B!N!'8*+ $

J " ) $ % ' " ! 8 ! ( * % ' " $ 8 ' ? 9 * + E -$ A H H H H F B ! N ! ' D * 6  ! "8 ' 0 ! "8 '  I "8 H I 













61

B @ = & O ." 8 / & ) ! N & # D & * % ' " , ! " # 2

62

B @ = & O ." 8 / & ) ! N & # D  & E * 6 6 " , ! " # 2













































63

B @ = & O ." 8 / & ) ! N & # D & E * 6 6 " , ! " # 2













































64 65

( - ! * ' ." 8 / & D ! + $ E ! 6 , ! " # 2 ( - ! * ' ." 8 / & 6 Q $ & + * 9 , ! " # 2









66

( -! * ' . " 8 / & 6 Q $ & + " 8 , ! " # 2





67 68 69 70 71

( -! * ' . " 8 / & & + * 9 , ! " # 2 ( -! * ' . " 8 / & * & + * 9 , ! " # 2 ( -! * ' . " 8 / & ' & + * 9 , ! " # 2 % D * ) ." 8 / & ) ! N ! ' 8 * + $ , ! " # 2 % D * ) ." 8 / &  " 8 & # " ) $ % ' " ! 8 & * % ' " , ! " # 2













IX-23

9

A P I

72

-

APPLICATION

PROGRAM

INTERFACE

% D * ) ." 8 / &  " 8 & ' : E $ & * % ' " , ! " # 2

# ") $ % ' "! 8 0 ! "8 '  "6 "8 F I # ") $ % ' "! 8 6L $ $ " 8 / &  " 8 & ' : E $ & * % ' " , ! " # 2 J 9" 8 * $ + + E * - $' " % A 6 1 ' : 1 E 1 $ B ! B ( * % ' " $ 8 ' ? B ! N ! ' D * 6  ! "8 ' 0 ! "8 '  I  * ) $ 1 ) * 8 6 -* ' "! 8 * -0 ! "8 ' * 8 #  * ) $ B ! ' * ' "! 8 * 6$$ A "L 8 / &  " 8 & # " ) $ % ' " ! 8 & * % ' " , ! " # 2 "8 $ + * ' "% 6 "# $ 8 ' "( "% * ' "! 8 ? > * ) ' $ 6 "* 8 E ! 6 "' "! 8 $ ) ) ! ) 0 1 > P Q ?) ?' ? ) ! N ! ' N * 6 $

! "8 ' E ! 6 "' "! 8 $ ) ) ! )

") $ % ' "! 8 ! ( P * 6 6 " $ ! "8 ' 6*+ $ *6 "8 / &  "8 & # ") $ % ' "! 8 & * % ' " , ! "# 2 0 N 5 ' ( ! ) E * 6 6 " $ ! "8 ' 6 6*+ $ *6 "8 / &  "8 & ' : E $ & * % ' " , ! "# 2 0 N 5 ' ( ! ) EL * 6 6 " $ ! " 8 ' 6 J 9" 8 * $ + + E * - $' " % A 6 > > & DI * " 8 1 : E $ B ! N ! ' D * 6  E * 6 6 " $ ! "8 ' 6  8 ' ? "6 "8 ' D $  "8 $ + * ' "% % D * "8  8 ' ? "6 @ 1 "8 ' D $  "8 ? % @D * "8  8 ' ? "6 6 $ E * ) * ' $ # * 8 # 1 "8 ' D $  "8 ? % D * "8 K ' ) "8  ( ! ) + * ' D ? $ E $ 8 # $ 8 % : ( 5 8 % ' "! 8 < ''* % D + $ 8 ' 8 5 + N $ ) (! ) E * 6 6 " $

! "8 ' ? "8 ' .  "8 & * ' ' & # ! (  "8 / &  "8 & * ' ' * % D & # ! ( , 2  "8 & * ' ' & # ! (   "6 ' D $ * ' ' * % D + $ 8 ' 8M 5 + N $ ) ! ( ' D $ ( " ) 6 ' E * 6 6 " $ ! " 8 ' 8 " $ ) 6 * - > ! ! ) # "8 * ' $ 6 * % % $ 6 6 ' ! ' D $ 1 ) * 8 6 ( ! ) + * ' "! 8 ( ) ! + ' D $ ! "8 ' ' D $ ? KM $ $ " 8 / & ) ! N & # D  & E * 6 6 " , 2 8 " $ ) 6 * - > ! ! ) # "8 * ' $ 6 * % % $ 6 6 ' ! ' D $ 1 ) * 8 6 ( ! ) + * ' "! 8 ()! + 'D $ 'D $

! "8 ' ? K $ $ "8 / & ) ! N & # D & E * 6 6 " , 2 1 $ + E ! )* ): ()* + $ 5 6 $ # '! % * -% 5 - * ' $ ' D $  " 8 $ + * ' " % % D * " 8 K * $ 6 * + $ 6 6 *  $ "8 ' ! ' D $ + ! 8 " ' ! ) " 8  ( " -$ moni_msg.dat J 9 * + E -$ A + ! 8 "& + 6  , C + 6   #  6 C 0 8 & + 6  0 C % * -- + : ( 5 8 % ' "! 8 C 2 K * $ 6 * 4 ) * + $ "8 ' ! ' D $ + ! 8 " ' ! ) " 8  ( " -$ moni_msg.dat K * $ 6 * ( -! * ' $ % ' ! ) " 8 ' ! ' D $ + ! 8 " ' ! ) " 8  ( " -$ 

75 76

"8 ' . "8 / &  "8 & "# , ! "# 2 ( - ! * ' ." 8 / & N # 9 Q , ! " # 2 ( - ! * ' ." 8 / & # / , ! " # 2 % D * ) ." 8 / &  " 8 & # " ) $ % ' " ! 8 & E * 6 6 " , ! " # 2

77

% D * ) ." 8 / &  " 8 & ' : E $ & E * 6 6 " , ! " # 2

78

% D * ) ." 8 / &  " 8 & % D * " 8 & ' : E $ , ! " # 2

73 74



























80

% D * ) ." 8 / &  " 8 & % * - % , " 8 ' E * 6 6 " & 8 ' & 8 ! 2 " 8 ' ." 8 / &  " 8 & * ' ' * % D & # ! ( , ! " # 2

81

( ) * + $ ." 8 / &  " 8 & * % D 6 & 1  & E * 6 6 " , " 8 ' E * 6 6 " & 8 ' & 8 ! 2

79





82

( ) * + $ ." 8 / &  " 8 & * % D 6 & 1 & E * 6 6 " , " 8 ' E * 6 6 " & 8 ' & 8 ! 2





















83 84

( ) * + $ ." 8 / &  " 8 & 1 & E * 6 6 " , " 8 ' E * 6 6 " & 8 ' & 8 ! 2 "8 ' + ! 8 "& + 6  , % D * ) . ( + ' 0 ? ? ? 2





























! "# + ! 8 "& 1 , % D * ) . 6 0( ) * + $ . 1 2

86

! " # + ! 8 " & , % D * ) . 6 0 ( - ! * ' . 0 " 8 ' 8 0 ( -! * ' 6 % * - 2

IX-24













85











A P I

-

APPLICATION

PROGRAM

INTERFACE

J 9 * + E -$ + ! 8 "& , C ' 9 ' C 0 0 8 0 J  2 K * $ 6 * # ! 5 N -$ $ % ' ! ) " 8 ' ! ' D $ + ! 8 " ' ! ) " 8  ( " -$ moni_msg.dat J 9 * + E -$ + ! 8 "& - , C ' 9 ' C 0 0 8 0 J  2 K * $ 6 * 8 "8 ' $ % ' ! ) "8 ' ! ' D $ + ! 8 " ' ! ) " 8  ( " -$ moni_msg.dat J 9 * + E -$ + ! 8 "& ", C ' 9 ' C 0 " 0 8 2 K * $ 6 * 6 D ! ) ' $ % ' ! ) "8 ' ! ' D $ + ! 8 " ' ! ) " 8  ( " -$ moni_msg.dat J 9 * + E -$ + ! 8 "& 6 , C ' 9 J ' C 0 6 0 8 2 $ 6 6 *  $ ) ) ! ) = ! 9 Q " -- % ! + $ 5 E $ 6 6 *  $ = ! 9 Q "-- % ! + $ 5 E 8 ( ! ) + * ' "! 8 "8 $ 6 $ $ 8 "8 ' D $ + $ 6 6 *  $ Q "8 # ! Q 5 + $ ) " % * - K ! -5 ' " ! 8 A 1 ! -$ ) * 8 % $ ( ! ) B ! ' * ' " ! 8 5 + $ ) " % * - K ! -5 ' " ! 8 A 1 ! -$ ) * 8 % $ ( ! ) 1 ) * 8 6 -* ' " ! 8 5 + $ ) " % * - K ! -5 ' " ! 8 A 5 + N $ ) ! ( ' $ ) * ' "! 8 6 5 + $ ) " % * - K ! -5 ' " ! 8 A * 6  $ % '! ) 5 + $ ) " % * - K ! -5 ' " ! 8 A ! "8 ' Q $ " D ' $ % ' ! ) 5 + $ ) " % * - K ! -5 ' " ! 8 A 1 * )  $ ' -! % * ' " ! 8 0 ) ! N ! ' N * 6 $ ' ! 1 "E

moni_msg.dat

87

! " # + ! 8 " & - , % D * ) . 6 0 # ! 5 N -$ . 0 " 8 ' 8 0 ( -! * ' 6 % * - 2

88

! "# + ! 8 "& " , % D * ) . 6 0 "8 ' . 0 "8 ' 8 2

89

! "# + ! 8 "& 6 , % D * ) . 6 0 6 D ! ) ' . 0 " 8 ' 8 2 ! "# J ) ) ! ) J 9 "' = ! 9 , % D * ) . 6 2 ! "# 6  = ! 9 , % D * ) . 6 2 ! " # & " 8 ( ! & - " 8 $ , " 8 ' % ! -! ) 0 % D * ) . 6 2 # ! 5 N -$ . " 8 / & 5 8 " & ' ) * 8 6 & ' ! -& ) * # , ! " # 2 # ! 5 N -$ . " 8 / & 5 8 " & ' ) * 8 6 & ' ! -& + , ! " # 2 "8 ' . "8 / & 5 8 " & ' ) * 8 6 & " -" + "' , ! "# 2 # ! 5 N -$ . " 8 / & 5 8 " & ' ) * 8 6 & + * 6  , ! " # 2 # ! 5 N -$ . " 8 / & 5 8 " & ' ) * 8 6 & Q $ "  D ' , ! " # 2 ( ) * + $ . . "8 / & 5 8 " & ' ) * 8 6 & 1 , ! "# 2

90 91 92 93 94 95 96 97 98



















Table 3. Dynamics Nr.

 



 



Name         of    the      Function 

                       

                                                                                                                                                                                              

Description

                                                                 

IX-25

9

A P I

-



                                                          





 

 

 

APPLICATION

PROGRAM

INTERFACE

 

                                                                                                                                               





Table 4. Motion Planer Nr.



                   

 

Name         of    the   Function      



    



 

 

   

  

IX-26

Description

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     

            

 

 

               



                                  

     

                   



     



-

APPLICATION

                                                                                                                                       

  

A P I

PROGRAM

INTERFACE

 

             

Table 5. Tag Nr.



    





       

 

Name        of

  the    Function

        



                                                                                                                                                                                                                                                                                                                                                                                         

 



Description           

                                                                                                                                    





                                                    



IX-27

9

A P I

-

APPLICATION

PROGRAM

Table 6. Collision Nr.

 

Name         of     the      Function          

                                                 



Table 6. Stop On Nr. 



IX-28

Name        of    the     Function   

                                  

INTERFACE



Description         

                             



Description