Skip to main content

精准定位

提示: 在运行“精准定位”示例代码前,请使用 UAV 或 MSDK 开发的 APP 查看无人机与 RTK 卫星间保持良好的通信状态,确保负载设备可获取精准的定位结果。

概述

为满足使用 PSDK 开发的负载设备对厘米级精度的定位需求, Autel Robotics 支持开发者使用基准站和移动站,借助 RTK(Real Time Kinematic,实时动态载波相位差分技术)获取无人机飞行姿态和高精度的定位信息。

基础概念

获取精准定位

说明: 获取精准定位时,需使用时间同步功能将负载设备的本地时间同步为无人机时间,有关使用时间同步功能的详细说明请参见 时间同步。

  1. 需要获取定位信息时,负载设备需要记录本地时间(该时间为负载设备上的时间),并订阅 RTK 位置信息数据;
  2. 随后 RTK 的 Event 引脚被拉高,并将该时间点的位置信息发送给负载设备,负载设备通过时间转换功能,将负载设备上的时间转换为无人机上的时间;

使用精准定位功能

1. 定位功能模块初始化

使用“精准定位”功能前,需要先初始化精准定位功能模块,确保精准定位功能可正常运行。

    uavStat = UAV_Positioning_Init(gpioCallback, RTK_UART_PATH);
if (uavStat != 0) {
LOG_ERROR("positioning module init error.");
return uavStat;
}

说明: 用户需要自行注册一个 GPIO 回调函数,用于控制 GPIO 触发 RTK 事件。

2. 请求并打印位置信息

用户触发精准定位功能后,负载设备将根据定位事件发生时的时间获取精准的定位信息。 需要将指定的定位事件发生时的负载设备上的本地时间转换为无人机系统的时间。

    T_UAVReturnCode iRet;
iRet =UAV_TimeSync_TransferToAircraftTime(get_local_time_us(), &timestamp);

3. 获取精准的定位信息

完成时间同步后,用户即可获取并打印负载设备在某一时刻的精准位置,负载设备详细的位置信息。

    T_UAVReturnCode iRet = UAV_Positioning_GetCurrentPositioning_Sync(&positionInfo);
if (iRet == UAV_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
{
/*print property, position, positionDeviation*/
USER_LOG_INFO("get positioning sync success, {}, [{},{},{}], [{},{},{}]",
(int)positionInfo.property,
positionInfo.position.longitude, positionInfo.position.latitude, positionInfo.position.altitude,
positionInfo.positionDeviation.longitude, positionInfo.positionDeviation.latitude, positionInfo.positionDeviation.altitude);
}