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

news2024/9/21 2:41:20

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

  • 【前言(可省略不看)】
  • 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:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录-刷题第四十六天

70. 爬楼梯(进阶) 题目链接:70. 爬楼梯 改为:一步一个台阶,两个台阶,三个台阶,…,直到 m 个台阶。问有多少种不同的方法可以爬到楼顶呢? 思路:本题是一个斐波…

国民技术与stm32 ADC采集

一、国民技术芯片ADC采集配置 /* PA1 ADC1_IN2 默认功能 DMA 通道1由ADC1触发 外部晶振16 系统时钟144M AHB 2分频 HCLK72M HCLK 经APB1 4分频 pclk1 18MHCLK/4 HCLK 经APB2 4分频 pclk2 18MHCLK/4ADCCLK不得超过14M*/ void DMA_ADC_Config(void) {ADC_InitType ADC_In…

Unity报错:InvalidOperationException: Insecure connection not allowed的解决方法

问题描述 在导入Steam VR 插件后报错&#xff1a; InvalidOperationException: Insecure connection not allowed UnityEngine.Networking.UnityWebRequest.SendWebRequest () (at <4139bb31c03640e7b650db6ec39d5754>:0) UnityEngine.WWW..ctor (System.String url) (…

大模型上下文长度的超强扩展:从LongLora到LongQLora

前言 本文一开始是《七月论文审稿GPT第2版&#xff1a;从Meta Nougat、GPT4审稿到Mistral、LongLora Llama》中4.3节的内容&#xff0c;但考虑到 一方面&#xff0c;LongLora的实用性较高二方面&#xff0c;为了把LongLora和LongQLora更好的写清楚&#xff0c;而不至于受篇幅…

[数据结构 C++] AVL树的模拟实现

文章目录 1、AVL树1.1 AVL树的概念 2、AVL树节点的定义3、AVL树的插入和旋转3.1 左单旋左旋代码实现 3.2 右单旋右旋代码实现 3.3 右左双旋右左双旋的代码实现 3.4 左右双旋左右双旋的代码实现 3.5 insert接口实现 4、判断是否为AVL树判断AVL树的代码实现 5、AVL树的性能 问题引…

Maven Resources Compiler: Maven project configuration required for module

Maven Resources Compiler: Maven project configuration required for module ‘cc-pdf’ isn’t available. Compilation of Maven projects is supported only if external build is started from an IDE. 报错原因是&#xff0c;我在git建立一个新空仓库&#xff0c;然后把…

C++线程池的原理(画图)及简单实现+例子(加深理解)

1.为什么线程池会出现&#xff0c;解决什么问题&#xff1f; C线程池&#xff08;ThreadPool&#xff09;的出现主要是为了解决以下几个问题&#xff1a; 1.性能&#xff1a;创建和销毁线程都是相对昂贵的操作&#xff0c;特别是在高并发场景下&#xff0c;频繁地创建和销毁线…

Linux下误删除后的恢复操作测试之extundelete工具使用

一、工具介绍 extundelete命令的功能可用于系统删除文件的恢复。在使用前&#xff0c;需要先将要恢复的分区卸载&#xff0c;以防数据被意外覆盖。 语法格式&#xff1a;extundelete [参数] 文件或目录名 常用参数&#xff1a; --after 只恢复指定时间后被删除的文件 --bef…

Linux学习(9)——RAID与服务器的常见故障

目录 一、服务器常见故障 1、系统不停重启进入不了系统 2、卡在开机界面右下角有fA B2 H8 3、系统安装不上 4、如何进入服务器的bios 5、一般进入阵列卡的快捷键 6.网络不通 7.硬盘不识别 二、RAID相关知识 1、RAID的概念 2、RAID功能实现 3、RAID实现的方式 三、…

机器学习笔记 - 偏最小二乘回归 (PLSR)

一、偏最小二乘回归:简介 PLS 方法构成了一个非常大的方法族。虽然回归方法可能是最流行的 PLS 技术,但它绝不是唯一的一种。即使在 PLSR 中,也有多种不同的算法可以获得解决方案。PLS 回归主要由斯堪的纳维亚化学计量学家 Svante Wold 和 Harald Martens 在 20 世纪 80 年代…

海外服务器2核2G/4G/8G和4核8G配置16M公网带宽优惠价格表

腾讯云海外服务器租用优惠价格表&#xff0c;2核2G10M带宽、2核4G12M、2核8G14M、4核8G16M配置可选&#xff0c;可以选择Linux操作系统或Linux系统&#xff0c;相比较Linux服务器价格要更优惠一些&#xff0c;腾讯云服务器网txyfwq.com分享腾讯云国外服务器租用配置报价&#x…

ByteTrack算法流程的简单示例

ByteTrack ByteTrack算法是将t帧检测出来的检测框集合 D t {\mathcal{D}_{t}} Dt​ 和t-1帧预测轨迹集合 T ~ t − 1 {\tilde{T}_{t-1}} T~t−1​ 进行匹配关联得到t帧的轨迹集合 T t {T_{t}} Tt​。 首先使用检测器检测t帧的图像得到检测框集合 D t {\mathcal{D}_{t}} …

手机技巧:分享10个vivo手机实用小技巧技巧,值得收藏

目录 1. 快速切换应用 2、智能助手Jovi 3. 轻按唤醒屏幕 4. 快速启动相机 5. 分屏功能 6. 手势操作 7. 一键清理 8.忘记密码 9.玩游戏耗电快 10.手机丢失后该怎么办 1. 快速切换应用 向右或向左滑动底部的虚拟按键即可。 2、智能助手Jovi vivo手机自带智能助手Jovi…

【Java EE初阶八】多线程案例(计时器模型)

1. java标准库的计时器 1.1 关于计时器 计时器类似闹钟&#xff0c;有定时的功能&#xff0c;其主要是到时间就会执行某一操作&#xff0c;即可以指定时间&#xff0c;去执行某一逻辑&#xff08;某一代码&#xff09;。 1.2 计时器的简单介绍 在java标准库中&#xff0c;提供…

CMake入门教程【核心篇】添加应用程序(add_executable)

&#x1f608;「CSDN主页」&#xff1a;传送门 &#x1f608;「Bilibil首页」&#xff1a;传送门 &#x1f608;「本文的内容」&#xff1a;CMake入门教程 &#x1f608;「动动你的小手」&#xff1a;点赞&#x1f44d;收藏⭐️评论&#x1f4dd; 文章目录 1. 概述2. 使用方法2…

【计算机视觉】常用图像数据集

图像数据集 模型需要好的数据才能训练出结果&#xff0c;本文总结了机器学习图像方面常用数据集。 MNIST 机器学习入门的标准数据集&#xff08;Hello World!&#xff09;&#xff0c;10个类别&#xff0c;0-9 手写数字。包含了60,000 张 28x28 的二值训练图像&#xff0c;10…

计算机网络(2)

计算机网络&#xff08;2&#xff09; 小程一言专栏链接: [link](http://t.csdnimg.cn/ZUTXU) 计算机网络和因特网&#xff08;2&#xff09;分组交换网中的时延、丢包和吞吐量时延丢包吞吐量总结 协议层次及其服务模型模型类型OSI模型分析TCP/IP模型分析 追溯历史 小程一言 我…

Graphics Control

Graphics Control提供了一个易于使用的图形设置管理解决方案,帮助您加快开发。它附带了一个常用设置库,如分辨率、垂直同步、全屏模式、光晕、颗粒、环境光遮挡等。我们的可自定义设置面板UI预制件为您提供了一个可用的UI面板,支持完整的游戏手柄和键盘输入。图形控制还附带…

【前沿技术杂谈:ChatGPT】ChatGPT——热潮背后的反思

【前沿技术杂谈&#xff1a;ChatGPT】ChatGPT——热潮背后的反思 缘起&#xff1a;无中生有&#xff0c;涅槃重生人工智能技术人工智能的发展史无中生有内容自动生成技术的发展代表企业OpenAI-GPT系列技术的发展历程ChatGPT新特点 热潮&#xff1a;万众瞩目&#xff0c;群雄逐鹿…

Unity | Shader基础知识番外(向量数学知识速成)

目录 一、向量定义 二、计算向量 三、向量的加法&#xff08;连续行走&#xff09; 四、向量的长度 五、单位向量 六、向量的点积 1 计算 2 作用 七、向量的叉乘 1 承上启下 2 叉乘结论 3 叉乘的计算&#xff08;这里看不懂就百度叉乘计算&#xff09; 八、欢迎收…