Skip to content

SLAM Navigation Service Interface

FunctionC++PythonC#
Get localization status
Get current position
Add navigation waypoint
Delete waypoint
Get available waypoints
Navigation control
Cancel navigation
Get navigation events
Get navigation status

Attention!!!

  1. Map Requirements: Before using navigation interfaces, map files must be created by scanning the environment with LiDAR:

    • External LiDAR Mapping: Use a phone or handheld LiDAR device for mapping (Format: PCD point cloud file, Coordinate System: Right-handed system, Z-axis up)
    • Ensure the navigation area is completely scanned to generate point cloud information.
  2. Mode Requirements: To start navigation control, the robot mode must be switched to navigation mode. This can be done via the companion controller app or by calling the "Set Control Mode" interface in the "High-Level Motion Service Interfaces" chapter in your program.

  3. Navigation Workflow:

    • Robot has no map or map needs changing: Mapping ---> Relocalization Success ---> Create Location ---> Execute Navigation (Location name or Coordinates)
    • Robot has current environment map: Relocalization Success ---> Get Locations ---> Create Location (Optional) ---> Execute Navigation (Location name or Coordinates)
  4. Current navigation supports straight-line walking and does not support automatic obstacle avoidance. When creating locations, ensure there are no obstacles on the straight line between two points.


Localization Interfaces

Python Interface

Optional[Dict] get_localization_state()

Function Description
Get localization state.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
---No parameters.

Return Value

TypeDescription
Optional[Dict]Contains the following fields: - success (bool): Whether the acquisition was successful - loc_state (int): Localization state - 0: NORMAL - 1: LACKDATA - 2: LOST

Call Example

python
from daystar_sdk.client import RobotClient
# Initialize client
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')
        # ... logic omitted ...
        print(f"Localization State: {state_names.get(loc_state, 'Unknown')}")
    else:
        print(f"Failed to get localization state: {result.get('message') if result else 'Unknown error'}")

Optional[Dict] get_current_pose()

Function Description
Get current pose.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
---No parameters.

Return Value

TypeDescription
Optional[Dict]Contains the following fields: - success (bool): Whether the acquisition was successful - message (str): Operation result message - location_pose (Dict): Position and orientation info - position (Dict): Position coordinates {x, y, z} - orientation (Dict): Orientation quaternion

Call Example

python
from daystar_sdk.client import RobotClient
# Initialize client
with RobotClient(host='localhost', port=3232) as client:
    # Get pose
    result = await client.get_current_pose()
    if result and result.get('success'):
        pose = result.get('location_pose', {})
        # ... logic omitted ...
        print(f"Current Pose: x={orientation.get('x')}, y={orientation.get('y')}, z={orientation.get('z')}, w={orientation.get('w')}")
    else:
        print(f"Failed to get pose: {result.get('message') if result else 'Unknown error'}")

C# Interface

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

Function Description
Relocalization.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
autoRelocationboolRequiredWhether to auto-relocate.
locationNamestringOptionalLocation name.
locationPosePoseDataOptionalLocation pose.
idintDefault: 212Request ID.
timeoutMsintDefault: 10000Timeout (ms).

Return Value

TypeDescription
(bool success, string message)Operation result tuple.

Call Example

csharp
// Call relocalization
var (success, message) = _navigationClient.Relocalization(true);
if (success)
{
    Debug.Log($"✓ Relocalization Successful");
}

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

Function Description
Get current robot pose (Sync method).

Parameter Description

Parameter NameTypeRequired/DefaultDescription
idintDefault: 207Request ID.
timeoutMsintDefault: 5000Timeout (ms).

Return Value

TypeDescription
PoseStamped?Robot current pose information. Returns null on failure. Contains fields: - header (Header): Message header - stamp (string): Timestamp - frame_id (string): Frame ID - pose (Pose3D): Pose info - position (Point3D): Position {x, y, z} - orientation (Quaternion3D): Orientation

Call Example

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

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

Function Description
Get localization state (Sync method).

Parameter Description

Parameter NameTypeRequired/DefaultDescription
idintDefault: 208Request ID.
timeoutMsintDefault: 5000Timeout (ms).

Return Value

TypeDescription
(bool success, int loc_state)?Localization state tuple, contains success flag and state value. Returns null on failure. loc_state values: - 0: NORMAL - 1: LACKDATA - 2: LOST

Call Example

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++ Interface

bool getLocalizationState(int &loc_state)

