AirSim 控制函数说明

本文档详细介绍了如何使用AirSim库在C++中进行无人机控制,包括初始化、起飞、悬停、移动等操作,并提供了API函数调用的示例。此外,还阐述了如何设置drivetrain和yaw_mode参数以实现不同飞行模式。同时,文档还展示了获取无人机下视相机图像和GPS数据的方法,帮助开发者进行视觉定位和环境感知。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AirSim 控制函数说明

1.头文件以及相关库

#include "common/common_utils/StrictMode.hpp"
STRICT_MODE_OFF
#ifndef RPCLIB_MSGPACK
#define RPCLIB_MSGPACK clmdep_msgpack
#endif // !RPCLIB_MSGPACK
#include "rpc/rpc_error.h"
STRICT_MODE_ON

#include "vehicles/multirotor/api/MultirotorRpcLibClient.hpp"
#include "common/common_utils/FileSystem.hpp"
  • 初始化定义
// 获取图像以及GPS
using namespace msr::airlib;
msr::airlib::MultirotorRpcLibClient* client;  // 非指针类型也可
typedef ImageCaptureBase::ImageRequest ImageRequest;
typedef ImageCaptureBase::ImageResponse ImageResponse;
typedef ImageCaptureBase::ImageType ImageType;
typedef common_utils::FileSystem FileSystem;

2.API函数调用(c++)

  • 初始化:在无人机起飞前一定要执行初始化,否则飞机不会起飞。
client->enableApiControl(True,name)
client->armDisarm(True,name)
  • 控制行为 - 起飞:waitOnLastTask() 会等待当前任务完成,才继续往下执行代码
client->takeoffAsync()->waitOnLastTask();
  • 控制行为 - 悬停
client->hoverAsync()->waitOnLastTask();
  • 控制指令 - 航路点模式:x,y,z为目标点坐标,-5为速度。
client->moveToPositionAsync(x, y, z, -5);
  • 控制指令 - 虚拟摇杆
client->moveByManualAsync( vx_max = 1E6, vy_max = 1E6, z_min = -1E6, duration = 1E10)

client->moveByRC(rcdata = airsim.RCData( roll = 0.5, pitch = 0.0, throttle = 1.0, is_initialized = True, is_valid = True))
  • 控制指令 - 虚拟摇杆模式
client->moveByAngleThrottleAsync();
  • 控制指令 - 速度模式:vx, vy, vz 分别为X,Y,Z方向上的速度,duration为无人机飞行的时间。
client.moveByVelocityAsync(vx, vy, vz, duration);
  • 控制指令 - 2维速度模式:Z的高度是固定的
