43#include <visp3/robot/vpWireFrameSimulator.h>
47#include "vpClipping.h"
48#include "vpCoreDisplay.h"
53#include "vpProjection.h"
61#include <visp3/core/vpDebug.h>
62#include <visp3/core/vpCameraParameters.h>
63#include <visp3/core/vpException.h>
64#include <visp3/core/vpIoTools.h>
65#include <visp3/core/vpMeterPixelConversion.h>
66#include <visp3/core/vpPoint.h>
69extern Point2i *point2i;
70extern Point2i *listpoint2i;
80 Byte b = (Byte)*get_rfstack();
84 memmove((
char *)m, (
char *)mat,
sizeof(Matrix));
85 View_to_Matrix(get_vwstack(), *(get_tmstack()));
86 postmult_matrix(m, *(get_tmstack()));
88 bend = bp + sc.bound.nbr;
89 for (; bp < bend; bp++) {
90 if ((clip = clipping_Bound(bp, m)) != NULL) {
91 Face *fp = clip->face.ptr;
92 Face *fend = fp + clip->face.nbr;
94 set_Bound_face_display(clip, b);
96 point_3D_2D(clip->point.ptr, clip->point.nbr,
static_cast<int>(I.getWidth()),
static_cast<int>(I.getHeight()), point2i);
97 for (; fp < fend; fp++) {
99 wireframe_Face(fp, point2i);
100 Point2i *pt = listpoint2i;
101 for (
int i = 1; i < fp->vertex.nbr; i++) {
106 if (fp->vertex.nbr > 2) {
126 Byte b = (Byte)*get_rfstack();
130 memmove((
char *)m, (
char *)mat,
sizeof(Matrix));
131 View_to_Matrix(get_vwstack(), *(get_tmstack()));
132 postmult_matrix(m, *(get_tmstack()));
134 bend = bp + sc.bound.nbr;
135 for (; bp < bend; bp++) {
136 if ((clip = clipping_Bound(bp, m)) != NULL) {
137 Face *fp = clip->face.ptr;
138 Face *fend = fp + clip->face.nbr;
140 set_Bound_face_display(clip, b);
142 point_3D_2D(clip->point.ptr, clip->point.nbr,
static_cast<int>(I.getWidth()),
static_cast<int>(I.getHeight()), point2i);
143 for (; fp < fend; fp++) {
144 if (fp->is_visible) {
145 wireframe_Face(fp, point2i);
146 Point2i *pt = listpoint2i;
147 for (
int i = 1; i < fp->vertex.nbr; i++) {
152 if (fp->vertex.nbr > 2) {
171 :
scene(),
desiredScene(),
camera(),
objectImage(),
fMo(),
fMc(),
camMf(),
refMo(),
cMo(),
cdMo(),
object(
PLATE),
181 std::vector<std::string> scene_dirs =
vpIoTools::splitChain(std::string(VISP_SCENES_DIR), std::string(
";"));
182 bool sceneDirExists =
false;
183 for (
size_t i = 0; i < scene_dirs.size(); i++)
185 scene_dir = scene_dirs[i];
186 sceneDirExists =
true;
189 if (!sceneDirExists) {
192 std::cout <<
"The simulator uses data from VISP_SCENES_DIR=" << scene_dir << std::endl;
195 std::cout <<
"Cannot get VISP_SCENES_DIR environment variable" << std::endl;
209 scene.bound.ptr = NULL;
228 free_Bound_scene(&(this->
scene));
230 free_Bound_scene(&(this->
camera));
259 char name_cam[FILENAME_MAX];
260 char name[FILENAME_MAX];
265 const char *scene_dir_ = scene_dir.c_str();
266 if (strlen(scene_dir_) >= FILENAME_MAX) {
270 strcpy(name_cam, scene_dir_);
272 strcat(name_cam,
"/camera.bnd");
276 strcat(name_cam,
"/tool.bnd");
277 set_scene(name_cam, &(this->
camera), 1.0);
280 strcpy(name, scene_dir_);
283 strcat(name,
"/3pts.bnd");
287 strcat(name,
"/cube.bnd");
291 strcat(name,
"/plate.bnd");
295 strcat(name,
"/plate_6cm.bnd");
299 strcat(name,
"/rectangle.bnd");
303 strcat(name,
"/square10cm.bnd");
307 strcat(name,
"/diamond.bnd");
311 strcat(name,
"/trapezoid.bnd");
315 strcat(name,
"/line.bnd");
319 strcat(name,
"/road.bnd");
323 strcat(name,
"/circles2.bnd");
327 strcat(name,
"/pipe.bnd");
331 strcat(name,
"/circle.bnd");
335 strcat(name,
"/sphere.bnd");
339 strcat(name,
"/cylinder.bnd");
343 strcat(name,
"/plan.bnd");
347 strcat(name,
"/point_cloud.bnd");
351 set_scene(name, &(this->
scene), 1.0);
353 scene_dir_ = scene_dir.c_str();
354 if (strlen(scene_dir_) >= FILENAME_MAX) {
363 strcpy(name, scene_dir_);
364 strcat(name,
"/circle_sq2.bnd");
368 strcpy(name, scene_dir_);
369 strcat(name,
"/tool.bnd");
376 load_rfstack(IS_INSIDE);
378 add_rfstack(IS_BACK);
380 add_vwstack(
"start",
"depth", 0.0, 100.0);
381 add_vwstack(
"start",
"window", -0.1, 0.1, -0.1, 0.1);
382 add_vwstack(
"start",
"type", PERSPECTIVE);
411 const std::list<vpImageSimulator> &imObj)
431 char name_cam[FILENAME_MAX];
432 char name[FILENAME_MAX];
437 const char *scene_dir_ = scene_dir.c_str();
438 if (strlen(scene_dir_) >= FILENAME_MAX) {
442 strcpy(name_cam, scene_dir_);
443 strcat(name_cam,
"/camera.bnd");
446 if (strlen(obj) >= FILENAME_MAX) {
452 model = getExtension(obj);
453 if (model == BND_MODEL)
454 set_scene(name, &(this->
scene), 1.0);
455 else if (model == WRL_MODEL)
456 set_scene_wrl(name, &(this->
scene), 1.0);
457 else if (model == UNKNOWN_MODEL) {
461 if (strlen(desired_object) >= FILENAME_MAX) {
465 strcpy(name, desired_object);
466 model = getExtension(desired_object);
467 if (model == BND_MODEL)
469 else if (model == WRL_MODEL)
471 else if (model == UNKNOWN_MODEL) {
475 add_rfstack(IS_BACK);
477 add_vwstack(
"start",
"depth", 0.0, 100.0);
478 add_vwstack(
"start",
"window", -0.1, 0.1, -0.1, 0.1);
479 add_vwstack(
"start",
"type", PERSPECTIVE);
504 const std::list<vpImageSimulator> &imObj)
525 char name_cam[FILENAME_MAX];
526 char name[FILENAME_MAX];
530 const char *scene_dir_ = scene_dir.c_str();
531 if (strlen(scene_dir_) >= FILENAME_MAX) {
535 strcpy(name_cam, scene_dir_);
536 strcat(name_cam,
"/camera.bnd");
539 strcpy(name, scene_dir_);
542 strcat(name,
"/3pts.bnd");
546 strcat(name,
"/cube.bnd");
550 strcat(name,
"/plate.bnd");
554 strcat(name,
"/plate_6cm.bnd");
558 strcat(name,
"/rectangle.bnd");
562 strcat(name,
"/square10cm.bnd");
566 strcat(name,
"/diamond.bnd");
570 strcat(name,
"/trapezoid.bnd");
574 strcat(name,
"/line.bnd");
578 strcat(name,
"/road.bnd");
582 strcat(name,
"/circles2.bnd");
586 strcat(name,
"/pipe.bnd");
590 strcat(name,
"/circle.bnd");
594 strcat(name,
"/sphere.bnd");
598 strcat(name,
"/cylinder.bnd");
602 strcat(name,
"/plan.bnd");
606 strcat(name,
"/point_cloud.bnd");
610 set_scene(name, &(this->
scene), 1.0);
613 load_rfstack(IS_INSIDE);
615 add_rfstack(IS_BACK);
617 add_vwstack(
"start",
"depth", 0.0, 100.0);
618 add_vwstack(
"start",
"window", -0.1, 0.1, -0.1, 0.1);
619 add_vwstack(
"start",
"type", PERSPECTIVE);
664 char name_cam[FILENAME_MAX];
665 char name[FILENAME_MAX];
669 const char *scene_dir_ = scene_dir.c_str();
670 if (strlen(scene_dir_) >= FILENAME_MAX) {
674 strcpy(name_cam, scene_dir_);
675 strcat(name_cam,
"/camera.bnd");
678 if (strlen(obj) >= FILENAME_MAX) {
684 model = getExtension(obj);
685 if (model == BND_MODEL)
686 set_scene(name, &(this->
scene), 1.0);
687 else if (model == WRL_MODEL)
688 set_scene_wrl(name, &(this->
scene), 1.0);
689 else if (model == UNKNOWN_MODEL) {
693 add_rfstack(IS_BACK);
695 add_vwstack(
"start",
"depth", 0.0, 100.0);
696 add_vwstack(
"start",
"window", -0.1, 0.1, -0.1, 0.1);
697 add_vwstack(
"start",
"type", PERSPECTIVE);
745 u =
static_cast<double>(I.getWidth()) / (2 *
px_int);
746 v =
static_cast<double>(I.getHeight()) / (2 *
py_int);
749 u =
static_cast<double>(I.getWidth()) / (
vpMath::minimum(I.getWidth(), I.getHeight()));
750 v =
static_cast<double>(I.getHeight()) / (
vpMath::minimum(I.getWidth(), I.getHeight()));
753 float o44c[4][4], o44cd[4][4], x, y, z;
754 Matrix
id = IDENTITY_MATRIX;
756 vp2jlc_matrix(
cMo.inverse(), o44c);
757 vp2jlc_matrix(
cdMo.inverse(), o44cd);
768 if (I.display != NULL)
772 add_vwstack(
"start",
"cop", o44c[3][0], o44c[3][1], o44c[3][2]);
773 x = o44c[2][0] + o44c[3][0];
774 y = o44c[2][1] + o44c[3][1];
775 z = o44c[2][2] + o44c[3][2];
776 add_vwstack(
"start",
"vrp", x, y, z);
777 add_vwstack(
"start",
"vpn", o44c[2][0], o44c[2][1], o44c[2][2]);
778 add_vwstack(
"start",
"vup", o44c[1][0], o44c[1][1], o44c[1][2]);
779 add_vwstack(
"start",
"window", -u, u, -v, v);
783 add_vwstack(
"start",
"cop", o44cd[3][0], o44cd[3][1], o44cd[3][2]);
784 x = o44cd[2][0] + o44cd[3][0];
785 y = o44cd[2][1] + o44cd[3][1];
786 z = o44cd[2][2] + o44cd[3][2];
787 add_vwstack(
"start",
"vrp", x, y, z);
788 add_vwstack(
"start",
"vpn", o44cd[2][0], o44cd[2][1], o44cd[2][2]);
789 add_vwstack(
"start",
"vup", o44cd[1][0], o44cd[1][1], o44cd[1][2]);
790 add_vwstack(
"start",
"window", -u, u, -v, v);
811 bool changed =
false;
816 if (std::fabs(displacement[2][3]) >
817 std::numeric_limits<double>::epsilon() )
830 u =
static_cast<double>(I.getWidth()) / (2 *
px_ext);
831 v =
static_cast<double>(I.getHeight()) / (2 *
py_ext);
834 u =
static_cast<double>(I.getWidth()) / (
vpMath::minimum(I.getWidth(), I.getHeight()));
835 v =
static_cast<double>(I.getHeight()) / (
vpMath::minimum(I.getWidth(), I.getHeight()));
838 float w44o[4][4], w44cext[4][4], w44c[4][4], x, y, z;
840 vp2jlc_matrix(
camMf.inverse(), w44cext);
841 vp2jlc_matrix(
fMc, w44c);
842 vp2jlc_matrix(
fMo, w44o);
844 add_vwstack(
"start",
"cop", w44cext[3][0], w44cext[3][1], w44cext[3][2]);
845 x = w44cext[2][0] + w44cext[3][0];
846 y = w44cext[2][1] + w44cext[3][1];
847 z = w44cext[2][2] + w44cext[3][2];
848 add_vwstack(
"start",
"vrp", x, y, z);
849 add_vwstack(
"start",
"vpn", w44cext[2][0], w44cext[2][1], w44cext[2][2]);
850 add_vwstack(
"start",
"vup", w44cext[1][0], w44cext[1][1], w44cext[1][2]);
851 add_vwstack(
"start",
"window", -u, u, -v, v);
853 add_vwstack(
"start",
"type", PERSPECTIVE);
865 if (I.display != NULL)
885 std::list<vpHomogeneousMatrix>::const_iterator iter_poseList =
poseList.begin();
886 std::list<vpHomogeneousMatrix>::const_iterator iter_fMoList =
fMoList.begin();
888 while ((iter_poseList !=
poseList.end()) && (iter_fMoList !=
fMoList.end())) {
945 float w44o[4][4], w44cext[4][4], w44c[4][4], x, y, z;
955 u =
static_cast<double>(I.getWidth()) / (2 *
px_ext);
956 v =
static_cast<double>(I.getHeight()) / (2 *
py_ext);
959 u =
static_cast<double>(I.getWidth()) / (
vpMath::minimum(I.getWidth(), I.getHeight()));
960 v =
static_cast<double>(I.getHeight()) / (
vpMath::minimum(I.getWidth(), I.getHeight()));
963 vp2jlc_matrix(camMft.
inverse(), w44cext);
964 vp2jlc_matrix(
fMo *
cMo.inverse(), w44c);
965 vp2jlc_matrix(
fMo, w44o);
967 add_vwstack(
"start",
"cop", w44cext[3][0], w44cext[3][1], w44cext[3][2]);
968 x = w44cext[2][0] + w44cext[3][0];
969 y = w44cext[2][1] + w44cext[3][1];
970 z = w44cext[2][2] + w44cext[3][2];
971 add_vwstack(
"start",
"vrp", x, y, z);
972 add_vwstack(
"start",
"vpn", w44cext[2][0], w44cext[2][1], w44cext[2][2]);
973 add_vwstack(
"start",
"vup", w44cext[1][0], w44cext[1][1], w44cext[1][2]);
974 add_vwstack(
"start",
"window", -u, u, -v, v);
985 if (I.display != NULL)
1014 u =
static_cast<double>(I.getWidth()) / (2 *
px_int);
1015 v =
static_cast<double>(I.getHeight()) / (2 *
py_int);
1018 u =
static_cast<double>(I.getWidth()) / (
vpMath::minimum(I.getWidth(), I.getHeight()));
1019 v =
static_cast<double>(I.getHeight()) / (
vpMath::minimum(I.getWidth(), I.getHeight()));
1022 float o44c[4][4], o44cd[4][4], x, y, z;
1023 Matrix
id = IDENTITY_MATRIX;
1025 vp2jlc_matrix(
cMo.inverse(), o44c);
1026 vp2jlc_matrix(
cdMo.inverse(), o44cd);
1037 if (I.display != NULL)
1041 add_vwstack(
"start",
"cop", o44c[3][0], o44c[3][1], o44c[3][2]);
1042 x = o44c[2][0] + o44c[3][0];
1043 y = o44c[2][1] + o44c[3][1];
1044 z = o44c[2][2] + o44c[3][2];
1045 add_vwstack(
"start",
"vrp", x, y, z);
1046 add_vwstack(
"start",
"vpn", o44c[2][0], o44c[2][1], o44c[2][2]);
1047 add_vwstack(
"start",
"vup", o44c[1][0], o44c[1][1], o44c[1][2]);
1048 add_vwstack(
"start",
"window", -u, u, -v, v);
1052 add_vwstack(
"start",
"cop", o44cd[3][0], o44cd[3][1], o44cd[3][2]);
1053 x = o44cd[2][0] + o44cd[3][0];
1054 y = o44cd[2][1] + o44cd[3][1];
1055 z = o44cd[2][2] + o44cd[3][2];
1056 add_vwstack(
"start",
"vrp", x, y, z);
1057 add_vwstack(
"start",
"vpn", o44cd[2][0], o44cd[2][1], o44cd[2][2]);
1058 add_vwstack(
"start",
"vup", o44cd[1][0], o44cd[1][1], o44cd[1][2]);
1059 add_vwstack(
"start",
"window", -u, u, -v, v);
1080 bool changed =
false;
1085 if (std::fabs(displacement[2][3]) >
1086 std::numeric_limits<double>::epsilon() )
1099 u =
static_cast<double>(I.getWidth()) / (2 *
px_ext);
1100 v =
static_cast<double>(I.getHeight()) / (2 *
py_ext);
1103 u =
static_cast<double>(I.getWidth()) / (
vpMath::minimum(I.getWidth(), I.getHeight()));
1104 v =
static_cast<double>(I.getHeight()) / (
vpMath::minimum(I.getWidth(), I.getHeight()));
1107 float w44o[4][4], w44cext[4][4], w44c[4][4], x, y, z;
1109 vp2jlc_matrix(
camMf.inverse(), w44cext);
1110 vp2jlc_matrix(
fMc, w44c);
1111 vp2jlc_matrix(
fMo, w44o);
1113 add_vwstack(
"start",
"cop", w44cext[3][0], w44cext[3][1], w44cext[3][2]);
1114 x = w44cext[2][0] + w44cext[3][0];
1115 y = w44cext[2][1] + w44cext[3][1];
1116 z = w44cext[2][2] + w44cext[3][2];
1117 add_vwstack(
"start",
"vrp", x, y, z);
1118 add_vwstack(
"start",
"vpn", w44cext[2][0], w44cext[2][1], w44cext[2][2]);
1119 add_vwstack(
"start",
"vup", w44cext[1][0], w44cext[1][1], w44cext[1][2]);
1120 add_vwstack(
"start",
"window", -u, u, -v, v);
1121 if ((
object ==
CUBE) || (
object ==
SPHERE)) {
1122 add_vwstack(
"start",
"type", PERSPECTIVE);
1132 if (I.display != NULL)
1152 std::list<vpHomogeneousMatrix>::const_iterator iter_poseList =
poseList.begin();
1153 std::list<vpHomogeneousMatrix>::const_iterator iter_fMoList =
fMoList.begin();
1155 while ((iter_poseList !=
poseList.end()) && (iter_fMoList !=
fMoList.end())) {
1213 float w44o[4][4], w44cext[4][4], w44c[4][4], x, y, z;
1223 u =
static_cast<double>(I.getWidth()) / (2 *
px_ext);
1224 v =
static_cast<double>(I.getHeight()) / (2 *
py_ext);
1227 u =
static_cast<double>(I.getWidth()) / (
vpMath::minimum(I.getWidth(), I.getHeight()));
1228 v =
static_cast<double>(I.getHeight()) / (
vpMath::minimum(I.getWidth(), I.getHeight()));
1231 vp2jlc_matrix(camMft.
inverse(), w44cext);
1232 vp2jlc_matrix(
fMo *
cMo.inverse(), w44c);
1233 vp2jlc_matrix(
fMo, w44o);
1235 add_vwstack(
"start",
"cop", w44cext[3][0], w44cext[3][1], w44cext[3][2]);
1236 x = w44cext[2][0] + w44cext[3][0];
1237 y = w44cext[2][1] + w44cext[3][1];
1238 z = w44cext[2][2] + w44cext[3][2];
1239 add_vwstack(
"start",
"vrp", x, y, z);
1240 add_vwstack(
"start",
"vpn", w44cext[2][0], w44cext[2][1], w44cext[2][2]);
1241 add_vwstack(
"start",
"vup", w44cext[1][0], w44cext[1][1], w44cext[1][2]);
1242 add_vwstack(
"start",
"window", -u, u, -v, v);
1251 if (I.display != NULL)
1279 const std::list<vpHomogeneousMatrix> &list_cMo,
1280 const std::list<vpHomogeneousMatrix> &list_fMo,
1283 if (list_cMo.size() != list_fMo.size())
1290 std::list<vpHomogeneousMatrix>::const_iterator it_cMo = list_cMo.begin();
1291 std::list<vpHomogeneousMatrix>::const_iterator it_fMo = list_fMo.begin();
1293 while ((it_cMo != list_cMo.end()) && (it_fMo != list_fMo.end())) {
1326 const std::list<vpHomogeneousMatrix> &list_fMo,
1329 if (list_cMo.size() != list_fMo.size())
1336 std::list<vpHomogeneousMatrix>::const_iterator it_cMo = list_cMo.begin();
1337 std::list<vpHomogeneousMatrix>::const_iterator it_fMo = list_fMo.begin();
1339 while ((it_cMo != list_cMo.end()) && (it_fMo != list_fMo.end())) {
1362 bool clicked =
false;
1363 bool clickedUp =
false;
1411 double anglei = diffi * 360 / width;
1412 double anglej = diffj * 360 / width;
1422 mov.
buildFrom(0, 0, diffi * 0.01, 0, 0, 0);
1432 mov.
buildFrom(diffj * 0.01, diffi * 0.01, 0, 0, 0, 0);
1450 bool clicked =
false;
1451 bool clickedUp =
false;
1501 double anglei = diffi * 360 / width;
1502 double anglej = diffj * 360 / width;
1512 mov.
buildFrom(0, 0, diffi * 0.01, 0, 0, 0);
1522 mov.
buildFrom(diffj * 0.01, diffi * 0.01, 0, 0, 0, 0);
Class to define RGB colors available for display functionalities.
static bool getClick(const vpImage< unsigned char > &I, bool blocking=true)
static void display(const vpImage< unsigned char > &I)
static void displayLine(const vpImage< unsigned char > &I, const vpImagePoint &ip1, const vpImagePoint &ip2, const vpColor &color, unsigned int thickness=1, bool segment=true)
static bool getClickUp(const vpImage< unsigned char > &I, vpImagePoint &ip, vpMouseButton::vpMouseButtonType &button, bool blocking=true)
static void displayPoint(const vpImage< unsigned char > &I, const vpImagePoint &ip, const vpColor &color, unsigned int thickness=1)
static bool getPointerPosition(const vpImage< unsigned char > &I, vpImagePoint &ip)
error that can be emitted by ViSP classes.
@ notInitialized
Used to indicate that a parameter is not initialized.
@ dimensionError
Bad dimension.
@ memoryAllocationError
Memory allocation error.
void track(const vpHomogeneousMatrix &cMo)
Implementation of an homogeneous matrix and operations on such kind of matrices.
vpHomogeneousMatrix & buildFrom(const vpTranslationVector &t, const vpRotationMatrix &R)
vpHomogeneousMatrix inverse() const
Class that defines a 2D point in an image. This class is useful for image processing and stores only ...
Class which enables to project an image in the 3D space and get the view of a virtual camera.
void getImage(vpImage< unsigned char > &I, const vpCameraParameters &cam)
void setCameraPosition(const vpHomogeneousMatrix &cMt)
Definition of the vpImage class member functions.
static double rad(double deg)
static Type maximum(const Type &a, const Type &b)
static Type minimum(const Type &a, const Type &b)
static void convertPoint(const vpCameraParameters &cam, const double &x, const double &y, double &u, double &v)
Class that defines a 3D point in the object frame and allows forward projection of a 3D point in the ...
double get_y() const
Get the point y coordinate in the image plane.
double get_x() const
Get the point x coordinate in the image plane.
void setWorldCoordinates(double oX, double oY, double oZ)
vpSceneDesiredObject desiredObject
vpHomogeneousMatrix camMf2
@ D_CIRCLE
The object displayed at the desired position is a circle.
@ D_TOOL
A cylindrical tool is attached to the camera.
vpHomogeneousMatrix refMo
vpCameraParameters getInternalCameraParameters(const vpImage< unsigned char > &I) const
bool displayCameraTrajectory
void getInternalImage(vpImage< unsigned char > &I)
bool displayImageSimulator
void initScene(const vpSceneObject &obj, const vpSceneDesiredObject &desiredObject)
vpCameraTrajectoryDisplayType camTrajType
void display_scene(Matrix mat, Bound_scene &sc, const vpImage< vpRGBa > &I, const vpColor &color)
void displayTrajectory(const vpImage< unsigned char > &I, const std::list< vpHomogeneousMatrix > &list_cMo, const std::list< vpHomogeneousMatrix > &list_fMo, const vpHomogeneousMatrix &camMf)
vpCameraParameters getExternalCameraParameters(const vpImage< unsigned char > &I) const
vpHomogeneousMatrix camMf
std::list< vpImagePoint > cameraTrajectory
bool displayDesiredObject
std::list< vpHomogeneousMatrix > fMoList
virtual ~vpWireFrameSimulator()
std::list< vpImageSimulator > objectImage
vpImagePoint projectCameraTrajectory(const vpImage< vpRGBa > &I, const vpHomogeneousMatrix &cMo, const vpHomogeneousMatrix &fMo)
@ CIRCLE
A 10cm radius circle.
@ THREE_LINES
Three parallel lines with equation y=-5, y=0, y=5.
@ ROAD
Three parallel lines representing a road.
@ SPHERE
A 15cm radius sphere.
@ CUBE
A 12.5cm size cube.
@ TIRE
A tire represented by 2 circles with radius 10cm and 15cm.
@ CYLINDER
A cylinder of 80cm length and 10cm radius.
void getExternalImage(vpImage< unsigned char > &I)
vpHomogeneousMatrix navigation(const vpImage< vpRGBa > &I, bool &changed)
std::list< vpHomogeneousMatrix > poseList