【番外】【Airsim in Windows & ROS in WSL2-Ubuntu20.04】环境配置大全

【番外】【Airsim in Windows &ROS in WSL2-Ubuntu20.04】环境配置大全

【前言(可省略不看)】

AirSim的使用着实是一件麻烦事,我的配置过程可谓是坎坷重重。原因在于AirSim对于电脑要求较高,所以即使我手头有一个Interl mini PC,但是由于没有独立显卡,也没有办法实现在Ubuntu环境下使用AirSim。而电脑又不太想装双系统,并且在VMware虚拟机里面没有办法使用电脑的独立显卡,因此也不能使用AirSim。

所以我的方法是:在Windows上部署WSL2子系统,在WSL2上面安装Ubuntu系统(实际上WSL2就是一个虚拟机,但是它是由windows开发的一个基于windows的子系统,各种环境以及接口比vmware虚拟机要来的方便多了,也正因为如此,wsl2中可以使用到电脑的显卡资源),在Ubuntu上面运行ros程序,在windows上面运行airsim仿真,两者通过airsim官方给出的airsim-ros-wrapper内置的网络通信进行通信沟通,从而实现曲线救国,也是不太伤害电脑并且运行效果还不错的一种方案。

整体的安装流程如下:

我的环境版本如下:

bash 复制代码
windows10-wsl2-ubuntu20.04-ros noetic

1.在windows上面部署好UE4+AirSim联合仿真环境

具体配置方法看我上一篇文章:【番外】在Windows安装Airsim/UE4踩坑合集

2.在windows上面部署wsl2系统以及在wsl2上面部署ubuntu系统

一种办法是按照官方给出的方法,从头开始一步一步做,是比较省事的:
官方步骤:Windows系统安装WSL2

但是这个带来的问题是,官方这种方法只能将wsl2系统安装在C盘,也就是之后的ubuntu也要在C盘,那么之后想在WSL2上面装一些软件之类的或者安装包之类的,内存就会受很大限制,所以可以按照这位博主的操作安装到其他盘:
Win10自定义路径位置安装WSL2 (Ubuntu 20.04) 并配置CUDA

3.安装好ubuntu系统之后,目前只能在命令行操作,所以又需要安装图形界面

可以按照这个UP的步骤来:
WSL2 Ubuntu+gnome图形界面的安装血泪史(亲测有效)

按照他的步骤做完第三步和第四步就可以。

但是做完之后会发现gnome这个框架之下rviz打开后一般会卡死或者闪退。如果没有rviz需求的同学就可以这样不管了,但是如果要用rviz的话,就需要解决这个问题。

我的方法是换成Xfce4桌面环境。

这里插一句,这些东西之间是什么关系:

Xfce4和gnome都是一种桌面环境框架,是一种安装在wsl里面的为了显示ubuntu桌面的框架。而安装的VcXsrv 是一个显示软件,用于将Xfce4和gnome传输出来的显示信息显示在该软件上。所以无论wsl里面装的是gnome还是Xfce4,外部都用VcXsrv软件进行显示。

方法:

终端输入:

bash 复制代码
sudo apt-get install xfce4 

中间会跳出一个页面问你选择什么管理器,随便选哪个都行。我选择的是第一个。

我们需要知道本机地址,在powershell或者cmd中输入

bash 复制代码
ipconfig

此时有两种选择,将图像传输回WSL的虚拟地址或是直接的本机地址。如下是虚拟地址的版本,本机地址也是取相应的IPv4地址即可。

我们需要在.bashrc文件中添加一行输出地址. (在Ubuntu下输入)

bash 复制代码
echo "export DISPLAY=172.21.16.1:0.0" >> ~/.bashrc

其中 "172.21.16.1" 就是你刚刚得到的ipv4地址,不要忘记写后面的 :0.0

如果要修改这个IP参数的话,需要修改 ~/.bashrc 文件,有很多种可以在Terminal中编辑文件的方法,比如笔者使用的vim。

如果没有vim可以先安装vim。

bash 复制代码
sudo apt-get install vim

安装结束后就就可以打开了,输入

bash 复制代码
vim ~/.bashrc

按 i 进入编辑模式。

修改之后按下 Esc 在输入 :wq 就可以保存回到Terminal里。

其他vim的指令可以查阅: Linux vi/vim | 菜鸟教程 (runoob.com)

之后重新载入一下这个文件 (这个指令后面会用到很多次,因为这样就不需要重新打开个新的Terminal了)

bash 复制代码
source ~/.bashrc 

之后,在VcXsrv启动的状态下,在终端运行如下代码启动桌面:

bash 复制代码
startxfce4 

然后运行gazebo和rviz发现闪退的问题解决了。

