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.
|
|
5 days ago | |
|---|---|---|
| mock/tf_generator | 5 days ago | |
| README.md | 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 |
惯导到前视摄像头 |
示例——添加一个 world→imu 变换:
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 = 50Hz,200ms = 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