定位与位姿
机器人定位相关功能。
定位操作
设置定位
- set_localization(auto_relocation=True, location_name='', pose={'orientation': {'w': 1.0, 'x': 0.0, 'y': 0.0, 'z': 0.0}, 'position': {'x': 0.0, 'y': 0.0, 'z': 0.0}}, block=False, timeout=200, candidate_poses=[])
Set or reset the robot’s localization.
- Parameters:
auto_relocation (
bool) – If True, use automatic relocation; if False, use manual pose (default: True)location_name (
str) – Name of saved location for relocation (default: “”)pose (
Pose) – Manual pose for localization when auto_relocation=False (default: empty MsgPose)block (
bool) – If True, wait up to kBlockMaxTimeoutSeconds; if False, use timeout (default: False)timeout (
int) – Timeout in seconds for localization to complete (default: 200)candidate_poses (
list[Pose]) – 多候选初始位姿;非空时优先走自动选点重定位(/nav/autoselect_initialpose),忽略 auto_relocation/location_name。每个元素为 geometry_msgs Pose(map 坐标系)。(默认: [])
- Returns:
SetLocalizationResponse.
Examples:
# Auto-relocation (default) result = set_localization() # Manual localization with specific pose pose = MsgPose() pose.position.x = 0.0 pose.position.y = 0.0 pose.orientation.w = 1.0 result = set_localization( auto_relocation=False, pose=pose, timeout=100 ) # Relocalize to a saved location result = set_localization( auto_relocation=True, location_name="start_point" ) # Force relocalization with longer timeout result = set_localization(timeout=300) if result.success: print("Localization successful") # Multi-candidate auto-select relocalization p1 = MsgPose() p1.position.x = 1.0 p1.position.y = 2.0 p1.orientation.w = 1.0 p2 = MsgPose() p2.position.x = 3.0 p2.position.y = 4.0 p2.orientation.w = 1.0 result = set_localization(candidate_poses=[p1, p2]) if result.success: print("Multi-candidate relocalization successful")
Note
当 candidate_poses 非空时,向 /nav/autoselect_initialpose 发送候选位姿列表,由后端自动选取最优初始位姿完成重定位,此时 auto_relocation 与 location_name 参数被忽略。
获取定位状态
- get_localization_state()
Get the robot’s current localization state.
This function returns the robot’s localization quality with automatic data validation. The function waits up to 3 seconds for data to become available, then validates it with a 5-second staleness threshold before returning the state.
- Returns:
- Response containing state and localization state
state: State object with code and describe
- loc_state: LocalizationState enum value
LocalizationState.NORMAL (0): Localization is working normally
LocalizationState.LACKDATA (1): Insufficient localization data
LocalizationState.LOST (2): Localization lost
LocalizationState.UNKNOWN_LOC (99): Unknown or unavailable state
- Return type:
GetLocalizationStateResponse
Examples:
# Get localization state response = get_localization_state() # Check state using enum if response.state.code == StateCode.success: if response.loc_state == LocalizationState.NORMAL: print("Localization is normal") elif response.loc_state == LocalizationState.LACKDATA: print("Localization lacks data") elif response.loc_state == LocalizationState.LOST: print("Localization lost") elif response.loc_state == LocalizationState.UNKNOWN_LOC: print("Localization state unknown or unavailable") # Simple usage with integer comparison loc_state = get_localization_state().loc_state if int(loc_state) == 0: print("Navigation ready") # Wait for good localization before navigation while True: resp = get_localization_state() if resp.loc_state == LocalizationState.NORMAL: break time.sleep(1) navigation_to_location("target")
Note
Data from
/nav/localization_statetopic subscriptionWaits up to 3 seconds for data to become available
Validates data freshness (5 second timeout)
Returns UNKNOWN_LOC if data is stale or not yet received
Data validation is performed automatically following the same pattern as GetRobotState
获取当前定位模式
- get_current_localization_mode()
Get the robot’s current localization mode.
- Parameters:
None – 此函数无参数。
- Returns:
state: 操作状态(code 0=成功)
mode: LocalizationMode 枚举(MAP=0 地图定位 / SLAM=1 / REFLECTOR=2 反光柱 / UNKNOWN_LOC_MODE=99)
- Return type:
Examples:
result = get_current_localization_mode() if result.state.code == 0: print(f"当前定位模式: {result.mode}")
Note
来源 topic /nav/current_localization_mode(transient_local),读本地缓存,5 秒 TTL;过期/未收到返回 UNKNOWN_LOC_MODE。