Skip to content

SLAM导航服务接口

功能C++PythonC#
获取定位状态
获取当前位置
添加导航点位
删除点位
获取可用点位
导航控制
取消导航
获取导航事件
获取导航状态

注意事项!!!

  1. 地图要求:在使用导航接口前,需通过雷达设备扫描环境生成点云数据创建地图文件:
    a. 外部雷达设备建图:使用手机或者手持雷达设备建图(格式:pcd点云文件, 坐标系:右手坐标系,Z轴朝上)
    b. 需要确保导航的区域进行完整的扫描生成点云信息

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

  3. 导航使用流程:
    a. 机器狗无地图或者需变更地图:建图 ---> 重定位成功 ---> 创建点位 ---> 执行导航(点位名称或坐标)
    b. 机器狗有当前环境地图:重定位成功 ---> 获取点位 ---> 创建点位(可选) ---> 执行导航(点位名称或坐标)

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

定位接口

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=3232) 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=3232) 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'}")

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
// 调用重定位
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
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
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}");
}

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;
    }
}

添加导航点位

Python接口

Optional[Dict] add_location(location_name, timeout=30)

功能说明
添加导航点位。

参数说明

参数名类型必填/默认值说明
location_namestr必填位置点名称。
timeoutint默认: 30超时时间,单位秒。

返回值

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

调用示例

python
from daystar_sdk import WebSocketRobotClient
# 初始化客户端
with WebSocketRobotClient(host='localhost', port=3232) as client:
    add_result = client.add_location("home_position", timeout=30)

C#接口

void AddLocation(string locationName, int timeout = 30, int id = 200)

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

参数说明

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

返回值

类型说明
void无返回值。

调用示例

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

C++接口

bool addLocation(const std::string &location_name, int timeout = 30)

功能说明
添加位置点。

参数说明

参数名类型必填/默认值说明
location_nameconst std::string &必填位置点名称。
timeoutint默认: 30超时时间(秒)。

返回值

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

调用示例

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;
    }
}

删除点位接口

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=3232) as client:
    result = client.delete_location("position")

C#接口

void DeleteLocation(string locationName, int id = 201)

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

参数说明

参数名类型必填/默认值说明
locationNamestring必填要删除的位置点名称。
idint默认: 201请求ID。

返回值

类型说明
void无返回值。

调用示例

csharp
_navigationClient.DeleteLocation("location_name");

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;
    }
}

获取可用点位接口

Python接口

Optional[Dict] get_available_locations()

功能说明
获取现有点位。

参数说明

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

返回值

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

调用示例

python
from daystar_sdk import WebSocketRobotClient
# 初始化客户端
with WebSocketRobotClient(host='localhost', port=3232) 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
var locations = _navigationClient.GetAvailableLocations();
if (locations.Count > 0)
{
    foreach (var loc in locations)
    {
        Debug.Log($"Location: {loc}");
    }
}

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;
        }
    }
}

导航控制接口

Python接口

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

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

参数说明

参数名类型必填/默认值说明
location_namestr必填目标位置点名称。
timeoutint默认: 60导航超时时间,单位秒。

返回值

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

调用示例

python
from daystar_sdk import WebSocketRobotClient
# 初始化客户端
with WebSocketRobotClient(host='localhost', port=3232) as client:
    navigate_result = client.navigate_to_location("home_position", timeout=30)

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

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

参数说明

参数名类型必填/默认值说明
xfloat必填x坐标。
yfloat必填y坐标。
zfloat必填z坐标。
timeoutint默认: 60导航超时时间,单位秒。
frame_idstr默认: "map"坐标系名称。

返回值

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

调用示例

python
from daystar_sdk import WebSocketRobotClient
# 初始化客户端
with WebSocketRobotClient(host='localhost', port=3232) as client:
    navigate_result = client.navigate_to_xyz(x=5.0, y=3.0, z=0.0, timeout=30)

C#接口

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

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

参数说明

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

返回值

类型说明
void无返回值。

调用示例

csharp
_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
_navigationClient.NavigateToPosition(1.0f, 0.0f, 0.0f);

C++接口

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

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

参数说明

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

返回值

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

调用示例

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

if (sysb.connect()) {
    if (sysb.navigateToLocation("办公室入口", 60)) {
        std::cout << "开始导航到'办公室入口'" << std::endl;
    } else {
        std::cerr << "导航启动失败" << std::endl;
    }
}

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

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

参数说明

参数名类型必填/默认值说明
target_poseconst PoseStamped &必填目标姿态。
timeoutint默认: 60超时时间(秒)。

返回值

类型说明
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;
    }
}

取消导航控制

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=3232) 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
_navigationClient.CancelNavigation();

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;
    }
}

获取导航事件接口

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=3232) 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=3232) 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
_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
_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();

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("办公室入口");
}