You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
alexha c73cb594a7
init mock of tf gen
5 days ago
mock/tf_generator init mock of tf gen 5 days ago
README.md init mock of tf gen 5 days ago

README.md

TfGenerator — 模拟 TF 数据生成组件

室内无 GNSS 环境下,向 /tf 通道发布虚拟坐标变换,解决下游定位补偿器等模块因收不到 TF 数据而报错的问题。

功能

  • 以固定频率(默认 10Hz/tf 发布 TransformStampeds 消息
  • 通过配置文件自定义坐标系对、平移及旋转值
  • 支持同时发布多个坐标变换
  • 无需 GNSS/硬件依赖

文件结构

modules/mock/tf_generator/
├── BUILD                  # Bazel 构建规则
├── cyberfile.xml          # NEO 包定义
├── README.md
├── tf_generator.h         # 组件头文件
├── tf_generator.cc        # 组件实现
├── proto/
│   ├── BUILD
│   └── tf_generator.proto # 配置消息定义
├── conf/
│   ├── tf_generator.pb.txt # 默认变换配置
│   └── tf_generator.conf   # gflag 配置
├── dag/
│   └── tf_generator.dag    # DAG 定时器配置
└── launch/
    └── tf_generator.launch  # 启动文件

使用步骤

1. 进入 Docker 容器

aem enter

2. 编译模块

buildtool build -p modules/mock/tf_generator/

3. 启动组件

方式一mainboard 直接加载 DAG

mainboard -d modules/mock/tf_generator/dag/tf_generator.dag

方式二cyber_launch

cyber_launch start modules/mock/tf_generator/launch/tf_generator.launch

4. 验证数据

# 查看 /tf 通道消息
cyber_channel echo /tf

# 用 cyber_monitor 交互式查看
cyber_monitor

配置说明

坐标系变换配置(conf/tf_generator.pb.txt

编辑此文件,配置需要模拟发布的坐标变换对。默认配置包含:

frame_id child_frame_id 用途
localization novatel 定位参考系到惯导
novatel velodyne64 惯导到激光雷达
novatel front_6mm 惯导到前视摄像头

示例——添加一个 worldimu 变换:

transform {
    frame_id: "world"
    child_frame_id: "imu"
    translation_x: 0.0
    translation_y: 0.0
    translation_z: 0.0
    rotation_qx: 0.0
    rotation_qy: 0.0
    rotation_qz: 0.0
    rotation_qw: 1.0
}

rotation_qw 默认为 1.0(单位四元数,即无旋转),可省略。

发布频率配置(dag/tf_generator.dag

interval: 100    # 单位毫秒100ms = 10Hz

修改 interval 值即可调整频率。例如 20ms = 50Hz200ms = 5Hz。

Topic 配置(conf/tf_generator.conf

--tf_topic=/tf

如需改到其他通道(避免与现有模块冲突),修改此文件或通过命令行覆盖:

mainboard -d modules/mock/tf_generator/dag/tf_generator.dag --tf_topic=/tf_mock

工作原理

组件继承 cyber::TimerComponent

  • Init() — 加载配置,创建 Writer 绑定到指定 topic
  • Proc() — 每次定时触发时,构造 TransformStampeds 消息并发布

DAG 中的 interval 参数控制定时触发间隔。

常见问题

帧率高于预期

检查是否已有其他模块在向同一 topic 发数据。可用以下命令排查:

# 查看 /tf 通道上的所有 Writer
cyber_monitor

若存在多个发布者,建议将组件的 tf_topic 改为独立的通道名。

编译失败

确认已进入 Docker 容器(aem enter),且依赖的 proto 库已编译:

buildtool build -p modules/common_msgs/transform_msgs/

注意配合 gnss_conf.pb 文件的配置

tf { frame_id: "world" child_frame_id: "imu" enable: true } use_gnss_time: true