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项目配置
-
包含目录
-
库目录
- 附加包含目录
- 附加依赖库