# cpp_robot_tf2 ROS2 URDF + TF2 + JointState 演示包(C++)。属于 Level 1 基础机制第 5-6 块。 ## 功能 - **`joint_state_publisher_cpp`**: 周期性发布 3 关节(模拟正弦运动)到 `/joint_states` - **`tf2_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 `` | 有限位转动关节 | ## 运行 ```bash # 一键启动(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 ``` ## 测试 ```bash colcon test --packages-select cpp_robot_tf2 ``` 测试覆盖(在 `test/test_tf2_lookup.cpp`): | 用例 | 内容 | |---|---| | `ConstructsWithDefaults` | 节点名 + 默认参数 | | `PublisherExistsOnJointStates` | publisher 已创建 | | `TimerCreated` | 定时器已创建 | | `TimerCallbackPublishes` | spin 1s 不崩溃 | ## 深度学习 - 编程规范:[`doc/CODING_STYLE.md`](../doc/CODING_STYLE.md) §3 - TF2 深度:[`doc/50-tf2.md`](../doc/50-tf2.md) - URDF 深度:[`doc/60-urdf.md`](../doc/60-urdf.md) ## 进阶(下一阶段) - 加 `` 标签 → 接入 ros2_control - 加 `` 标签 → 接入 Gazebo 仿真 - 用 xacro 写参数化 URDF → 支持多种尺寸机械臂