一、通过C++API来控制Airsim中的无人机效果演示
控制台截图
UE4中的截图
二、包含正确的静态连接库
1、找到需要的链接库
参考Airsim官方网站:C++ APIs - AirSim
从上面官方网站指导的截图中可以看出来,我们需要的头文件有四个部分:
①include
②AirLib/include
③AirLib/deps/rpclib/include
④AirLib/deps/eigen3
⑤AirLib/deps/MavLinkCom/include
而我们需要的静态链接库有下面三个部分:
①rpc.lib
②AirLib.lib
③MavLinkCom.lib
因此,我们可以从官方git clone下来的文件中,找到AirLib这个项目,把我截图中的内容复制到自己的项目中,然后按照上面的配置把静态链接库配置好,以及包含正确的头文件。
2、附加包含目录
参考我上面的截图配置好包含好正确的头文件
3、配置附加库目录
参考我上面的截图配置好附加库的目录(静态链接库所在的位置)
4、配置附加依赖项
参考我上面的截图配置好附加依赖项
三、撰写控制代码
代码实际上就是copy复制官方的一个例子,下面加入了一些注释:
#include <iostream>
#include "vehicles/multirotor/api/MultirotorRpcLibClient.hpp"
int main()
{
msr::airlib::MultirotorRpcLibClient client;
std::cout << "Press Enter to enable API control\n"; std::cin.get(); // 按下回车键开启API控制
client.enableApiControl(true);
std::cout << "Press Enter to arm the drone\n"; std::cin.get(); // 按下回车解锁无人机
client.armDisarm(true);
std::cout << "Press Enter to takeoff\n"; std::cin.get(); // 按下回车键起飞无人机
client.takeoffAsync(5)->waitOnLastTask();
std::cout << "Press Enter to move 5 meters in x direction with 1 m/s velocity\n"; std::cin.get(); // 按下回车键往前飞行
auto position = client.getMultirotorState().getPosition(); // from current location
client.moveToPositionAsync(position.x() + 5, position.y(), position.z(), 1)->waitOnLastTask();
std::cout << "Press Enter to land\n"; std::cin.get(); // 按下回车键降落无人机
client.landAsync()->waitOnLastTask();
std::cout << "Press Enter to disenable\n"; std::cin.get(); // 按下回车键关闭API控制
client.enableApiControl(false);
return 0;
}
四、完结
上面就是全部步骤,至此我们就可以通过一个C++程序来控制Airsim中的无人机或小车。后续将把这些代码封装到UE4中的类里面去。(亦或者是使用Qt,按下不同的按钮,通过调用不同的API来控制airsim)