本文基于 Ubuntu 22.04 系统,包含 ROS2 环境部署、模拟数据发布、可视化工具连接全流程,命令可直接复制执行。
一、环境准备:安装 ROS2 Humble
Humble 为 LTS 长期支持版,稳定性最优,逐行执行以下命令:
- 安装依赖与配置软件源
bash
# 安装基础依赖
sudo apt update && sudo apt install curl gnupg lsb-release -y
# 添加 ROS2 官方密钥
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdist/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
# 添加 ROS2 软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
- 安装 ROS2 核心包
bash
sudo apt update
sudo apt install ros-humble-desktop -y
sudo apt install ros-humble-rosbag2 ros-humble-rviz2 -y
- 配置环境变量(永久生效)
bash
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
- 验证安装成功
bash
echo $ROS_DISTRO
✅ 输出 humble 代表安装成功
二、修复 ROS2 DDS 中间件报错
若执行 ros2 --version 出现以下报错:
-
bash
执行以下命令一键修复:
bash
# 安装默认 Cyclone DDS 中间件
sudo apt install ros-humble-rmw-cyclonedds-cpp -y
# 安装稳定备用 FastDDS 中间件
sudo apt install ros-humble-rmw-fastrtps-cpp -y
# 配置默认 DDS 并刷新环境
echo "export RMW_IMPLEMENTATION=rmw_fastrtps_cpp" >> ~/.bashrc
source ~/.bashrc
三、创建 ROS2 工作空间与假数据功能包
- 创建工作空间目录
bash
# 创建工作空间 + 源码文件夹
mkdir -p ~/proj/lichtblick/ros2_ws/src
# 进入源码目录
cd ~/proj/lichtblick/ros2_ws/src
- 创建机器人假数据功能包
bash
ros2 pkg create --dependencies rclpy std_msgs sensor_msgs geometry_msgs nav_msgs --node-name fake_data_publisher robot_fake_data
✅ 输出 creating package 'robot_fake_data' successfully 代表创建成功
四、编写假数据发布代码
- 打开代码文件
bash
gedit ~/proj/lichtblick/ros2_ws/src/robot_fake_data/robot_fake_data/fake_data_publisher.py
- 替换为完整模拟数据代码
python
import rclpy
from rclpy.node import Node
import math
import random
from std_msgs.msg import String
from sensor_msgs.msg import Imu, LaserScan
from geometry_msgs.msg import Twist
from nav_msgs.msg import Odometry
# 机器人模拟数据发布节点
class FakeRobotDataPublisher(Node):
def __init__(self):
super().__init__('fake_robot_data_node')
# 10Hz 定时发布数据
self.timer = self.create_timer(0.1, self.timer_callback)
# 创建话题发布者
self.status_pub = self.create_publisher(String, '/robot/status', 10)
self.imu_pub = self.create_publisher(Imu, '/imu/data', 10)
self.laser_pub = self.create_publisher(LaserScan, '/scan', 10)
self.odom_pub = self.create_publisher(Odometry, '/odom', 10)
self.cmd_vel_pub = self.create_publisher(Twist, '/cmd_vel', 10)
self.get_logger().info('✅ 机器人假数据启动成功!正在发布数据...')
# 获取时间戳
def get_stamp(self):
return self.get_clock().now().to_msg()
# 定时发布所有数据
def timer_callback(self):
# 1. 机器人状态文本
status = String()
status.data = f"机器人正常运行 | 电量:{random.randint(85, 100)}%"
self.status_pub.publish(status)
# 2. IMU 惯性测量数据
imu = Imu()
imu.header.stamp = self.get_stamp()
imu.header.frame_id = "imu_link"
imu.angular_velocity.z = random.uniform(-0.3, 0.3)
imu.linear_acceleration.z = 9.81
self.imu_pub.publish(imu)
# 3. 激光雷达数据
scan = LaserScan()
scan.header.stamp = self.get_stamp()
scan.header.frame_id = "laser_link"
scan.angle_min = -math.pi
scan.angle_max = math.pi
scan.angle_increment = math.pi / 360
scan.range_min = 0.1
scan.range_max = 10.0
scan.ranges = [random.uniform(1.0, 5.0) for _ in range(360)]
self.laser_pub.publish(scan)
# 4. 机器人里程计(位置数据)
odom = Odometry()
odom.header.stamp = self.get_stamp()
odom.header.frame_id = "odom"
odom.pose.pose.position.x = random.uniform(0, 2)
odom.pose.pose.position.y = random.uniform(0, 2)
self.odom_pub.publish(odom)
# 5. 运动控制指令
vel = Twist()
vel.linear.x = 0.2
vel.angular.z = random.uniform(-0.1, 0.1)
self.cmd_vel_pub.publish(vel)
def main(args=None):
rclpy.init(args=args)
node = FakeRobotDataPublisher()
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
五、编译 ROS2 工作空间
bash
# 进入工作空间根目录
cd ~/proj/lichtblick/ros2_ws
# 清理旧编译文件
rm -rf build install log
# 编译功能包
colcon build
✅ 输出 Finished <<< robot_fake_data 代表编译成功
# 加载编译环境
source install/setup.bash
六、启动机器人假数据节点
方式 1:ROS2 标准启动
bash
ros2 run robot_fake_data fake_data_publisher
方式 2:Python 直接启动(解决闪退 / XML 配置问题)
bash
python3 ~/proj/lichtblick/ros2_ws/src/robot_fake_data/robot_fake_data/fake_data_publisher.py
七、验证假数据发布(新开终端执行)
bash
# 刷新环境
source ~/.bashrc
# 查看所有发布话题
ros2 topic list
# 查看运行节点
ros2 node list
查看tpoic数据
bash
# 实时查看 IMU 数据
ros2 topic echo /imu/data
# 实时查看激光雷达数据
ros2 topic echo /scan
八、连接Foxglove 可视化
- 关闭所有 Foxglove进程
- 打开Foxglove选择连接方式:Connection
- 输入连接地址:
ws://localhost:8765 - 进入Foxglove,新增plot panel,并设置Serises为随便一个传感器数据,就能在plot窗口中看到折现了

九、消除消息解析报错
若Logo出现消息解析报错,
bash
[ERROR][6:04:41.090 PM CST][foxglove_bridge]: Failed to load schemaDefinition for topic "/zos/driving/hmi/adas_settings" (ros_msg/zos_driving/AdasSetting): Invalid package resource name: ros_msg/zos_driving/AdasSetting
安装依赖包即可修复:
bash
sudo apt install ros-humble-foxglove-msgs -y