kuavo-humanoid-sdk 1.2.1b3212__20250902172530-py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of kuavo-humanoid-sdk might be problematic. Click here for more details.

Files changed (184) hide show
  1. kuavo_humanoid_sdk/__init__.py +6 -0
  2. kuavo_humanoid_sdk/common/logger.py +45 -0
  3. kuavo_humanoid_sdk/interfaces/__init__.py +4 -0
  4. kuavo_humanoid_sdk/interfaces/data_types.py +288 -0
  5. kuavo_humanoid_sdk/interfaces/end_effector.py +62 -0
  6. kuavo_humanoid_sdk/interfaces/robot.py +22 -0
  7. kuavo_humanoid_sdk/interfaces/robot_info.py +56 -0
  8. kuavo_humanoid_sdk/kuavo/__init__.py +16 -0
  9. kuavo_humanoid_sdk/kuavo/core/audio.py +32 -0
  10. kuavo_humanoid_sdk/kuavo/core/core.py +655 -0
  11. kuavo_humanoid_sdk/kuavo/core/dex_hand_control.py +114 -0
  12. kuavo_humanoid_sdk/kuavo/core/leju_claw_control.py +67 -0
  13. kuavo_humanoid_sdk/kuavo/core/llm_doubao.py +608 -0
  14. kuavo_humanoid_sdk/kuavo/core/microphone.py +192 -0
  15. kuavo_humanoid_sdk/kuavo/core/navigation.py +70 -0
  16. kuavo_humanoid_sdk/kuavo/core/ros/audio.py +110 -0
  17. kuavo_humanoid_sdk/kuavo/core/ros/control.py +1524 -0
  18. kuavo_humanoid_sdk/kuavo/core/ros/microphone.py +38 -0
  19. kuavo_humanoid_sdk/kuavo/core/ros/navigation.py +217 -0
  20. kuavo_humanoid_sdk/kuavo/core/ros/observation.py +94 -0
  21. kuavo_humanoid_sdk/kuavo/core/ros/param.py +194 -0
  22. kuavo_humanoid_sdk/kuavo/core/ros/sat_utils.py +103 -0
  23. kuavo_humanoid_sdk/kuavo/core/ros/state.py +652 -0
  24. kuavo_humanoid_sdk/kuavo/core/ros/tools.py +220 -0
  25. kuavo_humanoid_sdk/kuavo/core/ros/vision.py +234 -0
  26. kuavo_humanoid_sdk/kuavo/core/ros_env.py +238 -0
  27. kuavo_humanoid_sdk/kuavo/demo_climbstair.py +249 -0
  28. kuavo_humanoid_sdk/kuavo/dexterous_hand.py +238 -0
  29. kuavo_humanoid_sdk/kuavo/leju_claw.py +235 -0
  30. kuavo_humanoid_sdk/kuavo/logger_client.py +80 -0
  31. kuavo_humanoid_sdk/kuavo/robot.py +557 -0
  32. kuavo_humanoid_sdk/kuavo/robot_arm.py +297 -0
  33. kuavo_humanoid_sdk/kuavo/robot_audio.py +39 -0
  34. kuavo_humanoid_sdk/kuavo/robot_blockly.py +1162 -0
  35. kuavo_humanoid_sdk/kuavo/robot_climbstair.py +1607 -0
  36. kuavo_humanoid_sdk/kuavo/robot_head.py +73 -0
  37. kuavo_humanoid_sdk/kuavo/robot_info.py +113 -0
  38. kuavo_humanoid_sdk/kuavo/robot_microphone.py +19 -0
  39. kuavo_humanoid_sdk/kuavo/robot_navigation.py +135 -0
  40. kuavo_humanoid_sdk/kuavo/robot_observation.py +64 -0
  41. kuavo_humanoid_sdk/kuavo/robot_speech.py +24 -0
  42. kuavo_humanoid_sdk/kuavo/robot_state.py +307 -0
  43. kuavo_humanoid_sdk/kuavo/robot_tool.py +109 -0
  44. kuavo_humanoid_sdk/kuavo/robot_vision.py +81 -0
  45. kuavo_humanoid_sdk/kuavo_strategy/__init__.py +2 -0
  46. kuavo_humanoid_sdk/kuavo_strategy/grasp_box/grasp_box_strategy.py +1325 -0
  47. kuavo_humanoid_sdk/kuavo_strategy/kuavo_strategy.py +106 -0
  48. kuavo_humanoid_sdk/kuavo_strategy_v2/common/data_type.py +340 -0
  49. kuavo_humanoid_sdk/kuavo_strategy_v2/common/events/base_event.py +215 -0
  50. kuavo_humanoid_sdk/kuavo_strategy_v2/common/robot_sdk.py +25 -0
  51. kuavo_humanoid_sdk/kuavo_strategy_v2/pick_place_box/case.py +331 -0
  52. kuavo_humanoid_sdk/kuavo_strategy_v2/pick_place_box/strategy.py +504 -0
  53. kuavo_humanoid_sdk/kuavo_strategy_v2/utils/logger_setup.py +40 -0
  54. kuavo_humanoid_sdk/kuavo_strategy_v2/utils/utils.py +88 -0
  55. kuavo_humanoid_sdk/msg/__init__.py +4 -0
  56. kuavo_humanoid_sdk/msg/kuavo_msgs/__init__.py +7 -0
  57. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_AprilTagDetection.py +306 -0
  58. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_AprilTagDetectionArray.py +437 -0
  59. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_AudioReceiverData.py +122 -0
  60. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_FTsensorData.py +260 -0
  61. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_JoySticks.py +191 -0
  62. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_Metadata.py +199 -0
  63. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_MmDetectionMsg.py +264 -0
  64. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_RobotActionState.py +112 -0
  65. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_TFArray.py +323 -0
  66. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_TaskPoint.py +175 -0
  67. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/__init__.py +62 -0
  68. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armCollisionCheckInfo.py +160 -0
  69. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armHandPose.py +161 -0
  70. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armHandPoseFree.py +171 -0
  71. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armPoseWithTimeStamp.py +168 -0
  72. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armTargetPoses.py +171 -0
  73. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_bezierCurveCubicPoint.py +178 -0
  74. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_dexhandCommand.py +229 -0
  75. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_dexhandTouchState.py +256 -0
  76. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_endEffectorData.py +227 -0
  77. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPose.py +123 -0
  78. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPose6D.py +123 -0
  79. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPose6DTargetTrajectories.py +320 -0
  80. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoseTargetTrajectories.py +301 -0
  81. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoseWithVision.py +136 -0
  82. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoseWithVisionArray.py +231 -0
  83. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoses.py +149 -0
  84. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoses6D.py +149 -0
  85. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_fullBodyTargetTrajectories.py +258 -0
  86. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_gaitTimeName.py +147 -0
  87. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_gestureInfo.py +218 -0
  88. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_gestureTask.py +149 -0
  89. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_handPose.py +136 -0
  90. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_headBodyPose.py +145 -0
  91. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_ikSolveError.py +171 -0
  92. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_ikSolveParam.py +140 -0
  93. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_imuData.py +165 -0
  94. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_jointBezierTrajectory.py +201 -0
  95. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_jointCmd.py +390 -0
  96. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_jointData.py +205 -0
  97. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_kuavoModeSchedule.py +224 -0
  98. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_lejuClawCommand.py +320 -0
  99. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_lejuClawState.py +341 -0
  100. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_motorParam.py +122 -0
  101. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_picoPoseInfo.py +143 -0
  102. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_picoPoseInfoList.py +220 -0
  103. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_planArmState.py +120 -0
  104. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_qv.py +121 -0
  105. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotArmQVVD.py +177 -0
  106. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotBodyMatrices.py +332 -0
  107. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotHandPosition.py +225 -0
  108. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotHeadMotionData.py +128 -0
  109. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotState.py +222 -0
  110. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_sensorsData.py +655 -0
  111. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_switchGaitByName.py +200 -0
  112. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_tagDataArray.py +216 -0
  113. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_touchSensorStatus.py +162 -0
  114. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_twoArmHandPose.py +273 -0
  115. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_twoArmHandPoseCmd.py +316 -0
  116. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_twoArmHandPoseCmdFree.py +338 -0
  117. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_twoArmHandPoseFree.py +299 -0
  118. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_yoloDetection.py +251 -0
  119. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_yoloOutputData.py +168 -0
  120. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_CreatePath.py +581 -0
  121. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_ExecuteArmAction.py +281 -0
  122. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_GetAllMaps.py +241 -0
  123. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_GetCurrentMap.py +225 -0
  124. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_GetTargetPartPoseInCamera.py +298 -0
  125. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_InitialPoseWithTaskPoint.py +281 -0
  126. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_LoadMap.py +281 -0
  127. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_NavigateToTaskPoint.py +281 -0
  128. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_RepublishTFs.py +373 -0
  129. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_SetInitialPose.py +394 -0
  130. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_SetJoyTopic.py +282 -0
  131. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_SetLEDMode.py +468 -0
  132. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_SetLEDMode_free.py +289 -0
  133. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_SpeechSynthesis.py +270 -0
  134. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_TaskPointOperation.py +536 -0
  135. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/__init__.py +43 -0
  136. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_adjustZeroPoint.py +277 -0
  137. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_changeArmCtrlMode.py +275 -0
  138. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_changeArmCtrlModeKuavo.py +236 -0
  139. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_changeMotorParam.py +299 -0
  140. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_changeTorsoCtrlMode.py +274 -0
  141. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_controlLejuClaw.py +408 -0
  142. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_enableHandTouchSensor.py +304 -0
  143. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_fkSrv.py +395 -0
  144. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_footPose6DTargetTrajectoriesSrv.py +426 -0
  145. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_footPoseTargetTrajectoriesSrv.py +409 -0
  146. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_gestureExecute.py +339 -0
  147. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_gestureExecuteState.py +257 -0
  148. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_gestureList.py +418 -0
  149. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_getCurrentGaitName.py +253 -0
  150. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_getMotorParam.py +299 -0
  151. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_getMotorZeroPoints.py +286 -0
  152. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_handForceLevel.py +330 -0
  153. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_jointMoveTo.py +302 -0
  154. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_planArmTrajectoryBezierCurve.py +422 -0
  155. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_planArmTrajectoryCubicSpline.py +490 -0
  156. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_playmusic.py +268 -0
  157. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_setHwIntialState.py +304 -0
  158. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_setMmCtrlFrame.py +273 -0
  159. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_setMotorEncoderRoundService.py +283 -0
  160. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_setTagId.py +275 -0
  161. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_singleStepControl.py +444 -0
  162. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_twoArmHandPoseCmdFreeSrv.py +716 -0
  163. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_twoArmHandPoseCmdSrv.py +664 -0
  164. kuavo_humanoid_sdk/msg/motion_capture_ik/__init__.py +7 -0
  165. kuavo_humanoid_sdk/msg/ocs2_msgs/__init__.py +7 -0
  166. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/__init__.py +12 -0
  167. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_constraint.py +142 -0
  168. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_controller_data.py +121 -0
  169. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_lagrangian_metrics.py +148 -0
  170. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mode_schedule.py +150 -0
  171. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_flattened_controller.py +666 -0
  172. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_input.py +122 -0
  173. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_observation.py +209 -0
  174. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_performance_indices.py +140 -0
  175. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_solver_data.py +886 -0
  176. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_state.py +122 -0
  177. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_target_trajectories.py +239 -0
  178. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_multiplier.py +148 -0
  179. kuavo_humanoid_sdk/msg/ocs2_msgs/srv/__init__.py +1 -0
  180. kuavo_humanoid_sdk/msg/ocs2_msgs/srv/_reset.py +376 -0
  181. kuavo_humanoid_sdk-1.2.1b3212.dist-info/METADATA +296 -0
  182. kuavo_humanoid_sdk-1.2.1b3212.dist-info/RECORD +184 -0
  183. kuavo_humanoid_sdk-1.2.1b3212.dist-info/WHEEL +6 -0
  184. kuavo_humanoid_sdk-1.2.1b3212.dist-info/top_level.txt +1 -0
