Skip to content

SLAM 导航服务接口

功能C++PythonC#JavaROS
开始建图
停止建图
加载地图
获取地图列表
上传地图
下载地图
获取定位状态
获取当前位置
重定位
添加导航点位
添加虚拟点位
删除点位
获取可用点位
导航控制
多参数导航控制
取消导航
获取导航事件

注意事项!!!

  1. 地图要求:在使用导航接口前,需通过雷达设备扫描环境生成点云数据创建地图文件:

    a. 外部雷达设备建图:使用手机或者手持雷达设备建图(格式:pcd点云文件, 坐标系:右手坐标系,Z轴朝上)

    b. 内部机器狗雷达建图:通过调用SDK接口或者使用SDK可视化面板工具建图启动/结束建图,建图过程中需遥控机器狗慢速移动,结束建图成功会将地图保存在机器狗内,可以选择是否加载地图使用。

    c. 需要确保导航的区域进行完整的扫描生成点云信息

  2. 模式要求:启动导航控制需将机器人模式切换到导航模式,可通过配套手柄应用切换,或者在二次开发的程序中调用《高层运动服务接口》章节“设置控制模式”接口切换成导航模式。

  3. 导航使用流程:

    a. 机器狗无地图或者需变更地图:建图 ---> 重定位成功 ---> 创建点位 ---> 执行导航(点位名称或坐标)

    b. 机器狗有当前环境地图:重定位成功 ---> 获取点位 ---> 创建点位(可选) ---> 执行导航(点位名称或坐标)

  4. 当前导航支持直线行走,不支持自动绕障,在创建点位时需注意两个点位直线上不要有障碍物。

建图接口

Python接口

Optional[Dict] start_mapping(timeout=10.0)

功能说明\ 开始构建地图。

参数说明

参数名类型必填/默认值说明
timeoutfloat默认: 10.0超时时间(秒)。

返回值

类型说明
Optional[Dict]包含以下字段: - success (bool): 是否成功启动建图 - message (str): 操作结果信息

调用示例

python
from daystar_sdk import WebSocketRobotClient
# 初始化客户端
with WebSocketRobotClient(host='localhost', port=5252) as client:
    result = await client.start_mapping()

Optional[Dict] stop_mapping(map_name, auto_reload=True, timeout=10.0)

功能说明
停止建图并保存。

参数说明

参数名类型必填/默认值说明
map_namestr必填地图保存名称。
auto_reloadbool默认: True保存后是否自动加载该地图。
timeoutfloat默认: 10.0超时时间(秒)。

返回值

类型说明
Optional[Dict]包含以下字段: - success (bool): 是否成功停止并保存 - message (str): 操作结果信息

调用示例

python
from daystar_sdk import WebSocketRobotClient
# 初始化客户端
with WebSocketRobotClient(host='localhost', port=5252) as client:
    # 停止建图并保存为 'office_map'
    result = await client.stop_mapping("office_map", auto_reload=True)

C#接口

(bool success, string message) StartMapping(int id = 209, int timeoutMs = 10000)

功能说明
开始建图。

参数说明

参数名类型必填/默认值说明
idint默认: 209请求ID(可忽略)。
timeoutMsint默认: 10000超时时间(毫秒)。

返回值

类型说明
(bool success, string message)操作结果元组。

调用示例

csharp
private RobotSDKManager _robotSDKManager;
private RobotNavigationClient _navigationClient;

_robotSDKManager = RobotSDKManager.Instance;
_navigationClient = _robotSDKManager.CreateRobotNavigationClient();

var result = _navigationClient.StartMapping();
if (result.success)
{
    Debug.Log("开始建图...");
}

(bool success, string message) StopMapping(string mapName, bool autoReload = true, int id = 210, int timeoutMs = 10000)

功能说明
停止建图并保存地图。

参数说明

参数名类型必填/默认值说明
mapNamestring必填地图保存名称。
autoReloadbool默认: true是否自动加载新地图。
idint默认: 210请求ID(可忽略)。
timeoutMsint默认: 10000超时时间(毫秒)。

返回值

类型说明
(bool success, string message)操作结果元组。

调用示例

csharp
private RobotSDKManager _robotSDKManager;
private RobotNavigationClient _navigationClient;

_robotSDKManager = RobotSDKManager.Instance;
_navigationClient = _robotSDKManager.CreateRobotNavigationClient();

var result = _navigationClient.StopMapping("office_v1");
if (result.success)
{
    Debug.Log("地图保存成功");
}

Java接口

void StartMapping(String mapName)

功能说明
开始建图。

参数说明

参数名类型必填/默认值说明
mapNameString必填临时地图名称(通常传空或用于标识)。

返回值

类型说明
void无返回值。

调用示例

java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;

// 开始建图
slamNaviClient.StartMapping("");

void StopMapping(String mapName, boolean autoReload)

功能说明
停止建图并保存。

参数说明

参数名类型必填/默认值说明
mapNameString必填地图保存名称。
autoReloadboolean必填是否自动加载新地图。

返回值

类型说明
void无返回值。

调用示例

java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;

// 停止建图
slamNaviClient.StopMapping("office_map", true);

C++接口

CommReply startMapping()

功能说明
开始建图。

参数说明

参数名类型必填/默认值说明
---无参数。

返回值

类型说明
CommReply包含 success (bool) 和 message (string)。

调用示例

cpp
Lenovo::Daystar::SDK sdk;
auto &sysb = sdk.getSYSB();

if (sysb.connect()) {
    auto reply = sysb.startMapping();
    if (reply.success) {
        std::cout << "已启动建图模式" << std::endl;
    }
}

CommReply stopMapping(const std::string &map_name, bool auto_reload = true)

功能说明
停止建图。

参数说明

参数名类型必填/默认值说明
map_nameconst std::string &必填地图名称。
auto_reloadbool默认: true是否自动重新加载。

返回值

类型说明
CommReply包含 success (bool) 和 message (string)。

调用示例

cpp
Lenovo::Daystar::SDK sdk;
auto &sysb = sdk.getSYSB();

if (sysb.connect()) {
    auto reply = sysb.stopMapping("office_floor1");
    if (reply.success) {
        std::cout << "建图完成并保存" << std::endl;
    }
}

ROS2接口

开始建图

该接口用于启动机器人建图模式。

服务名称服务类型角色
/sdk/nav/start_mappingapi_msgs::srv::StartMapping服务端

请求结构(Request)

字段名称类型描述
(无字段)-无需传入参数。

响应结构(Response)

字段名称类型描述
successbool是否成功启动建图。
messagestring操作结果信息。

调用示例

bash
ros2 service call /sdk/nav/start_mapping api_msgs/srv/StartMapping '{}'

停止建图

该接口用于停止建图并保存地图。

服务名称服务类型角色
/sdk/nav/stop_mappingapi_msgs::srv::StopMapping服务端

请求结构(Request)

字段名称类型描述
map_namestring地图保存名称。
auto_reloadbool保存后是否自动加载该地图。
need_2d_mapbool是否生成2D地图。
blockbool是否阻塞等待完成。
timeoutint32超时时间(秒)。

响应结构(Response)

字段名称类型描述
successbool是否成功停止并保存。
messagestring操作结果信息。

调用示例

bash
ros2 service call /sdk/nav/stop_mapping api_msgs/srv/StopMapping '{map_name: "office_map", auto_reload: true, need_2d_map: false, block: true, timeout: 10}'

地图管理接口

Python接口

Optional[Dict] load_map(map_name, auto_reload=False, timeout=15.0)

功能说明
加载指定地图。

参数说明

参数名类型必填/默认值说明
map_namestr必填地图名称。
auto_reloadbool默认: False是否设为默认地图(True:重启机器人后自动加载,False:仅当前加载)
timeoutfloat默认: 15.0超时时间。

返回值

类型说明
Optional[Dict]包含 success (bool) 和 message (str)。

调用示例

python
from daystar_sdk import WebSocketRobotClient
# 初始化客户端
with WebSocketRobotClient(host='localhost', port=5252) as client:
    result = await client.load_map("office_map")

Optional[Dict] get_map_list(timeout=10.0)

功能说明
获取可用地图列表。

参数说明

参数名类型必填/默认值说明
timeoutfloat默认: 10.0超时时间。

返回值

类型说明
Optional[Dict]包含 map_names (List[str])。

调用示例

python
from daystar_sdk import WebSocketRobotClient
# 初始化客户端
with WebSocketRobotClient(host='localhost', port=5252) as client:
    res = await client.get_map_list()
    print(res.get('map_names', []))

bool upload_map(map_name: str, map_data: bytes, progress_callback: Callable = None)

功能说明
上传地图文件。

参数说明

参数名类型必填/默认值说明
map_namestr必填地图名称。
map_databytes必填地图文件二进制数据。
progress_callbackCallable默认: None进度回调 (current, total, bytes)。

返回值

类型说明
bool是否上传成功。

调用示例

python
with open("office.pcd", "rb") as f:
    await client.upload_map("office", f.read())

Optional[bytes] download_map(map_name: str, progress_callback: Callable = None)

功能说明
下载地图文件。

参数说明

参数名类型必填/默认值说明
map_namestr必填地图名称。
progress_callbackCallable默认: None进度回调。

返回值

类型说明
Optional[bytes]成功返回地图数据,失败返回 None。

调用示例

python
data = await client.download_map("office")
if data:
    with open("office.pcd", "wb") as f:
        f.write(data)

C#接口

(bool success, string message) LoadMap(string mapName, bool autoReload = false, int id = 211, int timeoutMs = 10000)

功能说明
加载地图。

参数说明

参数名类型必填/默认值说明
mapNamestring必填地图名称。
autoReloadbool默认: false是否设为默认地图(true:重启机器人后自动加载,false:仅当前加载)
idint默认: 211请求ID(可忽略)。
timeoutMsint默认: 10000超时时间。

返回值

类型说明
(bool success, string message)操作结果元组。

调用示例

csharp
private RobotSDKManager _robotSDKManager;
private RobotNavigationClient _navigationClient;

