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) && (RS2_API_VERSION > ((2 * 10000) + (31 * 100) + 0))
16 #ifdef ENABLE_VISP_NAMESPACE
20 double opt_square_width = 0.12;
21 int opt_camera_index = 1;
23 for (
int i = 0; i < argc; i++) {
24 if (std::string(argv[i]) ==
"--camera_index" && i + 1 < argc) {
25 opt_camera_index = atoi(argv[i + 1]);
27 else if (std::string(argv[i]) ==
"--square_width" && i + 1 < argc) {
28 opt_square_width = atoi(argv[i + 1]);
30 else if (std::string(argv[i]) ==
"--help" || std::string(argv[i]) ==
"-h") {
31 std::cout <<
"\nUsage: " << argv[0] <<
" [--camera_index <1.Left | 2.Right> (default: 1)]"
32 <<
" [--square_width <square width in meter (default: 0.12)] [--help] [-h]\n"
33 <<
"\nExample using right camera and square size 0.1:\n"
34 <<
" " << argv[0] <<
"--camera_index 2 --square_width 0.1\n"
43 std::cout <<
"Use Realsense 2 grabber" << std::endl;
46 config.enable_stream(RS2_STREAM_FISHEYE, 1);
47 config.enable_stream(RS2_STREAM_FISHEYE, 2);
50 if (opt_camera_index == 1)
51 g.
acquire(&I,
nullptr,
nullptr);
53 g.
acquire(
nullptr, &I,
nullptr);
55 std::cout <<
"Read camera parameters from Realsense device" << std::endl;
61 std::cout <<
"Square width : " << opt_square_width << std::endl;
62 std::cout << cam << std::endl;
67 std::vector<vpDot2> dot(4);
68 std::vector<vpPoint> point;
69 std::vector<vpImagePoint> ip;
70 double L = opt_square_width / 2.;
71 point.push_back(
vpPoint(-L, -L, 0));
72 point.push_back(
vpPoint(L, -L, 0));
73 point.push_back(
vpPoint(L, L, 0));
74 point.push_back(
vpPoint(-L, L, 0));
76 #if defined(VISP_HAVE_X11)
78 #elif defined(VISP_HAVE_GDI)
80 #elif defined(HAVE_OPENCV_HIGHGUI)
85 bool apply_cv =
false;
91 if (opt_camera_index == 1)
92 g.
acquire(&I,
nullptr,
nullptr);
94 g.
acquire(
nullptr, &I,
nullptr);
99 ip = track(I, dot, init_cv);
100 computePose(point, ip, cam, init_cv, cMo);
107 std::stringstream ss;
108 ss <<
"Translation: " << std::setprecision(5) << pose[0] <<
" " << pose[1] <<
" " << pose[2] <<
" [m]";
111 ss <<
"Rotation tu: " << std::setprecision(4) <<
vpMath::deg(pose[3]) <<
" " <<
vpMath::deg(pose[4]) <<
" "
117 std::cout <<
"Computer vision failure." << std::endl;
139 std::stringstream ss;
147 std::cout <<
"Catch an exception: " << e.
getMessage() << std::endl;
149 #elif !defined(VISP_HAVE_REALSENSE2)
152 std::cout <<
"You do not realsense2 SDK functionality enabled..." << std::endl;
153 std::cout <<
"Tip:" << std::endl;
154 std::cout <<
"- Install librealsense2, configure again ViSP using cmake and build again this example" << std::endl;
156 #elif !(defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_OPENCV))
159 std::cout <<
"Install a 3rd party dedicated to image display (X11, GDI, OpenCV), configure and build ViSP again to "
162 #elif !(RS2_API_VERSION > ((2 * 10000) + (31 * 100) + 0))
165 std::cout <<
"Install librealsense version > 2.31.0" << std::endl;
Generic class defining intrinsic camera parameters.
@ ProjWithKannalaBrandtDistortion
Projection with Kannala-Brandt distortion model.
static const vpColor none
Display for windows using GDI (available on any windows 32 platform).
The vpDisplayOpenCV allows to display image using the OpenCV library. Thus to enable this class OpenC...
static bool getClick(const vpImage< unsigned char > &I, bool blocking=true)
static void display(const vpImage< unsigned char > &I)
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), const std::string &frameName="", const vpColor &textColor=vpColor::black, const vpImagePoint &textOffset=vpImagePoint(15, 15))
static void flush(const vpImage< unsigned char > &I)
static void displayText(const vpImage< unsigned char > &I, const vpImagePoint &ip, const std::string &s, const vpColor &color)
error that can be emitted by ViSP classes.
const char * getMessage() const
Implementation of an homogeneous matrix and operations on such kind of matrices.
unsigned int getWidth() const
static double deg(double rad)
Class that defines a 3D point in the object frame and allows forward projection of a 3D point in the ...
Implementation of a pose vector and operations on poses.
vpCameraParameters getCameraParameters(const rs2_stream &stream, vpCameraParameters::vpCameraParametersProjType type=vpCameraParameters::perspectiveProjWithDistortion, int index=-1) const
void acquire(vpImage< unsigned char > &grey, double *ts=nullptr)
bool open(const rs2::config &cfg=rs2::config())
VISP_EXPORT double measureTimeMs()