1.7 KiB
1.7 KiB
cpp_robot_tf2
ROS2 URDF + TF2 + JointState 演示包(C++)。属于 Level 1 基础机制第 5-6 块。
功能
joint_state_publisher_cpp: 周期性发布 3 关节(模拟正弦运动)到/joint_statestf2_listener_cpp: 订阅 TF,查询gripper在base_link下的位姿simple_arm.urdf: 3 关节 + gripper 链式机械臂模型
关键概念
| 概念 | 用途 |
|---|---|
sensor_msgs/JointState |
关节状态(name/position/velocity/effort) |
robot_state_publisher |
ROS2 系统包:URDF + /joint_states → /tf |
tf2_ros::Buffer + TransformListener |
TF 缓冲 + 监听 |
lookupTransform |
查 frame 间变换 |
URDF <joint type="revolute"> |
有限位转动关节 |
运行
# 一键启动(URDF + JointState + robot_state_publisher + TF listener)
ros2 launch cpp_robot_tf2 robot_tf2_launch.py
# 看 TF 树
ros2 run tf2_tools view_frames
# 实时查 gripper 在 base_link 下位姿
ros2 run tf2_ros tf2_echo base_link gripper
# 看 /tf 频率
ros2 topic hz /tf
测试
colcon test --packages-select cpp_robot_tf2
测试覆盖(在 test/test_tf2_lookup.cpp):
| 用例 | 内容 |
|---|---|
ConstructsWithDefaults |
节点名 + 默认参数 |
PublisherExistsOnJointStates |
publisher 已创建 |
TimerCreated |
定时器已创建 |
TimerCallbackPublishes |
spin 1s 不崩溃 |
深度学习
- 编程规范:
doc/CODING_STYLE.md§3 - TF2 深度:
doc/50-tf2.md - URDF 深度:
doc/60-urdf.md
进阶(下一阶段)
- 加
<transmission>标签 → 接入 ros2_control - 加
<gazebo>标签 → 接入 Gazebo 仿真 - 用 xacro 写参数化 URDF → 支持多种尺寸机械臂