Windows10下Airsim+PX4(WSL2)+MAVROS仿真环境搭建

一、Windows10下WSL2安装

1.1 WSL2的安装与配置

首先在Windows10下启用WSL,以管理员身份打开 PowerShell 工具并运行以下命令

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

然后启用虚拟机平台,继续运行以下命令,运行完成后重启电脑

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

以管理员身份打开 PowerShell,然后运行以下命令以将 WSL 2 设置为 WSL 的默认版本

wsl --set-default-version 2

在Microsoft Store中选择一个Ubuntu发行版进行安装,然后在开始菜单中打开此Ubuntu系统进行初始化配置。
最后在powershell中执行以下命令以检查Ubuntu的WSL版本及状态。

wsl --list --verbose

1.2 WSL2可视化

WSL2可视化使用VcXsrv实现xfce4图形界面+声音传输的方案,具体见参考文档
首先安装VcXsrv软件,下载地址,安装完成后启动软件,然后按照如下的设置进行。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

**注意:**需要允许此应用通过系统防火墙。
**注意:**有些人说他们遇到了像 Rviz 这样的 OpenGL 应用程序的问题。如果这样做,请尝试在 WSL2 终端中设置环境变量 LIBGL_ALWAYS_INDIRECT=0(您可以添加export LIBGL_ALWAYS_INDIRECT=0.bashrc文件末尾)。

然后在WSL2终端中执行以下代码

sudo apt update
sudo apt install x11-apps

如果防火墙没有进行设置,则以管理员身份打开 PowerShell 并运行:

New-NetFirewallRule -DisplayName "WSL" -Direction Inbound  -InterfaceAlias "vEthernet (WSL)"  -Action Allow

现在打开 WSL2 并运行

export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0

然后执行测试

xeyes

二、Windows10下Airsim环境搭建

参考官方文档即可。
需要注意的是在编译Airsim后,Block环境中并没有生成.sln文件需要导航到文件夹AirSim\Unreal\Environments\Blocks并运行update_from_git.bat
确保Blocksproject 是启动项目,构建配置设置为DebugGame_EditorWin64,然后执行下图操作后再按F5运行。
在这里插入图片描述

三、WSL2下PX4环境搭建

与在Ubuntu18.04下搭建PX4环境相同,参考官方文档即可,如果子模块缺失多试几次就好,换不同的国外线路,我成功的线路为香港VIP-Azure。

四、Airsim与PX4相关配置

在WSL2中使用的PX4与Airsim连接需要知道彼此IP,相关配置见官方文档
首先在Powershell中执行

ipconfig

可以看到返回的WSL2的IPv4地址,此地址172.30.32.1是 WSL2可用于访问Windows主机的地址。
在这里插入图片描述

**注意:**从这个PX4 变更请求 (与 v1.12.0-beta1 或更新版本相关)开始,SITL 模式下的 PX4 现在可以连接到不同(远程)IP地址上的AirSim。要启用此功能,请确保您拥有包含此修复程序的 PX4 版本。

然后在WSL2终端中输入以下命令,其中IP地址是刚刚我们获取到的WSL2可用于访问Windows主机的地址。

export PX4_SIM_HOST_ADDR=172.30.32.1

现在在 linux 端运行ip address show并复制eth0 inet地址,它应该类似于172.30.32.1,这是Windows需要知道的地址才能找到PX4。
在这里插入图片描述

最后编辑Airsim的仿真配置文件C:\Users\Username\Documents\AirSim\settings.json
其中ControlIp是WSL2的eth0 inet地址,LocalHostIp是WSL2可用于访问Windows主机的地址,下面给出了一个设置文件示例。

{
  "SettingsVersion": 1.2,
  "SimMode": "Multirotor",
  "ClockType": "SteppableClock",
  "Vehicles": {
    "PX4": {
      "VehicleType": "PX4Multirotor",
      "UseSerial": false,
      "LockStep": true,
      "UseTcp": true,
      "TcpPort": 4560,
      "ControlIp": "172.30.43.71",
      "ControlPortLocal": 14540,
      "ControlPortRemote": 14580,
      "LocalHostIp": "172.30.32.1",
      "Cameras": {
        "FrontLeft": {
          "X": 0.50,
          "Y": -0.06,
          "Z": 0.10,
          "Pitch": 0.0,
          "Roll": 0.0,
          "Yaw": 0.0,
          "CaptureSettings": [
            {
              "ImageType": 0,
              "Width": 752,
              "Height": 480,
              "FOV_Degrees": 90
            }
          ]
        },
        "FrontRight": {
          "X": 0.50,
          "Y": 0.06,
          "Z": 0.10,
          "Pitch": 0.0,
          "Roll": 0.0,
          "Yaw": 0.0,
          "CaptureSettings": [
            {
              "ImageType": 0,
              "Width": 752,
              "Height": 480,
              "FOV_Degrees": 90
            }
          ]
        }
      },
      "Sensors": {
        "Barometer": {
          "SensorType": 1,
          "Enabled": true,
          "PressureFactorSigma": 0.0001825
        }
      },
      "Parameters": {
        "NAV_RCL_ACT": 0,
        "NAV_DLL_ACT": 0,
        "COM_OBL_ACT": 1,
        "LPE_LAT": 47.641468,
        "LPE_LON": -122.140165
      }
    }
  },
  "SubWindows": [
    {
      "WindowID": 1,
      "CameraName": "FrontLeft",
      "ImageType": 0,
      "VehicleName": "PX4",
      "Visible": true
    },
    {
      "WindowID": 2,
      "CameraName": "FrontRight",
      "ImageType": 0,
      "VehicleName": "PX4",
      "Visible": true
    }
  ]
}