Function Description
Get localization system state.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
loc_stateint &RequiredReturns localization state.

Return Value

TypeDescription
booltrue success, false failure.

Call Example

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

if (sysb.connect()) {
    int loc_state;
    if (sysb.getLocalizationState(loc_state)) {
        std::cout << "Localization State: " << loc_state << std::endl;
    }
}

bool getCurrentPose(Pose &current_pose)

Function Description
Get robot current pose.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
current_posePose &RequiredReturns current pose information.

Return Value

TypeDescription
booltrue success, false failure.

Call Example

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

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

Add Navigation Location

Python Interface

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

Function Description
Add navigation location.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
location_namestrRequiredLocation name.
timeoutintDefault: 30Timeout in seconds.

Return Value

TypeDescription
Optional[Dict]Contains the following fields: - success (bool): Whether added successfully - message (str): Operation result message - location_pose (Dict): Location pose info - map_name (str): Map name

Call Example

python
from daystar_sdk import WebSocketRobotClient
# Initialize client
with WebSocketRobotClient(host='localhost', port=3232) as client:
    add_result = client.add_location("home_position", timeout=30)

C# Interface

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

Function Description
Add current pose as a navigation location.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
locationNamestringRequiredLocation name.
timeoutintDefault: 30Timeout (seconds).
idintDefault: 200Request ID.

Return Value

TypeDescription
voidNo return value.

Call Example

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

C++ Interface

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

Function Description
Add location point.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
location_nameconst std::string &RequiredLocation name.
timeoutintDefault: 30Timeout (seconds).

Return Value

TypeDescription
booltrue success, false failure.

Call Example

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

if (sysb.connect()) {
    if (sysb.addLocation("OfficeEntrance", 30)) {
        std::cout << "Location 'OfficeEntrance' added successfully" << std::endl;
    } else {
        std::cerr << "Failed to add location" << std::endl;
    }
}

Delete Location Interfaces

Python Interface

Optional[Dict] delete_location(location_name)

Function Description
Delete navigation location.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
location_namestrRequiredName of location to delete.

Return Value

TypeDescription
Optional[Dict]Contains the following fields: - success (bool): Whether deleted successfully - message (str): Operation result message

Call Example

python
from daystar_sdk import WebSocketRobotClient
# Initialize client
with WebSocketRobotClient(host='localhost', port=3232) as client:
    result = client.delete_location("position")

C# Interface

void DeleteLocation(string locationName, int id = 201)

Function Description
Delete specified navigation location.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
locationNamestringRequiredName of location to delete.
idintDefault: 201Request ID.

Return Value

TypeDescription
voidNo return value.

Call Example

csharp
_navigationClient.DeleteLocation("location_name");

C++ Interface

bool deleteLocation(const std::string &location_name)

Function Description
Delete location point.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
location_nameconst std::string &RequiredLocation name.

Return Value

TypeDescription
booltrue success, false failure.

Call Example

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

if (sysb.connect()) {
    if (sysb.deleteLocation("OfficeEntrance")) {
        std::cout << "Location 'OfficeEntrance' deleted successfully" << std::endl;
    } else {
        std::cerr << "Failed to delete location" << std::endl;
    }
}

Get Available Locations Interfaces

Python Interface

Optional[Dict] get_available_locations()

Function Description
Get existing locations.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
---No parameters.

Return Value

TypeDescription
Optional[Dict]Contains the following fields: - location_names (List[str]): List of location names

Call Example

python
from daystar_sdk import WebSocketRobotClient
# Initialize client
with WebSocketRobotClient(host='localhost', port=3232) as client:
    result = client.get_available_locations()
    location_names = result.get('location_names', [])

C# Interface

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

Function Description
Get all available navigation locations (Sync method, returns list directly).

Parameter Description

Parameter NameTypeRequired/DefaultDescription
idintDefault: 202Request ID.
timeoutMsintDefault: 5000Timeout (ms).

Return Value

TypeDescription
List<string>List of location names, returns empty list on failure.

Call Example

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

C++ Interface

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

Function Description
Get all available location points.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
location_namesstd::vector<std::string> &RequiredReturns list of location names.
location_posesstd::vector<Pose> &RequiredReturns list of location poses.

Return Value

TypeDescription
booltrue success, false failure.

Call Example

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 << "Available Locations:" << std::endl;
        # ... logic omitted ...
        }
    }
}

Navigation Control Interfaces

Python Interface

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