@@ -0,0 +1,73 @@
1
+ #!/usr/bin/env python3
2
+ # coding: utf-8
3
+ import math
4
+ import asyncio
5
+ import threading
6
+ from kuavo_humanoid_sdk.kuavo.core.core import KuavoRobotCore
7
+ from kuavo_humanoid_sdk.common.logger import SDKLogger
8
+ import json
9
+
10
+ class KuavoRobotHead:
11
+ """机器人头部控制类"""
12
+ def __init__(self):
13
+ self._kuavo_core = KuavoRobotCore()
14
+
15
+ def _send_log(self, message: str):
16
+ """发送日志到8889端口的辅助方法"""
17
+ self._kuavo_core.logger.send_log(message)
18
+
19
+
20
+ def control_head(self, yaw: float, pitch: float) -> bool:
21
+ """
22
+ Control the head of the robot.
23
+ Args:
24
+ yaw (float): The yaw angle of the head in radians, range [-1.396, 1.396] (-80 to 80 degrees).
25
+ pitch (float): The pitch angle of the head in radians, range [-0.436, 0.436] (-25 to 25 degrees).
26
+ Returns:
27
+ bool: True if the head is controlled successfully, False otherwise.
28
+ """
29
+ # 发送开始控制头部的日志
30
+ self._send_log(f"开始控制头部运动: yaw={yaw:.3f}, pitch={pitch:.3f}")
31
+
32
+ limited_yaw = yaw
33
+ limited_pitch = pitch
34
+
35
+ # 原有的代码逻辑保持不变
36
+ # Check yaw limits (-80 to 80 degrees)
37
+ if yaw < -math.pi*4/9 or yaw > math.pi*4/9: # -80 to 80 degrees in radians
38
+ SDKLogger.warn(f"[Robot] yaw {yaw} exceeds limit [-{math.pi*4/9:.3f}, {math.pi*4/9:.3f}] radians (-80 to 80 degrees), will be limited")
39
+ limited_yaw = min(math.pi*4/9, max(-math.pi*4/9, yaw))
40
+ self._send_log(f"yaw值超限,已限制为: {limited_yaw:.3f}")
41
+
42
+ # Check pitch limits (-25 to 25 degrees)
43
+ if pitch < -math.pi/7.2 - 0.001 or pitch > math.pi/7.2 + 0.001: # -25 to 25 degrees in radians
44
+ SDKLogger.warn(f"[Robot] pitch {pitch} exceeds limit [-{math.pi/7.2:.3f}, {math.pi/7.2:.3f}] radians (-25 to 25 degrees), will be limited")
45
+ limited_pitch = min(math.pi/7.2, max(-math.pi/7.2, pitch))
46
+ self._send_log(f"pitch值超限,已限制为: {limited_pitch:.3f}")
47
+
48
+ # 执行头部控制
49
+ result = self._kuavo_core.control_robot_head(yaw=limited_yaw, pitch=limited_pitch)
50
+
51
+ # 发送执行结果日志
52
+ self._send_log(f"头部控制完成: yaw={limited_yaw:.3f}, pitch={limited_pitch:.3f}, 结果={'成功' if result else '失败'}")
53
+
54
+ return result
55
+ def enable_head_tracking(self, target_id: int)->bool:
56
+ """启用头部跟踪功能,在机器人运动过程中,头部将始终追踪指定的 Apriltag ID
57
+
58
+ Args:
59
+ target_id (int): 目标ID。
60
+
61
+ Returns:
62
+ bool: 如果启用成功返回True,否则返回False。
63
+ """
64
+ return self._kuavo_core.enable_head_tracking(target_id)
65
+
66
+ def disable_head_tracking(self)->bool:
67
+ """禁用头部跟踪功能。
68
+
69
+ Returns:
70
+ bool: 如果禁用成功返回True,否则返回False。
71
+ """
72
+ return self._kuavo_core.disable_head_tracking()
73
+
@@ -0,0 +1,113 @@
1
+ #!/usr/bin/env python3
2
+ # coding: utf-8
3
+ from typing import Tuple
4
+ from kuavo_humanoid_sdk.interfaces.robot_info import RobotInfoBase
5
+ from kuavo_humanoid_sdk.kuavo.core.ros.param import RosParameter, make_robot_param
6
+
7
+ class KuavoRobotInfo(RobotInfoBase):
8
+ def __init__(self, robot_type: str = "kuavo"):
9
+ super().__init__(robot_type=robot_type)
10
+
11
+ # Load robot parameters from ROS parameter server
12
+ kuavo_ros_param = make_robot_param()
13
+ self._ros_param = RosParameter()
14
+
15
+ self._robot_version = kuavo_ros_param['robot_version']
16
+ self._end_effector_type = kuavo_ros_param['end_effector_type']
17
+ self._arm_joint_dof = kuavo_ros_param['arm_dof']
18
+ self._joint_dof = kuavo_ros_param['arm_dof'] + kuavo_ros_param['leg_dof'] + kuavo_ros_param['head_dof']
19
+ self._joint_names = kuavo_ros_param['joint_names']
20
+ self._end_frames_names = kuavo_ros_param['end_frames_names']
21
+ self._head_joint_dof = kuavo_ros_param['head_dof']
22
+ self._head_joint_names = self._joint_names[-2:]
23
+ self._arm_joint_names = self._joint_names[12:self._arm_joint_dof + 12]
24
+ @property
25
+ def robot_version(self) -> str:
26
+ """返回 Kuavo 机器人的版本。
27
+
28
+ Returns:
29
+ str: 机器人版本号,例如 "42"、"45" 等。
30
+ """
31
+ return self._robot_version
32
+
33
+ @property
34
+ def end_effector_type(self) -> str:
35
+ """返回 Kuavo 机器人末端执行器的类型。
36
+
37
+ Returns:
38
+ str: 末端执行器类型,其中:
39
+ - ``qiangnao`` 表示普通灵巧手
40
+ - ``lejuclaw`` 表示乐聚二指夹爪
41
+ - ``qiangnao_touch`` 表示触觉灵巧手
42
+ - ...
43
+ """
44
+ return self._end_effector_type
45
+
46
+ @property
47
+ def joint_names(self) -> list:
48
+ """返回 Kuavo 机器人所有关节的名称。
49
+
50
+ Returns:
51
+ list: 包含所有关节名称的列表。
52
+ """
53
+ return self._joint_names
54
+
55
+ @property
56
+ def joint_dof(self) -> int:
57
+ """返回 Kuavo 机器人的总关节数。
58
+
59
+ Returns:
60
+ int: 总关节数,例如 28。
61
+ """
62
+ return self._joint_dof
63
+
64
+ @property
65
+ def arm_joint_dof(self) -> int:
66
+ """返回 Kuavo 机器人双臂的关节数。
67
+
68
+ Returns:
69
+ int: 双臂的关节数,例如 14。
70
+ """
71
+ return self._arm_joint_dof
72
+
73
+ @property
74
+ def arm_joint_names(self) -> list:
75
+ """返回 Kuavo 机器人双臂关节的名称。
76
+
77
+ Returns:
78
+ list: 包含双臂关节名称的列表。
79
+ """
80
+ return self._arm_joint_names
81
+
82
+ @property
83
+ def head_joint_dof(self) -> int:
84
+ """返回 Kuavo 机器人头部的关节数。
85
+
86
+ Returns:
87
+ int: 头部的关节数,例如 2。
88
+ """
89
+ return self._head_joint_dof
90
+
91
+ @property
92
+ def head_joint_names(self) -> list:
93
+ """返回 Kuavo 机器人头部关节的名称。
94
+
95
+ Returns:
96
+ list: 包含头部关节名称的列表。
97
+ """
98
+ return self._head_joint_names
99
+
100
+ @property
101
+ def eef_frame_names(self) -> Tuple[str, str]:
102
+ """返回 Kuavo 机器人末端执行器坐标系的名称。
103
+
104
+ Returns:
105
+ Tuple[str, str]: 包含末端执行器坐标系名称的元组,其中:\n
106
+ - 第一个元素是左手坐标系名称\n
107
+ - 第二个元素是右手坐标系名称\n
108
+ 例如 ("zarm_l7_link", "zarm_r7_link") \n
109
+ """
110
+ return self._end_frames_names[1], self._end_frames_names[2]
111
+
112
+ def __str__(self) -> str:
113
+ return f"KuavoRobotInfo(robot_type={self.robot_type}, robot_version={self.robot_version}, end_effector_type={self.end_effector_type}, joint_names={self.joint_names}, joint_dof={self.joint_dof}, arm_joint_dof={self.arm_joint_dof})"
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env python3
2
+ # coding: utf-8
3
+ from kuavo_humanoid_sdk.kuavo.core.microphone import RobotMicrophoneCore
4
+
5
+ class RobotMicrophone:
6
+ def __init__(self):
7
+ """Initialize the microphone system."""
8
+ self.microphone = RobotMicrophoneCore()
9
+
10
+ def wait_for_wake_word(self, timeout_sec: int = 60) -> bool:
11
+ """Wait for the wake word to be detected.
12
+
13
+ Args:
14
+ timeout_sec (int): Timeout in seconds
15
+
16
+ Returns:
17
+ bool: True if the wake word was detected within the timeout, False otherwise
18
+ """
19
+ return self.microphone.wait_for_wake_word(timeout_sec=timeout_sec)
@@ -0,0 +1,135 @@
1
+ #!/usr/bin/env python3
2
+ # coding: utf-8
3
+ from kuavo_humanoid_sdk.kuavo.core.navigation import KuavoRobotNavigationCore, NavigationStatus
4
+ import tf
5
+ from geometry_msgs.msg import Pose, Point, Quaternion
6
+ import rospy
7
+ import time
8
+
9
+ class RobotNavigation:
10
+ """Interface class for robot navigation."""
11
+
12
+ def __init__(self):
13
+ """Initialize RobotNavigation object."""
14
+ self.robot_navigation = KuavoRobotNavigationCore()
15
+
16
+ def navigate_to_goal(
17
+ self, x: float, y: float, z: float, roll: float, pitch: float, yaw: float
18
+ ) -> bool:
19
+ """Navigate to the specified goal.
20
+
21
+ Args:
22
+ x (float): x coordinate of the goal.
23
+ y (float): y coordinate of the goal.
24
+ z (float): z coordinate of the goal.
25
+ roll (float): roll of the goal.
26
+ pitch (float): pitch of the goal.
27
+ yaw (float): yaw of the goal.
28
+
29
+ Returns:
30
+ bool: Whether navigation succeeded.
31
+ """
32
+ orientation = tf.transformations.quaternion_from_euler(yaw, pitch, roll)
33
+ goal = Pose(position=Point(x=x, y=y, z=z), orientation=Quaternion(x=orientation[0], y=orientation[1], z=orientation[2], w=orientation[3]))
34
+ self.robot_navigation.navigate_to_goal(goal)
35
+ while self.get_current_status() is not NavigationStatus.ACTIVE:
36
+ time.sleep(0.01)
37
+ while not rospy.is_shutdown():
38
+ if self.get_current_status() == NavigationStatus.SUCCEEDED:
39
+ break
40
+ time.sleep(0.01)
41
+ return True
42
+
43
+ def navigate_to_task_point(self, task_point_name: str) -> bool:
44
+ """Navigate to the specified task point.
45
+
46
+ Args:
47
+ task_point_name (str): Name of the task point.
48
+
49
+ Returns:
50
+ bool: Whether navigation succeeded.
51
+ """
52
+ self.robot_navigation.navigate_to_task_point(task_point_name)
53
+ while self.get_current_status() is not NavigationStatus.ACTIVE:
54
+ time.sleep(0.01)
55
+ while not rospy.is_shutdown():
56
+ if self.get_current_status() == NavigationStatus.SUCCEEDED:
57
+ break
58
+ time.sleep(0.01)
59
+ return True
60
+
61
+ def stop_navigation(self) -> bool:
62
+ """Stop navigation.
63
+
64
+ Returns:
65
+ bool: Whether stopping navigation succeeded.
66
+ """
67
+ return self.robot_navigation.stop_navigation()
68
+
69
+ def get_current_status(self) -> str:
70
+ """Get the current navigation status.
71
+
72
+ Returns:
73
+ str: Current navigation status.
74
+ """
75
+ return self.robot_navigation.get_current_status()
76
+
77
+ def init_localization_by_pose(
78
+ self, x: float, y: float, z: float, roll: float, pitch: float, yaw: float
79
+ ) -> bool:
80
+ """Initialize localization by pose.
81
+
82
+ Args:
83
+ x (float): x coordinate of the pose.
84
+ y (float): y coordinate of the pose.
85
+ z (float): z coordinate of the pose.
86
+ roll (float): roll of the pose.
87
+ pitch (float): pitch of the pose.
88
+ yaw (float): yaw of the pose.
89
+
90
+ Returns:
91
+ bool: Whether localization initialization succeeded.
92
+ """
93
+ orientation = tf.transformations.quaternion_from_euler(yaw, pitch, roll)
94
+ pose = Pose(position=Point(x=x, y=y, z=z), orientation=Quaternion(x=orientation[0], y=orientation[1], z=orientation[2], w=orientation[3]))
95
+ return self.robot_navigation.init_localization_by_pose(pose)
96
+
97
+ def init_localization_by_task_point(
98
+ self, task_point_name: str
99
+ ) -> bool:
100
+ """Initialize localization by task point.
101
+
102
+ Args:
103
+ task_point_name (str): Name of the task point.
104
+
105
+ Returns:
106
+ bool: Whether localization initialization succeeded.
107
+ """
108
+ return self.robot_navigation.init_localization_by_task_point(task_point_name)
109
+
110
+ def load_map(self, map_name: str) -> bool:
111
+ """Load a map.
112
+
113
+ Args:
114
+ map_name (str): Name of the map.
115
+
116
+ Returns:
117
+ bool: Whether loading the map succeeded.
118
+ """
119
+ return self.robot_navigation.load_map(map_name)
120
+
121
+ def get_all_maps(self) -> list:
122
+ """Get all map names.
123
+
124
+ Returns:
125
+ list: List of map names.
126
+ """
127
+ return self.robot_navigation.get_all_maps()
128
+
129
+ def get_current_map(self) -> str:
130
+ """Get the current map name.
131
+
132
+ Returns:
133
+ str: Current map name.
134
+ """
135
+ return self.robot_navigation.get_current_map()
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/env python3
2
+ # coding: utf-8
3
+ from kuavo_humanoid_sdk.interfaces.data_types import (
4
+ KuavoJointCommand, KuavoTwist)
5
+ from kuavo_humanoid_sdk.kuavo.core.ros.observation import KuavoRobotObservationCore
6
+
7
+ class KuavoRobotObservation:
8
+ """用于访问机器人观测数据的类。
9
+
10
+ 该类提供了一个高级接口来访问机器人的观测数据,包括关节命令、速度命令和姿态命令。
11
+ """
12
+
13
+ def __init__(self, robot_type: str = "kuavo"):
14
+ """初始化机器人观测接口
15
+
16
+ Args:
17
+ robot_type (str): 机器人类型。默认为"kuavo"
18
+ """
19
+ self._obs_core = KuavoRobotObservationCore()
20
+
21
+ @property
22
+ def joint_command(self) -> KuavoJointCommand:
23
+ """获取当前关节控制命令
24
+
25
+ Returns:
26
+ KuavoJointCommand: 包含所有机器人关节的位置、速度和力矩命令的对象。
27
+ """
28
+ return self._obs_core.joint_command
29
+
30
+ @property
31
+ def cmd_vel(self) -> KuavoTwist:
32
+ """获取当前 cmd_vel 速度控制命令
33
+
34
+ Returns:
35
+ KuavoTwist: 包含线速度(m/s)和角速度(rad/s)命令的对象。
36
+ """
37
+ return self._obs_core.cmd_vel
38
+
39
+ @property
40
+ def cmd_pose(self) -> KuavoTwist:
41
+ """获取当前 cmd_pose 姿态控制命令
42
+
43
+ Returns:
44
+ KuavoTwist: 包含线性姿态命令(m)和角度姿态命令(rad)的对象。
45
+ """
46
+ return self._obs_core.cmd_pose
47
+
48
+ @property
49
+ def arm_position_command(self) -> list:
50
+ """获取手臂关节的位置控制命令
51
+
52
+ Returns:
53
+ list: 手臂关节(索引12-25)的位置命令,单位为弧度。
54
+ """
55
+ return self._obs_core.arm_position_command
56
+
57
+ @property
58
+ def head_position_command(self) -> list:
59
+ """获取头部关节的位置控制命令
60
+
61
+ Returns:
62
+ list: 头部关节(索引26-27)的位置命令,单位为弧度。
63
+ """
64
+ return self._obs_core.head_position_command
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env python3
2
+ # coding: utf-8
3
+ from kuavo_humanoid_sdk.kuavo.core.llm_doubao import RobotLLMDoubaoCore
4
+
5
+ class RobotSpeech:
6
+ """
7
+ RobotSpeech is a wrapper class that provides an interface to interact with the Doubao speech system.
8
+ """
9
+
10
+ def __init__(self):
11
+ """Initialize ``RobotSpeech`` wrapper and the underlying speech core."""
12
+ self.doubao_speech_core = RobotLLMDoubaoCore()
13
+
14
+ def establish_doubao_speech_connection(self, app_id: str, access_key: str) -> bool:
15
+ """Establish a connection to the Doubao service."""
16
+ return self.doubao_speech_core.verify_connection(app_id, access_key)
17
+
18
+ def start_speech(self):
19
+ """Start the speech system."""
20
+ self.doubao_speech_core.start_speech_system()
21
+
22
+ def stop_speech(self):
23
+ """Stop the speech system."""
24
+ self.doubao_speech_core.stop_speech_system()