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.流程简介
两个案例的实现流程类似,主要步骤如下:
- 编写坐标变换程序实现;
- 编辑配置文件;
- 编译;
- 执行。
案例我们会采用 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