Function Description
Navigate to preset location.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
location_namestrRequiredTarget location name.
timeoutintDefault: 60Navigation timeout in seconds.

Return Value

TypeDescription
Optional[Dict]Contains the following fields: - success (bool): Whether started successfully - message (str): Operation result message

Call Example

python
from daystar_sdk import WebSocketRobotClient
# Initialize client
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")

Function Description
Navigate to specified coordinates.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
xfloatRequiredx coordinate.
yfloatRequiredy coordinate.
zfloatRequiredz coordinate.
timeoutintDefault: 60Navigation timeout in seconds.
frame_idstrDefault: "map"Frame ID.

Return Value

TypeDescription
Optional[Dict]Contains the following fields: - success (bool): Whether started successfully - message (str): Operation result message

Call Example

python
from daystar_sdk import WebSocketRobotClient
# Initialize client
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# Interface

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

Function Description
Navigate to preset location point.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
locationNamestringRequiredTarget location name.
timeoutintDefault: 60Navigation timeout (seconds).
idintDefault: 203Request ID.

Return Value

TypeDescription
voidNo return value.

Call Example

csharp
_navigationClient.NavigateToLocation("location_name");

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

Function Description
Navigate to specified coordinate position (XYZ).

Parameter Description

Parameter NameTypeRequired/DefaultDescription
xfloatRequiredx coordinate.
yfloatRequiredy coordinate.
zfloatRequiredz coordinate.
timeoutintDefault: 60Navigation timeout (seconds).
frameIdstringDefault: "map"Frame ID.
idintDefault: 205Request ID.

Return Value

TypeDescription
voidNo return value.

Call Example

csharp
_navigationClient.NavigateToPosition(1.0f, 0.0f, 0.0f);

C++ Interface

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

Function Description
Navigate to specified location point.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
location_nameconst std::string &RequiredTarget location name.
timeoutintDefault: 60Timeout (seconds).

Return Value

TypeDescription
booltrue success, false failure.

Call Example

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

if (sysb.connect()) {
    if (sysb.navigateToLocation("OfficeEntrance", 60)) {
        std::cout << "Started navigation to 'OfficeEntrance'" << std::endl;
    } else {
        std::cerr << "Navigation start failed" << std::endl;
    }
}

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

Function Description
Navigate to specified pose.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
target_poseconst PoseStamped &RequiredTarget pose.
timeoutintDefault: 60Timeout (seconds).

Return Value

TypeDescription
booltrue success, false failure.

Call Example

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

if (sysb.connect()) {
    // Create target pose
    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 << "Started navigation to specified pose" << std::endl;
    } else {
        std::cerr << "Navigation start failed" << std::endl;
    }
}

Cancel Navigation Control

Python Interface

Optional[Dict] cancel_navigation(task_id="")

Function Description
Cancel navigation control.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
task_idstrDefault: ""Task ID, empty string indicates cancelling the current task.

Return Value

TypeDescription
Optional[Dict]Contains the following fields: - success (bool): Whether cancelled successfully - message (str): Operation result message

Call Example

python
from daystar_sdk import WebSocketRobotClient
# Initialize client
with WebSocketRobotClient(host='localhost', port=3232) as client:
    result = await client.cancel_navigation()
    if result and result.get('success'):
        print(f"Navigation cancelled successfully: {result.get('message')}")
    else:
        print(f"Failed to cancel navigation: {result.get('message') if result else 'Unknown error'}")

C# Interface

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

Function Description
Cancel current navigation task.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
taskIdstringDefault: ""Task ID, empty string indicates cancelling the current task.
idintDefault: 206Request ID.

Return Value

TypeDescription
voidNo return value.

Call Example

csharp
_navigationClient.CancelNavigation();

C++ Interface

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

Function Description
Cancel current navigation task.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
task_idconst std::string &Default: ""Task ID (empty string indicates cancelling the current task).

Return Value

TypeDescription
booltrue success, false failure.

Call Example

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

if (sysb.connect()) {
    // Start navigation
    sysb.navigateToLocation("OfficeEntrance");
    
    // ... logic omitted ...
    }
}

Get Navigation Events Interfaces

Python Interface

bool register_navigation_result(callback)

