Visual Servoing Platform  version 3.0.0
vpViper850.cpp
1 /****************************************************************************
2  *
3  * This file is part of the ViSP software.
4  * Copyright (C) 2005 - 2015 by Inria. All rights reserved.
5  *
6  * This software is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * ("GPL") version 2 as published by the Free Software Foundation.
9  * See the file LICENSE.txt at the root directory of this source
10  * distribution for additional information about the GNU GPL.
11  *
12  * For using ViSP with software that can not be combined with the GNU
13  * GPL, please contact Inria about acquiring a ViSP Professional
14  * Edition License.
15  *
16  * See http://visp.inria.fr for more information.
17  *
18  * This software was developed at:
19  * Inria Rennes - Bretagne Atlantique
20  * Campus Universitaire de Beaulieu
21  * 35042 Rennes Cedex
22  * France
23  *
24  * If you have questions regarding the use of this file, please contact
25  * Inria at visp@inria.fr
26  *
27  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
28  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
29  *
30  * Description:
31  * Interface for the ADEPT Viper 850 robot.
32  *
33  * Authors:
34  * Fabien Spindler
35  *
36  *****************************************************************************/
37 
46 #include <visp3/core/vpDebug.h>
47 #include <visp3/robot/vpViper850.h>
48 #include <visp3/core/vpMath.h>
49 #include <visp3/core/vpXmlParserCamera.h>
50 
51 #ifdef VISP_HAVE_ACCESS_TO_NAS
52 static const char *opt_viper850[] = {"CAMERA", "eMc_ROT_XYZ","eMc_TRANS_XYZ",
53  NULL};
54 
56 #if defined(_WIN32)
57 = "Z:/robot/Viper850/current/include/const_eMc_MarlinF033C_without_distortion_Viper850.cnf";
58 #else
59 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_MarlinF033C_without_distortion_Viper850.cnf";
60 #endif
61 
63 #if defined(_WIN32)
64 = "Z:/robot/Viper850/current/include/const_eMc_MarlinF033C_with_distortion_Viper850.cnf";
65 #else
66 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_MarlinF033C_with_distortion_Viper850.cnf";
67 #endif
68 
70 #if defined(_WIN32)
71 = "Z:/robot/Viper850/current/include/const_eMc_PTGreyFlea2_without_distortion_Viper850.cnf";
72 #else
73 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_PTGreyFlea2_without_distortion_Viper850.cnf";
74 #endif
75 
77 #if defined(_WIN32)
78 = "Z:/robot/Viper850/current/include/const_eMc_PTGreyFlea2_with_distortion_Viper850.cnf";
79 #else
80 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_PTGreyFlea2_with_distortion_Viper850.cnf";
81 #endif
82 
84 #if defined(_WIN32)
85 = "Z:/robot/Viper850/current/include/const_eMc_schunk_gripper_without_distortion_Viper850.cnf";
86 #else
87 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_schunk_gripper_without_distortion_Viper850.cnf";
88 #endif
89 
91 #if defined(_WIN32)
92 = "Z:/robot/Viper850/current/include/const_eMc_schunk_gripper_with_distortion_Viper850.cnf";
93 #else
94 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_schunk_gripper_with_distortion_Viper850.cnf";
95 #endif
96 
98 #if defined(_WIN32)
99 = "Z:/robot/Viper850/current/include/const_eMc_generic_without_distortion_Viper850.cnf";
100 #else
101 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_generic_without_distortion_Viper850.cnf";
102 #endif
103 
105 #if defined(_WIN32)
106 = "Z:/robot/Viper850/current/include/const_eMc_generic_with_distortion_Viper850.cnf";
107 #else
108 = "/udd/fspindle/robot/Viper850/current/include/const_eMc_generic_with_distortion_Viper850.cnf";
109 #endif
110 
111 
112 const char * const vpViper850::CONST_CAMERA_FILENAME
113 #if defined(_WIN32)
114 = "Z:/robot/Viper850/current/include/const_camera_Viper850.xml";
115 #else
116 = "/udd/fspindle/robot/Viper850/current/include/const_camera_Viper850.xml";
117 #endif
118 
119 
120 #endif // VISP_HAVE_ACCESS_TO_NAS
121 
122 const char * const vpViper850::CONST_MARLIN_F033C_CAMERA_NAME = "Marlin-F033C-12mm";
123 const char * const vpViper850::CONST_PTGREY_FLEA2_CAMERA_NAME = "PTGrey-Flea2-6mm";
124 const char * const vpViper850::CONST_SCHUNK_GRIPPER_CAMERA_NAME = "Schunk-Gripper-PTGrey-Flea2-6mm";
125 const char * const vpViper850::CONST_GENERIC_CAMERA_NAME = "Generic-camera";
126 
128 
129 
130 
138  : tool_current(vpViper850::defaultTool), projModel(vpCameraParameters::perspectiveProjWithoutDistortion)
139 
140 {
141  // Denavit Hartenberg parameters
142  a1 = 0.075;
143  a2 = 0.365;
144  a3 = 0.090;
145  d1 = 0.335;
146  d4 = 0.405;
147  d6 = 0.080 + 0.1016; // To take into account the offset to go to the tool changer
148  c56 = -341.33 / 9102.22;
149 
150  // Software joint limits in radians
151  joint_min[0] = vpMath::rad(-170);
152  joint_min[1] = vpMath::rad(-190);
153  joint_min[2] = vpMath::rad(-29);
154  joint_min[3] = vpMath::rad(-190);
155  joint_min[4] = vpMath::rad(-120);
156  joint_min[5] = vpMath::rad(-360);
157  joint_max[0] = vpMath::rad(170);
158  joint_max[1] = vpMath::rad(45);
159  joint_max[2] = vpMath::rad(256);
160  joint_max[3] = vpMath::rad(190);
161  joint_max[4] = vpMath::rad(120);
162  joint_max[5] = vpMath::rad(360);
163 
164  init(); // Set the default tool
165 }
166 
171 void
173 {
175  return;
176 }
177 
190 #ifdef VISP_HAVE_ACCESS_TO_NAS
191 void
192 vpViper850::init (const char *camera_extrinsic_parameters)
193 {
194  //vpTRACE ("Parse camera file \""%s\"".", camera_filename);
195  this->parseConfigFile (camera_extrinsic_parameters);
196 
197  return ;
198 }
199 #endif
200 
213 void
216 {
217 
218  this->projModel = proj_model;
219 
220 #ifdef VISP_HAVE_ACCESS_TO_NAS
221  // Read the robot parameters from files
222  char filename_eMc [FILENAME_MAX];
223  switch (tool) {
225  switch(projModel) {
227 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
228  snprintf(filename_eMc, FILENAME_MAX, "%s",
230 #else // _WIN32
231  _snprintf(filename_eMc, FILENAME_MAX, "%s",
233 #endif
234  break;
236 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
237  snprintf(filename_eMc, FILENAME_MAX, "%s",
239 #else // _WIN32
240  _snprintf(filename_eMc, FILENAME_MAX, "%s",
242 #endif
243  break;
244  }
245  break;
246  }
248  switch(projModel) {
250 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
251  snprintf(filename_eMc, FILENAME_MAX, "%s",
253 #else // _WIN32
254  _snprintf(filename_eMc, FILENAME_MAX, "%s",
256 #endif
257  break;
259 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
260  snprintf(filename_eMc, FILENAME_MAX, "%s",
262 #else // _WIN32
263  _snprintf(filename_eMc, FILENAME_MAX, "%s",
265 #endif
266  break;
267  }
268  break;
269  }
271  switch(projModel) {
273 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
274  snprintf(filename_eMc, FILENAME_MAX, "%s",
276 #else // _WIN32
277  _snprintf(filename_eMc, FILENAME_MAX, "%s",
279 #endif
280  break;
282 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
283  snprintf(filename_eMc, FILENAME_MAX, "%s",
285 #else // _WIN32
286  _snprintf(filename_eMc, FILENAME_MAX, "%s",
288 #endif
289  break;
290  }
291  break;
292  }
294  switch(projModel) {
296 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
297  snprintf(filename_eMc, FILENAME_MAX, "%s",
299 #else // _WIN32
300  _snprintf(filename_eMc, FILENAME_MAX, "%s",
302 #endif
303  break;
305 #if !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX
306  snprintf(filename_eMc, FILENAME_MAX, "%s",
308 #else // _WIN32
309  _snprintf(filename_eMc, FILENAME_MAX, "%s",
311 #endif
312  break;
313  }
314  break;
315  }
316  default: {
317  vpERROR_TRACE ("This error should not occur!");
318  // vpERROR_TRACE ("Si elle survient malgre tout, c'est sans doute "
319  // "que les specs de la classe ont ete modifiee, "
320  // "et que le code n'a pas ete mis a jour "
321  // "correctement.");
322  // vpERROR_TRACE ("Verifiez les valeurs possibles du type "
323  // "vpViper850::vpViper850ToolType, et controlez que "
324  // "tous les cas ont ete pris en compte dans la "
325  // "fonction init(camera).");
326  break;
327  }
328  }
329 
330  this->init (filename_eMc);
331 
332 #else // VISP_HAVE_ACCESS_TO_NAS
333 
334  // Use here default values of the robot constant parameters.
335  switch (tool) {
337  switch(projModel) {
339  erc[0] = vpMath::rad(0.07); // rx
340  erc[1] = vpMath::rad(2.76); // ry
341  erc[2] = vpMath::rad(-91.50); // rz
342  etc[0] = -0.0453; // tx
343  etc[1] = 0.0005; // ty
344  etc[2] = 0.0728; // tz
345  break;
347  erc[0] = vpMath::rad(0.26); // rx
348  erc[1] = vpMath::rad(2.12); // ry
349  erc[2] = vpMath::rad(-91.31); // rz
350  etc[0] = -0.0444; // tx
351  etc[1] = -0.0005; // ty
352  etc[2] = 0.1022; // tz
353  break;
354  }
355  break;
356  }
359  switch(projModel) {
361  erc[0] = vpMath::rad(0.15); // rx
362  erc[1] = vpMath::rad(1.28); // ry
363  erc[2] = vpMath::rad(-90.8); // rz
364  etc[0] = -0.0456; // tx
365  etc[1] = -0.0013; // ty
366  etc[2] = 0.001; // tz
367  break;
369  erc[0] = vpMath::rad(0.72); // rx
370  erc[1] = vpMath::rad(2.10); // ry
371  erc[2] = vpMath::rad(-90.5); // rz
372  etc[0] = -0.0444; // tx
373  etc[1] = -0.0012; // ty
374  etc[2] = 0.078; // tz
375  break;
376  }
377  break;
378  }
380  // Set eMc to identity
381  switch(projModel) {
384  erc[0] = 0; // rx
385  erc[1] = 0; // ry
386  erc[2] = 0; // rz
387  etc[0] = 0; // tx
388  etc[1] = 0; // ty
389  etc[2] = 0; // tz
390  break;
391  }
392  break;
393  }
394  }
395  vpRotationMatrix eRc(erc);
396  this->eMc.buildFrom(etc, eRc);
397 #endif // VISP_HAVE_ACCESS_TO_NAS
398 
399  setToolType(tool);
400  return ;
401 }
402 
414 #ifdef VISP_HAVE_ACCESS_TO_NAS
415 void
416 vpViper850::parseConfigFile (const char * filename)
417 {
418  size_t dim;
419  int code;
420  char Ligne[FILENAME_MAX];
421  char namoption[100];
422  FILE * fdtask;
423  int numLn = 0;
424  double rot_eMc[3]; // rotation
425  double trans_eMc[3]; // translation
426  bool get_rot_eMc = false;
427  bool get_trans_eMc = false;
428 
429  //vpTRACE("Read the config file for constant parameters %s.", filename);
430  if ((fdtask = fopen(filename, "r" )) == NULL)
431  {
432  vpERROR_TRACE ("Impossible to read the config file %s.",
433  filename);
435  "Impossible to read the config file.");
436  }
437 
438  while (fgets(Ligne, FILENAME_MAX, fdtask) != NULL) {
439  numLn ++;
440  if ('#' == Ligne[0]) { continue; }
441  if (sscanf(Ligne, "%s", namoption) != 1) {
442  fclose (fdtask);
444  "Cannot parse configuration file %s to retrieve option name"));
445  }
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  if (sscanf(Ligne, "%s %lf %lf %lf", namoption,
464  &rot_eMc[0], &rot_eMc[1], &rot_eMc[2]) != 4) {
465  fclose (fdtask);
467  "Cannot parse configuration file %s to retrieve translation"));
468  }
469 
470  // Convert rotation from degrees to radians
471  rot_eMc[0] *= M_PI / 180.0;
472  rot_eMc[1] *= M_PI / 180.0;
473  rot_eMc[2] *= M_PI / 180.0;
474  get_rot_eMc = true;
475  break;
476 
477  case 2:
478  if (sscanf(Ligne, "%s %lf %lf %lf", namoption,
479  &trans_eMc[0], &trans_eMc[1], &trans_eMc[2]) != 4) {
480  fclose (fdtask);
482  "Cannot parse configuration file %s to retrieve rotation"));
483  }
484  get_trans_eMc = true;
485  break;
486 
487  default:
488  vpERROR_TRACE ("Bad configuration file %s "
489  "ligne #%d.", filename, numLn);
490  } /* SWITCH */
491  } /* WHILE */
492 
493  fclose (fdtask);
494 
495  // Compute the eMc matrix from the translations and rotations
496  if (get_rot_eMc && get_trans_eMc) {
497  for (unsigned int i=0; i < 3; i ++) {
498  erc[i] = rot_eMc[i];
499  etc[i] = trans_eMc[i];
500  }
501 
502  vpRotationMatrix eRc(erc);
503  this->eMc.buildFrom(etc, eRc);
504  }
505 
506  return;
507 }
508 #endif
509 
510 
583 void
585  const unsigned int &image_width,
586  const unsigned int &image_height) const
587 {
588 #if defined(VISP_HAVE_XML2) && defined (VISP_HAVE_ACCESS_TO_NAS)
589  vpXmlParserCamera parser;
590  switch (getToolType()) {
592  std::cout << "Get camera parameters for camera \""
593  << vpViper850::CONST_MARLIN_F033C_CAMERA_NAME << "\"" << std::endl
594  << "from the XML file: \""
595  << vpViper850::CONST_CAMERA_FILENAME << "\""<< std::endl;
596  if (parser.parse(cam,
599  projModel,
600  image_width, image_height) != vpXmlParserCamera::SEQUENCE_OK) {
602  "Impossible to read the camera parameters.");
603  }
604  break;
605  }
607  std::cout << "Get camera parameters for camera \""
608  << vpViper850::CONST_PTGREY_FLEA2_CAMERA_NAME << "\"" << std::endl
609  << "from the XML file: \""
610  << vpViper850::CONST_CAMERA_FILENAME << "\""<< std::endl;
611  if (parser.parse(cam,
614  projModel,
615  image_width, image_height) != vpXmlParserCamera::SEQUENCE_OK) {
617  "Impossible to read the camera parameters.");
618  }
619  break;
620  }
622  std::cout << "Get camera parameters for camera \""
623  << vpViper850::CONST_SCHUNK_GRIPPER_CAMERA_NAME << "\"" << std::endl
624  << "from the XML file: \""
625  << vpViper850::CONST_CAMERA_FILENAME << "\""<< std::endl;
626  if (parser.parse(cam,
629  projModel,
630  image_width, image_height) != vpXmlParserCamera::SEQUENCE_OK) {
632  "Impossible to read the camera parameters.");
633  }
634  break;
635  }
637  std::cout << "Get camera parameters for camera \""
638  << vpViper850::CONST_GENERIC_CAMERA_NAME << "\"" << std::endl
639  << "from the XML file: \""
640  << vpViper850::CONST_CAMERA_FILENAME << "\""<< std::endl;
641  if (parser.parse(cam,
644  projModel,
645  image_width, image_height) != vpXmlParserCamera::SEQUENCE_OK) {
647  "Impossible to read the camera parameters.");
648  }
649  break;
650  }
651  default: {
652  vpERROR_TRACE ("This error should not occur!");
653  // vpERROR_TRACE ("Si elle survient malgre tout, c'est sans doute "
654  // "que les specs de la classe ont ete modifiee, "
655  // "et que le code n'a pas ete mis a jour "
656  // "correctement.");
657  // vpERROR_TRACE ("Verifiez les valeurs possibles du type "
658  // "vpViper850::vpViper850ToolType, et controlez que "
659  // "tous les cas ont ete pris en compte dans la "
660  // "fonction init(camera).");
662  "Impossible to read the camera parameters.");
663  break;
664  }
665  }
666 #else
667  // Set default parameters
668  switch (getToolType()) {
670  // Set default intrinsic camera parameters for 640x480 images
671  if (image_width == 640 && image_height == 480) {
672  std::cout << "Get default camera parameters for camera \""
673  << vpViper850::CONST_MARLIN_F033C_CAMERA_NAME << "\"" << std::endl;
674  switch(this->projModel) {
676  cam.initPersProjWithoutDistortion(1232.0, 1233.0, 317.7, 253.9);
677  break;
679  cam.initPersProjWithDistortion(1214.0, 1213.0, 323.1, 240.0, -0.1824, 0.1881);
680  break;
681  }
682  }
683  else {
684  vpTRACE("Cannot get default intrinsic camera parameters for this image resolution");
686  "Impossible to read the camera parameters.");
687  }
688  break;
689  }
692  // Set default intrinsic camera parameters for 640x480 images
693  if (image_width == 640 && image_height == 480) {
694  std::cout << "Get default camera parameters for camera \""
695  << vpViper850::CONST_PTGREY_FLEA2_CAMERA_NAME << "\"" << std::endl;
696  switch(this->projModel) {
698  cam.initPersProjWithoutDistortion(868.0, 869.0, 314.8, 254.1);
699  break;
701  cam.initPersProjWithDistortion(831.3, 831.6, 322.7, 265.8, -0.1955, 0.2047);
702  break;
703  }
704  }
705  else {
706  vpTRACE("Cannot get default intrinsic camera parameters for this image resolution");
708  "Impossible to read the camera parameters.");
709  }
710  break;
711  }
713  // Set default intrinsic camera parameters for 640x480 images
714  if (image_width == 640 && image_height == 480) {
715  std::cout << "Get default camera parameters for camera \""
716  << vpViper850::CONST_GENERIC_CAMERA_NAME << "\"" << std::endl;
717  switch(this->projModel) {
719  cam.initPersProjWithoutDistortion(868.0, 869.0, 314.8, 254.1);
720  break;
722  cam.initPersProjWithDistortion(831.3, 831.6, 322.7, 265.8, -0.1955, 0.2047);
723  break;
724  }
725  }
726  else {
727  vpTRACE("Cannot get default intrinsic camera parameters for this image resolution");
729  "Impossible to read the camera parameters.");
730  }
731  break;
732  }
733  default:
734  vpERROR_TRACE ("This error should not occur!");
736  "Impossible to read the camera parameters.");
737  break;
738  }
739 #endif
740  return;
741 }
742 
806 void
808  const vpImage<unsigned char> &I) const
809 {
811 }
876 void
878  const vpImage<vpRGBa> &I) const
879 {
881 }
static const char *const CONST_EMC_PTGREY_FLEA2_WITH_DISTORTION_FILENAME
Definition: vpViper850.h:71
double a3
for joint 3
Definition: vpViper.h:153
vpHomogeneousMatrix eMc
End effector to camera transformation.
Definition: vpViper.h:145
static const char *const CONST_CAMERA_FILENAME
Definition: vpViper850.h:76
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:95
unsigned int getWidth() const
Definition: vpImage.h:161
void getCameraParameters(vpCameraParameters &cam, const unsigned int &image_width, const unsigned int &image_height) const
Definition: vpViper850.cpp:584
#define vpERROR_TRACE
Definition: vpDebug.h:391
static const char *const CONST_EMC_MARLIN_F033C_WITH_DISTORTION_FILENAME
Definition: vpViper850.h:69
error that can be emited by ViSP classes.
Definition: vpException.h:73
vpRxyzVector erc
Definition: vpViper.h:148
static const char *const CONST_MARLIN_F033C_CAMERA_NAME
Definition: vpViper850.h:81
XML parser to load and save intrinsic camera parameters.
static const char *const CONST_SCHUNK_GRIPPER_CAMERA_NAME
Definition: vpViper850.h:83
double a2
for joint 2
Definition: vpViper.h:152
Implementation of a rotation matrix and operations on such kind of matrices.
double d1
for joint 1
Definition: vpViper.h:151
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:156
double a1
Definition: vpViper.h:151
void setToolType(vpViper850::vpToolType tool)
Set the current tool type.
Definition: vpViper850.h:132
vpTranslationVector etc
Definition: vpViper.h:147
static const char *const CONST_EMC_MARLIN_F033C_WITHOUT_DISTORTION_FILENAME
Definition: vpViper850.h:68
#define vpTRACE
Definition: vpDebug.h:414
static const char *const CONST_GENERIC_CAMERA_NAME
Definition: vpViper850.h:84
vpColVector joint_max
Definition: vpViper.h:159
static const char *const CONST_EMC_SCHUNK_GRIPPER_WITHOUT_DISTORTION_FILENAME
Definition: vpViper850.h:72
vpToolType
List of possible tools that can be attached to the robot end-effector.
Definition: vpViper850.h:87
Generic class defining intrinsic camera parameters.
Modelisation of the ADEPT Viper 850 robot.
Definition: vpViper850.h:62
static const char *const CONST_EMC_SCHUNK_GRIPPER_WITH_DISTORTION_FILENAME
Definition: vpViper850.h:73
vpToolType getToolType() const
Get the current tool type.
Definition: vpViper850.h:122
static const char *const CONST_EMC_GENERIC_WITH_DISTORTION_FILENAME
Definition: vpViper850.h:75
Perspective projection with distortion model.
void buildFrom(const vpTranslationVector &t, const vpRotationMatrix &R)
static double rad(double deg)
Definition: vpMath.h:104
static const char *const CONST_EMC_PTGREY_FLEA2_WITHOUT_DISTORTION_FILENAME
Definition: vpViper850.h:70
static const char *const CONST_EMC_GENERIC_WITHOUT_DISTORTION_FILENAME
Definition: vpViper850.h:74
unsigned int getHeight() const
Definition: vpImage.h:152
void parseConfigFile(const char *filename)
Definition: vpViper850.cpp:416
double d4
for joint 4
Definition: vpViper.h:154
vpCameraParameters::vpCameraParametersProjType projModel
Definition: vpViper850.h:140
void init(void)
Definition: vpViper850.cpp:172
int parse(vpCameraParameters &cam, const std::string &filename, const std::string &camera_name, const vpCameraParameters::vpCameraParametersProjType &projModel, const unsigned int image_width=0, const unsigned int image_height=0)
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:82
double d6
for joint 6
Definition: vpViper.h:155
vpColVector joint_min
Definition: vpViper.h:160