_robotSDKManager = RobotSDKManager.Instance;
_navigationClient = _robotSDKManager.CreateRobotNavigationClient();

_navigationClient.LoadMap("office_map");

(bool success, string[] map_names, string message) GetMapList(int id = 213, int timeoutMs = 10000)

功能说明
获取地图列表。

参数说明

参数名类型必填/默认值说明
idint默认: 213请求ID(可忽略)。
timeoutMsint默认: 10000超时时间。

返回值

类型说明
(bool success, string[] map_names, string message)操作结果元组。

调用示例

csharp
private RobotSDKManager _robotSDKManager;
private RobotNavigationClient _navigationClient;

_robotSDKManager = RobotSDKManager.Instance;
_navigationClient = _robotSDKManager.CreateRobotNavigationClient();

var result = _navigationClient.GetMapList();
if (result.success)
{
    foreach(var name in result.map_names) Debug.Log(name);
}

(string status, string message) UploadMap(string mapName, byte[] mapData, int requestId = 300, int timeoutMs = 30000)

功能说明
上传地图文件。

参数说明

参数名类型必填/默认值说明
mapNamestring必填地图名称。
mapDatabyte[]必填地图数据。
requestIdint默认: 300请求ID(可忽略)。
timeoutMsint默认: 30000超时时间。

返回值

类型说明
(string status, string message)操作结果 ("success" / "error")。

调用示例

csharp
private RobotSDKManager _robotSDKManager;
private RobotNavigationClient _navigationClient;

_robotSDKManager = RobotSDKManager.Instance;
_navigationClient = _robotSDKManager.CreateRobotNavigationClient();

string localMapPath = "Assets/Maps/map.pcd";
byte[] mapData = System.IO.File.ReadAllBytes(localMapPath);

_navigationClient.RegisterUploadProgressCallback(OnUploadProgress); // 监听上传进度
_navigationClient.UploadMap("office", mapData);


void OnUploadProgress(AssetTransferProgress progress)
{
    try
    {

        string displayText = $"【上传进度】\n" +
                           $"请求ID: {progress.request_id}\n" +
                           $"分块: {progress.completed_chunks}/{progress.total_chunks}\n" +
                           $"字节: {FormatBytes(progress.transferred_bytes)}/{FormatBytes(progress.total_bytes)}\n" +
                           $"进度: {progress.progress_percentage:F1}%\n" +
                           $"状态: {progress.status}";
        
        if (progress.is_completed)
        {
            if (progress.status == "completed")
            {
                displayText += "\n✓ 上传完成!";
            }
            else if (progress.status == "failed")
            {
                displayText += $"\n✗ 上传失败: {progress.error_message}";
            }
        }
        
    }
    catch (Exception ex)
    {
        Debug.LogError($"Error in OnUploadProgress: {ex.Message}");
    }
}


_navigationClient.UnregisterUploadProgressCallback();

void DownloadMap(string mapName, int requestId = 301)

功能说明
下载地图文件(结果通过回调)。

参数说明

参数名类型必填/默认值说明
mapNamestring必填地图名称。
requestIdint默认: 301请求ID(可忽略)。

返回值

类型说明
void无返回值(需注册回调)。

调用示例

csharp
private RobotSDKManager _robotSDKManager;
private RobotNavigationClient _navigationClient;

_robotSDKManager = RobotSDKManager.Instance;
_navigationClient = _robotSDKManager.CreateRobotNavigationClient();

_navigationClient.RegisterDownloadProgressCallback(OnDownloadProgress); // 监听下载进度
_navigationClient.DownloadMap("office");

void OnDownloadProgress(AssetTransferProgress progress)
{
    try
    {
        string displayText = $"【下载进度】\n" +
                           $"请求ID: {progress.request_id}\n" +
                           $"分块: {progress.completed_chunks}/{progress.total_chunks}\n" +
                           $"字节: {FormatBytes(progress.transferred_bytes)}/{FormatBytes(progress.total_bytes)}\n" +
                           $"进度: {progress.progress_percentage:F1}%\n" +
                           $"状态: {progress.status}";
        Debug.Log($"[DownloadProgress] {progressText}");
        if (progress.is_completed)
        {
            if (progress.status == "completed")
            {
                displayText += "\n✓ 下载完成!";
            }
            else if (progress.status == "failed")
            {
                displayText += $"\n✗ 下载失败: {progress.error_message}";
            }
        }
        
    }
    catch (Exception ex)
    {
        Debug.LogError($"Error in OnDownloadProgress: {ex.Message}");
    }
}

_navigationClient.UnregisterDownloadProgressCallback();

Java接口

ServiceOperationResponse LoadMap(String mapName, boolean auto_reload)

功能说明
加载指定地图。

参数说明

参数名类型必填/默认值说明
mapNameString必填地图名称。
auto_reloadboolean必填是否设为默认地图(true:重启机器人后自动加载,false:仅当前加载)

返回值

类型说明
ServiceOperationResponse包含 isSuccess() (boolean) 和 getMessage() (String)。

调用示例

java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;

// 加载地图
slamNaviClient.LoadMap("office_map", true);

List<String> GetMapList()

功能说明
获取可用地图列表。

参数说明

参数名类型必填/默认值说明
---无参数。

返回值

类型说明
List<String>地图名称列表。

调用示例

java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;
import java.util.List;

// 获取地图列表
List<String> maps = slamNaviClient.GetMapList();
for (String map : maps) {
    System.out.println("Found map: " + map);
}

CompletableFuture<UploadResourceResponse> uploadMap(String mapName, byte[] data, int timeoutSeconds)

功能说明
上传地图文件。

参数说明

参数名类型必填/默认值说明
mapNameString必填地图名称。
databyte[]必填地图文件二进制数据。
timeoutSecondsint必填超时时间(秒)。

返回值

类型说明
CompletableFuture<UploadResourceResponse>异步上传结果,包含状态和消息。

调用示例

java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;
import java.nio.file.Files;
import java.nio.file.Paths;

// 上传地图
byte[] mapData = Files.readAllBytes(Paths.get("office.pcd"));
slamNaviClient.uploadMap("office", mapData, 30).thenAccept(response -> {
    if (response.isSuccess()) {
        System.out.println("Upload success");
    }
});

CompletableFuture<byte[]> downloadMap(String mapName, int timeoutSeconds)

功能说明
下载地图文件。

参数说明

参数名类型必填/默认值说明
mapNameString必填地图名称。
timeoutSecondsint必填超时时间(秒)。

返回值

类型说明
CompletableFuture<byte[]>异步返回地图二进制数据。

调用示例

java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;
import java.nio.file.Files;
import java.nio.file.Paths;

