2 #include <visp3/core/vpConfig.h> 3 #ifdef VISP_HAVE_MODULE_SENSOR 4 #include <visp3/sensor/vpRealSense2.h> 6 #include <visp3/gui/vpDisplayGDI.h> 7 #include <visp3/gui/vpDisplayOpenCV.h> 8 #include <visp3/gui/vpDisplayX.h> 10 #include "pose_helper.h" 12 int main(
int argc,
char **argv)
14 #if (defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_OPENCV)) && \ 15 defined(VISP_HAVE_REALSENSE2) && \ 16 (RS2_API_VERSION > ((2 * 10000) + (31 * 100) + 0)) 18 double opt_square_width = 0.12;
19 int opt_camera_index = 1;
21 for (
int i = 0; i < argc; i++) {
22 if (std::string(argv[i]) ==
"--camera_index" && i + 1 < argc) {
23 opt_camera_index = atoi(argv[i + 1]);
24 }
else if(std::string(argv[i]) ==
"--square_width" && i + 1 < argc) {
25 opt_square_width = atoi(argv[i + 1]);
26 }
else if (std::string(argv[i]) ==
"--help" || std::string(argv[i]) ==
"-h") {
27 std::cout <<
"\nUsage: " << argv[0]
28 <<
" [--camera_index <1.Left | 2.Right> (default: 1)]" 29 <<
" [--square_width <square width in meter (default: 0.12)] [--help] [-h]\n" 30 <<
"\nExample using right camera and square size 0.1:\n" 31 <<
" " << argv[0] <<
"--camera_index 2 --square_width 0.1\n" 40 std::cout <<
"Use Realsense 2 grabber" << std::endl;
43 config.enable_stream(RS2_STREAM_FISHEYE, 1);
44 config.enable_stream(RS2_STREAM_FISHEYE, 2);
47 if(opt_camera_index == 1)
52 std::cout <<
"Read camera parameters from Realsense device" << std::endl;
57 std::cout <<
"Square width : " << opt_square_width << std::endl;
58 std::cout << cam << std::endl;
63 std::vector<vpDot2> dot(4);
64 std::vector<vpPoint> point;
65 std::vector<vpImagePoint> ip;
66 double L = opt_square_width / 2.;
67 point.push_back(
vpPoint(-L, -L, 0));
68 point.push_back(
vpPoint( L, -L, 0));
69 point.push_back(
vpPoint( L, L, 0));
70 point.push_back(
vpPoint(-L, L, 0));
72 #if defined(VISP_HAVE_X11) 74 #elif defined(VISP_HAVE_GDI) 76 #elif defined(VISP_HAVE_OPENCV) 81 bool apply_cv =
false;
87 if(opt_camera_index == 1)
95 ip = track(I, dot, init_cv);
96 computePose(point, ip, cam, init_cv, cMo);
103 std::stringstream ss;
104 ss <<
"Translation: " << std::setprecision(5) << pose[0] <<
" " << pose[1] <<
" " << pose[2] <<
" [m]";
112 std::cout <<
"Computer vision failure." << std::endl;
133 std::stringstream ss;
140 std::cout <<
"Catch an exception: " << e.
getMessage() << std::endl;
142 #elif !defined(VISP_HAVE_REALSENSE2) 143 (void)argc; (void)argv;
144 std::cout <<
"You do not realsense2 SDK functionality enabled..." << std::endl;
145 std::cout <<
"Tip:" << std::endl;
146 std::cout <<
"- Install librealsense2, configure again ViSP using cmake and build again this example" << std::endl;
148 #elif (VISP_CXX_STANDARD < VISP_CXX_STANDARD_11) 149 (void)argc; (void)argv;
150 std::cout <<
"You do not build ViSP with c++11 or higher compiler flag" << std::endl;
151 std::cout <<
"Tip:" << std::endl;
152 std::cout <<
"- Configure ViSP again using cmake -DUSE_CXX_STANDARD=11, and build again this example" << std::endl;
153 #elif !(defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_OPENCV)) 154 (void)argc; (void)argv;
155 std::cout <<
"Install a 3rd party dedicated to image display (X11, GDI, OpenCV), configure and build ViSP again to use this example" << std::endl;
156 #elif !(RS2_API_VERSION > ((2 * 10000) + (31 * 100) + 0)) 157 (void)argc; (void)argv;
158 std::cout <<
"Install librealsense version > 2.31.0" << std::endl;
static bool getClick(const vpImage< unsigned char > &I, bool blocking=true)
unsigned int getWidth() const
vpCameraParameters getCameraParameters(const rs2_stream &stream, vpCameraParameters::vpCameraParametersProjType type=vpCameraParameters::perspectiveProjWithDistortion, int index=-1) const
Implementation of an homogeneous matrix and operations on such kind of matrices.
Display for windows using GDI (available on any windows 32 platform).
static void displayText(const vpImage< unsigned char > &I, const vpImagePoint &ip, const std::string &s, const vpColor &color)
Use the X11 console to display images on unix-like OS. Thus to enable this class X11 should be instal...
static const vpColor none
error that can be emited by ViSP classes.
static void flush(const vpImage< unsigned char > &I)
bool open(const rs2::config &cfg=rs2::config())
VISP_EXPORT double measureTimeMs()
Class that defines a 3D point in the object frame and allows forward projection of a 3D point in the ...
static void display(const vpImage< unsigned char > &I)
The vpDisplayOpenCV allows to display image using the OpenCV library. Thus to enable this class OpenC...
Generic class defining intrinsic camera parameters.
static double deg(double rad)
static void displayFrame(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, double size, const vpColor &color=vpColor::none, unsigned int thickness=1, const vpImagePoint &offset=vpImagePoint(0, 0))
Implementation of a pose vector and operations on poses.
const char * getMessage() const
void acquire(vpImage< unsigned char > &grey, double *ts=NULL)