Workspace limitations are due to the limited range of the linear actuators, the mechanical limits of the passive joints and links interference.
This program is able to perform five different tasks:
For all these problems xworkspace can take into account all the constraints (although in this implementation the mechanical limits on the ball-and-socket joints of the platform are not considered.
This program is an implementation of a collection of algorithms described in the following papers:[2],[1],[3], [4].
Free source codes are available under Free Software Society conventions through anonymous ftp (download for Sun, download for Linux).
This software is provided "as is" without warranty of any kind. In no event shall INRIA be liable for any loss of profits, loss of business, loss of use or data, interruption of business, or for indirect, special, incidental, or consequential damages of any kind, arising from any error in this software.
Window system: X
Type: sources
Language: C
OS: Solaris, linux
Total number of lines: around 61000
Size of the executable: 6 Mo (Solaris), 4 Mo (linux)
Output: display, files, graphic output in xjpdraw format
Workspace limitations are due to the limited range of the linear actuators, the mechanical limits of the passive joints and links interference.
This program is able to perform five different tasks:
For all these problems xworkspace can take into account all the constraints (although in this implementation the mechanical limits on the ball-and-socket joints of the platform are not considered.
This program is an implementation of a collection of algorithms described in the following papers:[2],[1],[3], [4].
xa1 ya1 za1 xa2 ya2 za2 xa3 ya3 za3 xa4 ya4 za4 xa5 ya5 za5 xa6 ya6 za6 xb1 yb1 zb1 xb2 yb2 zb2 xb3 yb3 zb3 xb4 yb4 zb4 xb5 yb5 zb5 xb6 yb6 zb6 L1 L2 L3 L4 L5 L6 l1 l2 l3 l4 l5 l6where (xai, yai, zai) stand for the coordinates of Ai, (xbi, ybi, zbi) stand for the coordinates of Bi and Li,li for the maximum and minimum length of link i.
A shortcut for indicating the name of the robot file is to run the program with:
xworkspace -R [robot file name]
Note that we make an extensive use of the Euler's angles for defining orientation. These angles correspond to a first rotation around the z axis, then a rotation around the next x axis, then a rotation around the new z axis.
2#2 |
3.946457 0 0 4 plan 0 -60 plan 90 -60 plan 180 -60 plan -90 -60which defines a pyramid with 4 facets, the angle between the main axis of the pyramid and the facets being 30 degree.
-1 -1 -1 -1 -1 -1 15 15 15 15 15 15
If you have defined pyramid for the base joints the program will take into account the mechanical limits of the joints.
If you have defined links radii in the Safety radii button the program may take into account links interference. To obtain the workspace under this assumption choose the command 2D workspace with Link intersection in the Show menu. The program will display first the workspace W without taking into account the links interference and will then plot the workspace with link intersections whose border will be drawn in thick green line.
The theory states that this border is constituted of arc of conics. The arc which play a role will be displayed in red. If you want to see all the conics which are taken into account (not only the conics having an intersection with W) use the command 2D workspace with Link intersection (all conics) in the Show menu.
In this mode the panel DIS1 will display for position of the robot defined by the current position of the mouse the distance between links 1 and the other five links, DIS2 will display the distance between links 2 and links 3, 4, 5, 6 and the panel DIS345 will display the distance between link 3 and links 4, 5, 6, the distance between link 4 and links 5, 6 and finally the distance between link 5 and 6. If a collision occur (i.e. the distance between the link is lower than the sum of the radii of two links) a panel will indicate that a collision occurs. Note that the area of the fully constrained workspace is not computed.
You can adjust the number of slices in the Nb of slices button. After having computed the workspace you can change the point of view either by clicking in the Perspective, Face, Side, Top buttons or by indicating two angles defining the direction of view in the Rv, Rh buttons.
You can also display a particular slice by giving its number in the Show slice button. The computation of the constant orientation workspace is done using the algorithm described in [2].
If you have defined pyramid and have introduced a range for the z you can see in 3D your pyramids by using the command 3D view with pyramid of the Show menu.
xworkspace is able to compute the orientation workspace of a Gough platform. By orientation workspace we mean the possible rotation of the moving platform around its center. You have therefore to define first the position of the center in the z: button by giving three coordinates.
To represent the possible orientation we attach a virtual segment at the center of the platform and we will display the region that can be reached by the end of the segment. The direction of the virtual segment is by default the z axis of the platform but can be changed to the z axis of a frame whose Euler's angles is given in the Orientation: button. But with this method we can display only two degrees of freedom. To choose these degree of freedom we will assume that we have first fixed one rotation axis by giving a unit vector in the Rotation axis button and then another rotation axis in the Rotation axis(1) button.
The program will perform the following operation:
You can also change the type of display using the Display: Arc button. It is a flip-flop button: by clicking you will get Wire frame, Shaded with border and Shaded without border. In these cases the program will join the computed arcs to display spherical region.
To compute the possible rotation use the command Possible rotation (z fixed) button. It is possible to show the possible rotation for only one link by defining the link number (from 1 to 6 )in the Defined link button and using the Possible rotation for Defined link (fixed C) button.
After having computed the orientation workspace you can change the point of view either by clicking in the Perspective, Face, Side, Top buttons or by indicating two angles defining the direction of view in the Rv, Rh buttons.
When the platform rotates around its center the Bi points describe spheres. For one Bi if they is intersection between the sphere and the spheres centered in Ai with radii the minimum and maximum leg length then a full rotation around the center is not possible, due to the leg length limit. These intersection can be seen using the Possible region for B (fixed C) button. xworkspace will display the spheres describes by the Bi and their intersection with the spheres centered in Ai with radii the maximum leg length (the corresponding 3D circle will be displayed in thick line) and with the spheres centered in Ai with radii the minimum leg length (3D circle in thin line). The link number (from 1 to 6) will be displayed on the circle.
The computation of the constant orientation workspace is done using the algorithm described in [1]. The algorithm take into account all the possible constraints
The program enables to compute a trajectory within the workspace between a start and an end point which have the same orientation. Click in the Trajectory button. Define the 6 coordinates (angles in degree) of the start point and of the end point, then click in the Find trajectory button. If the height of the start and end point is the same the program will display the horizontal cross-section of the workspace and the computed path, if any. If the height differ the program will display as many horizontal cross-sections between the two height as indicated in the Nb of slices button and then display the trajectory if any. The computation of the path is done using the algorithm described in [3].
The Write button can be used to save the trajectory in a file called trajectory.
The Test straight line button enables to verify if the segment joining the end and start points is a valid trajectory, fully inside the workspace. This verification is done using the algorithm described in [4]. Invalid portion of the trajectory due to leg lengths constraints are shown in red, due to mechanical limit on the joints in purple, due to links interference in dark red. If the start and end point have same altitude and orientation the horizontal cross-section will be displayed together with the direct trajectory. If the start and end point have not the same altitude the a 3D view with horizontal cross-sections will be displayed together with the direct trajectory. The number of cross-sections is defined by the Nb of slices button. The orientation of the platform for the cross-sections is obtained by linear interpolation between the end and start point. If the start and end point have same altitude but different orientation a 3D view with cross-section will be displayed, the orientation of the platform for the cross-sections being obtained by linear interpolation between the end and start point orientation.
To change the location of the center of the scene for the 3D view give new values in the X, Y, Z button.
xjpdraw -X 7 -Y 7 -F [file name]where 7 is the width of the box in centimeter which will include your drawing. See the xjpdraw manual for further details.
mode B-link_motion mode N-link_motion mode N-all-link_motionThe mode B-link_motion enables to compute the posible location of the point B of the current segment. The mode N-link_motion enables to calculate the posible location of the N vector according to the constraint on the current segment. The mode N-all-link_motion enables to calculate the possible motion of the vector N according to the constraint on all the links.
An option of the mode in these cases is the range of the angle of rotation around X1. For example
%0=0 %1=180 mode N-all-link_motion ( %0 , %1 ) \begin{verbatim} indicates that we will display the motion of vector N when the angle vary from 0 to 180 degre. \subsection {Conditionnal instruction} The language enables some conditionnal structure like {\tt if}, {\tt while}, {\tt for} enabling to change the processing of the data. \subsection {{\tt if} structure} \begin{verbatim} %0=600 %1=20 if (%0>500 || %1 <50) bloc print(%0,">500 ou",%1,"<50\n") if (%0 >500 && %1 < 50) bloc print(%0,">500 et",%1,"<50\n") end_bloc end_bloc quit
segment [number]For example segment 1 indicates that the current link is link 1. Here is a commented example:
/*--------------------------- Demo program -----------------------------*/ /* load a robot */ robot "robot.car" /* define the orientation of the platform */ angle 0 0 0 /* define the value of different variables */ %2=530 %50=10 %51=50 %52=70 %53=90 %54=110 %55=130 /* erase screen */ erase interrupt /* define the altitude of the platform */ pos_data %2 /* compute a cross section of the workspace */ mode workspace interrupt %20=450 %21=700 erase interrupt /* compute 30 cross section between z=450 and 750 */ slices 30 pos_data %20, %21 mode workspace3D interrupt erase /* add constraint on the base joint */ base_pyramid "a1.pyr a2.pyr a3.pyr a4.pyr a5.pyr a6.pyr" pos_data %2 /* compute a cross section */ mode workspace_pyramide interrupt /* compute 30 cross section between z=450 and 750 */ slices 30 pos_data %20, %21 mode workspace3D interrupt erase /* now define radius for the links for taking into account links interference */ safety_distance "2" /* compute 30 cross sections */ slices 30 pos_data %20, %21 mode workspace3D interrupt erase /* now compute an orientation workspace */ interrupt %80=0 %81=0 pos_data %80, %81 , %2 /* unset base joint limits and interference constraints */ base_pyramid "-1 -1 -1 -1 -1 -1" safety_distance "-1" %20=mode N-all-link_motion quit
Jean-Pierre Merlet