引言:作为一名导航算法工程师,最近调试的小车比较多,有一些已经装好外壳的显然不太方便直接接上显示屏、键鼠去调试,毕竟小车要移动到不同的地方,所以了解到一种远程调试的方法,能够在笔记本上去远程小车的工控机进行调试,而且可以获取小车的ROS2数据在本地的rviz2进行可视化调试。本篇文章记录此方案,以供新入坑的工程师们用作参考。

在机器人开发中,我们经常面临这样的场景:工控机(车载电脑)调试操作不便,而我们的笔记本环境舒适、屏幕大,却由于没有直连硬件而无法直接调试机器人。传统的做法要么是把笔记本搬到机器人旁边,用SSH+X11转发跑rviz2,但画面延迟和卡顿经常会导致调试体验很差;要么用VNC远程桌面,资源开销大,操作也不流畅。

那么,有没有一种方案,既能远程让代码在工控机上编译运行,又能让可视化界面在笔记本上丝滑显示?答案是肯定的,这就是本文要介绍的“VSCode Remote-SSH + 本地Rviz2”方案。

这套方案的核心理念是 “计算在车端,显示在本地” ,利用ROS2自身的DDS通信机制,让本地的Rviz2直接订阅车端发布的话题,从而将可视化压力从工控机转移到笔记本,并且网络传输的只是纯粹的ROS数据,而非图像画面,因此对带宽要求低,体验极佳。

目录

一、方案原理速览

二、准备工作

2.1 硬件与网络要求

2.2 软件版本一致性

三、详细配置步骤

步骤1:网络连通性测试

步骤2:工控机开启SSH服务

步骤3:笔记本安装VSCode与Remote-SSH插件

步骤4:使用小鱼一键安装ROS2-Humble(工控机 & 笔记本)

步骤5:统一ROS2环境变量

步骤6:VSCode远程连接工控机

步骤7:启动工控机上的导航节点

步骤8:在笔记本本地启动Rviz2


一、方案原理速览

首先,让我们先简单理解一下原理:

  • VSCode Remote-SSH:在本地VSCode中直接编辑、编译、运行工控机上的代码,所有操作都在远程终端中执行,就像在本地一样。

  • 本地Rviz2:在笔记本上独立运行一个Rviz2实例,通过ROS2的DDS网络(默认基于UDP)与工控机上的节点通信,订阅/odom、/scan、/map、/TF等话题,实时渲染可视化。

关键在于,工控机和笔记本必须处于同一局域网,并且ROS2环境配置一致,这样它们才能相互发现并交换数据。

二、准备工作

2.1 硬件与网络要求

  • 一台工控机(推荐:Ubuntu 22.04,ROS2 Humble)

  • 一台笔记本(同样Ubuntu 22.04,也可用Windows/WSL,但本文以Ubuntu为例)

  • 同一个局域网

  • 静态IP地址(建议为两台设备分别固定IP,避免DHCP变动导致连接中断)

2.2 软件版本一致性

这是整个方案成功的关键:笔记本和工控机必须安装完全相同版本的ROS2(例如都是Humble),否则数据类型定义可能不兼容,导致通信失败。

三、详细配置步骤

步骤1:网络连通性测试

首先,确保两台设备能互相ping通。

# 在笔记本终端
ping 192.168.1.100   # 替换为工控机的实际IP

如果ping不通,请检查防火墙(sudo ufw disable 临时关闭测试),并确认处于同一子网。

步骤2:工控机开启SSH服务

工控机需要开启SSH服务,以便VSCode远程连接。

sudo apt update
sudo apt install -y openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh
# 查看SSH服务状态
sudo systemctl status ssh

步骤3:笔记本安装VSCode与Remote-SSH插件

在笔记本上安装VSCode,然后在扩展商店搜索“Remote - SSH”并安装。

步骤4:使用小鱼一键安装ROS2-Humble(工控机 & 笔记本)

在两台设备上分别执行以下命令,即可一键安装ROS2(推荐使用Humble版本):

