ViSP  2.9.0
vpViper850.cpp
1 /****************************************************************************
2  *
3  * $Id: vpViper850.cpp 4649 2014-02-07 14:57:11Z fspindle $
4  *
5  * This file is part of the ViSP software.
6  * Copyright (C) 2005 - 2014 by INRIA. All rights reserved.
7  *
8  * This software is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * ("GPL") version 2 as published by the Free Software Foundation.
11  * See the file LICENSE.txt at the root directory of this source
12  * distribution for additional information about the GNU GPL.
13  *
14  * For using ViSP with software that can not be combined with the GNU
15  * GPL, please contact INRIA about acquiring a ViSP Professional
16  * Edition License.
17  *
18  * See http://www.irisa.fr/lagadic/visp/visp.html for more information.
19  *
20  * This software was developed at:
21  * INRIA Rennes - Bretagne Atlantique
22  * Campus Universitaire de Beaulieu
23  * 35042 Rennes Cedex
24  * France
25  * http://www.irisa.fr/lagadic
26  *
27  * If you have questions regarding the use of this file, please contact
28  * INRIA at visp@inria.fr
29  *
30  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
31  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
32  *
33  *
34  * Description:
35  * Interface for the ADEPT Viper 850 robot.
36  *
37  * Authors:
38  * Fabien Spindler
39  *
40  *****************************************************************************/
41 
50 #include <visp/vpDebug.h>
51 #include <visp/vpViper850.h>
52 #include <visp/vpMath.h>
53 #include <visp/vpXmlParserCamera.h>
54 
55 #ifdef VISP_HAVE_ACCESS_TO_NAS
56 static const char *opt_viper850[] = {"CAMERA", "eMc_ROT_XYZ","eMc_TRANS_XYZ",
57  NULL};
58 
60 #if defined(_WIN32)
61 = "Z:/robot/Viper850/current/include/const_eMc_MarlinF033C_without_distortion_Viper850.cnf";
62 #else
63 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_MarlinF033C_without_distortion_Viper850.cnf";
64 #endif
65 
67 #if defined(_WIN32)
68 = "Z:/robot/Viper850/current/include/const_eMc_MarlinF033C_with_distortion_Viper850.cnf";
69 #else
70 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_MarlinF033C_with_distortion_Viper850.cnf";
71 #endif
72 
74 #if defined(_WIN32)
75 = "Z:/robot/Viper850/current/include/const_eMc_PTGreyFlea2_without_distortion_Viper850.cnf";
76 #else
77 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_PTGreyFlea2_without_distortion_Viper850.cnf";
78 #endif
79 
81 #if defined(_WIN32)
82 = "Z:/robot/Viper850/current/include/const_eMc_PTGreyFlea2_with_distortion_Viper850.cnf";
83 #else
84 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_PTGreyFlea2_with_distortion_Viper850.cnf";
85 #endif
86 
88 #if defined(_WIN32)
89 = "Z:/robot/Viper850/current/include/const_eMc_schunk_gripper_without_distortion_Viper850.cnf";
90 #else
91 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_schunk_gripper_without_distortion_Viper850.cnf";
92 #endif
93 
95 #if defined(_WIN32)
96 = "Z:/robot/Viper850/current/include/const_eMc_schunk_gripper_with_distortion_Viper850.cnf";
97 #else
98 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_schunk_gripper_with_distortion_Viper850.cnf";
99 #endif
100 
102 #if defined(_WIN32)
103 = "Z:/robot/Viper850/current/include/const_eMc_generic_without_distortion_Viper850.cnf";
104 #else
105 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_generic_without_distortion_Viper850.cnf";
106 #endif
107 
109 #if defined(_WIN32)
110 = "Z:/robot/Viper850/current/include/const_eMc_generic_with_distortion_Viper850.cnf";
111 #else
112 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_generic_with_distortion_Viper850.cnf";
113 #endif
114 
115 
116 const char * const vpViper850::CONST_CAMERA_FILENAME
117 #if defined(_WIN32)
118 = "Z:/robot/Viper850/current/include/const_camera_Viper850.xml";
119 #else
120 = "/udd/fspindle/robot/Viper850/current/include/const_camera_Viper850.xml";
121 #endif
122 
123 
124 #endif // VISP_HAVE_ACCESS_TO_NAS
125 
126 const char * const vpViper850::CONST_MARLIN_F033C_CAMERA_NAME = "Marlin-F033C-12mm";
127 const char * const vpViper850::CONST_PTGREY_FLEA2_CAMERA_NAME = "PTGrey-Flea2-6mm";
128 const char * const vpViper850::CONST_SCHUNK_GRIPPER_CAMERA_NAME = "Schunk-Gripper-PTGrey-Flea2-6mm";
129 const char * const vpViper850::CONST_GENERIC_CAMERA_NAME = "Generic-camera";
130 
132 
133 
134 
142  : tool_current(vpViper850::defaultTool), projModel(vpCameraParameters::perspectiveProjWithoutDistortion)
143 
144 {
145  // Denavit Hartenberg parameters
146  a1 = 0.075;
147  a2 = 0.365;
148  a3 = 0.090;
149  d1 = 0.335;
150  d4 = 0.405;
151  d6 = 0.080 + 0.1016; // To take into account the offset to go to the tool changer
152  c56 = -341.33 / 9102.22;
153 
154  // Software joint limits in radians
155  joint_min[0] = vpMath::rad(-170);
156  joint_min[1] = vpMath::rad(-190);
157  joint_min[2] = vpMath::rad(-29);
158  joint_min[3] = vpMath::rad(-190);
159  joint_min[4] = vpMath::rad(-120);
160  joint_min[5] = vpMath::rad(-360);
161  joint_max[0] = vpMath::rad(170);
162  joint_max[1] = vpMath::rad(45);
163  joint_max[2] = vpMath::rad(256);
164  joint_max[3] = vpMath::rad(190);
165  joint_max[4] = vpMath::rad(120);
166  joint_max[5] = vpMath::rad(360);
167 
168  init(); // Set the default tool
169 }
170 
175 void
177 {
179  return;
180 }
181 
194 #ifdef VISP_HAVE_ACCESS_TO_NAS
195 void
196 vpViper850::init (const char *camera_extrinsic_parameters)
197 {
198  //vpTRACE ("Parse camera file \""%s\"".", camera_filename);
199  this->parseConfigFile (camera_extrinsic_parameters);
200 
201  return ;
202 }
203 #endif
204 
217 void
220 {
221 
222  this->projModel = proj_model;
223 
224 #ifdef VISP_HAVE_ACCESS_TO_NAS
225  // Read the robot parameters from files
226  char filename_eMc [FILENAME_MAX];
227  switch (tool) {
229  switch(projModel) {
231 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
232  snprintf(filename_eMc, FILENAME_MAX, "%s",
234 #else // _WIN32
235  _snprintf(filename_eMc, FILENAME_MAX, "%s",
237 #endif
238  break;
240 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
241  snprintf(filename_eMc, FILENAME_MAX, "%s",
243 #else // _WIN32
244  _snprintf(filename_eMc, FILENAME_MAX, "%s",
246 #endif
247  break;
248  }
249  break;
250  }
252  switch(projModel) {
254 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
255  snprintf(filename_eMc, FILENAME_MAX, "%s",
257 #else // _WIN32
258  _snprintf(filename_eMc, FILENAME_MAX, "%s",
260 #endif
261  break;
263 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
264  snprintf(filename_eMc, FILENAME_MAX, "%s",
266 #else // _WIN32
267  _snprintf(filename_eMc, FILENAME_MAX, "%s",
269 #endif
270  break;
271  }
272  break;
273  }
275  switch(projModel) {
277 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
278  snprintf(filename_eMc, FILENAME_MAX, "%s",
280 #else // _WIN32
281  _snprintf(filename_eMc, FILENAME_MAX, "%s",
283 #endif
284  break;
286 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
287  snprintf(filename_eMc, FILENAME_MAX, "%s",
289 #else // _WIN32
290  _snprintf(filename_eMc, FILENAME_MAX, "%s",
292 #endif
293  break;
294  }
295  break;
296  }
298  switch(projModel) {
300 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
301  snprintf(filename_eMc, FILENAME_MAX, "%s",
303 #else // _WIN32
304  _snprintf(filename_eMc, FILENAME_MAX, "%s",
306 #endif
307  break;
309 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
310  snprintf(filename_eMc, FILENAME_MAX, "%s",
312 #else // _WIN32
313  _snprintf(filename_eMc, FILENAME_MAX, "%s",
315 #endif
316  break;
317  }
318  break;
319  }
320  default: {
321  vpERROR_TRACE ("This error should not occur!");
322  // vpERROR_TRACE ("Si elle survient malgre tout, c'est sans doute "
323  // "que les specs de la classe ont ete modifiee, "
324  // "et que le code n'a pas ete mis a jour "
325  // "correctement.");
326  // vpERROR_TRACE ("Verifiez les valeurs possibles du type "
327  // "vpViper850::vpViper850ToolType, et controlez que "
328  // "tous les cas ont ete pris en compte dans la "
329  // "fonction init(camera).");
330  break;
331  }
332  }
333 
334  this->init (filename_eMc);
335 
336 #else // VISP_HAVE_ACCESS_TO_NAS
337 
338  // Use here default values of the robot constant parameters.
339  switch (tool) {
341  switch(projModel) {
343  erc[0] = vpMath::rad(0.07); // rx
344  erc[1] = vpMath::rad(2.76); // ry
345  erc[2] = vpMath::rad(-91.50); // rz
346  etc[0] = -0.0453; // tx
347  etc[1] = 0.0005; // ty
348  etc[2] = 0.0728; // tz
349  break;
351  erc[0] = vpMath::rad(0.26); // rx
352  erc[1] = vpMath::rad(2.12); // ry
353  erc[2] = vpMath::rad(-91.31); // rz
354  etc[0] = -0.0444; // tx
355  etc[1] = -0.0005; // ty
356  etc[2] = 0.1022; // tz
357  break;
358  }
359  break;
360  }
363  switch(projModel) {
365  erc[0] = vpMath::rad(0.15); // rx
366  erc[1] = vpMath::rad(1.28); // ry
367  erc[2] = vpMath::rad(-90.8); // rz
368  etc[0] = -0.0456; // tx
369  etc[1] = -0.0013; // ty
370  etc[2] = 0.001; // tz
371  break;
373  erc[0] = vpMath::rad(0.72); // rx
374  erc[1] = vpMath::rad(2.10); // ry
375  erc[2] = vpMath::rad(-90.5); // rz
376  etc[0] = -0.0444; // tx
377  etc[1] = -0.0012; // ty
378  etc[2] = 0.078; // tz
379  break;
380  }
381  break;
382  }
384  // Set eMc to identity
385  switch(projModel) {
388  erc[0] = 0; // rx
389  erc[1] = 0; // ry
390  erc[2] = 0; // rz
391  etc[0] = 0; // tx
392  etc[1] = 0; // ty
393  etc[2] = 0; // tz
394  break;
395  }
396  break;
397  }
398  }
399  vpRotationMatrix eRc(erc);
400  this->eMc.buildFrom(etc, eRc);
401 #endif // VISP_HAVE_ACCESS_TO_NAS
402 
403  setToolType(tool);
404  return ;
405 }
406 
418 #ifdef VISP_HAVE_ACCESS_TO_NAS
419 void
420 vpViper850::parseConfigFile (const char * filename)
421 {
422  size_t dim;
423  int code;
424  char Ligne[FILENAME_MAX];
425  char namoption[100];
426  FILE * fdtask;
427  int numLn = 0;
428  double rot_eMc[3]; // rotation
429  double trans_eMc[3]; // translation
430  bool get_rot_eMc = false;
431  bool get_trans_eMc = false;
432 
433  //vpTRACE("Read the config file for constant parameters %s.", filename);
434  if ((fdtask = fopen(filename, "r" )) == NULL)
435  {
436  vpERROR_TRACE ("Impossible to read the config file %s.",
437  filename);
439  "Impossible to read the config file.");
440  }
441 
442  while (fgets(Ligne, FILENAME_MAX, fdtask) != NULL) {
443  numLn ++;
444  if ('#' == Ligne[0]) { continue; }
445  sscanf(Ligne, "%s", namoption);
446  dim = strlen(namoption);
447 
448  for (code = 0;
449  NULL != opt_viper850[code];
450  ++ code)
451  {
452  if (strncmp(opt_viper850[code], namoption, dim) == 0)
453  {
454  break;
455  }
456  }
457 
458  switch(code) {
459  case 0:
460  break; // Nothing to do: camera name
461 
462  case 1:
463  sscanf(Ligne, "%s %lf %lf %lf", namoption,
464  &rot_eMc[0],
465  &rot_eMc[1],
466  &rot_eMc[2]);
467 
468  // Convert rotation from degrees to radians
469  rot_eMc[0] *= M_PI / 180.0;
470  rot_eMc[1] *= M_PI / 180.0;
471  rot_eMc[2] *= M_PI / 180.0;
472  get_rot_eMc = true;
473  break;
474 
475  case 2:
476  sscanf(Ligne, "%s %lf %lf %lf", namoption,
477  &trans_eMc[0],
478  &trans_eMc[1],
479  &trans_eMc[2]);
480  get_trans_eMc = true;
481  break;
482 
483  default:
484  vpERROR_TRACE ("Bad configuration file %s "
485  "ligne #%d.", filename, numLn);
486  } /* SWITCH */
487  } /* WHILE */
488 
489  fclose (fdtask);
490 
491  // Compute the eMc matrix from the translations and rotations
492  if (get_rot_eMc && get_trans_eMc) {
493  for (unsigned int i=0; i < 3; i ++) {
494  erc[i] = rot_eMc[i];
495  etc[i] = trans_eMc[i];
496  }
497 
498  vpRotationMatrix eRc(erc);
499  this->eMc.buildFrom(etc, eRc);
500  }
501 
502  return;
503 }
504 #endif
505 
506 
579 void
581  const unsigned int &image_width,
582  const unsigned int &image_height) const
583 {
584 #if defined(VISP_HAVE_XML2) && defined (VISP_HAVE_ACCESS_TO_NAS)
585  vpXmlParserCamera parser;
586  switch (getToolType()) {
588  std::cout << "Get camera parameters for camera \""
589  << vpViper850::CONST_MARLIN_F033C_CAMERA_NAME << "\"" << std::endl
590  << "from the XML file: \""
591  << vpViper850::CONST_CAMERA_FILENAME << "\""<< std::endl;
592  if (parser.parse(cam,
595  projModel,
596  image_width, image_height) != vpXmlParserCamera::SEQUENCE_OK) {
598  "Impossible to read the camera parameters.");
599  }
600  break;
601  }
603  std::cout << "Get camera parameters for camera \""
604  << vpViper850::CONST_PTGREY_FLEA2_CAMERA_NAME << "\"" << std::endl
605  << "from the XML file: \""
606  << vpViper850::CONST_CAMERA_FILENAME << "\""<< std::endl;
607  if (parser.parse(cam,
610  projModel,
611  image_width, image_height) != vpXmlParserCamera::SEQUENCE_OK) {
613  "Impossible to read the camera parameters.");
614  }
615  break;
616  }
618  std::cout << "Get camera parameters for camera \""
619  << vpViper850::CONST_SCHUNK_GRIPPER_CAMERA_NAME << "\"" << std::endl
620  << "from the XML file: \""
621  << vpViper850::CONST_CAMERA_FILENAME << "\""<< std::endl;
622  if (parser.parse(cam,
625  projModel,
626  image_width, image_height) != vpXmlParserCamera::SEQUENCE_OK) {
628  "Impossible to read the camera parameters.");
629  }
630  break;
631  }
633  std::cout << "Get camera parameters for camera \""
634  << vpViper850::CONST_GENERIC_CAMERA_NAME << "\"" << std::endl
635  << "from the XML file: \""
636  << vpViper850::CONST_CAMERA_FILENAME << "\""<< std::endl;
637  if (parser.parse(cam,
640  projModel,
641  image_width, image_height) != vpXmlParserCamera::SEQUENCE_OK) {
643  "Impossible to read the camera parameters.");
644  }
645  break;
646  }
647  default: {
648  vpERROR_TRACE ("This error should not occur!");
649  // vpERROR_TRACE ("Si elle survient malgre tout, c'est sans doute "
650  // "que les specs de la classe ont ete modifiee, "
651  // "et que le code n'a pas ete mis a jour "
652  // "correctement.");
653  // vpERROR_TRACE ("Verifiez les valeurs possibles du type "
654  // "vpViper850::vpViper850ToolType, et controlez que "
655  // "tous les cas ont ete pris en compte dans la "
656  // "fonction init(camera).");
658  "Impossible to read the camera parameters.");
659  break;
660  }
661  }
662 #else
663  // Set default parameters
664  switch (getToolType()) {
666  // Set default intrinsic camera parameters for 640x480 images
667  if (image_width == 640 && image_height == 480) {
668  std::cout << "Get default camera parameters for camera \""
669  << vpViper850::CONST_MARLIN_F033C_CAMERA_NAME << "\"" << std::endl;
670  switch(this->projModel) {
672  cam.initPersProjWithoutDistortion(1232.0, 1233.0, 317.7, 253.9);
673  break;
675  cam.initPersProjWithDistortion(1214.0, 1213.0, 323.1, 240.0, -0.1824, 0.1881);
676  break;
677  }
678  }
679  else {
680  vpTRACE("Cannot get default intrinsic camera parameters for this image resolution");
682  "Impossible to read the camera parameters.");
683  }
684  break;
685  }
688  // Set default intrinsic camera parameters for 640x480 images
689  if (image_width == 640 && image_height == 480) {
690  std::cout << "Get default camera parameters for camera \""
691  << vpViper850::CONST_PTGREY_FLEA2_CAMERA_NAME << "\"" << std::endl;
692  switch(this->projModel) {
694  cam.initPersProjWithoutDistortion(868.0, 869.0, 314.8, 254.1);
695  break;
697  cam.initPersProjWithDistortion(831.3, 831.6, 322.7, 265.8, -0.1955, 0.2047);
698  break;
699  }
700  }
701  else {
702  vpTRACE("Cannot get default intrinsic camera parameters for this image resolution");
704  "Impossible to read the camera parameters.");
705  }
706  break;
707  }
709  // Set default intrinsic camera parameters for 640x480 images
710  if (image_width == 640 && image_height == 480) {
711  std::cout << "Get default camera parameters for camera \""
712  << vpViper850::CONST_GENERIC_CAMERA_NAME << "\"" << std::endl;
713  switch(this->projModel) {
715  cam.initPersProjWithoutDistortion(868.0, 869.0, 314.8, 254.1);
716  break;
718  cam.initPersProjWithDistortion(831.3, 831.6, 322.7, 265.8, -0.1955, 0.2047);
719  break;
720  }
721  }
722  else {
723  vpTRACE("Cannot get default intrinsic camera parameters for this image resolution");
725  "Impossible to read the camera parameters.");
726  }
727  break;
728  }
729  default:
730  vpERROR_TRACE ("This error should not occur!");
732  "Impossible to read the camera parameters.");
733  break;
734  }
735 #endif
736  return;
737 }
738 
802 void
804  const vpImage<unsigned char> &I) const
805 {
807 }
872 void
874  const vpImage<vpRGBa> &I) const
875 {
877 }
static const char *const CONST_EMC_PTGREY_FLEA2_WITH_DISTORTION_FILENAME
Definition: vpViper850.h:75
double a3
for joint 3
Definition: vpViper.h:154
vpHomogeneousMatrix eMc
End effector to camera transformation.
Definition: vpViper.h:146
static const char *const CONST_CAMERA_FILENAME
Definition: vpViper850.h:80
Error that can be emited by the vpRobot class and its derivates.
Perspective projection without distortion model.
static const vpToolType defaultTool
Default tool attached to the robot end effector.
Definition: vpViper850.h:99
unsigned int getWidth() const
Definition: vpImage.h:159
#define vpERROR_TRACE
Definition: vpDebug.h:395
void getCameraParameters(vpCameraParameters &cam, const unsigned int &image_width, const unsigned int &image_height) const
Definition: vpViper850.cpp:580
#define vpTRACE
Definition: vpDebug.h:418
static const char *const CONST_EMC_MARLIN_F033C_WITH_DISTORTION_FILENAME
Definition: vpViper850.h:73
vpRxyzVector erc
Definition: vpViper.h:149
static const char *const CONST_MARLIN_F033C_CAMERA_NAME
Definition: vpViper850.h:85
XML parser to load and save intrinsic camera parameters.
static const char *const CONST_SCHUNK_GRIPPER_CAMERA_NAME
Definition: vpViper850.h:87
double a2
for joint 2
Definition: vpViper.h:153
The vpRotationMatrix considers the particular case of a rotation matrix.
double d1
for joint 1
Definition: vpViper.h:152
void initPersProjWithoutDistortion(const double px, const double py, const double u0, const double v0)
double c56
Mechanical coupling between joint 5 and joint 6.
Definition: vpViper.h:157
double a1
Definition: vpViper.h:152
void setToolType(vpViper850::vpToolType tool)
Set the current tool type.
Definition: vpViper850.h:136
vpTranslationVector etc
Definition: vpViper.h:148
static const char *const CONST_EMC_MARLIN_F033C_WITHOUT_DISTORTION_FILENAME
Definition: vpViper850.h:72
static const char *const CONST_GENERIC_CAMERA_NAME
Definition: vpViper850.h:88
vpColVector joint_max
Definition: vpViper.h:160
static const char *const CONST_EMC_SCHUNK_GRIPPER_WITHOUT_DISTORTION_FILENAME
Definition: vpViper850.h:76
vpToolType
List of possible tools that can be attached to the robot end-effector.
Definition: vpViper850.h:91
Generic class defining intrinsic camera parameters.
Modelisation of the ADEPT Viper 850 robot.
Definition: vpViper850.h:66
static const char *const CONST_EMC_SCHUNK_GRIPPER_WITH_DISTORTION_FILENAME
Definition: vpViper850.h:77
vpToolType getToolType() const
Get the current tool type.
Definition: vpViper850.h:126
static const char *const CONST_EMC_GENERIC_WITH_DISTORTION_FILENAME
Definition: vpViper850.h:79
Perspective projection with distortion model.
void buildFrom(const vpTranslationVector &t, const vpRotationMatrix &R)
Construction from translation vector and rotation matrix.
static double rad(double deg)
Definition: vpMath.h:100
static const char *const CONST_EMC_PTGREY_FLEA2_WITHOUT_DISTORTION_FILENAME
Definition: vpViper850.h:74
int parse(vpCameraParameters &cam, const char *filename, const std::string &camera_name, const vpCameraParameters::vpCameraParametersProjType &projModel, const unsigned int image_width=0, const unsigned int image_height=0)
static const char *const CONST_EMC_GENERIC_WITHOUT_DISTORTION_FILENAME
Definition: vpViper850.h:78
unsigned int getHeight() const
Definition: vpImage.h:150
void parseConfigFile(const char *filename)
Definition: vpViper850.cpp:420
double d4
for joint 4
Definition: vpViper.h:155
vpCameraParameters::vpCameraParametersProjType projModel
Definition: vpViper850.h:144
void init(void)
Definition: vpViper850.cpp:176
void initPersProjWithDistortion(const double px, const double py, const double u0, const double v0, const double kud, const double kdu)
static const char *const CONST_PTGREY_FLEA2_CAMERA_NAME
Definition: vpViper850.h:86
double d6
for joint 6
Definition: vpViper.h:156
vpColVector joint_min
Definition: vpViper.h:161