欢迎光临散文网 会员登陆 & 注册

5.4 坐标变换监听

2023-10-25 10:24 作者:猛狮集训营  | 我要投稿

5.4 坐标变换监听

监听可以实现坐标点在不同坐标系之间的变换,或者不同坐标系之间的变换。当然,前提是必须要广播不同坐标系关系,而至于是静态广播或动态广播则无要求。

5.4.1 坐标系变换案例以及分析

1.案例需求

案例1:5.3 坐标变换广播中发布了laser相对于base_link和camra相对于base_link的坐标系关系,请求解laser相对于camera的坐标系关系。

案例2:5.3 坐标变换广播中发布了laser相对于base_link的坐标系关系且发布了laser坐标系下的障碍物的坐标点数据,请求解base_link坐标系下该障碍物的坐标。

2.案例分析

在上述案例中,案例1是多坐标系的场景下实现不同坐标系之间的变换,案例2则是要实现同一坐标点在不同坐标系下的变换,虽然需求不同,但是相关算法都被封装好了,我们只需要调用相关 API 即可。

3.流程简介

两个案例的实现流程类似,主要步骤如下:

  1. 编写坐标变换程序实现;

  2. 编辑配置文件;

  3. 编译;

  4. 执行。

案例我们会采用 C++ 和 Python 分别实现,二者都遵循上述实现流程。

4.准备工作

终端下进入工作空间的src目录,调用如下两条命令分别创建C++功能包和Python功能包。

ros2 pkg create cpp04_tf_listener --build-type ament_cmake --dependencies rclcpp tf2 tf2_ros geometry_msgs 

ros2 pkg create py04_tf_listener --build-type ament_python --dependencies rclpy tf_transformations tf2_ros geometry_msgs

5.4.2 坐标系变换(C++)

1.坐标系变换实现

功能包 cpp04_tf_listener 的 src 目录下,新建 C++ 文件 demo01_tf_listener.cpp,并编辑文件,输入如下内容:


在创建功能包时,所依赖的功能包已经自动配置了,配置内容如下:

2.CMakeLists.txt

CMakeLists.txt 中发布和订阅程序核心配置如下:

3.编译

终端中进入当前工作空间,编译功能包:

4.执行

当前工作空间下,启动三个终端,终端1输入如下命令发布雷达(laser)相对于底盘(base_link)的静态坐标变换:

5.4.3 坐标系变换(Python)

1.坐标系变换实现

功能包 py04_tf_listener 的 py04_tf_listener 目录下,新建 Python 文件 demo01_tf_listener_py.py,并编辑文件,输入如下内容:

2.编辑配置文件

1.package.xml

在创建功能包时,所依赖的功能包已经自动配置了,配置内容如下:

2.setup.py

entry_points字段的console_scripts中添加如下内容:

3.编译

终端中进入当前工作空间,编译功能包:

4.执行

当前工作空间下,启动两个终端,终端1输入如下命令发布雷达(laser)相对于底盘(base_link)的静态坐标变换:

5.4.4 坐标点变换(C++)

1.坐标点变换实现

功能包 cpp04_tf_listener 的 src 目录下,新建 C++ 文件 demo02_message_filter.cpp,并编辑文件,输入如下内容:

在创建功能包时,所依赖的部分功能包已经自动配置了,不过为了实现坐标点变换,还需要添加依赖包tf2_geometry_msgs

message_filters,修改后的配置内容如下:

2.CMakeLists.txt

CMakeLists.txt 文件修改后的内容如下:

3.编译

终端中进入当前工作空间,编译功能包:

colcon build --packages-select cpp04_tf_listener

5.4.5 坐标点变换(Python)

暂无。

B站有完整的ros系列教程视频,可以观看完整内容ros课程ROS2理论与实践

更多内容将在猛狮知识星球社区更新最新课程,后续将推出更多优质内容——详情可关注猛狮集训营公众号和猛狮集训营官方网站。

5.4 坐标变换监听的评论 (共 条)

分享到微博请遵守国家法律