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

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

  • 【前言(可省略不看)】
  • 1.在windows上面部署好UE4+AirSim联合仿真环境
  • 2.在windows上面部署wsl2系统以及在wsl2上面部署ubuntu系统
  • 3.安装好ubuntu系统之后,目前只能在命令行操作,所以又需要安装图形界面
  • 4.在WSL2-Ubuntu系统中安装ros系统
  • 5.在WSL2-Ubuntu系统中部署airsim:
  • 6.运行demo步骤

【前言(可省略不看)】

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内置的网络通信进行通信沟通,从而实现曲线救国,也是不太伤害电脑并且运行效果还不错的一种方案。
整体的安装流程如下:
我的环境版本如下:

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软件进行显示。

方法:
终端输入:

sudo apt-get install xfce4 

中间会跳出一个页面问你选择什么管理器,随便选哪个都行。我选择的是第一个。
在这里插入图片描述
我们需要知道本机地址,在powershell或者cmd中输入

ipconfig

此时有两种选择,将图像传输回WSL的虚拟地址或是直接的本机地址。如下是虚拟地址的版本,本机地址也是取相应的IPv4地址即可。
在这里插入图片描述
我们需要在.bashrc文件中添加一行输出地址. (在Ubuntu下输入)

echo "export DISPLAY=172.21.16.1:0.0" >> ~/.bashrc

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

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

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

sudo apt-get install vim

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

vim ~/.bashrc

按 i 进入编辑模式。

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

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

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

source ~/.bashrc 

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

startxfce4 

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

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

在这里插入图片描述
我的Xlaunch配置是这样的:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
之后保存就可以弹出VcXsrv窗口了。
但是还有新的问题,那就是两个软件中间都是黑屏的,没有任何显示,没有网格,也没有灰色的背景,并且会在运行时有如下的报错:

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

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

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中运行如下命令,查看是否如此:

netstat -ano | findstr 端口号

比如该情境中我们输入:

netstat -ano | findstr 41451 

可以看到:
在这里插入图片描述
显示处于listening状态,也就是监听状态。
2.打开wsl2-Ubuntu系统
输入startxfce4 打开GUI界面
确保bashrc文件像我这样配置好(最后一行的IP一定要写你自己的IP):

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

打开终端
进入根目录:

cd ~

进入AirSim工作空间:

cd AirSim/
cd ros

运行:

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:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/287966.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

手敲MyBatis(十四章)-解析含标签的动态SQL语句

1.前言 这一章主要的就是要解析动态标签里的Sql语句,然后进行条件语句的拼接,动态标签实现了trim和if标签,所以Sql节点就要加上TrimSqlNode和ifSqlNode,我们最终要获取Sql源,动态Sql语句需要一些处理,所以…

AI原生应用开发“三板斧”亮相WAVE SUMMIT+2023

面对AI应用创新的风口跃跃欲试,满脑子idea,却苦于缺乏技术背景,不得不望而却步,这曾是许多开发者的苦恼,如今正在成为过去。 12月28日,WAVE SUMMIT深度学习开发者大会2023在北京举办。百度AI技术生态总经理…

文件监控软件丨文件权限管理工具

文件已经成为企业最重要的资产之一。然而,文件的安全性和完整性经常受到威胁,如恶意软件感染、人为误操作、内部泄密等。 为了确保文件的安全,文件监控软件应运而生。本文将深入探讨文件监控软件的概念、功能、应用场景和未来发展等方面。 文…

Grafana UI 入门使用

最近项目上需要使用Grafana来做chart,因为server不是我在搭建,所以就不介绍怎么搭建grafana server,而是谈下怎么在UI上具体操作使用了。 DOCs 首先呢,贴一下官网doc的连接,方便查询 Grafana open source documenta…

【数据库原理】(6)关系数据库的关系操作集合

基本关系操作 关系数据操作的对象都是关系,其操作结果仍为关系,即集合式操作。关系数据库的操作可以分为两大类:数据查询和数据更新。这些操作都是基于数学理论,特别是集合理论。下面是对这些基本操作的解释和如何用不同的关系数据语言来表达这些操作的…

Objects are not valid as a React child (found: object with keys {name}).