wget http://fishros.com/install -O fishros && bash fishros

脚本启动后,按照提示进行操作:

  1. 选择功能:输入 1,选择“一键安装:ROS(支持ROS和ROS2,树莓派Jetson)”。

  2. 选择软件源:推荐选择 1(使用脚本内置的国内镜像源),可大幅加速下载。

  3. 选择ROS版本:由于系统是Ubuntu 22.04,输入 1 选择 humble(ROS2 Humble)。

  4. 选择安装模式:建议选择 1“Desktop 版(推荐)”,该版本包含rviz2、turtlesim等图形化工具。

脚本将自动配置软件源、添加GPG密钥并安装所有依赖。整个过程约需5~10分钟(视网速而定)。安装完成后,脚本还会询问是否配置rosdep(推荐选择 Y,使用国内镜像rosdepc加速)。

小鱼一键安装工具由“鱼香ROS”开源维护,项目地址:fishros/install,感谢作者的贡献!

验证安装:安装完成后,运行小海龟例程检查是否成功:

# 终端1
ros2 run turtlesim turtlesim_node
# 终端2(新开)
ros2 run turtlesim turtle_teleop_key

如果能显示小海龟窗口且能用键盘控制其移动,说明ROS2环境已就绪。

步骤5:统一ROS2环境变量

编辑两台设备的 ~/.bashrc 文件,在末尾添加以下两行(以域ID=42,中间件为CycloneDDS为例):

export ROS_DOMAIN_ID=42
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp

然后执行 source ~/.bashrc 使其生效。务必保证两台设备的这两个变量完全相同

关于域ID:默认是0,但为了避免与其他设备冲突,建议设置为一个1~101之间的唯一整数。官方文档建议参考这里

步骤6:VSCode远程连接工控机

  1. 打开VSCode,CTRL+Shift+P打开命令界面,搜索remote,选择“Remote SSH:打开SSH配置文件……”

  2. 按格式输入并保存:

    Host ziyan_linux               # 自定义一个服务器别名
        HostName 10.153.149.45    # 替换为你的服务器真实IP地址或域名
        User fssk                  # 替换为你的Linux登录用户名
        Port 22                    # SSH端口,默认为22,若修改过请填写实际端口

  3. 选择SSH配置文件的保存位置(通常默认即可)。

  4. CTRL+Shift+P打开命令界面,搜索remote,选择“Remote SSH:打开SSH连接到主机……”。

  5. 点击连接,输入密码,稍等片刻,左下角显示“SSH: 主机名”即表示连接成功。

连接后,你可以像操作本地文件一样浏览工控机的文件夹,在终端中执行命令。

步骤7:启动工控机上的导航节点

这样远程就完成啦!接下来就是你熟悉的环节了,你可以在VSCode的远程终端中,source你的ROS2工作空间,然后启动导航相关的launch文件,例如:

source /opt/ros/humble/setup.bash
source ~/ros2_ws/install/setup.bash
ros2 launch nav2_bringup navigation_launch.py

此时工控机开始发布各类导航话题,所有ROS2的动作、服务、话题数据都可以在笔记本进行订阅。

步骤8:在笔记本本地启动Rviz2

注意:这个终端是笔记本的本地终端,不是在VSCode里!

打开一个新的终端窗口,source本地的ROS2环境和工作空间(如果有),然后直接运行:

source /opt/ros/humble/setup.bash
rviz2

Rviz2启动后,点击左下角的“Add”按钮,添加话题(如 /map/scan/tf/plan等)。如果一切正常,你就会看到机器人的模型、地图和路径规划的实时显示啦!

结语:非常开心看到你看完了整篇文章!如果你正在学习ros2,需要一些教材,比如鱼香ros老师的《ROS2机器人开发:从入门到实践 (桑欣)》,或者一些关于SLAM的《视觉SLAM18讲》《概率机器人》等书籍的电子版,可以私信我免费领取,希望对大家的学习过程有所帮助。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