ROS学习第二十二节——坐标系关系查看

在机器人系统中,涉及的坐标系有多个,为了方便查看,ros 提供了专门的工具,可以用于生成显示坐标系关系的 pdf 文件,该文件包含树形结构的坐标系图谱。

1.准备

首先调用rospack find tf2_tools查看是否包含该功能包,如果没有,请使用如下命令安装:

sudo apt install ros-noetic-tf2-tools

 

2.使用

2.1生成 pdf 文件

启动坐标系广播程序之后,运行如下命令:

rosrun tf2_tools view_frames.py

会产生类似于下面的日志信息:

[INFO] [1592920556.827549]: Listening to tf data during 5 seconds...
[INFO] [1592920561.841536]: Generating graph in frames.pdf file...

查看当前目录会生成一个 frames.pdf 文件

2.2查看文件

可以直接进入目录打开文件,或者调用命令查看文件:evince frames.pdf

内如如图所示:


另请参考:

ROS中,坐标系坐标系之间的变换是通过tf(transform)包来实现的。tf包提供了一种方便的方式来管理坐标系之间的关系,并且能够自动地计算出不同坐标系之间的变换。下面是一个简单的例子,演示如何通过tf来实现坐标系之间的变换。 假设我们有两个坐标系,分别为`/world`和`/robot_base`,我们想要将`/robot_base`坐标系中的一个点`(x, y, z)`变换到`/world`坐标系中。我们可以按照以下步骤进行: 1. 创建一个`tf::Transform`对象,表示`/robot_base`坐标系相对于`/world`坐标系的变换。 ```cpp tf::Transform transform; transform.setOrigin(tf::Vector3(x, y, z)); // 设置变换的平移部分 transform.setRotation(tf::Quaternion(0, 0, 0, 1)); // 设置变换的旋转部分 ``` 2. 发布`/robot_base`坐标系相对于`/world`坐标系的变换。 ```cpp static tf::TransformBroadcaster br; br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "/world", "/robot_base")); ``` 3. 在需要使用变换后的点的点中,通过tf监听器(tf listener)获取变换后的点。 ```cpp tf::TransformListener listener; tf::StampedTransform transform; listener.waitForTransform("/world", "/robot_base", ros::Time(0), ros::Duration(1.0)); // 等待获取变换信息 listener.lookupTransform("/world", "/robot_base", ros::Time(0), transform); // 获取变换信息 tf::Vector3 point(x, y, z); tf::Vector3 transformed_point = transform * point; // 计算变换后的点 ``` 通过以上步骤,我们就可以将`/robot_base`坐标系中的点`(x, y, z)`变换到`/world`坐标系中了。需要注意的是,tf的变换是从目标坐标系到源坐标系的变换,因此在发布变换信息时,需要指定目标坐标系和源坐标系的名称。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值