在jsx中可以嵌套表达式,将表达式作为内容的一部分,但是要注意,普通对象不能作为子元素;但是数组,react元素对象是可以的 如下:不能将stu这个对象作为子元素放 function App() {const myCal imgStyleconst…

OSG-纹理映射(二)

2.6 Mipmap纹理映射 在一个动态的场景中,当一个纹理对象迅速远离视点时,纹理图像必须随着被投影的图像一起缩小。为了实现这种效果,可以通过对纹理图像进行过滤,适当对它进行缩小,以使它映射到物体的表面时不会产生抖动…

Android 串口协议

前言 本协议是 Android 应用端与主控板之间的通信协议,是串行通信协议。 协议要求同一时间只能有两个通讯端点在相互通讯,采用小端传输数据。 硬件层基于RS485协议,采取半双工,一主多从的通讯模式。Android定义为主机&#xff0c…

DataGear 4.7.0 发布,数据可视化分析平台

DataGear 4.7.0 发布,严重漏洞和BUG修复,具体更新内容如下: 新增:HTTP数据集新增【编码请求地址】支持,可用于解决请求地址中文乱码问题;新增:新增数据源密码加密存储支持(开启需设…

怎么有效利用HTTPS协议

HTTPS的发展史可以追溯到早期的互联网时代,当时HTTP协议被广泛使用,但由于通信过程是明文的,导致用户的敏感信息容易被截取和窃取。为了解决这个问题,HTTPS协议应运而生。 HTTPS是在HTTP协议的基础上加入了传输层安全协议&#x…

深挖小白必会指针笔试题<一>

目录 引言 关键解决办法: 学会画图确定指向关系 例题一: 画图分析: 例题二: 画图分析: 例题三: 注:%x是按十六进制打印 画图分析: 例题四: 画图分析&…

基于Java+SpringMvc+Vue求职招聘系统详细设计实现

基于JavaSpringMvcVue求职招聘系统详细设计实现 🍅 作者主页 专业程序开发 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 文章目录 基于JavaSpringMvcVue求职招聘系统详细设计实现一、前言介…

众和策略:今日,有“天地板”,也有“地天板”

今日早盘,A股持续坚持弱势震动,两市成交有进一步萎缩的趋势。 盘面上,煤炭、传媒娱乐、旅行、房地产等板块相对活泼,混合实际、PEEK材料、苹果概念、华为汽车等板块跌幅居前。 个股方面,神马电力连续5日涨停&#xf…

react useEffect 内存泄漏

componentWillUnmount() {this.setState (state, callback) > {return;};// 清除reactionthis.reaction();}useEffect 使用AbortController useEffect(() > { let abortController new AbortController(); // your async action is here return () > { abortCo…

TCP/IP的网络层(即IP层)之IP地址和网络掩码,在视频监控系统中的配置和应用

在给客户讲解我们的AS-V1000视频监控平台的时候,有的客户经常会配置错误IP地址的掩码和网关,导致出现一些网路问题。而在视频监控系统中,IP地址和子网掩码是用于标识网络中设备的重要标识符。IP地址被用来唯一地标识一个网络设备,…

express+mongoDB开发入门教程之mongoDB安装

系列文章 node.js express框架开发入门教程 expressmongoDB开发入门教程之mongoDB安装expressmongoDB开发入门教程之mongoose使用讲解 文章目录 系列文章前言一、mongoDB安装1.下载2.安装3. 设置全局环境变量4.启动mongoDB服务 二、可视化管理工具 前言 MongoDB是一个基于分布…

【盛况回顾】聚焦流程创新,共话科技共赢:企业“流程三驾马车”闭环主题沙龙圆满落幕

12月7日,由上海斯歌主办,博阳精讯、凡得科技协办的“流程创新科技共赢——企业流程三驾马车闭环主题沙龙”在上海召开并圆满落幕。本次沙龙,上海斯歌携手来自不同行业的客户与伙伴的资深业务、解决方案专家,围绕流程体系化建模、流…

uniCloud 云数据库(新建表、增、删、改、查)

新建表结构描述文件 todo 为自定义的表名 表结构描述文件的默认后缀为 .schema.json 设置表的操作权限 uniCloud-aliyun/database/todo.schema.json 默认的操作权限都是 false "permission": {"read": false,"create": false,"update&quo…

Spring上下文之support模块DefaultLifecycleProcessor

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…

Numpy基础

目录: 一、简介:二、array数组ndarray:1.array( )创建数组:2.数组赋值和引用的区别:3.arange( )创建区间数组:4.linspace( )创建等差数列:5.logspace( )创建等比数列:6.zeros( )创建全0数组&…