client.moveByVelocityZAsync(vx, vy, z, duration);
  • 控制函数的参数:drivetrain, yaw_mode

    • 所有的控制指令都可以添加两个参数(drivetrain, yaw_mode
  • drivetrain

    • drivetrain = airsim.DrivetrainType.MaxDegreeOfFreedom,独立控制飞机的yaw角。
    • drivetrain = airsim.DrivetrainType.ForwardOnly,飞机的yaw角一直保持向前。
  • yaw_mode

    • yaw_mode = airsim.YawMode( is_rate = False, yaw_or_rate = theta) , yaw角度为theta度。
    • yaw_mode = airsim.YawMode( is_rate = True, yaw_or_rate = phi) , yaw角速度为phi度/秒。
  • 注意:drivetrain为ForwardOnly时,yaw_mode.is_rate不能为True, 不然是矛盾的。

3.AirSim获取图像以及GPS信息

  • 获取图像
std::vector<ImageRequest> request = { ImageRequest("3", ImageType::Scene) };//下视相机的可见光图像
const std::vector<ImageResponse>& response = client->simGetImages(request);

//显示图像
Mat rgb_image_front = cv::imdecode(response[0].image_data_uint8, cv::IMREAD_COLOR);
imshow("rgb_image_front", rgb_image_front);
cv::waitKey(1);
  • 获取GPS
auto temp = client->getGpsData();

std::cout  << std::setprecision(12) << temp.gnss.geo_point.latitude << "  " << temp.gnss.geo_point.longitude << "  " << temp.gnss.geo_point.altitude << std::endl;

4.VS项目配置

  • 包含目录
    在这里插入图片描述

  • 库目录

在这里插入图片描述

  • 附加包含目录

在这里插入图片描述

  • 附加依赖库

在这里插入图片描述

<think>嗯,用户想了解如何将AirSim与Unreal Engine 4集成和使用。我需要先回顾一下之前提供的引用内容,看看有没有相关的信息。引用1提到了UE引擎编译和AirSim的编译流程,以及联合测试的步骤。引用3提到了UE4中创建类实例的方法,可能需要用特殊的工厂函数,这可能和AirSim的代码有关。引用4关于修改DefaultEngine.ini来强制使用Vulkan,可能在配置UE项目时会用到。 首先,用户可能需要一个步骤指南。根据引用1中的内容,应该包括环境准备、编译UE引擎、编译AirSim、项目配置、测试和高级功能如ROS集成。需要注意用户可能使用的是不同版本的UE,比如4.24,但最新版可能有所不同,所以需要提醒版本兼容性。 然后,我需要确保每个步骤的准确性。例如,编译UE引擎需要先下载源码,然后运行Setup和GenerateProjectFiles,接着编译。这部分在引用1中有提到,但具体命令可能需要根据用户的操作系统调整,用户的问题没有指定系统,可能需要默认Windows,但也要考虑其他平台的可能性。 接下来,编译AirSim部分,引用1提到需要进入AirSim目录,执行build命令。这里可能需要使用Visual Studio的开发者命令提示符,尤其是编译C++项目的时候。同时,需要将编译后的插件复制到UE项目的Plugins目录,这步骤很关键,否则UE无法识别AirSim插件。 在创建UE项目时,用户需要启用AirSim插件,可能需要重启编辑器。然后配置settings.json文件,这里需要说明文件的位置和基本配置内容,比如启用API和控制载具类型。引用4中的配置可能需要调整DefaultEngine.ini,但用户的问题可能不需要涉及Vulkan,除非有图形问题,所以可能放在注意事项里。 测试部分,用户可能需要运行项目并连接Python客户端,这里要确保端口正确,并且AirSim的API服务已启动。高级功能如ROS集成需要编译AirSim的ROS功能包,但用户可能暂时不需要,不过可以作为扩展提到。 注意事项部分,版本兼容性很重要,比如UE4.24和特定版本的AirSim。路径不能有空格和特殊字符,这点容易出错,需要强调。性能优化可能需要调整图形设置,引用4中的Vulkan配置可以作为选项。 生成的问题部分,需要涵盖常见的问题,比如环境搭建错误、实时控制方法、自定义传感器和与ROS的集成。这些问题可以帮助用户进一步解决可能遇到的困难。 最后,确保所有步骤使用正确的中文表达,避免术语混淆,并检查LaTeX格式是否正确,比如行内公式用$...$,独立公式用$$...$$,但当前回答中可能用不到数学公式,但如果有技术参数可能需要。不过根据用户的问题,可能暂时不需要数学公式,所以可能不需要添加。引用标识要正确对应,比如引用1、3、4的相关内容。</think>### AirSim与Unreal Engine 4集成方法详解 #### 一、环境准备 1. **安装UE4** 需从Epic Games Launcher安装Unreal Engine 4.27或更高版本(推荐4.27与AirSim兼容性最佳)[^1]。 2. **获取AirSim源码** 克隆官方仓库: ```bash git clone https://github.com/microsoft/AirSim.git ``` #### 二、编译UE引擎(可选) 若需自定义引擎功能(如支持ROS),需从源码编译UE4: ```bash # 下载UE源码 git clone -b 4.27 https://github.com/EpicGames/UnrealEngine.git ./Setup.bat ./GenerateProjectFiles.bat make ``` 编译完成后在Epic Games Launcher中关联本地引擎[^1][^2]。 #### 三、编译AirSim插件 1. 进入AirSim目录,执行编译命令: ```bash build.cmd ``` 2. 生成`AirSim/Unreal/Plugins`文件夹,包含编译后的插件文件[^1]。 #### 四、创建UE4项目 1. 新建空白UE4项目(选择“C++项目”以支持插件)。 2. 将编译好的`AirSim`插件复制到项目目录的`Plugins`文件夹中。 3. 重启UE编辑器,在**编辑 > 插件**中启用`AirSim`和`SimModeSelector`插件[^1][^3]。 #### 五、配置AirSim参数 1. 在项目根目录创建`Settings.json`文件,示例配置: ```json { "SettingsVersion": 1.2, "SimMode": "Car", "Vehicles": { "Car1": { "VehicleType": "PhysXCar", "AutoCreate": true } } } ``` 2. 修改渲染模式(如需Vulkan支持,编辑`DefaultEngine.ini`添加`DefaultRHI=Vulkan`)[^4]。 #### 六、测试运行 1. 点击UE编辑器中的**播放**按钮,启动场景。 2. 使用Python客户端测试连接: ```python import airsim client = airsim.CarClient() client.confirmConnection() ``` #### 七、高级功能 1. **自定义场景**:导入3D模型到UE场景,通过`Settings.json`绑定物理属性。 2. **ROS集成**:编译AirSim时启用`-DCMAKE_BUILD_TYPE=ROS`,配置ROS节点参数[^1]。 #### 注意事项 - 版本兼容性:AirSim与UE4版本需严格匹配(如AirSim v1.6对应UE4.27)[^1] - 路径要求:项目路径不可含空格或中文 - 性能优化:关闭UE编辑器非必要特效,降低分辨率[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值