五、使用ROS

5.1 安装ROS

ROS的安装步骤与Ubuntu18.04系统下相同,见官方文档
需要注意的是在rosdep update步骤需要访问境外服务器,很容易卡住,下面参考rosdep update 超时失败2021最新解决方法进行了解决。

  1. 首先修改rosdep下载资源的脚本文件:/usr/lib/python2.7/dist-packages/rosdep2/sources_list.py,把以下行添加到脚本中的download_rosdep_data()函数中,以应用代理服务
url="https://ghproxy.com/"+url

/usr/lib/python2.7/dist-packages/rosdep2/sources_list.py 72行 把“https://ghproxy.com/”添加到网址前

  1. 然后用同样的方法修改/usr/lib/python2.7/dist-packages/rosdistro/init.py里面的DEFAULT_INDEX_URL参数,如下
DEFAULT_INDEX_URL = 'https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml'
  1. 以下2个文件中也使用了“raw.githubusercontent.com”网址,同样的方法把“https://ghproxy.com/”添加到网址前
/usr/lib/python2.7/dist-packages/rosdep2/rep3.py	39行
/usr/lib/python2.7/dist-packages/rosdistro/manifest_provider/github.py 68119
  1. 最后在 /usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py 的第204行添加如下代码
gbpdistro_url = "https://ghproxy.com/" + gbpdistro_url

/usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py 36行 把“https://ghproxy.com/”添加到网址前

5.2 Airsim的ROS wrapper

参考官方文档即可。
在~/.bashrc中添加

export WSL_HOST_IP=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}')

然后运行如下命令即可

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

5.3 Mavros

Mavros的安装见官方文档即可。

**注意:**源码安装的时候,需要将在ROS安装过程中更改的代理服务器相关设置还原。

首先启动PX4软件在环仿真

make px4_sitl_default none_iris

在终端中找到PX4中有关Mavlink消息转发的输出,如下图所示,记住端口号
在这里插入图片描述

然后在新的终端中执行下面的命令,这里接收的Mavlink消息是Normal,127.0.0.1是localhost(本地仿真用),可更改为remote ip

roslaunch mavros px4.launch fcu_url:="udp://:14540@127.0.0.1:14580"

最后测试Mavros是否与PX4在环仿真正确连接

rostopic echo /mavros/state

如果连接成功,则返回的connected状态为True,然后我们就可以愉快地使用ros进行无人机的仿真了。
在这里插入图片描述

5.4 通过Mavros向QGC地面站转发Mavlink消息

在终端中执行如下命令,其中gcs的IP地址填写WSL2可用于访问Windows主机的地址,可在powershell中使用ipconfig查看。

roslaunch mavros px4.launch fcu_url:="udp://:14540@127.0.0.1:14580" gcs_url:="udp://@172.30.32.1:14550"

QGC地面站的连接设置如下图所示
在这里插入图片描述

`mavros_posix_sitl.launch` 和 `mavros_posix_sitl_cp.launch` 是两个用于MavRos(基于ROS的MAVLink通信库)的启动文件,它们通常用于模拟飞行器境并在软件-in-the-loop (SITL) 境中测试和调试无人机系统。 1. **理解文件**: - `mavros_posix_sitl.launch`: 这个文件初始化了一个无人飞行器仿真器(例如Gazebo或其他SITL工具),配置了MAVLink仿真通信,并启动了基本的Mavros节点,它允许你控制和监控模拟的无人机状态。 - `mavros_posix_sitl_cp.launch`: 这个可能是针对某个特定功能或者控制面板的补充启动文件,如摄像头预览或地面站控制界面。 2. **执行步骤**: - 打开终端或者命令行工具。 - 导航到包含这些launch文件的ROS工作空间目录。 - 使用命令 `roslaunch` 来执行,例如: ``` roslaunch mavros mavros_posix_sitl.launch roslaunch mavros mavros_posix_sitl_cp.launch ``` - 如果需要指定参数,可以在命令行中添加 `-param` 参数,比如传递特定的飞机模型或传感器设置。 3. **配合运行**: - 首先确保`mavros_posix_sitl.launch`成功启动,这将启动无人机的模拟以及相关的MavRos服务和话题。 - 然后执行`mavros_posix_sitl_cp.launch`,这个文件通常会启动地面站GUI,你可以通过该界面连接到模拟无人机,并查看状态、发送控制指令等。 4. **相关问题**: - 如何在实际硬件上替换这两个文件? - 如何检查是否成功启动并连接到仿真器? - 是否需要特定的ROS版本才能运行这两个文件?
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值