如何解决转换后获得新的机器人航向
让我们说我有2d个姿势(角度):
world_to_robot = {0,4,45} robot_to_object = {4,-4,-45}
从图中很容易看到:
world_to_object = {4,8,theta},theta有什么用? atan2(8,4)?如果该对象具有世界标题怎么办?
最终,这将需要以一种在代码中实现并可以与任何姿势列表一起使用的格式来完成。因此,对于C ++实现,我将是这样,
Eigen::Matrix<float,3,1> world_to_robot;
Eigen::Matrix<float,1> world_to_object;
Eigen::Matrix<float,1> robot_to_object;
// My omniscient poses below from my fake scenario
world_to_robot << 0,4,M_PI/2;
robot_to_object << 4,-4,-M_PI/4;
wold_to_object << 4,8,some_theta;
Eigen::Matrix<float,3> rotationM;
rotationM << cos(M_PI/2),-sin(M_PI/2),sin(M_PI/2,cos(M_PI/2),1;
Eigen::Matrix<float,1> robot_to_objectM;
robot_to_objectM << 4,1> calculated_world_to_object = rotationM*robot_to_objectM;
这将为我提供用于全局框架的对象正确的x和y姿势,但是θ将是什么?
然后可以说我有world_to_object和robot_to_object的场景。还要假设我知道world_to_object的theta,因为我们基于签名识别了对象,并且存在一个绝对姿势。我想计算world_to_robot。让我们使用与上面相同的姿势。
我知道要获得world_to_robot,我需要执行一个由world_to_object * object_to_robot组成的转换。我没有object_to_robot。我需要相反的robot_to_object,它不是正方形的。这是我在这种情况下所做的事情:
Eigen::Matrix<float,3> rotationM;
rotationM << cos(theta),-sin(theta),cos(theta),1; // What is theta? Just the world_to_object theta?
Eigen::Matrix<float,1> robot_to_objectM;
robot_to_objectM << -4,1; // Note: I inverted the signs for the translation
Eigen::Matrix<float,1> calculated_world_to_robot = rotationM*robot_to_objectM;
如果我将world_to_robot标题用作theta,这似乎给出了正确的新x和y姿势。但是,在某些情况下可能无法提前知道。那么我将如何正确获得theta值?另外,我知道新的机器人姿态必须为M_PI / 2,但是如何从我的最后一段代码中获得该姿态。通常,我会开始编写一堆“ atan2(y,x)”,但是在上面的代码实现中缺少关键的“ theta”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。