5.3.1 坐标系广播案例以及分析

1.案例需求

案例1:现有一无人车,在无人车底盘上装有固定式的雷达与摄像头,已知车辆底盘、雷达与摄像头各对应一坐标系,各坐标系的原点取其几何中心。现又已知雷达坐标系相对于底盘坐标系的三维平移量分别为:x方向0.4米,y方向0米,z方向0.2米,无旋转。摄像头坐标系相对于底盘坐标系的三维平移量分别为:x方向-0.5米,y方向0米,z方向0.4米,无旋转。请广播雷达与底盘的坐标系相对关系,摄像头与底盘的坐标系相对关系,并在 rviz2 中查看广播的结果。

案例2:启动 turtlesim_node,设该节点中窗体有一个世界坐标系(左下角为坐标系原点),乌龟是另一个坐标系,乌龟可以通过键盘控制运动,请动态发布乌龟坐标系与世界坐标系的相对关系。

2.案例分析

在上述案例中,案例1需要使用到静态坐标变换,案例2则需要使用动态坐标变换,不论无论何种实现关注的要素都有两个:

  1. 如何广播坐标系相对关系;
  2. 如何使用 rviz2 显示坐标系相对关系。

3.流程简介

以编码的实现实现静态或动态坐标变换的流程类似,主要步骤如下:

  1. 编写广播实现;
  2. 编辑配置文件;
  3. 编译;
  4. 执行;
  5. 在 rviz2 中查看坐标系关系。

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

另外:需要说明的是,静态广播器除了可以以编码的方式实现外,在 tf2 中还内置了相关工具,可以无需编码,直接执行节点并传入表示坐标系相对关系的参数,即可实现静态坐标系关系的发布。而动态广播器没有提供类似的工具。

4.准备工作

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

ros2 pkg create cpp03_tf_broadcaster --build-type ament_cmake --dependencies rclcpp tf2 tf2_ros geometry_msgs turtlesim
ros2 pkg create py03_tf_broadcaster --build-type ament_python --dependencies rclpy tf_transformations tf2_ros geometry_msgs turtlesim

results matching ""

    No results matching ""