UE+Airsim(Win11)+gazebo+PX4(WSL)配置——持续更新中

张开发
2026/4/19 19:39:13 15 分钟阅读

分享文章

UE+Airsim(Win11)+gazebo+PX4(WSL)配置——持续更新中
参考链接https://zhuanlan.zhihu.com/p/618440744Win11安装WSL和VS安装WSL参考链接https://blog.csdn.net/2301_80003447/article/details/158887391?spm1011.2415.3001.5331# 查看可安装的版本wsl.exe--list--online# 安装特定版本的Ubuntuwsl.exe--install-dUbuntu-22.04安装VShttps://visualstudio.microsoft.com/zh-hans/vs/Win11安装UE下载EpicInstaller在官网选择社区版下载EpicInstaller-19.2.0-unrealEngine.msi安装过程中需要epic账户没有的话需要创建。PorjectAirsim暂时使用的还是Airsim在 Win11 开始菜单中找到并打开 “Developer Command Prompt for VS 2022”在英文目录下使用git clone https://github.com/iamaisim/ProjectAirSim.git下载代码cdProjectAirSimbuild allAirsim在 Win11 开始菜单中找到并打开 “Developer Command Prompt for VS 2022”在英文目录下使用git clone https://github.com/Microsoft/AirSim.git下载代码cdAirSim build.cmdWSL和UE通信这部分配置比较复杂网上有英文资料但也是多次尝试才算成功。参考链接https://ardupilot.org/dev/docs/sitl-with-airsim.html#sitl-with-airsim-usagehttps://discuss.ardupilot.org/t/gsoc-2019-airsim-simulator-support-for-ardupilot-sitl-part-ii/46395/5 https://github.com/mahmoudajawad/wsl-hacks/blob/master/wsl2-networking.md找到UE4Editor.exe在安装的UE文件夹Engine/Binaries/Win64中找到UE4Editor.exe启动脚本使用win按键进入系统防火墙的高级设置左侧点击入站规则右侧选择新建规则选择程序在程序路径中选择第一步中找到的UE4Editor.exe文件下一页选择允许连接下一页勾选全部域/专用和公用下一页取一个辨识度的名字点击完成获取宿主机IP地址参考链接建议使用ipconfig.exe|awk/WSL/ {getline; getline; getline; getline; print substr($14, 1, length($14)-1)}获取IP地址但我这样操作提示错误-bash: /mnt/c/WINDOWS/system32/ipconfig.exe: cannot execute binary file: Exec format error应该是Ubuntu系统无法获取ipconfig.exe这样的windows执行文件虽然也有资料显示Working across Windows and Linux file systems但我没有成功。我的理解是这一步的作用就是获取宿主机的IP地址因此可以使用指令ifconfig查找IP地址并运行export WSL_HOST_IPhost_IP。可以使用ping $WSL_HOST_IP测试。将地址填入/etc/hosts中运行一下程序将地址填入/etc/hosts中echo-e\n$WSL_HOST_IPwindows.local|sudotee-a/etc/hosts/dev/nullexport DISPLAY$WSL_HOST_IP:0可能需要安装Xlaunch比较简单可以在网上找资料xclock有输出表示正常启动UEAIRSIM启动UE在settings.json文件中内容都替换为{SettingsVersion:1.2,LogMessagesVisible:true,SimMode:Multirotor,OriginGeopoint:{Latitude:-35.363261,Longitude:149.165230,Altitude:583},Vehicles:{Copter:{VehicleType:ArduCopter,UseSerial:false,LocalHostIp:127.0.0.1,UdpIp:127.0.0.1,UdpPort:9003,ControlPort:9002}}}启动UE窗口可能卡住在启动SITL之后就正常了。启动ardupilot使用指令sim_vehicle.py-vArduCopter-fairsim-copter--map--console启动AP的SITL我的地面站暂时连接不上可以使用以下指令测试电机功能motortest1110052motortest2110052motortest3110052motortest4110052使用以下指令测试起飞paramsetARMING_SKIPCHK-1rc31800添加端口发布outputadd127.0.0.1:5762mavros建立连接ros2 launch mavros apm.launch fcu_url:tcp://127.0.0.1:5762启动airsim的ros2节点实现可见光图像深度图像等的发布ros2 launch airsim_ros_pkgs airsim_node.launch.py使用mavros进行速度控制python ap_vel_ENU_pub.py使用Mavros的服务进行解锁上锁和模式切换ros2servicecall /mavros/cmd/arming mavros_msgs/srv/CommandBool{value: true}ros2servicecall /mavros/cmd/arming mavros_msgs/srv/CommandBool{value: false}ros2servicecall /mavros/set_mode mavros_msgs/srv/SetMode{base_mode: 0, custom_mode: LOITER}ros2servicecall /mavros/set_mode mavros_msgs/srv/SetMode{base_mode: 0, custom_mode: GUIDED}ros2servicecall /mavros/set_mode mavros_msgs/srv/SetMode{base_mode: 0, custom_mode: LAND}ros2servicecall /mavros/cmd/takeoff mavros_msgs/srv/CommandTOL{min_pitch: 0.0, yaw: 0.0, latitude: 0.0, longitude: 0.0, altitude: 5.0}AIRSIMROS1官方教程中有提供airsimros1的操作指南可以直接按照步骤一步一步来做就好可实现AIRSIM中可见光相机激光雷达等传感器信息在ros话题中的发布。参考链接https://microsoft.github.io/AirSim/airsim_ros_pkgs/https://microsoft.github.io/AirSim/airsim_tutorial_pkgs/注意我使用的是WSL2安装了ubuntu20.04系统和ROS1官方中虽然有ROS2的文件但支持好像还不是很好编译的时候报错资料也较少所以还是使用了ROS1在WSL的ubuntu20.04系统中下载AirSim代码并编译gitclone https://github.com/Microsoft/AirSim.gitcdAirSim ./setup.sh ./build.shcdros catkin build为了实现WSL下的airsim节点与windows下的UE仿真可以连接需要设置一下IP地址export DISPLAY$(cat /etc/resolv.conf | grep nameserver | awk {print $2}):0运行检查编译是否完成sourcedevel/setup.bash roslaunch airsim_ros_pkgs airsim_node.launch output:screen host:$WSL_HOST_IProslaunch airsim_ros_pkgs rviz.launch若以上没有问题则可以正式连接UE开始仿真。front_stereo_and_center_mono.json首先可以将以上链接中的json文件内容复制到windows的Documents/AirSim/settings.json中随后启动UE仿真加载多旋翼飞行器可以看到激光雷达、可见光等传感器都顺利加载。之后在两个wsl终端中分别运行# pane / terminal 1$sourcePATH_TO/AirSim/ros/devel/setup.bash $ roslaunch airsim_ros_pkgs airsim_node.launch;# pane / terminal 2$sourcePATH_TO/AirSim/ros/devel/setup.bash $ roslaunch airsim_tutorial_pkgs front_stereo_and_center_mono.launch这样就会打开airsim中的控制节点并且建立与UE(AIRSIM)的连接可在新的终端中输入rosservice call /airsim_node/drone_1/takeoff waitOnLastTask: true和rosservice call /airsim_node/drone_1/land waitOnLastTask: true实现飞行器起飞和降落。

更多文章