// 下载地图
slamNaviClient.downloadMap("office", 30).thenAccept(data -> {
    if (data != null) {
        try {
            Files.write(Paths.get("office.pcd"), data);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
});

C++接口

GetAvailableMapsReply getAvailableMaps()

功能说明
获取所有可用的地图列表。

参数说明

参数名类型必填/默认值说明
---无参数。

返回值

类型说明
GetAvailableMapsReply包含 success 标志、message 消息和 maps 列表(std::vector<std::string>)。

调用示例

cpp
Lenovo::Daystar::SDK sdk;
auto &sysb = sdk.getSYSB();
if (sysb.connect()) {
    auto reply = sysb.getAvailableMaps();
    for (const auto &map_name : reply.maps) {
        std::cout << "Found map: " << map_name << std::endl;
    }
}

CommReply loadMap(const std::string &map_name, bool auto_reload = false)

功能说明
加载指定地图。

参数说明

参数名类型必填/默认值说明
map_nameconst std::string &必填地图名称。
auto_reloadbool默认: false是否设为默认地图(true:重启机器人后自动加载,false:仅当前加载)

返回值

类型说明
CommReply包含 success 标志和 message 消息。

调用示例

cpp
Lenovo::Daystar::SDK sdk;
if (!sdk.isConnected()) {
    std::cerr << "Can not connect SDK server with default settings"
              << std::endl;
    return 1;
} else {
    std::cout << "Connected with default settings" << std::endl;
}
auto &sysb = sdk.getSYSB();
if (sysb.connect()) {
    sysb.loadMap("office_map");
}

CommReply uploadMap(const std::string &map_name, const std::vector<uint8_t> &file_data)

功能说明
上传地图文件。

参数说明

参数名类型必填/默认值说明
map_nameconst std::string &必填地图名称。
file_dataconst std::vector<uint_8> &必填地图数据。

返回值

类型说明
CommReply包含 success 标志和 message 消息。

调用示例

cpp
// C++
Lenovo::Daystar::SDK sdk;

if (!sdk.isConnected()) {
    std::cerr << "Can not connect SDK server with default settings"
              << std::endl;
    return 1;
} else {
    std::cout << "Connected with default settings" << std::endl;
}
auto &sysb = sdk.getSYSB();
std::string name = getStringInput("输入上传地图文件的name: ");
std::string filepath = getStringInput("输入本地地图文件路径: ");
// 读取文件数据
std::ifstream file_stream(filepath, std::ios::binary);
if (!file_stream)
{
    std::cout << "✗ 无法打开文件: " << filepath << std::endl;
    break;
}
std::vector<uint8_t> file_data((std::istreambuf_iterator<char>(file_stream)), std::istreambuf_iterator<char>());
file_stream.close();

auto result = sysb.uploadMap(name, file_data);
if (result.success == true)
{
    std::cout << "✓ 地图文件上传成功: " << name << std::endl;
}
else
{
    std::cout << "✗ 地图文件上传失败: " << result.message << std::endl;
}

CommReply downloadMap(const std::string &map_name, const std::vector<uint8_t> &file_data)

功能说明
下载地图数据。

参数说明

参数名类型必填/默认值说明
map_nameconst std::string &必填地图名称。
file_dataconst std::vector<uint_8> &必填地图数据。

返回值

类型说明
CommReply包含 success 标志和 message 消息。

调用示例

cpp
// C++
Lenovo::Daystar::SDK sdk;

if (!sdk.isConnected()) {
    std::cerr << "Can not connect SDK server with default settings"
              << std::endl;
    return 1;
} else {
    std::cout << "Connected with default settings" << std::endl;
}
auto &sysb = sdk.getSYSB();
std::string name = getStringInput("输入下载地图文件的name: ");
std::vector<uint8_t> file_data;

auto result = sysb.downloadMap(name, file_data);
if (result.success == true)
{
    // 地图文件保存为.pcd格式
    std::string filename = name;
    if (filename.find(".pcd") == std::string::npos) {
        filename += ".pcd";
    }
                    
    std::string download_dir = ensureDownloadDir();
    std::string save_path = download_dir + "/" + filename;
                    
    std::ofstream out_file(save_path, std::ios::binary);
    if (!out_file) {
        std::cout << "✗ 无法创建文件: " << save_path << std::endl;
        break;
    }
                    
    out_file.write(reinterpret_cast<const char *>(file_data.data()), file_data.size());
    out_file.close();
                    
    if (out_file.fail()) {
        std::cout << "✗ 文件写入失败: " << save_path << std::endl;
    } else {
        std::cout << "✓ 地图文件下载成功" << std::endl;
        std::cout << "  文件大小: " << (file_data.size() / 1024.0 / 1024.0) << " MB" << std::endl;
        std::cout << "  保存路径: " << save_path << std::endl;
    }
}
else
{
    std::cout << "✗ 地图文件下载失败: " << result.message << std::endl;
}

ROS2接口

加载地图

该接口用于加载指定地图。

服务名称服务类型角色
/sdk/nav/load_mapapi_msgs::srv::LoadMap服务端

请求结构(Request)

字段名称类型描述
map_namestring地图名称。
auto_reloadbool是否设为默认地图(true:重启机器人后自动加载,false:仅当前加载)

响应结构(Response)

字段名称类型描述
successbool是否成功加载。
messagestring操作结果信息。

调用示例

bash
ros2 service call /sdk/nav/load_map api_msgs/srv/LoadMap '{map_name: "office_map", auto_reload: true}'

获取地图列表

该接口用于获取机器人中所有可用地图的名称列表。

服务名称服务类型角色
/sdk/nav/get_available_mapsapi_msgs::srv::GetAvailableMaps服务端

请求结构(Request)

字段名称类型描述
(无字段)-无需传入参数。

响应结构(Response)

字段名称类型描述
successbool是否成功获取。
map_namesstring[]可用地图名称列表。
messagestring操作结果信息。

调用示例

bash
ros2 service call /sdk/nav/get_available_maps api_msgs/srv/GetAvailableMaps '{}'

定位接口

Python接口

Optional[Dict] get_localization_state()

功能说明
获取定位状态。

参数说明

参数名类型必填/默认值说明
---无参数。

返回值

类型说明
Optional[Dict]包含以下字段: - success (bool): 是否获取成功 - loc_state (int): 定位状态 - 0: NORMAL (正常) - 1: LACKDATA (数据不足) - 2: LOST (定位丢失)

调用示例

python
from daystar_sdk.client import RobotClient
# 初始化客户端
with RobotClient(host='localhost', port=5252) as client:
    result = await client.get_localization_state()
    if result and result.get('success'):
        loc_state = result.get('loc_state')
        state_names = {0: "正常", 1: "数据不足", 2: "定位丢失"}
        print(f"定位状态: {state_names.get(loc_state, '未知')}")
    else:
        print(f"获取定位状态失败: {result.get('message') if result else 'Unknown error'}")

Optional[Dict] get_current_pose()

功能说明
获取当前位置。

参数说明

参数名类型必填/默认值说明
---无参数。

返回值

类型说明
Optional[Dict]包含以下字段: - success (bool): 是否获取成功 - message (str): 操作结果信息 - location_pose (Dict): 位置姿态信息 - position (Dict): 位置坐标 {x, y, z} - orientation (Dict): 姿态四元数

调用示例

python
from daystar_sdk.client import RobotClient
# 初始化客户端
with RobotClient(host='localhost', port=5252) as client:
    # 位置获取
    result = await client.get_current_pose()
    if result and result.get('success'):
        pose = result.get('location_pose', {})
        position = pose.get('position', {})
        orientation = pose.get('orientation', {})
        print(f"当前位置: x={position.get('x')}, y={position.get('y')}, z={position.get('z')}")
        print(f"当前姿态: x={orientation.get('x')}, y={orientation.get('y')}, z={orientation.get('z')}, w={orientation.get('w')}")
    else:
        print(f"获取位置失败: {result.get('message') if result else 'Unknown error'}")

Optional[Dict] relocalization(auto_relocalization, location_name="", location_pose=None, timeout=60.0)

功能说明
重定位。

参数说明

参数名类型必填/默认值说明
auto_relocalizationbool必填是否自动重定位。
location_namestr默认: ""位置点名称(可选)。
location_poseDict默认: None位置姿态(可选)。
timeoutfloat默认: 60.0超时时间(秒)。

返回值

类型说明
Optional[Dict]包含以下字段: - success (bool): 是否重定位成功 - message (str): 操作结果信息

调用示例

python
from daystar_sdk import WebSocketRobotClient
# 初始化客户端
with WebSocketRobotClient(host='localhost', port=5252) as client:
    # 自动重定位
    result = await client.relocalization(auto_relocalization=True)

C#接口

(bool success, string message) Relocalization(bool autoRelocation, string locationName = null, PoseData locationPose = null, int id = 212, int timeoutMs = 10000)

功能说明
重定位。

参数说明

参数名类型必填/默认值说明
autoRelocationbool必填是否自动重定位。
locationNamestring可选位置点名称。
locationPosePoseData可选位置姿态。
idint默认: 212请求ID(可忽略)。
timeoutMsint默认: 10000超时时间(毫秒)。

返回值

类型说明
(bool success, string message)操作结果元组。

调用示例

csharp
private RobotSDKManager _robotSDKManager;
private RobotNavigationClient _navigationClient;

_robotSDKManager = RobotSDKManager.Instance;
_navigationClient = _robotSDKManager.CreateRobotNavigationClient();

// 调用重定位
var (success, message) = _navigationClient.Relocalization(true);
if (success)
{
    Debug.Log($"✓ 重定位成功");
}

PoseStamped? GetCurrentPose(int id = 207, int timeoutMs = 5000)

功能说明
获取当前机器人位置(同步方法)。

参数说明

参数名类型必填/默认值说明
idint默认: 207请求ID(可忽略)。
timeoutMsint默认: 5000超时时间(毫秒)。

返回值

类型说明
PoseStamped?机器人当前位置信息。失败返回 null。 包含以下字段: - header (Header): 消息头 - stamp (string): 时间戳 - frame_id (string): 坐标系ID - pose (Pose3D): 姿态信息 - position (Point3D): 位置 {x, y, z} - orientation (Quaternion3D): 方向

调用示例

csharp
private RobotSDKManager _robotSDKManager;
private RobotNavigationClient _navigationClient;

_robotSDKManager = RobotSDKManager.Instance;
_navigationClient = _robotSDKManager.CreateRobotNavigationClient();

var pose = _navigationClient.GetCurrentPose();
if (pose.HasValue)
{
    var position = pose.Value.pose.position;
    Debug.Log($"位置: ({position.x}, {position.y}, {position.z})");
}

(bool success, int loc_state)? GetLocalizationStateSync(int id = 208, int timeoutMs = 5000)

功能说明
获取定位状态(同步方法)。

参数说明

参数名类型必填/默认值说明
idint默认: 208请求ID(可忽略)。
timeoutMsint默认: 5000超时时间(毫秒)。

返回值

类型说明
(bool success, int loc_state)?定位状态元组,包含是否成功和状态值。失败返回 null。 loc_state 状态值说明: - 0: NORMAL (正常) - 1: LACKDATA (数据不足) - 2: LOST (定位丢失)

调用示例

csharp
private RobotSDKManager _robotSDKManager;
private RobotNavigationClient _navigationClient;

_robotSDKManager = RobotSDKManager.Instance;
_navigationClient = _robotSDKManager.CreateRobotNavigationClient();

var result = _navigationClient.GetLocalizationStateSync(208, 5000);
if (result.HasValue)
{
    bool success = result.Value.success;
    int locState = result.Value.loc_state;
    Debug.Log($"Localization State: {locState}");
}

Java接口

int GetLocalizationState()

功能说明
获取当前定位状态。

参数说明

参数名类型必填/默认值说明
---无参数。

返回值

类型说明
int定位状态码。 - 0: NORMAL (正常) - 1: LACKDATA (数据不足) - 2: LOST (定位丢失)

调用示例

java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;

// 获取定位状态
int state = slamNaviClient.GetLocalizationState();
String stateStr;
switch (state) {
    case 0: stateStr = "正常"; break;
    case 1: stateStr = "数据不足"; break;
    case 2: stateStr = "丢失"; break;
    default: stateStr = "未知(" + state + ")"; break;
}
System.out.println("定位状态: " + stateStr);

LocationPose GetCurrentLocationPose()

功能说明
获取机器人当前位置姿态(结构化对象形式)。

参数说明

参数名类型必填/默认值说明
---无参数。

返回值

类型说明
LocationPose当前位置姿态对象。包含以下字段: - position (Point3D): 位置坐标 {x, y, z} - orientation (Quaternion3D): 姿态四元数

调用示例

java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;
import com.lenovo.daystar_bot_sdk_client.DataEntities.LocationPose;

// 获取当前位姿
LocationPose pose = slamNaviClient.GetCurrentLocationPose();
String poseStr = String.format("位置: (%.3f, %.3f, %.3f)\n姿态: (%.3f, %.3f, %.3f, %.3f)",
    pose.position.x, pose.position.y, pose.position.z,
    pose.orientation.x, pose.orientation.y, pose.orientation.z, pose.orientation.w);
System.out.println(poseStr);

void AutoRelocalization()

功能说明
触发自动重定位。

参数说明

参数名类型必填/默认值说明
---无参数。

返回值

类型说明
void无返回值。

调用示例

java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;

// 触发自动重定位
slamNaviClient.AutoRelocalization();
System.out.println("已触发自动重定位");

void RelocateWithName(boolean autoRelocalize, String locationName)

功能说明
使用命名位置点进行重定位。

参数说明

参数名类型必填/默认值说明
autoRelocalizeboolean必填是否先尝试自动重定位。
locationNameString必填位置点名称。

返回值

类型说明
void无返回值。

调用示例

java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;

// 使用已知点位重定位
slamNaviClient.RelocateWithName(true, "home_position");

void RelocateWithPosition(boolean autoRelocalize, LocationPose poseData)

功能说明
使用指定位姿进行重定位。

参数说明

参数名类型必填/默认值说明
autoRelocalizeboolean必填是否先尝试自动重定位。
poseDataLocationPose必填目标位姿(包含位置和姿态)。

返回值

类型说明
void无返回值。

调用示例

java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;
import com.lenovo.daystar_bot_sdk_client.DataEntities.LocationPose;

// 使用坐标位姿重定位
LocationPose pose = new LocationPose(/* args */);
slamNaviClient.RelocateWithPosition(true, pose);

C++接口

bool getLocalizationState(int &loc_state)

功能说明
获取定位系统状态。

参数说明

参数名类型必填/默认值说明
loc_stateint &必填返回定位状态。

返回值

类型说明
booltrue 成功,false 失败。

调用示例

cpp
Lenovo::Daystar::SDK sdk;
auto &sysb = sdk.getSYSB();

if (sysb.connect()) {
    int loc_state;
    if (sysb.getLocalizationState(loc_state)) {
        std::cout << "定位状态: " << loc_state << std::endl;
    }
}

bool getCurrentPose(Pose &current_pose)

功能说明
获取机器人当前位置。

参数说明

参数名类型必填/默认值说明
current_posePose &必填返回当前位置信息。

返回值

类型说明
booltrue 成功,false 失败。

调用示例

cpp
Lenovo::Daystar::SDK sdk;
auto &sysb = sdk.getSYSB();

if (sysb.connect()) {
    Pose current_pose;
    if (sysb.getCurrentPose(current_pose)) {
        std::cout << "当前位置: ("
                  << current_pose.position.x << ", "
                  << current_pose.position.y << ", "
                  << current_pose.position.z << ")" << std::endl;
    }
}

CommReply relocalization(bool auto_relocalization, const std::string &location_name, Pose location_pose, int timeout = 60)

功能说明
重定位。

参数说明

参数名类型必填/默认值说明
auto_relocalizationbool必填是否自动重定位,设为true时忽略后两个参数。
location_nameconst std::string &必填位置点名称(可选,传空字符串)。
location_posePose必填位置点坐标(可选,传默认Pose())。
timeoutint默认: 60超时时间。

返回值

类型说明
CommReply包含 success 标志和 message 消息

调用示例

cpp
Lenovo::Daystar::SDK sdk;
auto &sysb = sdk.getSYSB();

if (sysb.connect()) {
    // 自动重定位
    auto reply = sysb.relocalization(true, "", Pose());
    if (reply.success) {
        std::cout << "重定位指令已发送" << std::endl;
    }
}

ROS2接口

获取定位状态

该接口用于获取机器人当前的定位状态。

服务名称服务类型角色
/sdk/nav/get_localization_stateapi_msgs::srv::GetLocalizationState服务端

请求结构(Request)

字段名称类型描述
(无字段)-无需传入参数。

响应结构(Response)

字段名称类型描述
successbool是否成功获取。
loc_stateuint8定位状态码。
messagestring操作结果信息。

定位状态码

描述
0NORMAL(定位正常)
1LACKDATA(数据不足)
2LOST(定位丢失)

调用示例

bash
ros2 service call /sdk/nav/get_localization_state api_msgs/srv/GetLocalizationState '{}'

获取当前位置

该接口用于获取机器人当前在地图中的位置坐标(仅在定位状态正常时可用)。

服务名称服务类型角色
/sdk/nav/get_current_poseapi_msgs::srv::GetCurrentPose服务端

请求结构(Request)

字段名称类型描述
(无字段)-无需传入参数。

响应结构(Response)

字段名称类型描述
location_posegeometry_msgs/Pose机器人当前位置和姿态。
successbool是否成功获取。
messagestring操作结果信息。

调用示例

bash
ros2 service call /sdk/nav/get_current_pose api_msgs/srv/GetCurrentPose '{}'

重定位

该接口用于触发机器人重定位,可指定自动重定位或手动指定位置。

服务名称服务类型角色
/sdk/nav/set_localizationapi_msgs::srv::SetLocalization服务端

请求结构(Request)

字段名称类型描述
auto_relocationbool是否自动重定位(true 时忽略后两个参数)。
location_namestring指定重定位的点位名称(可选,传空字符串)。
location_posegeometry_msgs/Pose指定重定位的坐标(可选)。

响应结构(Response)

字段名称类型描述
successbool是否成功发送重定位指令。
messagestring操作结果信息。

调用示例

bash
# 自动重定位
ros2 service call /sdk/nav/set_localization api_msgs/srv/SetLocalization '{auto_relocation: true, location_name: ""}'

添加导航点位

Python接口

Optional[Dict] add_location(location_name, timeout=30, use_virtual_pose=False, virtual_pose=None)

功能说明
添加导航点位。

参数说明

参数名类型必填/默认值说明
location_namestr必填位置点名称。
timeoutint默认: 30超时时间,单位秒。
use_virtual_posebool默认: False (可选)是否使用虚拟位姿(指定坐标添加点位)
virtual_posePose对象默认: None (可选)虚拟位姿数据(当use_virtual_pose为True时必填)

返回值

类型说明
Optional[Dict]包含以下字段: - success (bool): 是否添加成功 - message (str): 操作结果信息 - location_pose (Dict): 位置坐标信息 - map_name (str): 地图名称

调用示例

python
from daystar_sdk import WebSocketRobotClient
# 初始化客户端
with WebSocketRobotClient(host='192.168.144.105', port=5252) as client:
    
    # 添加当前位置为导航点
    add_result = await client.add_location("home_position", timeout=30)
    if add_result and add_result.get('success'):
        print(f"成功添加导航点位: {location_name}")
        print(f"位置信息: {add_result}")
    else:
        print(f"添加导航点位失败: {add_result}")

    
    # 添加虚拟点位(使用指定坐标,无需机器人到达该位置)
    virtual_pose = Pose(
        position=Point(x=vx, y=vy, z=vz),
        orientation=Quaternion(x=qx, y=qy, z=qz, w=qw)
    )
    
    # 调用add_location方法,设置use_virtual_pose=True
    virtual_result = await client.add_location(
        "home_position",
        timeout=30,
        use_virtual_pose=True,
        virtual_pose=virtual_pose
    )

    if virtual_result and virtual_result.get('success'):
        print(f"成功添加虚拟点位: {virtual_location_name}")
        print(f"返回位置信息: {virtual_result.get('location_pose', {})}")
        print(f"所属地图: {virtual_result.get('map_name', 'unknown')}")
    else:
        print(f"添加虚拟点位失败: {virtual_result}")

C#接口

(bool success, string message) AddLocation(string locationName, int timeout = 30, int id = 200)

功能说明
添加当前位置为导航点位。

参数说明

参数名类型必填/默认值说明
locationNamestring必填位置点名称。
timeoutint默认: 30超时时间(秒)。
idint默认: 200请求ID(可忽略)。

返回值

类型说明
(bool success, string message)操作结果元组。

调用示例

csharp
private RobotSDKManager _robotSDKManager;
private RobotNavigationClient _navigationClient;

_robotSDKManager = RobotSDKManager.Instance;
_navigationClient = _robotSDKManager.CreateRobotNavigationClient();

string locationName = $"Location_{System.DateTime.Now:yyyyMMdd_HHmmss}";
var result = _navigationClient.AddLocation(locationName);
if (result.success)
{
    Debug.Log($"Successfully added location '{locationName}'");
}

(bool success, string message) AddLocation(string locationName, float x, float y, float z, float orientationX, float orientationY, float orientationZ, float orientationW, int timeout = 30, int id = 200, int timeoutMs = 5000)

功能说明
使用指定坐标(虚拟点位)添加导航点位。

参数说明

参数名类型必填/默认值说明
locationNamestring必填位置点名称。
x, y, zfloat必填位置坐标。
orientationX-Wfloat必填方向四元数。
timeoutint默认: 30超时时间。
idint默认: 200请求ID(可忽略)。
timeoutMsint默认: 5000响应超时时间。

返回值

类型说明
(bool success, string message)操作结果元组。

调用示例

csharp
private RobotSDKManager _robotSDKManager;
private RobotNavigationClient _navigationClient;

_robotSDKManager = RobotSDKManager.Instance;
_navigationClient = _robotSDKManager.CreateRobotNavigationClient();

// 添加虚拟点位
var result = _navigationClient.AddLocation("virtual_point", 1.0f, 0, 0, 0, 0, 0, 1.0f);
if (result.success)
{
    Debug.Log("Successfully added virtual location");
}

Java接口

void AddLocation(String locationName, boolean use_virtual_pose, LocationPose virtual_pose)

功能说明
添加一个命名位置点(站点/标记点)。

参数说明

参数名类型必填/默认值说明
locationNameString必填位置点名称。
use_virtual_poseboolean必填是否使用虚拟位姿,传false表示使用当前机器人位姿。
virtual_poseLocationPose可选虚拟位姿,当use_virtual_pose为true时必须提供,否则传null。

返回值

类型说明
void无返回值。

调用示例

java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;

// 添加当前位置为导航点位
String locationName = "home_position";
slamNaviClient.AddLocation(locationName, false, null);
System.out.println("✓ 添加位置成功: " + locationName);

C++接口

AddLocationReply addLocation(const std::string &location_name, int timeout = 30, bool use_virtual_pose = false, Pose virtual_pose = Pose())

功能说明
添加位置点。

参数说明

参数名类型必填/默认值说明
location_nameconst std::string &必填位置点名称。
timeoutint默认: 30超时时间(秒)。
use_virtual_posebool默认: false是否使用虚拟位姿。
virtual_posePose可选虚拟位姿数据。

返回值

类型说明
AddLocationReply包含 success 标志、message 消息、location_posemap_name

调用示例

cpp
Lenovo::Daystar::SDK sdk;
auto &sysb = sdk.getSYSB();

if (sysb.connect()) {
    if (sysb.addLocation("办公室入口", 30)) {
        std::cout << "位置点'办公室入口'添加成功" << std::endl;
    } else {
        std::cerr << "位置点添加失败" << std::endl;
    }
}

ROS2接口

添加导航点位

该接口用于在当前机器人位置或指定虚拟坐标处添加导航点位。

服务名称服务类型角色
/sdk/nav/add_locationapi_msgs::srv::AddLocation服务端

请求结构(Request)

字段名称类型描述
location_namestring点位名称。
timeoutint32超时时间(秒)。
use_virtual_posebool是否使用虚拟坐标添加点位(true 时使用 virtual_pose)。
virtual_posegeometry_msgs/Pose虚拟点位坐标(use_virtual_pose 为 true 时有效)。

响应结构(Response)

字段名称类型描述
location_posegeometry_msgs/Pose实际保存的点位坐标。
map_namestring所属地图名称。
successbool是否成功添加。
messagestring操作结果信息。

调用示例

bash
# 在当前位置添加点位
ros2 service call /sdk/nav/add_location api_msgs/srv/AddLocation '{location_name: "办公室入口", timeout: 30, use_virtual_pose: false}'

# 添加虚拟点位
ros2 service call /sdk/nav/add_location api_msgs/srv/AddLocation '{location_name: "虚拟点位A", timeout: 30, use_virtual_pose: true, virtual_pose: {position: {x: 1.0, y: 2.0, z: 0.0}, orientation: {x: 0.0, y: 0.0, z: 0.0, w: 1.0}}}'

删除点位接口

Python接口

Optional[Dict] delete_location(location_name)

功能说明
删除导航点位。

参数说明

参数名类型必填/默认值说明
location_namestr必填要删除的位置点名称。

返回值

类型说明
Optional[Dict]包含以下字段: - success (bool): 是否删除成功 - message (str): 操作结果信息

调用示例

python
from daystar_sdk import WebSocketRobotClient
# 初始化客户端
with WebSocketRobotClient(host='localhost', port=5252) as client:
    result = client.delete_location("position")

C#接口

(bool success, string message) DeleteLocation(string locationName, int id = 201, int timeoutMs = 5000)

功能说明
删除指定的导航点位。

参数说明

参数名类型必填/默认值说明
locationNamestring必填要删除的位置点名称。
idint默认: 201请求ID(可忽略)。
timeoutMsint默认: 5000超时时间(毫秒)。

返回值

类型说明
(bool success, string message)操作结果元组。

调用示例

csharp
private RobotSDKManager _robotSDKManager;
private RobotNavigationClient _navigationClient;

_robotSDKManager = RobotSDKManager.Instance;
_navigationClient = _robotSDKManager.CreateRobotNavigationClient();

var result = _navigationClient.DeleteLocation("location_name");
if (result.success)
{
    Debug.Log("删除成功"); 
}

Java接口

void DeleteLocation(String locationName)

功能说明
删除一个命名位置点。

参数说明

参数名类型必填/默认值说明
locationNameString必填要删除的位置点名称。

返回值

类型说明
void无返回值。

调用示例

java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;

// 删除位置点
String locationName = "home_position";
slamNaviClient.DeleteLocation(locationName);
System.out.println("✓ 删除位置成功: " + locationName);

C++接口

bool deleteLocation(const std::string &location_name)

功能说明
删除位置点。

参数说明

参数名类型必填/默认值说明
location_nameconst std::string &必填位置点名称。

返回值

类型说明
booltrue 成功,false 失败。

调用示例

cpp
Lenovo::Daystar::SDK sdk;
auto &sysb = sdk.getSYSB();

if (sysb.connect()) {
    if (sysb.deleteLocation("办公室入口")) {
        std::cout << "位置点'办公室入口'删除成功" << std::endl;
    } else {
        std::cerr << "位置点删除失败" << std::endl;
    }
}

ROS2接口

删除点位

该接口用于删除指定名称的导航点位。

服务名称服务类型角色
/sdk/nav/delete_locationapi_msgs::srv::DeleteLocation服务端

请求结构(Request)

字段名称类型描述
location_namestring要删除的点位名称。

响应结构(Response)

字段名称类型描述
successbool是否成功删除。
messagestring操作结果信息。

调用示例

bash
ros2 service call /sdk/nav/delete_location api_msgs/srv/DeleteLocation '{location_name: "办公室入口"}'

获取可用点位接口

Python接口

Optional[Dict] get_available_locations()

功能说明
获取现有点位。

参数说明

参数名类型必填/默认值说明
---无参数。

返回值

类型说明
Optional[Dict]包含以下字段: - location_names (List[str]): 位置点名称列表

调用示例

python
from daystar_sdk import WebSocketRobotClient
# 初始化客户端
with WebSocketRobotClient(host='localhost', port=5252) as client:
    result = client.get_available_locations()
    location_names = result.get('location_names', [])

C#接口

List<string> GetAvailableLocations(int id = 202, int timeoutMs = 5000)

功能说明
获取所有可用的导航点位(同步方法,直接返回位置列表)。

参数说明

参数名类型必填/默认值说明
idint默认: 202请求ID(可忽略)。
timeoutMsint默认: 5000超时时间(毫秒)。

返回值

类型说明
List<string>位置名称列表,失败时返回空列表。

调用示例

csharp
private RobotSDKManager _robotSDKManager;
private RobotNavigationClient _navigationClient;

_robotSDKManager = RobotSDKManager.Instance;
_navigationClient = _robotSDKManager.CreateRobotNavigationClient();

var locations = _navigationClient.GetAvailableLocations();
if (locations.Count > 0)
{
    foreach (var loc in locations)
    {
        Debug.Log($"Location: {loc}");
    }
}

Java接口

List<String> GetLocationList()

功能说明
获取已保存的位置点名称列表。

参数说明

参数名类型必填/默认值说明
---无参数。

返回值

类型说明
List<String>位置点名称列表。

调用示例

java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;
import java.util.List;

// 获取点位列表
List<String> locations = slamNaviClient.GetLocationList();
System.out.println("✓ 获取到 " + locations.size() + " 个点位:");
for (String loc : locations) {
    System.out.println("  - " + loc);
}

LocationListDetails GetLocationListDetails()

功能说明
获取已保存的位置点详细信息列表。

参数说明

参数名类型必填/默认值说明
---无参数。

返回值

类型说明
LocationListDetails包含详细位置点信息的对象。

调用示例

java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;
import com.lenovo.daystar_bot_sdk_client.DataEntities.LocationListDetails;

LocationListDetails details = slamNaviClient.GetLocationListDetails();
// 处理 details 数据

C++接口

bool getAvailableLocations(std::vector<std::string> &location_names, std::vector<Pose> &location_poses)

功能说明
获取所有可用的位置点。

参数说明

参数名类型必填/默认值说明
location_namesstd::vector<std::string> &必填返回位置点名称列表。
location_posesstd::vector<Pose> &必填返回位置点坐标列表。

返回值

类型说明
booltrue 成功,false 失败。

调用示例

cpp
Lenovo::Daystar::SDK sdk;
auto &sysb = sdk.getSYSB();

if (sysb.connect()) {
    std::vector<std::string> names;
    std::vector<Pose> poses;
    
    if (sysb.getAvailableLocations(names, poses)) {
        std::cout << "可用位置点:" << std::endl;
        for (size_t i = 0; i < names.size(); ++i) {
            std::cout << "  " << names[i] << " - ("
                      << poses[i].position.x << ", "
                      << poses[i].position.y << ", "
                      << poses[i].position.z << ")" << std::endl;
        }
    }
}

ROS2接口

获取可用点位

该接口用于获取当前地图中所有已保存的导航点位列表。

服务名称服务类型角色
/sdk/nav/get_available_locationsapi_msgs::srv::GetAvailableLocations服务端

请求结构(Request)

字段名称类型描述
(无字段)-无需传入参数。

响应结构(Response)

字段名称类型描述
successbool是否成功获取。
location_namesstring[]点位名称列表。
location_posesgeometry_msgs/Pose[]对应点位坐标列表。
messagestring操作结果信息。

调用示例

bash
ros2 service call /sdk/nav/get_available_locations api_msgs/srv/GetAvailableLocations '{}'

导航控制接口

在导航控制接口中,可通过 TravelParams 配置详细的导航行为。如果不需要自定义配置,可以忽略,系统会使用默认的导航参数。

导航详细参数说明

参数名类型说明值域/备注
speed_modeint速度模式0=低速, 1=中速, 2=高速。 默认中速
distance_tolerancefloat到达精确度(位置容差)目标点判定范围,单位:米 默认0.3m
gaitint步态模式1=GAIT_AUTO(IS/GS默认MPC, MC/MX默认RL), 2=GAIT_TROT(对角小跑), 3=GAIT_CRAWL(爬行), 4=GAIT_AMBLE(缓行), 5=GAIT_SLOPE(斜坡), 6=GAIT_SENSE_STAIR(感知楼梯), 7=GAIT_NORMAL_STAIR(普通楼梯), 8=GAIT_STEEP_STAIR(陡峭楼梯), 9=GAIT_GRADUAL_STAIR(平缓楼梯), 10=GAIT_RL(强化学习步态)
obstacle_params.disable_body_obstacle_avoidancebool是否禁用停障true=禁用, false=启用 默认false
obstacle_params.obstacle_avoidance_paddingfloat[]停障参数默认[0.1, 0.1, 0.1, 0.1]
ignore_final_yawbool是否忽略最终偏航角true=忽略, false=不忽略 默认false
path_following_modeint路径跟随模式1=默认巡线模式(推荐), 2=关闭循线(自由导航模式), 3=自动选择(智能导航时用) 默认巡线模式
direction_constraintint方向约束1=无限制, 2=禁止掉头, 3=正走, 4=倒走 默认正走

Python接口

Optional[Dict] navigate_to_location(location_name, timeout=60, travel_params=None)

功能说明
导航到预设位置。可以通过 travel_params 指定详细导航参数。

参数说明

参数名类型必填/默认值说明
location_namestr必填目标位置点名称。
timeoutint默认: 60导航超时时间,单位秒。
travel_paramsTravelParams默认: None(可选)自定义导航参数对象。

返回值

类型说明
Optional[Dict]包含以下字段: - success (bool): 是否启动成功 - message (str): 操作结果信息

调用示例

python
from daystar_sdk import (WebSocketRobotClient, TravelParams)

# 初始化客户端
with WebSocketRobotClient(host='192.168.144.105', port=5252) as client:
    # 默认导航
    client.navigate_to_location("home_position")

    # === 速度模式 ===
    print("\n【速度模式】")
    print("  0=低速, 1=中速, 2=高速")
    speed_input = input("速度模式 (默认1中速): ").strip()
    speed_mode_val = int(speed_input) if speed_input else SpeedMode.MEDIUM_SPEED_MODE
    
    # === 路径跟踪模式 ===
    print("\n【路径跟踪模式】")
    print(" 1=默认巡线(推荐), 2=关闭循线, 3=自动选择")
    path_mode_input = input("路径跟踪模式 (默认1): ").strip()
    path_following_mode = int(path_mode_input) if path_mode_input else TravelParams.PATH_MODE_DEFAULT
    
    # === 方向约束 ===
    print("\n【方向约束】")
    print(" 1=无限制, 2=禁止掉头, 3=正走, 4=倒走")
    dir_input = input("方向约束 (默认3正走): ").strip()
    direction_constraint = int(dir_input) if dir_input else TravelParams.DIRECTION_CONSTRAINT_FORWARD
    
    # === 高度模式 ===
    print("\n【高度模式】")
    print(" 1=正常, 2=降低, 3=升高")
    height_input = input("高度模式 (默认1): ").strip()
    height = int(height_input) if height_input else TravelParams.HEIGHT_NORMAL
    
    # === 容差参数 ===
    print("\n【容差参数】")
    dist_input = input("距离容差 (m, 默认0.3): ").strip()
    distance_tolerance = float(dist_input) if dist_input else 0.3
    
    yaw_input = input("偏航角容差 (rad, 默认0.1): ").strip()
    yaw_angle_tolerance = float(yaw_input) if yaw_input else 0.1
    
    # === 航向控制 ===
    print("\n【航向控制】")
    ignore_yaw_input = input("忽略最终偏航角? (y/N, 默认不忽略): ").strip().lower()
    ignore_final_yaw = ignore_yaw_input in ['y', 'yes', '是']
    
    # === 障碍物避障 ===
    print("\n【障碍物避障】")
    disable_obs_input = input("禁用停障? (y/N, 默认不禁用): ").strip().lower()
    disable_body_obstacle_avoidance = disable_obs_input in ['y', 'yes', '是']
    
    # === 步态模式 ===
    print("\n【步态模式】")
    print(" 1=GAIT_AUTO(推荐), 2=GAIT_TROT, 3=GAIT_CRAWL, 等...")
    gait_input = input("步态模式 (默认1自动): ").strip()
    gait_mode = int(gait_input) if gait_input else Gait.GAIT_AUTO

    # 带参数导航
    travel_params = TravelParams(
        speed_mode=SpeedMode(value=speed_mode_val),
        distance_tolerance=distance_tolerance,
        yaw_angle_tolerance=yaw_angle_tolerance,
        gait=Gait(gait=gait_mode, gait_name="OrdinaryGait"),
        obstacle_params=ObstacleParams(
            disable_body_obstacle_avoidance=disable_body_obstacle_avoidance,
            obstacle_avoidance_padding=[0.1, 0.1, 0.1, 0.1]
        ),
        ignore_final_yaw=ignore_final_yaw,
        path_following_mode=path_following_mode,
        direction_constraint=direction_constraint,
        height=height,
        extra_info_fmt=extra_info_fmt,
        extra_info=extra_info
    )
    client.navigate_to_location("office", timeout=30, travel_params=travel_params)

Optional[Dict] navigate_to_xyz(x, y, z, timeout=60, frame_id="map", travel_params=None)

功能说明
导航到指定坐标。

参数说明

参数名类型必填/默认值说明
xfloat必填x坐标。
yfloat必填y坐标。
zfloat必填z坐标。
timeoutint默认: 60导航超时时间,单位秒。
frame_idstr默认: "map"坐标系名称。
travel_paramsTravelParams默认: None(可选)自定义导航参数对象。

返回值

类型说明
Optional[Dict]包含以下字段: - success (bool): 是否启动成功 - message (str): 操作结果信息

调用示例

python
from daystar_sdk import (WebSocketRobotClient, TravelParams)

# 初始化客户端
with WebSocketRobotClient(host='192.168.144.105', port=5252) as client:
    client.navigate_to_xyz(x=5.0, y=3.0, z=0.0, timeout=30, travel_params=None)

C#接口

void NavigateToLocation(string locationName, TravelParams travelParams, int timeout = 60, int id = 203)

功能说明
导航到预设位置点(带详细导航参数)。

参数说明

参数名类型必填/默认值说明
locationNamestring必填目标位置点名称。
travelParamsTravelParams必填导航参数对象。
timeoutint默认: 60导航超时时间(秒)。
idint默认: 203请求ID(可忽略)。

返回值

类型说明
void无返回值。

调用示例

csharp
private RobotSDKManager _robotSDKManager;
private RobotNavigationClient _navigationClient;

_robotSDKManager = RobotSDKManager.Instance;
_navigationClient = _robotSDKManager.CreateRobotNavigationClient();

var params = new TravelParams();
params.speed_mode = 2; // Low speed
_navigationClient.NavigateToLocation("location_name", params);

void NavigateToPosition(float x, float y, float z, TravelParams travelParams, int timeout = 60, string frameId = "map", int id = 205)

功能说明
导航到指定坐标位置(带详细导航参数)。

参数说明

参数名类型必填/默认值说明
x, y, zfloat必填目标坐标。
travelParamsTravelParams必填导航参数对象。
timeoutint默认: 60导航超时时间。
frameIdstring默认: "map"坐标系。
idint默认: 205请求ID(可忽略)。

返回值

类型说明
void无返回值。

调用示例

csharp
private RobotSDKManager _robotSDKManager;
private RobotNavigationClient _navigationClient;

_robotSDKManager = RobotSDKManager.Instance;
_navigationClient = _robotSDKManager.CreateRobotNavigationClient();

var params = new TravelParams();
params.path_following_mode = 1; // Default
_navigationClient.NavigateToPosition(1.0f, 0.0f, 0.0f, params);

void NavigateToLocation(string locationName, int timeout = 60, int id = 203)

功能说明
导航到预设位置点。

参数说明

参数名类型必填/默认值说明
locationNamestring必填目标位置点名称。
timeoutint默认: 60导航超时时间(秒)。
idint默认: 203请求ID(可忽略)。

返回值

类型说明
void无返回值。

调用示例

csharp
private RobotSDKManager _robotSDKManager;
private RobotNavigationClient _navigationClient;

_robotSDKManager = RobotSDKManager.Instance;
_navigationClient = _robotSDKManager.CreateRobotNavigationClient();
_navigationClient.NavigateToLocation("location_name");

void NavigateToPosition(float x, float y, float z, int timeout = 60, string frameId = "map", int id = 205)

功能说明
导航到指定坐标位置(XYZ坐标)。

参数说明

参数名类型必填/默认值说明
xfloat必填x坐标。
yfloat必填y坐标。
zfloat必填z坐标。
timeoutint默认: 60导航超时时间(秒)。
frameIdstring默认: "map"坐标系名称。
idint默认: 205请求ID(可忽略)。

返回值

类型说明
void无返回值。

调用示例

csharp
private RobotSDKManager _robotSDKManager;
private RobotNavigationClient _navigationClient;

_robotSDKManager = RobotSDKManager.Instance;
_navigationClient = _robotSDKManager.CreateRobotNavigationClient();
_navigationClient.NavigateToPosition(1.0f, 0.0f, 0.0f);

Java接口

void NavigateToLocation(String locationName, Optional<MsgTravelParams> params, int timeout)

功能说明
导航到指定命名位置点。

参数说明

参数名类型必填/默认值说明
locationNameString必填目标位置点名称。
paramsOptional<MsgTravelParams>必填导航参数配置,传Optional.empty()使用默认参数。
timeoutint必填导航超时时间(单位:秒)。

返回值

类型说明
void无返回值。

调用示例

java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;
import java.util.Optional;

// 导航到位置点
String locationName = "home_position";
int timeout = 60;
slamNaviClient.NavigateToLocation(locationName, Optional.empty(), timeout);
System.out.println("✓ 开始导航到位置: " + locationName);

void NavigateToPosition(LocationPose pose, Optional<MsgTravelParams> params, int timeout, String frameId)

功能说明
导航到指定坐标位姿。

参数说明

参数名类型必填/默认值说明
poseLocationPose必填目标位姿。
paramsOptional<MsgTravelParams>必填导航参数配置,传Optional.empty()使用默认参数。
timeoutint必填导航超时时间(单位:秒)。
frameIdString必填坐标系标识(例如 "map")。

返回值

类型说明
void无返回值。

调用示例

java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;
import com.lenovo.daystar_bot_sdk_client.DataEntities.*;
import java.util.Optional;

// 导航到坐标位置
LocationPose pose = new LocationPose(
    new Point3D(1.0f, 0.0f, 0.0f),
    new Quaternion3D(0.0f, 0.0f, 0.0f, 1.0f)
);
slamNaviClient.NavigateToPosition(pose, Optional.empty(), 60, "map");
System.out.println("✓ 开始导航到坐标: (1.0, 0.0, 0.0)");

void NavigateViaPoses(List<PoseStamped> exec_waypoints, Optional<MsgTravelParams> params, int execType)

功能说明
通过一系列位姿点进行导航(路径导航)。

参数说明

参数名类型必填/默认值说明
exec_waypointsList<PoseStamped>必填途经点列表。
paramsOptional<MsgTravelParams>必填导航参数。
execTypeint必填执行类型。

返回值

类型说明
void无返回值。

调用示例

java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;
import java.util.Collections;
import java.util.Optional;

// 路径导航示例
slamNaviClient.NavigateViaPoses(Collections.emptyList(), Optional.empty(), 0);

C++接口

bool navigateToLocation(const std::string &location_name, int timeout = 60, const MsgTravelParams& travel_params = MsgTravelParams())

功能说明
导航到指定位置点。

参数说明

参数名类型必填/默认值说明
location_nameconst std::string &必填目标位置点名称。
timeoutint默认: 60超时时间(秒)。
travel_paramsconst MsgTravelParams &默认: 默认构造导航参数对象。

返回值

类型说明
booltrue 成功,false 失败。

调用示例

cpp
Lenovo::Daystar::SDK sdk;
auto &sysb = sdk.getSYSB();

// 默认参数导航
if (sysb.connect()) {
    if (sysb.navigateToLocation("办公室入口", 60)) {
        std::cout << "开始导航到'办公室入口'" << std::endl;
    }
}

// 带参数导航
if (sysb.connect()) {
    MsgTravelParams params;
    params.speed_mode.value = 2; // LOW
    sysb.navigateToLocation("会议室", 60, params);
}

bool navigateToPosition(const PoseStamped &target_pose, int timeout = 60, const MsgTravelParams& travel_params = MsgTravelParams())

功能说明
导航到指定姿态。

参数说明

参数名类型必填/默认值说明
target_poseconst PoseStamped &必填目标姿态。
timeoutint默认: 60超时时间(秒)。
travel_paramsconst MsgTravelParams &默认: 默认构造导航参数对象。

返回值

类型说明
booltrue 成功,false 失败。

调用示例

cpp
Lenovo::Daystar::SDK sdk;
auto &sysb = sdk.getSYSB();

if (sysb.connect()) {
    // 创建目标姿态
    auto target_pose = sysb.createPose(5.0f, 3.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, "map");

    if (sysb.navigateToPosition(target_pose, 60)) {
        std::cout << "开始导航到指定姿态" << std::endl;
    } else {
        std::cerr << "导航启动失败" << std::endl;
    }
}

ROS2接口

导航到指定点位

该接口用于控制机器人导航到已保存的命名点位。

服务名称服务类型角色
/sdk/nav/navigate_to_locationapi_msgs::srv::NavigateToLocation服务端

请求结构(Request)

字段名称类型描述
location_namestring目标点位名称。
travel_paramsapi_msgs/TravelParams导航参数(可选,不填使用默认值)。
timeoutint32超时时间(秒)。

响应结构(Response)

字段名称类型描述
successbool导航是否成功完成。
messagestring操作结果信息。

调用示例

bash
ros2 service call /sdk/nav/navigate_to_location api_msgs/srv/NavigateToLocation '{location_name: "办公室入口", timeout: 60}'

导航到指定坐标

该接口用于控制机器人导航到地图中的指定坐标位置。

服务名称服务类型角色
/sdk/nav/navigate_to_positionapi_msgs::srv::NavigateToPosition服务端

请求结构(Request)

字段名称类型描述
target_posegeometry_msgs/PoseStamped目标位置和姿态(包含 frame_id)。
travel_paramsapi_msgs/TravelParams导航参数(可选,不填使用默认值)。
timeoutint32超时时间(秒)。

响应结构(Response)

字段名称类型描述
successbool导航是否成功完成。
messagestring操作结果信息。

调用示例

bash
ros2 service call /sdk/nav/navigate_to_position api_msgs/srv/NavigateToPosition '{target_pose: {header: {frame_id: "map"}, pose: {position: {x: 5.0, y: 3.0, z: 0.0}, orientation: {x: 0.0, y: 0.0, z: 0.0, w: 1.0}}}, timeout: 60}'

多航点导航

该接口用于控制机器人按顺序经过多个航点完成导航。

服务名称服务类型角色
/sdk/nav/navigation_via_posesapi_msgs::srv::NavigationViaPoses服务端

请求结构(Request)

字段名称类型描述
exec_waypointsgeometry_msgs/PoseStamped[]航点列表(按顺序执行)。
exec_typeuint8执行模式。
travel_paramsapi_msgs/TravelParams导航参数(可选,不填使用默认值)。

exec_type 取值

描述
1AUTONOMOUS(自主规划)
2STRICTTRACK(严格跟踪)
3FITTING_STRAIGHT(直线拟合)
4FITTING_CIRCULAR(圆弧拟合)
5FITTING_SINE(正弦曲线拟合)

响应结构(Response)

字段名称类型描述
successbool导航是否成功完成。
messagestring操作结果信息。

调用示例

bash
ros2 service call /sdk/nav/navigation_via_poses api_msgs/srv/NavigationViaPoses '{exec_type: 1, exec_waypoints: [{header: {frame_id: "map"}, pose: {position: {x: 1.0, y: 0.0, z: 0.0}, orientation: {w: 1.0}}}]}'

取消导航控制

Python接口

Optional[Dict] cancel_navigation(task_id="")

功能说明
取消导航控制。

参数说明

参数名类型必填/默认值说明
task_idstr默认: ""任务 ID,空字符串表示取消当前任务。

返回值

类型说明
Optional[Dict]包含以下字段: - success (bool): 是否取消成功 - message (str): 操作结果信息

调用示例

python
from daystar_sdk import WebSocketRobotClient
# 初始化客户端
with WebSocketRobotClient(host='localhost', port=5252) as client:
    result = await client.cancel_navigation()
    if result and result.get('success'):
        print(f"取消导航成功: {result.get('message')}")
    else:
        print(f"取消导航失败: {result.get('message') if result else 'Unknown error'}")

C#接口

void CancelNavigation(string taskId = "", int id = 206)

功能说明
取消当前导航任务。

参数说明

参数名类型必填/默认值说明
taskIdstring默认: ""任务ID,空字符串表示取消当前任务。
idint默认: 206请求ID(可忽略)。

返回值

类型说明
void无返回值。

调用示例

csharp
private RobotSDKManager _robotSDKManager;
private RobotNavigationClient _navigationClient;

_robotSDKManager = RobotSDKManager.Instance;
_navigationClient = _robotSDKManager.CreateRobotNavigationClient();

_navigationClient.CancelNavigation();

Java接口

void CancelNavigation(String taskId)

功能说明
取消导航任务。

参数说明

参数名类型必填/默认值说明
taskIdString必填任务 ID,传空字符串 "" 表示取消当前任务。

返回值

类型说明
void无返回值。

调用示例

java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;

// 取消当前导航任务
slamNaviClient.CancelNavigation("");
System.out.println("✓ 取消导航命令已发送");

C++接口

bool cancelNavigation(const std::string &task_id = "")

功能说明
取消当前导航任务。

参数说明

参数名类型必填/默认值说明
task_idconst std::string &默认: ""任务ID (空字符串表示取消当前任务)。

返回值

类型说明
booltrue 成功,false 失败。

调用示例

cpp
Lenovo::Daystar::SDK sdk;
auto &sysb = sdk.getSYSB();

if (sysb.connect()) {
    // 开始导航
    sysb.navigateToLocation("办公室入口");
    
    // 等待5秒后取消导航
    std::this_thread::sleep_for(std::chrono::seconds(5));

    if (sysb.cancelNavigation()) {
        std::cout << "导航已取消" << std::endl;
    }
}

ROS2接口

取消导航

该接口用于取消当前正在执行的导航任务。

服务名称服务类型角色
/sdk/nav/cancel_navigationapi_msgs::srv::CancelNavigation服务端

请求结构(Request)

字段名称类型描述
task_idstring任务 ID(空字符串表示取消当前任务)。

响应结构(Response)

字段名称类型描述
successbool是否成功取消。
messagestring操作结果信息。

调用示例

bash
ros2 service call /sdk/nav/cancel_navigation api_msgs/srv/CancelNavigation '{task_id: ""}'

获取导航事件接口

Python接口

bool register_navigation_result(callback)

功能说明
注册导航结果事件回调。

参数说明

参数名类型必填/默认值说明
callbackfunction必填回调函数,必须接收2个参数: - result_type (str): 结果类型(complete/failed) - data (Dict):事件数据

返回值

类型说明
bool注册成功返回 True,失败返回 False

事件数据示例

json
{
    "location_name": "目标点A",
    "success": true,
    "message": "导航完成",
    "timestamp": 1693632000.123,
    "task_id": "nav_task_001"
}

调用示例

python
from daystar_sdk import WebSocketRobotClient

# 初始化客户端  
with WebSocketRobotClient(host='localhost', port=5252) as client:
    # 定义导航结果回调函数
    def on_navigation_result(result_type, data):
        if result_type == "complete":
            print(f"导航完成: {data}")
        elif result_type == "failed": 
            print(f"导航失败: {data}")
    
    # 注册导航结果回调
    success = await client.register_navigation_result(on_navigation_result)

bool unregister_navigation_result()

功能说明
取消注册导航结果回调。

参数说明

参数名类型必填/默认值说明
---无参数。

返回值

类型说明
bool取消成功返回 True,失败返回 False

bool register_navigation_feedback(callback)

功能说明
注册导航反馈状态回调。

参数说明

参数名类型必填/默认值说明
callbackfunction必填回调函数,接收1个参数: - data (Dict): 导航反馈数据

返回值

类型说明
bool注册成功返回 True,失败返回 False

反馈数据示例

json
{
    "status": "navigating",
    "current_pose": {
        "position": {"x": 1.23, "y": 4.56, "z": 0.0},
        "orientation": {"x": 0, "y": 0, "z": 0, "w": 1}
    },
    "target_pose": {
        "position": {"x": 5.0, "y": 8.0, "z": 0.0},
        "orientation": {"x": 0, "y": 0, "z": 0, "w": 1}
    },
    "progress": 0.75,
    "distance_to_goal": 1.2,
    "message": "正在前往目标点A",
    "timestamp": 1693632001.456
}

状态类型说明

  • navigating: 正在导航
  • paused: 导航暂停
  • idle: 空闲状态
  • planning: 路径规划中
  • recovering: 恢复中

调用示例

python
from daystar_sdk import WebSocketRobotClient

# 初始化客户端
with WebSocketRobotClient(host='localhost', port=5252) as client:
    # 定义导航反馈回调函数
    def on_navigation_feedback(data):
        print(f"导航状态: {data.get('status')}")
        print(f"当前位置: {data.get('current_pose')}")
        print(f"导航进度: {data.get('progress', 0)*100:.1f}%")
    
    # 注册导航反馈回调
    success = await client.register_navigation_feedback(on_navigation_feedback)

bool unregister_navigation_feedback()

功能说明
取消注册导航反馈回调。

参数说明

参数名类型必填/默认值说明
---无参数。

返回值

类型说明
bool取消成功返回 True,失败返回 False

C#接口

bool RegisterNavigationResultCallback(Action<string, object> callback)

功能说明
注册导航结果事件回调。

参数说明

参数名类型必填/默认值说明
callbackAction<string, object>必填回调函数,接收2个参数: - result (string): 结果类型 (如 "complete", "failed") - data (object): 事件数据

返回值

类型说明
bool注册成功返回 true,失败返回 false

调用示例

csharp
private RobotSDKManager _robotSDKManager;
private RobotNavigationClient _navigationClient;

_robotSDKManager = RobotSDKManager.Instance;
_navigationClient = _robotSDKManager.CreateRobotNavigationClient();

_navigationClient.RegisterNavigationResultCallback((result, data) =>
{
    Debug.Log($"Navigation Result: {result}, Data: {data}");
});

bool UnregisterNavigationResultCallback()

功能说明
取消注册导航结果回调。

参数说明

参数名类型必填/默认值说明
---无参数。

返回值

类型说明
bool取消成功返回 true,失败返回 false

调用示例

csharp
_navigationClient.UnregisterNavigationResultCallback();

bool RegisterNavigationFeedbackCallback(Action<object> callback)

功能说明
注册导航反馈状态回调。

参数说明

参数名类型必填/默认值说明
callbackAction<object>必填回调函数,接收1个参数: - feedback (object): 导航反馈数据

返回值

类型说明
bool注册成功返回 true,失败返回 false

调用示例

csharp
private RobotSDKManager _robotSDKManager;
private RobotNavigationClient _navigationClient;

_robotSDKManager = RobotSDKManager.Instance;
_navigationClient = _robotSDKManager.CreateRobotNavigationClient();

_navigationClient.RegisterNavigationFeedbackCallback((feedback) =>
{
    if (feedback is string jsonString)
    {
        Debug.Log($"Navigation Feedback (JSON): {jsonString}");
    }
    else
    {
        Debug.Log($"Navigation Feedback (Object): {feedback}");
    }
});

bool UnregisterNavigationFeedbackCallback()

功能说明
取消注册导航反馈回调。

参数说明

参数名类型必填/默认值说明
---无参数。

返回值

类型说明
bool取消成功返回 true,失败返回 false

调用示例

csharp
_navigationClient.UnregisterNavigationFeedbackCallback();

Java接口

void RegisterNavigationResultCallback(ServiceHandler<NavCompleteRequest, NavCompleteResponse> onComplete, ServiceHandler<NavFailedRequest, NavFailedResponse> onFailed)

功能说明
注册导航结果回调。

参数说明

参数名类型必填/默认值说明
onCompleteServiceHandler<NavCompleteRequest, NavCompleteResponse>必填导航完成回调处理器。
onFailedServiceHandler<NavFailedRequest, NavFailedResponse>必填导航失败回调处理器。

返回值

类型说明
void无返回值。

调用示例

java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;
import com.lenovo.daystar_bot_sdk_client.DataEntities.*;

// 注册导航结果回调
slamNaviClient.RegisterNavigationResultCallback(
    // 导航完成回调
    (request, response) -> {
        System.out.println("✓ 导航完成: " + request.location_name);
        return response;
    },
    // 导航失败回调
    (request, response) -> {
        System.out.println("✗ 导航失败: " + request.message);
        return response;
    }
);

void RegisterNavigationFeedbackCallback(Consumer<NavigationFeedback> callback)

功能说明
注册导航过程反馈回调。

参数说明

参数名类型必填/默认值说明
callbackConsumer<NavigationFeedback>必填反馈回调,接收导航执行过程中的实时状态与进度信息。

返回值

类型说明
void无返回值。

调用示例

java
import com.lenovo.daystar_bot_sdk_client.client.SlamNaviClient;
import com.lenovo.daystar_bot_sdk_client.DataEntities.NavigationFeedback;

// 注册导航反馈回调
slamNaviClient.RegisterNavigationFeedbackCallback(feedback -> {
    System.out.println("导航状态: " + feedback.status);
    System.out.println("导航进度: " + (feedback.progress * 100) + "%");
});

void RegisterNarrowRoadInfo(Consumer<NarrowRoadInfo> callback)

功能说明
注册狭道智行信息回调。

参数说明

参数名类型必填/默认值说明
callbackConsumer<NarrowRoadInfo>必填狭道信息回调。

返回值

类型说明
void无返回值。

void UnregisterNarrowRoadInfo()

功能说明
注销狭道智行信息回调。

参数说明

参数名类型必填/默认值说明
---无参数。

返回值

类型说明
void无返回值。

C++接口

void setNavigationResultCallback(std::function<void(const std::string &, const std::string &)> callback)

功能说明
设置导航结果回调。

参数说明

参数名类型必填/默认值说明
callbackstd::function<void(const std::string &, const std::string &)>必填回调函数,接收2个参数: - task_id (std::string): 任务ID - result (std::string): 导航结果数据(JSON字符串)

返回值

类型说明
void无返回值。

bool registerNavigationResult()

功能说明
注册导航结果事件。

参数说明

参数名类型必填/默认值说明
---无参数。

返回值

类型说明
bool成功返回 true,否则 false

调用示例

cpp
Lenovo::Daystar::SDK sdk;
auto &sysb = sdk.getSYSB();

// 设置导航结果回调
sysb.setNavigationResultCallback([](const std::string &task_id, const std::string &result) {
    std::cout << "导航任务 " << task_id << " 结果: " << result << std::endl;
});

if (sysb.connect()) {
    sysb.registerNavigationResult();
    sysb.navigateToLocation("办公室入口");
}

void setNavigationFeedbackCallback(std::function<void(const std::string &)> callback)

功能说明
设置导航反馈回调。

参数说明

参数名类型必填/默认值说明
callbackstd::function<void(const std::string &)>必填回调函数,接收1个参数: - feedback (std::string): 导航反馈数据(JSON字符串)

返回值

类型说明
void无返回值。

bool registerNavigationFeedback()

功能说明
注册导航反馈事件。

参数说明

参数名类型必填/默认值说明
---无参数。

返回值

类型说明
bool成功返回 true,否则 false

调用示例

cpp
Lenovo::Daystar::SDK sdk;
auto &sysb = sdk.getSYSB();

// 设置导航反馈回调
sysb.setNavigationFeedbackCallback([](const std::string &feedback) {
    std::cout << "导航反馈: " << feedback << std::endl;
});

if (sysb.connect()) {
    sysb.registerNavigationFeedback();
    sysb.navigateToLocation("办公室入口");
}

ROS2接口

导航进度反馈

该接口用于订阅导航过程中的实时进度信息。

Topic 名称Topic 类型角色
/sdk/nav/feedbackapi_msgs::msg::NavigationFeedback发布方

消息结构

字段名称类型描述
task_idstring当前导航任务 ID。
target_locationstring目标点位名称。
current_posegeometry_msgs/Pose机器人当前位置。
distance_remainingfloat32剩余距离(米)。
navigation_timeint32已导航时间(秒)。
time_remainingint32预计剩余时间(秒)。
timestampstring时间戳。
current_stateuint8当前导航状态码。

current_state 取值

描述
0UNKNOWN(未知)
1STRAIGHT_LINE_NAV(直线导航中)
2WAITING(等待中)
3AUTO_PLANNING_NAV(自动规划导航中)

调用示例

bash
ros2 topic echo /sdk/nav/feedback

导航完成事件

导航成功完成时,SDK 服务节点会调用此服务通知上层应用。上层应用需实现该服务的服务端,以接收导航完成事件。

服务名称服务类型角色
/sdk/nav/nav_complete_eventapi_msgs::srv::NavCompleteEvent客户端(SDK 发起调用)

请求结构(Request)

字段名称类型描述
task_idstring导航任务 ID。
target_locationstring目标点位名称。
current_posegeometry_msgs/Pose完成时机器人位置。
navigation_timeint8导航耗时(秒)。
timestampstring完成时间戳。

响应结构(Response)

字段名称类型描述
successbool是否已接收处理。
messagestring处理结果信息。

导航失败事件

导航失败时,SDK 服务节点会调用此服务通知上层应用。上层应用需实现该服务的服务端,以接收导航失败事件。

服务名称服务类型角色
/sdk/nav/nav_failed_eventapi_msgs::srv::NavFailedEvent客户端(SDK 发起调用)

请求结构(Request)

字段名称类型描述
task_idstring导航任务 ID。
error_typeint8错误类型码。
error_msgstring错误描述信息。
current_posegeometry_msgs/Pose失败时机器人位置。
timestampstring失败时间戳。
target_locationstring目标点位名称。

响应结构(Response)

字段名称类型描述
successbool是否已接收处理。
messagestring处理结果信息。