Function Description
Register navigation result event callback.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
callbackfunctionRequiredCallback function, must receive 2 arguments: - result_type (str): Result type ("complete"

Return Value

TypeDescription
boolReturns True on success, False on failure.

Event Data Example

json
{
    "location_name": "Target Point A",
    // ... logic omitted ...
    "task_id": "nav_task_001"
}

Call Example

python
from daystar_sdk import WebSocketRobotClient

# Initialize client  
with WebSocketRobotClient(host='localhost', port=3232) as client:
    # Define navigation result callback
    # ... logic omitted ...
    success = await client.register_navigation_result(on_navigation_result)

bool unregister_navigation_result()

Function Description
Unregister navigation result callback.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
---No parameters.

Return Value

TypeDescription
boolReturns True on success, False on failure.

bool register_navigation_feedback(callback)

Function Description
Register navigation feedback status callback.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
callbackfunctionRequiredCallback function, receives 1 argument: - data (Dict): Navigation feedback data

Return Value

TypeDescription
boolReturns True on success, False on failure.

Feedback Data Example

json
{
    "status": "navigating",
    // ... logic omitted ...
    "timestamp": 1693632001.456
}

Status Type Description

  • navigating: Navigating
  • paused: Navigation paused
  • idle: Idle
  • planning: Path planning
  • recovering: Recovering

Call Example

python
from daystar_sdk import WebSocketRobotClient

# Initialize client
with WebSocketRobotClient(host='localhost', port=3232) as client:
    # Define navigation feedback callback
    # ... logic omitted ...
    success = await client.register_navigation_feedback(on_navigation_feedback)

bool unregister_navigation_feedback()

Function Description
Unregister navigation feedback callback.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
---No parameters.

Return Value

TypeDescription
boolReturns True on success, False on failure.

C# Interface

bool RegisterNavigationResultCallback(Action<string, object> callback)

Function Description
Register navigation result event callback.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
callbackAction<string, object>RequiredCallback function, receives 2 arguments: - result (string): Result type (e.g. "complete", "failed") - data (object): Event data

Return Value

TypeDescription
boolReturns true on success, false on failure.

Call Example

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

bool UnregisterNavigationResultCallback()

Function Description
Unregister navigation result callback.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
---No parameters.

Return Value

TypeDescription
boolReturns true on success, false on failure.

Call Example

csharp
_navigationClient.UnregisterNavigationResultCallback();

bool RegisterNavigationFeedbackCallback(Action<object> callback)

Function Description
Register navigation feedback status callback.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
callbackAction<object>RequiredCallback function, receives 1 argument: - feedback (object): Navigation feedback data

Return Value

TypeDescription
boolReturns true on success, false on failure.

Call Example

csharp
_navigationClient.RegisterNavigationFeedbackCallback((feedback) =>
{
    if (feedback is string jsonString)
    // ... logic omitted ...
    }
});

bool UnregisterNavigationFeedbackCallback()

Function Description
Unregister navigation feedback callback.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
---No parameters.

Return Value

TypeDescription
boolReturns true on success, false on failure.

Call Example

csharp
_navigationClient.UnregisterNavigationFeedbackCallback();

C++ Interface

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

Function Description
Set navigation result callback.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
callbackstd::function<void(const std::string &, const std::string &)>RequiredCallback function, receives 2 arguments: - task_id (std::string): Task ID - result (std::string): Navigation result data (JSON string)

Return Value

TypeDescription
voidNo return value.

bool registerNavigationResult()

Function Description
Register navigation result event.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
---No parameters.

Return Value

TypeDescription
boolReturns true on success, otherwise false.

Call Example

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

// Set navigation result callback
sysb.setNavigationResultCallback([](const std::string &task_id, const std::string &result) {
    std::cout << "Navigation task " << task_id << " result: " << result << std::endl;
});

if (sysb.connect()) {
    sysb.registerNavigationResult();
    sysb.navigateToLocation("OfficeEntrance");
}

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

Function Description
Set navigation feedback callback.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
callbackstd::function<void(const std::string &)>RequiredCallback function, receives 1 argument: - feedback (std::string): Navigation feedback data (JSON string)

Return Value

TypeDescription
voidNo return value.

bool registerNavigationFeedback()

Function Description
Register navigation feedback event.

Parameter Description

Parameter NameTypeRequired/DefaultDescription
---No parameters.

Return Value

TypeDescription
boolReturns true on success, otherwise false.

Call Example

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

// Set navigation feedback callback
sysb.setNavigationFeedbackCallback([](const std::string &feedback) {
    std::cout << "Navigation feedback: " << feedback << std::endl;
});

if (sysb.connect()) {
    sysb.registerNavigationFeedback();
    sysb.navigateToLocation("OfficeEntrance");
}