# AGVC SDK

**当前 API 文档下载地址：[AGVC SDK API 文档.pdf](http://agvc.pages.aubo-robotics.cn:8001/agvc_interface/AGVC_SDK_API_PDFs.zip)**

## 概述

AGVC SDK 提供了一套完整的接口来控制和管理AGV系统，通过 AGVC_API (主入口) 建立通讯可以实现AGV的地图管理、路径规划、运动控制、充电、系统状态监控等功能

## 目录

- 快速开始
- SDK 架构
- 使用示例
- 命名空间
- 错误处理
- 支持的编程语言

## 快速开始

### 基本使用流程

```
// 1. agv sdk初始化
auto rpc = std::make_shared<agvc_interface::RpcClient>();

// 2. agv通讯设置
// 2.1 设置通讯超时时间
rpc->setRequestTimeout(100);
// 2.2 连接agv
rpc->connect("192.168.192.100", 30104);
// 2.3 登录
rpc->login("aa", "bb");

// 3. agv 功能接口使用
// 3.1 查询agv信息
rpc->getAgvDetails(); 
// 3.2 获取激光点云
rpc->getLaserPointCloud(); 
```

## SDK 架构

### 层次结构

```
AGVC_API (主入口)
├── Map(地图)
├── Station(站点)
├── Path(路径)
├── Navigation(导航)
├── Charging(充电)
├── AgvInfo(Agv信息)
└── System(系统)
```

## 使用示例

### 获取机器人详细信息

```
// 建立通讯
auto rpc = std::make_shared<agvc_interface::RpcClient>();
rpc->setRequestTimeout(100);
rpc->connect("192.168.192.100", 30104);
rpc->login("aa", "bb");

// 获取agv详细信息
auto agv_details = rpc->getAgvDetails(); 
```

### 创建地图

```
// 抢占控制权
rpc->setPriority("aa", "");

// 切换建图模式
agvc_interface::Header header;
header.id = "123sdaw-asdafas-zff";
agvc_interface::RunningMode mode = agvc_interface::RunningMode::MAPPING; 
auto ret = rpc->changeRunningMode(mode, header);

// 查询异步接口(changeRunningMode)执行状态
agvc_interface::AsyncInterfaceResultStatus async_rusult = rpc->getAsyncInterfaceResultStatus();
agvc_interface::ChangeRunningModeStatus change_running_mode_status = async_rusult.change_running_mode_status.status;

// 如果异步接口运行状态为Running, 则重复调用，直到异步接口运行完成
while (change_running_mode_status == agvc_interface::ChangeRunningModeStatus::RUNNING)
{
    change_running_mode_status = rpc->getAsyncInterfaceResultStatus().change_running_mode_status.status;
	std::this_thread::sleep_for(std::chrono::milliseconds(10));
}

// 异步接口运行状态非running，接口运行结束，重新调用接口查询执行接口
ret = rpc->changeRunningMode(mode, header);

// 判断异步接口运行结果
if(ret == 10100000){
	std::cout <<"切换建图模式成功";
}else{
    std::cout <<"切换建图模式失败，错误码："<< ret;
}
```

### 保存地图

```
// 抢占控制权
rpc->setPriority("aa", "");

// 设置地图header
agvc_interface::Header map_header;
map_header.id     = "test_save_map";
map_header.map_id = map_id;
map_header.name   = "test1";
map_header.stamp  = 1;

auto ret = rpc->saveMap(map_header);

// 查询异步接口(savemap)执行状态
agvc_interface::AsyncInterfaceResultStatus async_rusult = rpc->getAsyncInterfaceResultStatus();
auto save_map_status = ret.save_map_status.status;

// 如果异步接口运行状态为Running, 则重复调用，直到异步接口运行完成
while (save_map_status == agvc_interface::ChangeRunningModeStatus::RUNNING)
{
    save_map_status = rpc->getAsyncInterfaceResultStatus().save_map_status.status;
    std::this_thread::sleep_for(std::chrono::milliseconds(10));
}

// 异步接口运行状态非running，接口运行结束，重新调用接口查询执行接口
ret = rpc->saveMap(map_header);

// 判断异步接口运行结果
if(ret == 10100000){
	std::cout <<"保存地图成功";
}else{
    std::cout <<"保存地图失败，错误码："<< ret;
}
```

## 命名空间

所有接口都定义在以下命名空间中：

```
namespace agvc_interface {
    // 所有接口定义
}
```

## 错误处理

大多数接口方法返回整数错误码，其中 10100000 表示成功，其他值表示错误码，可以通过错误码查询接口查询含义。某些接口可能抛出 AuboException 异常。

## 支持的编程语言

- C++
- Python
- JSON-RPC

## 相关文件

- agvc_interface.h - 接口定义
- type.h - 类型定义