AirSim 自动驾驶仿真 (2-2) ubuntu1804 配置AirSim工程和局域网两台电脑调试 目标 1环境 2 Ubungtu下airsim工程配置 2-1 linux下安装UE4仿真平台 2-2ubuntu1804编译AirSim工程 3 使用AirSim 联合场景调试 python新建工程 报错问题
目标
1 完成在ubuntu1804下使用airsim工程中,飞机控制样例编译。
2 完成局域网下面,一台win10电脑运行UE4仿真,另一台ubuntu18电脑运行airsim的飞机程序控制。
你也可以两台win10,但是slam这种工程只能在linux,所以本教程按照ubuntu1804写的。
未来需要两台win10的话,除了airsim在不同平台编译过程,其他流程一样。
1环境
ubuntu1804.5
联想笔记本y7000
显卡 1050ti
1-1安装系统
首先参考教程完成系统安装,驱动安装,cuda10安装和opencv从源码安装。
联想Y7000安装ubuntu1804.6双系统(一)
https://www.cnblogs.com/kekeoutlook/p/14227697.html
联想Y7000安装ubuntu1804.6显卡驱动(二)
https://www.cnblogs.com/kekeoutlook/p/14227698.html
ubuntu1804.6从源码编译opencv4.5和扩展库和cuda10.1
https://www.cnblogs.com/kekeoutlook/p/14232440.html
1-2 配置WIN10下的AirSim
AirSim 自动驾驶仿真 (1) win10环境配置(后面要跨平台使用准备)
https://www.cnblogs.com/kekeoutlook/p/13449525.html
AirSim 自动驾驶仿真 (2-1) win10配置 Visual Studio 2019工程 - C++ (只是为了学习)
https://www.cnblogs.com/kekeoutlook/p/14213737.html
1-3 开启某墙可以访问谷歌
最好自己买一个,能解决很多哦安装时候网络访问不了,下载东西巨慢速问题。
opencv配置教程中有写怎么配置 linux。
2 Ubungtu下airsim工程配置
官网
https://microsoft.github.io/AirSim/build_linux/
2-1 linux下安装UE4仿真平台
(如果win10装了UE4,可省略这个步骤,后面linux可以使用局域网访问win10的UE4环境,但是你的有两台机器,所以单机调试还是要装的,我暂时没装)
Linux-构建虚幻引擎
1确保您已在Epic Games中注册。这是获取虚幻引擎源代码访问权限所必需的。
2在UE官网内部,将UE4账号关联GITHUB账号,保证后面下载时候输入自己的github账号密码可以执行下载。
https://www.unrealengine.com/account/connections
在个人-关联中
选择github账号
验证关联
(手机邮箱连接验证点不开,放弃了,反正后面用WIN10的仿真)
在您喜欢的文件夹中克隆Unreal并将其构建(这可能需要一段时间!)。注意:目前我们仅支持Unreal> = 4.25。我们建议使用4.25。
# go to the folder where you clone GitHub projects git clone -b 4.25 https://github.com/EpicGames/UnrealEngine.git cd UnrealEngine ./Setup.sh ./GenerateProjectFiles.sh make
2-2ubuntu1804编译AirSim工程
# go to the folder where you clone GitHub projects git clone https://github.com/Microsoft/AirSim.git cd AirSim
默认情况下,AirSim使用clang 8构建与UE 4.25的兼容性。安装脚本将安装正确版本的cmake,llvm和eigen。
./setup.sh ./build.sh # use ./build.sh --debug to build in debug mode
正常开着某墙软件很快就成功了。
到这里airsim 的库算是编译好了,后面我们要创建工程调用。
3 使用AirSim
3-1 官方自带例子
一台机器,ubuntu18同时运行ue4和airsim控制
win10连调可调过。这里我暂时没有配置linux的ue4,所以没有执行。
设置AirSim后:
-
转到
UnrealEngine
安装文件夹并通过运行启动虚幻引擎./Engine/Binaries/Linux/UE4Editor
。 -
当虚幻引擎提示您打开或创建项目时,选择浏览并选择
AirSim/Unreal/Environments/Blocks
(或您的自定义虚幻项目)。 -
或者,可以将项目文件作为命令行参数传递。对于块:
./Engine/Binaries/Linux/UE4Editor <AirSim_path>/Unreal/Environments/Blocks/Blocks.uproject
- 如果系统提示您转换项目,请查找“更多选项”或“就地转换”选项。如果系统提示您进行构建,请选择“是”。如果提示您禁用AirSim插件,请选择“否”。
- 虚幻编辑器加载后,按“播放”按钮。
3-2 自己编译的c++工程
首先看到我自己编译好的airsim库路径
创建一个新工程(最终要有如下文件)
(1) main.cpp 我们用官方的飞机控制,拷贝这个文件到自己的文件夹airsim_code
修改 注意有注释的两行。我们后面要使用局域网内部另一个机器的UE4场景,所以输入的是对应电脑的IP
怎么知道更多修改,参考官网的api讲解
https://microsoft.github.io/AirSim/api_docs/html/
(2)新建CMakeLists.txt
1 修改自己的airsim编译库路径
# 设置airsim的路径 set(AIRSIM_ROOT "/home/dongdong/3Code/Airsim/AirSim")
2 修改名字和参与编译的工程名字(可不改)
3 要依赖opencv,记得提前装好
最终CMakeLists.txt
cmake_minimum_required(VERSION 3.5.0) project(airsim_collect) #set( CMAKE_BUILD_TYPE "Release" ) #set( CMAKE_CXX_FLAGS "-std=c++11 -O3" ) add_compile_options(-std=c++11) find_package(OpenCV REQUIRED) # 设置airsim的路径 set(AIRSIM_ROOT "/home/dongdong/3Code/Airsim/AirSim") add_subdirectory("${AIRSIM_ROOT}/cmake/rpclib_wrapper" rpclib_wrapper) add_subdirectory("${AIRSIM_ROOT}/cmake/AirLib" AirLib) add_subdirectory("${AIRSIM_ROOT}/cmake/MavLinkCom" MavLinkCom) LIST(APPEND CMAKE_MODULE_PATH "${AIRSIM_ROOT}/cmake/cmake-modules") LIST(APPEND CMAKE_MODULE_PATH "${AIRSIM_ROOT}/cmake") INCLUDE("${AIRSIM_ROOT}/cmake/cmake-modules/CommonSetup.cmake") set(RPC_LIB_INCLUDES ${AIRSIM_ROOT}/external/rpclib/rpclib-2.2.1/include) set(RPC_LIB rpc) include_directories( ${AIRSIM_ROOT}/AirLib/include ${AIRSIM_ROOT}/AirLib/deps/eigen3 ${RPC_LIB_INCLUDES} ${AIRSIM_ROOT}/MavLinkCom/include ${AIRSIM_ROOT}/MavLinkCom/common_utils ) link_directories( ${AIRSIM_ROOT}/AirLib/lib ${AIRSIM_ROOT}/AirLib/deps/rpclib/lib ${AIRSIM_ROOT}/AirLib/deps/MavLinkCom/lib ) # airsim采集程序 # -生成的可执行文件名字 airsim_collect # -参与编译的代码 main.cpp add_executable(airsim_collect main.cpp ) target_link_libraries(airsim_collect ${AIRSIM_ROOT}/build_release/output/lib/ ${OpenCV_LIBS} AirLib MavLinkCom rpc pthread )
(3)新建buid文件夹
执行编译
make
这里会出现一个可能错误,参考博客最后面问题。
运行程序
生成的执行文件在build中。
如果你的场景没开,会一直输出xxxxxx等待连接,至此证明自己创建的代码编译成功。
联合场景调试
方式1:ubuntu本机运行ue4
(参考官网,我这里没有实验) main.cpp ip默认留空
方式2:两台机器联调
主机A ubuntu18运行airsim控制代码,获取图像数据和控制
主机B win10运行UE4仿真环境
说明:一台机器运行仿真算力速度耗费巨大,运行仿真就很吃力,所以用另一台主机专门处理控制和别的计算。
过程
(1)参考下面两个教程,保证win10的UE4创建一个地图工程,且能够运行进入,飞机处于等待状态,完成后关闭。
AirSim 自动驾驶仿真 (1) win10环境配置(后面要跨平台使用准备) https://www.cnblogs.com/kekeoutlook/p/13449525.html AirSim 自动驾驶仿真 (2-1) win10配置 Visual Studio 2019工程 - C++ (只是为了学习) https://www.cnblogs.com/kekeoutlook/p/14213737.html
(2)设置两台电脑的网络
将win10电脑和ubuntu1804电脑连接在一个局域网
分别设置两台电脑的有线网络在同一个网段内
这里我的设置
ubuntu1804 IP 192.168.0.2, 255.255.255.0
win10 IP 192.168.0.1, 255.255.255.0
3 修改win10 ue4配置文件中默认ip,之后UE4工程需要重启生效。
settings.json文件在自己电脑对应的文档文件夹下面(DELL2080是用户名字,每个人不一样)
增加内容 "LocalHostIp":"192.168.0.1" 这个ip是有线连接设置的本机静态地址
最终完整的
{ "SeeDocsAt": "https://github.com/Microsoft/AirSim/blob/master/docs/settings.md", "SettingsVersion": 1.2, "LocalHostIp":"192.168.0.1" }
4 修改ubuntu1804中我们自己编译的工程 main.cpp文件中,初始化连接ue4的IP地址,重新编译。
5 运行win10的地图仿真,飞机处于等待状态。
注意模式设置在airsim联调状态
飞机准备好处于等待状态
6 运行ubnutu1804的我们创建的airsim工程。
连接成功,可以运行官方基本控制 ,起飞,获取数据,降落
7开始基本调试!!!!
c++版本和python版本代码自己选择进一步扩展。
3-3 自己编译的python工程
官方自带python
切换python默认执行环境
我已经把自己环境的python默认从python2修改成python3(百度怎么切换)
所以使用 python都默认是python3
安装库
sudo pip3 install msgpack-rpc-python
安装opencv
pip3 install opencv-python==4.2.0.34
使用代码
修改UE4主机的ip
执行
python hello_drone.py
按0显示3路图
更多例成继续探索
python新建工程
上面测试的样例是在原先的工程中,如何重新在一个新的位置创建
随意新建一个文件夹(纯英文),拷贝官方测试 hello_drone.py 到这个文件夹
找到原先编译airsim 的文件夹,获取其路径 AirSim/PythonClient
/home/dongdong/3Code/Airsim/AirSim/PythonClient
拷贝这个路径,添加到新代码里面,让脚本能找到对应的airsim python库路径
#源码倒入airsim库路径,相对位置有点改变 #import setup_path #手动倒入自己电脑编译的airsim python接口路径~AirSim/PythonClient import sys sys.path.append("/home/dongdong/3Code/Airsim/AirSim/PythonClient")
报错问题
1 代码编译报错 fatal error: filesystem: No such file or directory
使用: #include <filesystem> namespace fs = std::filesystem;
报错:fatal error: filesystem: No such file or directory
尝试解决办法:
#include <experimental/filesystem> namespace fs = std::experimental::filesystem;
一共需要改两个文件,根据报错找到文件位置修改。
一个commad.cpp
一个main.cpp