一、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_Editor和Win64,然后执行下图操作后再按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最新解决方法进行了解决。
- 首先修改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/”添加到网址前
- 然后用同样的方法修改/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'
- 以下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 68行 119行
- 最后在 /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地面站的连接设置如下图所示
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)