如果无法正确输出并显示类似如下提示,可以添加 -ac 参数到 Xlaunch中

我的Xlaunch配置是这样的:


之后保存就可以弹出VcXsrv窗口了。

但是还有新的问题,那就是两个软件中间都是黑屏的,没有任何显示,没有网格,也没有灰色的背景,并且会在运行时有如下的报错:

原因是:

windows端没有配置使得独立显卡可以作用于wsl2系统中,所以wsl2系统中所有需要图形渲染的软件都没有办法正常使用。解决方法是打开windows端独立显卡对于wsl2的权限:
WSL2 设置使用独显

之后就正常显示了。

如果还是有显示问题,尝试将下面两个代码加入你的bashrc文件中:

bash 复制代码
export LIBGL_ALWAYS_SOFTWARE=1
export LIBGL_ALWAYS_INDIRECT=0

是开启硬件加速和直接渲染。之后应该就没有问题了。

4.在WSL2-Ubuntu系统中安装ros系统

这一步老生常谈了,没什么问题,就不展开了。

5.在WSL2-Ubuntu系统中部署airsim:

参考官方文档:How to run Airsim on Windows and ROS wrapper on WSL

如果不想每次进入终端都输入一次export WSL_HOST_IP=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'),就把他加到你的bashrc文件中去。

题外话:这里如果你想用双机配置。即:一台电脑是windows-ue4-airsim仿真,一台电脑是ubuntu-ros作为控制,那么此处你在ubuntu系统上的操作就类似于wsl的操作,也就是在运行之前加一句:export WSL_HOST_IP=127.0.0.1即可。其中的IP地址是你的windows端电脑的IP,要保证两台电脑运行在同一个局域网之下并且可以ping通。理论上来说是没问题的。但是我这样试过了,没有成功,如果有大佬做成功了也麻烦踢我一下谢谢。

6.运行demo步骤

1.在windows端 打开LandscapeMountains.sln工程文件,并且点击"开始调试",在UE4启动之后,点击开始仿真,则此时airsim插件已经开始运行,已经打开windows端的 41451 端口,并监听这个端口的需求。

你可以在开始仿真之后在cmd中运行如下命令,查看是否如此:

bash 复制代码
netstat -ano | findstr 端口号

比如该情境中我们输入:

bash 复制代码
netstat -ano | findstr 41451 

可以看到:

显示处于listening状态,也就是监听状态。
2.打开wsl2-Ubuntu系统

输入startxfce4 打开GUI界面

确保bashrc文件像我这样配置好(最后一行的IP一定要写你自己的IP):

bash 复制代码
export DISPLAY=$(grep -m 1 nameserver /etc/resolv.conf | awk '{print $2}'):0.0
export XDG_SESSION_TYPE=x11
export LIBGL_ALWAYS_SOFTWARE=1
export WSL_HOST_IP=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')
source /opt/ros/noetic/setup.bash
export LIBGL_ALWAYS_INDIRECT=0
export DISPLAY=172.21.16.1:0.0

打开终端

进入根目录:

bash 复制代码
cd ~

进入AirSim工作空间:

bash 复制代码
cd AirSim/
cd ros

运行:

bash 复制代码
source devel/setup.bash
roslaunch airsim_ros_pkgs airsim_node.launch output:=screen host:=$WSL_HOST_IP
roslaunch airsim_ros_pkgs rviz.launch

成功运行界面如下:

WSL端:

UE4端:

可以查看一下现有的rostopic:

相关推荐
编程乐趣2 小时前
自学C#,要懂得用好对象浏览器
windows·.net
qq_393828222 小时前
办公文档批量打印器 Word、PPT、Excel、PDF、图片和文本,它都支持批量打印。
windows·word·powerpoint·excel·软件需求
好名字更能让你们记住我3 小时前
Linux多线程(十二)之【生产者消费者模型】
linux·运维·服务器·jvm·windows·centos
矩阵老炮3 小时前
Ubuntu20.4编译AOSP源码实践
ubuntu·aosp
单线程的Daniel3 小时前
Dubbo RPC 序列化问题记录
windows·rpc·dubbo
嵌入式成长家3 小时前
ubuntu rules 使用规则
linux·ubuntu·rules 使用规则
椰汁菠萝4 小时前
ubuntu下免sudo执行docker
ubuntu·docker·免sudo
BD_Marathon4 小时前
ubuntu防火墙使用
linux·ubuntu
龙潜月七4 小时前
Selenium 自动化测试中跳过机器人验证的完整指南:能用
python·selenium·机器人
小毛驴8505 小时前
Windows 环境下设置 RabbitMQ 的 consumer_timeout 参数
windows·分布式·rabbitmq