Преобразование трехмерного облака точек - PullRequest
0 голосов
/ 06 января 2020

У меня есть система координат, в которой ось Z является вертикальной. Оси X и Y находятся в обычном правиле правого винта. У меня есть объект с его верхней поверхностью под углом к ​​вертикали. Угол является составным углом - это означает, что верхняя поверхность, которая в идеале должна быть параллельна плоскости XY, на самом деле не так. Мне нужно повернуть верхнюю поверхность, чтобы она была перпендикулярна оси Z. Я использую PCL 1.8 и использовал пример кода из двух уроков. Я использую код из сегментации модели плоскости, чтобы получить коэффициенты для верхней плоскости. Эти 4 плоских коэффициента модели представляют собой a, b, c и d в уравнении aX + bY + cZ + d = 0. Далее я пытаюсь использовать код из учебника «Использование матрицы для преобразования облака точек» для поворота облако точек, так что верхняя поверхность становится перпендикулярной оси Z. Мне не ясно, как go об этом. Поскольку мне нужно сделать верхнюю поверхность перпендикулярной оси Z, я думаю, мне не нужно беспокоиться о компоненте 'c'. Но я не уверен, как мне следует использовать два других компонента (а и б). Я не смог найти способ в PCL указать составной угол для преобразования облака точек. Я считаю, что можно использовать один угол:

Eigen::Affine3f transform_2 = Eigen::Affine3f::Identity();
transform_2(0, 0) = std::cos(theta);
transform_2(0, 1) = -sin(theta);
transform_2(1, 0) = sin(theta);
transform_2(1, 1) = std::cos(theta);
transform_2.rotate(Eigen::AngleAxisf(theta, Eigen::Vector3f::UnitX())); // Assuming the 'a' component is used

Любая помощь будет приветствоваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...