一、环境准备
-
安装 ROS 与相关功能包
# 以ROS2 Humble为例 sudo apt install ros-humble-navigation2 ros-humble-nav2-bringup
-
准备机器人模型(URDF/XACRO)
确保已定义机器人的 URDF 模型,包含传感器和关节信息。 -
配置导航参数
创建导航参数文件(如nav2_params.yaml
),设置地图、代价地图、规划器等参数。
二、启动导航系统与 RViz
-
启动导航栈
ros2 launch nav2_bringup navigation_launch.py use_sim_time:=true params_file:=/path/to/nav2_params.yaml
-
启动 RViz 并加载配置
ros2 run rviz2 rviz2 -d $(ros2 pkg prefix nav2_bringup)/share/nav2_bringup/rviz/nav2_default_view.rviz
三、配置 RViz 显示元素
-
添加机器人模型
- 在 Displays 面板点击
Add
- 选择
RobotModel
- 确认
Description Topic
指向机器人 URDF 描述(通常为robot_description
)
- 在 Displays 面板点击
-
添加地图显示
- 添加
Map
显示 - 设置
Topic
为地图话题(如/map
) - 调整颜色和透明度以获得最佳视觉效果
- 添加
-
添加路径显示
- 添加
Path
显示 - 设置
Topic
为全局路径(如/plan
)或局部路径(如/local_plan
) - 调整路径颜色和宽度
- 添加
-
添加代价地图显示(可选)
- 添加
OccupancyGrid
显示 - 设置
Topic
为全局代价地图(如/global_costmap/costmap
) - 选择合适的颜色方案
- 添加
四、发送目标点并观察路径
-
设置初始位姿
- 点击 RViz 工具栏中的
2D Pose Estimate
按钮 - 在地图上点击并拖动,设置机器人初始位置和朝向
- 点击 RViz 工具栏中的
-
发送导航目标
- 点击 RViz 工具栏中的
2D Nav Goal
按钮 - 在地图上点击并拖动,设置目标位置和朝向
- 观察导航系统生成的路径:
- 蓝色线条:全局规划路径
- 绿色线条:局部规划路径
- 点击 RViz 工具栏中的
五、高级可视化设置
-
自定义路径样式
- 在 Path 显示的属性面板中:
- 修改
Color
和Alpha
调整路径颜色和透明度 - 设置
Line Width
改变路径粗细
- 修改
- 在 Path 显示的属性面板中:
-
添加轨迹点标记
- 添加
MarkerArray
显示 - 设置
Topic
为轨迹点话题(如/particlecloud
) - 可视化粒子滤波或采样点
- 添加
-
保存 RViz 配置
File > Save Config As...
下次启动时直接加载该配置文件。
六、故障排除
-
路径不显示
- 检查话题名称是否正确
- 确认导航系统正常运行(检查终端输出)
- 检查 TF 树是否完整(使用
tf2_tools view_frames
生成坐标系关系图)
-
显示延迟或卡顿
- 降低点云密度或图像分辨率
- 关闭不必要的显示元素
- 检查系统资源使用情况
七、与导航算法集成示例
以下是一个简单的 Python 节点示例,用于发布自定义路径供 RViz 显示:
import rclpy
from rclpy.node import Node
from nav_msgs.msg import Path
from geometry_msgs.msg import PoseStamped
class PathVisualizer(Node):
def __init__(self):
super().__init__('path_visualizer')
self.path_pub = self.create_publisher(Path, 'custom_path', 10)
timer_period = 1.0 # 每秒发布一次
self.timer = self.create_timer(timer_period, self.timer_callback)
def timer_callback(self):
path_msg = Path()
path_msg.header.frame_id = 'map'
path_msg.header.stamp = self.get_clock().now().to_msg()
# 创建一个简单的方形路径
poses = []
points = [(0,0), (1,0), (1,1), (0,1), (0,0)]
for x, y in points:
pose = PoseStamped()
pose.header = path_msg.header
pose.pose.position.x = x
pose.pose.position.y = y
pose.pose.orientation.w = 1.0
poses.append(pose)
path_msg.poses = poses
self.path_pub.publish(path_msg)
self.get_logger().info('Published path with {} points'.format(len(poses)))
def main(args=None):
rclpy.init(args=args)
path_visualizer = PathVisualizer()
rclpy.spin(path_visualizer)
path_visualizer.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
运行此节点后,在 RViz 中添加Path
显示并设置话题为custom_path
即可看到方形路径。
通过以上步骤,你可以全面掌握使用 RViz 进行机器人路径规划可视化的方法,包括基本配置、高级设置和自定义开发。