Как связать позу с маркерами aruco? - PullRequest
0 голосов
/ 06 февраля 2019

Я разрабатываю приложение для оценки поз с библиотеками OpenCV и ArUco.В моей сцене есть два маркера, скажем, A и B. Я знаю позу (tvec и rvec) A и B, поэтому поза относительно камеры.

Я хочу знатьпоза B относительно A. Я знаю, что OpenCV обеспечивает cv::Rodrigues, и я пытался использовать его, но я думаю, что у меня нет теории.Вот что я попробовал:

        [...]

        cv::Rodrigues(rvecs[0], R1_rodriguez);
        cv::Rodrigues(rvecs[1], R2_rodriguez);

        cv::Mat R1 = R1_rodriguez;
        cv::Mat R2 = R2_rodriguez;

        cv::Mat M1 = (cv::Mat_<double>(4,4) <<
                   R1.at<double>(0,0),R1.at<double>(0,1),R1.at<double>(0,2),tvecs[0][0],R1.at<double>(1,0),R1.at<double>(1,1),R1.at<double>(1,2),tvecs[0][1],R1.at<double>(2,0),R1.at<double>(2,1),R1.at<double>(2,2),tvecs[0][2],0.0,0.0,0.0,1.0);

        cv::Mat M2 = (cv::Mat_<double>(4,4) <<
                      R2.at<double>(0,0),R2.at<double>(0,1),R2.at<double>(0,2),tvecs[1][0],R2.at<double>(1,0),R2.at<double>(1,1),R2.at<double>(1,2),tvecs[1][1],R2.at<double>(2,0),R2.at<double>(2,1),R2.at<double>(2,2),tvecs[1][2],0.0,0.0,0.0,1.0);
        cv::Mat M1_inv = M1.inv();

        cv::Mat M2inM1 = M1_inv*M2;

Итак, мой вопрос: как я могу "сопоставить" B с A, так как я могу узнать позу B относительно A (зная позу в кадре камеры)?Другими словами, я представляю А как (0,0,0) и хочу знать позу (так что перевод и вращение) Б. Спасибо заранее.

1 Ответ

0 голосов
/ 06 февраля 2019

, если вы уже установили свои мировые координаты и знаете позу (rvec & tvec) родственников A и B в выбранной вами мировой системе координат.Например: вы знаете все 3 угла поворота и вектор перевода в x, y, z для A и B из мировой системы координат.

Тогда, на мой взгляд, все, что вам нужно сделать, это перейти кполученные данные позы путем вычитания / добавления (в зависимости от случая) позы A и B для получения относительной позы.

...