2024.10.2 坐标变化 + 背包问题剩下的题

项目

学习

ros坐标变化

总结

有关ros坐标变换

坐标变换的背景:考虑这么一个场景,地面基地在用无人机跟拍一只鸟,那么现在无人机和基地分别构成了两个坐标系,那么基地想要知道鸟相对于基地的坐标要怎么做?
ROS中引入了 tf 这个包来做变换。
其中平移变换用tfs.transform.translation部分的内容:

tfs.header.stamp = ros::Time::now();
    tfs.header.frame_id = "base_link";  // 被参考的那个
    tfs.child_frame_id = "laser";
    tfs.transform.translation.x = 0.2;
    tfs.transform.translation.y = 0.0;
    tfs.transform.translation.z = 0.5;

而旋转变换用的是tfs.transform.rotation部分来描述:

tf2::Quaternion qtn;  // 可以自动将欧拉角(仰角等)转化为四元数
    qtn.setRPY(0, 0, 0);  // 欧拉角单位是弧度
    tfs.transform.rotation.x = qtn.getX();
    tfs.transform.rotation.y = qtn.getY();
    tfs.transform.rotation.z = qtn.getZ();
    tfs.transform.rotation.w = qtn.getW();

这里会将欧拉角转换为四元数,是为了避免一个叫做万向节死锁的问题,也就是欧拉角有时候会出现转向复杂无法表示的情况,但是四元数避免了这个问题。

tf中传递坐标消息用的是自己封装的geometry_msg消息,不是普通的msg类型的消息,它还将话题封装为/tf,只需要传入父坐标系,子坐标系,两个坐标系的变换关系(这是可以实时得到的)以及某个点相对于其中一个参考系得坐标就可以得到这个点相对于另一个参考系的坐标。

posted on 2024-10-02 20:19  Laurance  阅读(40)  评论(0)    收藏  举报