# 列出所有已安装包
ros2 pkg list
# 查找包含关键字的包
ros2 pkg list | grep nav2
# 查看包的安装路径
ros2 pkg prefix nav2_controller
# 列出包的可执行文件
ros2 pkg executables nav2_controller
# 查看包的XML描述
ros2 pkg xml my_package
# 创建新包
ros2 pkg create my_new_pkg --build-type ament_python --dependencies rclpy std_msgs
# 构建包
colcon build --packages-select my_new_pkg
# 运行包中的节点
ros2 run my_new_pkg my_node
# ====== 列出话题 ======
ros2 topic list
ros2 topic list -t # 显示类型
# ====== 查看话题信息 ======
ros2 topic info /scan
ros2 topic info /scan -v # 详细信息(含QoS)
# ====== 查看话题数据 ======
ros2 topic echo /scan # 实时查看
ros2 topic echo /scan --once # 只看一条
ros2 topic echo /scan --field ranges # 只看ranges字段
ros2 topic echo /scan --no-arr # 不展开数组
ros2 topic echo /cmd_vel --filter "linear.x > 0.1" # 过滤
# ====== 测量话题性能 ======
ros2 topic hz /scan # 发布频率
ros2 topic hz /scan --window 100 # 100条滑动窗口
ros2 topic bw /scan # 带宽使用
ros2 topic delay /scan # 消息延迟
# ====== 发布消息 ======
ros2 topic pub /cmd_vel geometry_msgs/msg/Twist \
"{linear: {x: 0.5, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.3}}"
ros2 topic pub --once /trigger std_msgs/msg/Bool "{data: true}"
ros2 topic pub --rate 10 /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.5}}"
# ====== 查看消息类型 ======
ros2 topic type /scan
ros2 topic find sensor_msgs/msg/LaserScan # 查找使用此类型的话题
# 列出所有服务
ros2 service list
# 查看服务类型
ros2 service type /enable_robot
# 查找使用某类型的服务
ros2 service find example_interfaces/srv/SetBool
# 调用服务
ros2 service call /enable_robot example_interfaces/srv/SetBool "{data: true}"
ros2 service call /get_status std_srvs/srv/Trigger "{}"
# 查看接口定义
ros2 interface show example_interfaces/srv/SetBool
# 列出所有Action
ros2 action list
# 查看Action信息
ros2 action info /navigate_to_pose
# 查看Action类型
ros2 action type /navigate_to_pose
# 发送Action目标
ros2 action send_goal /navigate_to_pose nav2_msgs/action/NavigateToPose \
"{pose: {header: {frame_id: 'map'}, pose: {position: {x: 2.0, y: 1.0}}}}"
# 发送目标并显示反馈
ros2 action send_goal --feedback /navigate_to_pose nav2_msgs/action/NavigateToPose \
"{pose: {header: {frame_id: 'map'}, pose: {position: {x: 2.0}}}}"
# 列出节点参数
ros2 param list /my_node
# 获取参数值
ros2 param get /my_node kp
# 设置参数值
ros2 param set /my_node kp 2.5
# 查看参数描述
ros2 param describe /my_node kp
# 导出参数到YAML
ros2 param dump /my_node
# 从YAML加载参数
ros2 param load /my_node params.yaml
# 列出活跃节点
ros2 node list
# 查看节点详细信息(话题/服务/动作/参数)
ros2 node info /my_node
# 查看节点接口描述
ros2 node describe /my_node
# 列出所有消息类型
ros2 interface list
ros2 interface list | grep msg # 只看消息
ros2 interface list | grep srv # 只看服务
ros2 interface list | grep action # 只看Action
# 查看接口定义
ros2 interface show sensor_msgs/msg/LaserScan
ros2 interface show example_interfaces/srv/SetBool
ros2 interface show nav2_msgs/action/NavigateToPose
# 查看包中的接口
ros2 interface package sensor_msgs
# 回显消息
ros2 interface proto sensor_msgs/msg/LaserScan
# 运行系统检查
ros2 doctor
# 详细报告
ros2 doctor --report
# 检查特定类别
ros2 doctor --category network
ros2 doctor --category dds
# 获取当前状态
ros2 lifecycle get /my_lifecycle_node
# 列出可用转换
ros2 lifecycle list /my_lifecycle_node
# 触发转换
ros2 lifecycle set /my_lifecycle_node configure
ros2 lifecycle set /my_lifecycle_node activate
ros2 lifecycle set /my_lifecycle_node deactivate
ros2 lifecycle set /my_lifecycle_node cleanup
# 查看节点类型
ros2 lifecycle nodes
# Step 1: 检查节点是否运行
ros2 node list
# Step 2: 检查话题是否存在
ros2 topic list
# Step 3: 查看话题数据
ros2 topic echo /scan --once
# Step 4: 检查话题频率
ros2 topic hz /scan
# Step 5: 检查节点连接
ros2 topic info /scan -v
# Step 6: 检查QoS是否匹配
# 如果Publisher是RELIABLE但Subscriber是BEST_EFFORT,不会连接
# Step 7: 检查服务
ros2 service list
ros2 service type /my_service
# Step 8: 检查参数
ros2 param list /my_node
# Step 9: 系统诊断
ros2 doctor --report
# 查看所有活跃话题的频率
for topic in $(ros2 topic list); do
echo "=== $topic ==="
timeout 3 ros2 topic hz "$topic" 2>&1 | tail -1
done
# 查看所有节点的参数
for node in $(ros2 node list); do
echo "=== $node ==="
ros2 param list "$node"
done
# 快速测试话题发布
ros2 topic pub --once /test std_msgs/msg/String "{data: 'hello'}"
# 监控特定节点的日志
ros2 topic echo /rosout --filter "name == '/my_node'"
启动多个节点后,使用 ros2 doctor 检查系统健康状态,解读报告内容。
故意创建一个QoS不匹配的情况(Publisher用RELIABLE,Subscriber用BEST_EFFORT),用CLI工具诊断为什么没有数据传输。
编写Bash脚本,自动检查指定话题的频率是否在合理范围内,超出阈值时报警。
经验值:+150 XP