在使用RDK X5开发板时,通过SSH的x11连接显示的rviz2,非常卡,经过前辈提点,使用本机的wsl2进行rviz2显示
注:此方式只是优化rviz2界面的流畅度,数据传输还是吃网络,性能等原因,本质上就是使用WSL的ROS2来显示数据,数据来源就是你的开发板。如果认为该方法比较麻烦,也可以使用foxglove来进行网站建图,只需要配置同一网段,运行foxglove给出的指令就行
可以参考这一篇文章:
注:WSL2需要安装ROS2,如果不想麻烦可以使用foxglove,如果想装可以使用小鱼ros安装,很方便
一、wsl2配置桥接模式,与ROS2开发板处于同一网段(win10/win11通用)(附带win11专属操作)
1、设置桥接模式(win10/11通用)
保姆级教程,自己弄
创建的时候如果显示wlan已被绑定,这个问题一般就是你之前创过,但是因为没删除完全,打开适配器面板,删掉即可
简单来说就是:开启Hyper-V(一般wsl2都开着)、创建一个“虚拟交换机”、告诉wsl2去用它(设置.wslconfig)
问:为什么wsl2需要设置桥接模式
答:因为wsl2的网是挂在windows,是以172开头的子网,也就是wsl2把你电脑当成网关,虽然能ping通你的开发板,但实际上不在一个网段,设置桥接就是为了让wsl2有独立的网段
注:wifi设置桥接之后就会变得不稳定(如果你wsl2没打开就是正常的),导致电脑的ssh经常断开,所以还是建议使用虚拟机或者使用有线进行控制,这个只用于建图。
注:配置完Hyper之后记得重新连接wifi,我自己试的时候一直没有ip,结果发现Hyper会断连,导致没连上wifi,自然就没有IP(悲)
2、win11设置mirrored模式
win11专属:设置mirrored模式可以直接复用windows ip地址(悲),搜索wsl settings,直接改成mirrored即可,重启wsl即可看到ip地址已经改变,而且实测下来也没有波动,SSH连接正常




二、配置环境变量(ROS_DOMAIN)以及使用同一种通信策略(cycloneDDS)
配置环境变量和统一通信策略,本质上就是要确保开发板和虚拟机/WSL2两端的以下三个关键设置完全一致
| 环境变量 | 作用 | 推荐设置值 |
|---|---|---|
ROS_DOMAIN_ID |
隔离不同ROS2系统的“房间号”,必须相同才能互相发现。 | 建议设为 0 到 101 之间的任意整数,例如 42。避免设为 0,因为系统进程可能占用。 |
RMW_IMPLEMENTATION |
强制指定使用哪种中间件。 | 设为 rmw_cyclonedds_cpp(Cyclone DDS)。 |
CYCLONEDDS_URI |
Cyclone DDS的详细配置文件路径,用于解决跨网络发现问题。 | 指向一个你创建的 cyclonedds.xml 文件。 |
1、开发板配置
1.1 创建 Cyclone DDS 配置文件
在~目录建一个cyclonedds.xml,当然默认是有的,在/etc/dds/下,也可以改这个文件,后续路径改一下就行
<CycloneDDS>
<Domain Id="any">
<General>
<Interfaces>
<NetworkInterface name="wlan0" /> #这里填你的网络接口,用ifconfig看,有线一般是eth0
</Interfaces>
</General>
<SharedMemory>
<Enable>true</Enable>
<LogLevel>info</LogLevel>
</SharedMemory>
<Discovery>
<ParticipantIndex>auto</ParticipantIndex>
<MaxAutoParticipantIndex>100</MaxAutoParticipantIndex>
<Peers>
<Peer address="192.168.1.220"/> #填你WSL2的地址
</Peers>
</Discovery>
</Domain>
</CycloneDDS>1.2在终端中设置环境变量
# 1. 设置房间号
export ROS_DOMAIN_ID=42
# 2. 强制使用 Cyclone DDS,一般来说ros2默认使用的就是
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
# 3. 加载创建的 Cyclone 配置文件,填自己的路径
export CYCLONEDDS_URI=file://$HOME/cyclonedds.xml
#以上指令运行后只会在当前终端生效
#配置到环境变量中,终端运行时就会运行,如果不想重复配置的话就可以加一下
echo 'export ROS_DOMAIN_ID=42' >> ~/.bashrc
echo 'export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp' >> ~/.bashrc
echo 'export CYCLONEDDS_URI=file://$HOME/cyclonedds.xml' >> ~/.bashrc
source ~/.bashrc2、设置WSL端
2.1 安装cyclonedds,并设置rmw(ROS Middleware)
sudo apt install ros-humble-rmw-cyclonedds-cpp ros-humble-rmw-implementation2.2 创建 Cyclone DDS 配置文件
和上面开发板设置一样,不过可以不开启SharedMemory,在~目录创建
这里把我的配置贴出来
<?xml version='1.0' encoding='utf-8'?>
<CycloneDDS>
<Domain Id="any">
<General>
<Interfaces>
<!-- #用ifconfig看使用的哪个 -->
<NetworkInterface name="eth1" presence_required="true"/>
</Interfaces>
</General>
<Discovery>
<Peers>
<!--
<Peer address="192.168.1.142"/>
<Peer address="192.168.1.106"/>
-->
<!-- 设置开发板的IP,可以设置多个,但是建议只设一个 -->
<Peer address="192.168.1.105"/>
</Peers>
<SPDPInterval>2s</SPDPInterval>
<MaxAutoParticipantIndex>256</MaxAutoParticipantIndex>
</Discovery>
<SharedMemory>
<Enable>false</Enable>
</SharedMemory>
</Domain>
</CycloneDDS>2.3在终端中设置环境变量
和开发板设置一样即可,cyclonedds的路径按需更改即可
三、查看数据
打开wsl输入指令看一下topic,我就碰到一个守护进程超时的问题(下图),看了一下好像是因为ip地址变化导致守护进程缓存的还是之前的ip,清理缓存重新启动即可,在此之前可以试下ros2 topic list --no-daemon 看看是不是这问题
rm -rf ~/.ros/
ros2 daemon start
ros2 topic list


在wsl2中启动rviz2,我这里是按照原生的rviz配置文件进行启动,由于没有这些插件导致报错,不过不影响地图显示
至于rviz怎么使用,可以去搜一下,具体就是:选择坐标系→add topic→选择/map,这样就会显示地图(当然你需要启动建图,这就不是这个话题了)
可以看到用原生的ssh连接现实的rviz帧率只有0-5fps,非常卡,但是用上wsl2的rviz2帧率就能达到31fps


