36#include <visp3/core/vpConfig.h>
38#if defined(VISP_HAVE_CATCH2)
39#define CATCH_CONFIG_ENABLE_BENCHMARKING
40#define CATCH_CONFIG_RUNNER
45#include <visp3/core/vpIoTools.h>
46#include <visp3/io/vpImageIo.h>
47#include <visp3/mbt/vpMbGenericTracker.h>
51#include <visp3/gui/vpDisplayX.h>
58#if VISP_HAVE_DATASET_VERSION >= 0x030600
59 std::string ext(
"png");
61 std::string ext(
"pgm");
66 char buffer[FILENAME_MAX];
67 snprintf(buffer, FILENAME_MAX, ipath.c_str(), cpt);
68 std::string image_filename = buffer;
80 for (
unsigned int i = 0; i < 3; i++) {
81 for (
unsigned int j = 0; j < 4; j++) {
82 CHECK(cMo1[i][j] == Approx(cMo2[i][j]).epsilon(std::numeric_limits<double>::epsilon()));
92 const bool verbose =
false;
98 const vpPoseVector initPose(0.02231950571, 0.1071368004, 0.5071128378, 2.100485509, 1.146812236, -0.4560126437);
105TEST_CASE(
"Check MBT determinism sequential",
"[MBT_determinism]")
110 configureTracker(tracker1, cam);
119 for (
int cpt = 0; read_data(cpt, I); cpt++) {
130 std::cout <<
"First tracker, final cMo:\n" << cMo1 << std::endl;
134 configureTracker(tracker2, cam);
136 for (
int cpt = 0; read_data(cpt, I); cpt++) {
147 std::cout <<
"Second tracker, final cMo:\n" << cMo2 << std::endl;
150 checkPoses(cMo1, cMo2);
153TEST_CASE(
"Check MBT determinism parallel",
"[MBT_determinism]")
156 std::future<vpHomogeneousMatrix> res_cMo1 = std::async(std::launch::async, []() {
159 configureTracker(tracker1, cam);
163 for (
int cpt = 0; read_data(cpt, I); cpt++) {
171 std::future<vpHomogeneousMatrix> res_cMo2 = std::async(std::launch::async, []() {
174 configureTracker(tracker2, cam);
178 for (
int cpt = 0; read_data(cpt, I); cpt++) {
187 std::cout <<
"Run both trackers in separate threads" << std::endl;
188 std::cout <<
"First tracker, final cMo:\n" << cMo1 << std::endl;
189 std::cout <<
"Second tracker, final cMo:\n" << cMo2 << std::endl;
192 checkPoses(cMo1, cMo2);
195TEST_CASE(
"Check Stereo MBT determinism parallel",
"[MBT_determinism]")
198 std::future<vpHomogeneousMatrix> res_cMo1 = std::async(std::launch::async, []() {
201 configureTracker(tracker1, cam);
205 for (
int cpt = 0; read_data(cpt, I); cpt++) {
206 tracker1.
track(I, I);
213 std::future<vpHomogeneousMatrix> res_cMo2 = std::async(std::launch::async, []() {
216 configureTracker(tracker2, cam);
220 for (
int cpt = 0; read_data(cpt, I); cpt++) {
221 tracker2.
track(I, I);
229 std::cout <<
"Run both stereo trackers in separate threads" << std::endl;
230 std::cout <<
"First tracker, final cMo:\n" << cMo1 << std::endl;
231 std::cout <<
"Second tracker, final cMo:\n" << cMo2 << std::endl;
234 checkPoses(cMo1, cMo2);
237int main(
int argc,
char *argv[])
239 Catch::Session session;
242 session.applyCommandLine(argc, argv);
244 int numFailed = session.run();
254int main() {
return EXIT_SUCCESS; }
Generic class defining intrinsic camera parameters.
static const vpColor none
Use the X11 console to display images on unix-like OS. Thus to enable this class X11 should be instal...
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)
Implementation of an homogeneous matrix and operations on such kind of matrices.
static void read(vpImage< unsigned char > &I, const std::string &filename, int backend=IO_DEFAULT_BACKEND)
Definition of the vpImage class member functions.
Real-time 6D object pose tracking using its CAD model.
virtual void getPose(vpHomogeneousMatrix &cMo) const
virtual void setDisplayFeatures(bool displayF)
virtual void initFromPose(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo)
virtual void getCameraParameters(vpCameraParameters &camera) const
virtual void loadConfigFile(const std::string &configFile, bool verbose=true)
virtual void loadModel(const std::string &modelFile, bool verbose=false, const vpHomogeneousMatrix &T=vpHomogeneousMatrix())
virtual void display(const vpImage< unsigned char > &I, const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, const vpColor &col, unsigned int thickness=1, bool displayFullModel=false)
virtual void track(const vpImage< unsigned char > &I)
Implementation of a pose vector and operations on poses.