kuavo-humanoid-sdk 1.2.1b3279__20250911210455-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 +666 -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 +201 -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 +561 -0
  32. kuavo_humanoid_sdk/kuavo/robot_arm.py +299 -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 +74 -0
  37. kuavo_humanoid_sdk/kuavo/robot_info.py +134 -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 +310 -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.1b3279.dist-info/METADATA +296 -0
  182. kuavo_humanoid_sdk-1.2.1b3279.dist-info/RECORD +184 -0
  183. kuavo_humanoid_sdk-1.2.1b3279.dist-info/WHEEL +6 -0
  184. kuavo_humanoid_sdk-1.2.1b3279.dist-info/top_level.txt +1 -0
@@ -0,0 +1,74 @@
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
+
23
+ Args:
24
+ yaw (float): 头部的偏航角,单位弧度,范围[-1.396, 1.396](-80到80度)。
25
+ pitch (float): 头部的俯仰角,单位弧度,范围[-0.436, 0.436](-25到25度)。
26
+
27
+ Returns:
28
+ bool: 如果头部控制成功返回True,否则返回False。
29
+ """
30
+ # 发送开始控制头部的日志
31
+ self._send_log(f"开始控制头部运动: yaw={yaw:.3f}, pitch={pitch:.3f}")
32
+
33
+ limited_yaw = yaw
34
+ limited_pitch = pitch
35
+
36
+ # 原有的代码逻辑保持不变
37
+ # Check yaw limits (-80 to 80 degrees)
38
+ if yaw < -math.pi*4/9 or yaw > math.pi*4/9: # -80 to 80 degrees in radians
39
+ 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")
40
+ limited_yaw = min(math.pi*4/9, max(-math.pi*4/9, yaw))
41
+ self._send_log(f"yaw值超限,已限制为: {limited_yaw:.3f}")
42
+
43
+ # Check pitch limits (-25 to 25 degrees)
44
+ if pitch < -math.pi/7.2 - 0.001 or pitch > math.pi/7.2 + 0.001: # -25 to 25 degrees in radians
45
+ 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")
46
+ limited_pitch = min(math.pi/7.2, max(-math.pi/7.2, pitch))
47
+ self._send_log(f"pitch值超限,已限制为: {limited_pitch:.3f}")
48
+
49
+ # 执行头部控制
50
+ result = self._kuavo_core.control_robot_head(yaw=limited_yaw, pitch=limited_pitch)
51
+
52
+ # 发送执行结果日志
53
+ self._send_log(f"头部控制完成: yaw={limited_yaw:.3f}, pitch={limited_pitch:.3f}, 结果={'成功' if result else '失败'}")
54
+
55
+ return result
56
+ def enable_head_tracking(self, target_id: int)->bool:
57
+ """启用头部跟踪功能,在机器人运动过程中,头部将始终追踪指定的 Apriltag ID
58
+
59
+ Args:
60
+ target_id (int): 目标ID。
61
+
62
+ Returns:
63
+ bool: 如果启用成功返回True,否则返回False。
64
+ """
65
+ return self._kuavo_core.enable_head_tracking(target_id)
66
+
67
+ def disable_head_tracking(self)->bool:
68
+ """禁用头部跟踪功能。
69
+
70
+ Returns:
71
+ bool: 如果禁用成功返回True,否则返回False。
72
+ """
73
+ return self._kuavo_core.disable_head_tracking()
74
+
@@ -0,0 +1,134 @@
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
+ self._init_stand_height = kuavo_ros_param['init_stand_height']
25
+
26
+ @property
27
+ def robot_version(self) -> str:
28
+ """返回 Kuavo 机器人的版本。
29
+
30
+ Returns:
31
+ str: 机器人版本号,例如 "42"、"45" 等。
32
+ """
33
+ return self._robot_version
34
+
35
+ @property
36
+ def end_effector_type(self) -> str:
37
+ """返回 Kuavo 机器人末端执行器的类型。
38
+
39
+ Returns:
40
+ str: 末端执行器类型,其中:
41
+ - ``qiangnao`` 表示普通灵巧手
42
+ - ``lejuclaw`` 表示乐聚二指夹爪
43
+ - ``qiangnao_touch`` 表示触觉灵巧手
44
+ - ...
45
+ """
46
+ return self._end_effector_type
47
+
48
+ @property
49
+ def joint_names(self) -> list:
50
+ """返回 Kuavo 机器人所有关节的名称。
51
+
52
+ Returns:
53
+ list: 包含所有关节名称的列表。
54
+ """
55
+ return self._joint_names
56
+
57
+ @property
58
+ def joint_dof(self) -> int:
59
+ """返回 Kuavo 机器人的总关节数。
60
+
61
+ Returns:
62
+ int: 总关节数,例如 28。
63
+ """
64
+ return self._joint_dof
65
+
66
+ @property
67
+ def arm_joint_dof(self) -> int:
68
+ """返回 Kuavo 机器人双臂的关节数。
69
+
70
+ Returns:
71
+ int: 双臂的关节数,例如 14。
72
+ """
73
+ return self._arm_joint_dof
74
+
75
+ @property
76
+ def arm_joint_names(self) -> list:
77
+ """返回 Kuavo 机器人双臂关节的名称。
78
+
79
+ Returns:
80
+ list: 包含双臂关节名称的列表。
81
+ """
82
+ return self._arm_joint_names
83
+
84
+ @property
85
+ def head_joint_dof(self) -> int:
86
+ """返回 Kuavo 机器人头部的关节数。
87
+
88
+ Returns:
89
+ int: 头部的关节数,例如 2。
90
+ """
91
+ return self._head_joint_dof
92
+
93
+ @property
94
+ def head_joint_names(self) -> list:
95
+ """返回 Kuavo 机器人头部关节的名称。
96
+
97
+ Returns:
98
+ list: 包含头部关节名称的列表。
99
+ """
100
+ return self._head_joint_names
101
+
102
+ @property
103
+ def eef_frame_names(self) -> Tuple[str, str]:
104
+ """返回 Kuavo 机器人末端执行器坐标系的名称。
105
+
106
+ Returns:
107
+ Tuple[str, str]: 包含末端执行器坐标系名称的元组,其中:\n
108
+ - 第一个元素是左手坐标系名称\n
109
+ - 第二个元素是右手坐标系名称\n
110
+ 例如 ("zarm_l7_link", "zarm_r7_link") \n
111
+ """
112
+ return self._end_frames_names[1], self._end_frames_names[2]
113
+
114
+ @property
115
+ def init_stand_height(self) -> float:
116
+ """返回 Kuavo 机器人初始化站立时的质心高度。
117
+
118
+ Returns:
119
+ float: 初始化站立时的质心高度
120
+ """
121
+ return self._init_stand_height
122
+
123
+ def __str__(self) -> str:
124
+ return (
125
+ f"KuavoRobotInfo("
126
+ f"robot_type={self.robot_type}, "
127
+ f"robot_version={self.robot_version}, "
128
+ f"end_effector_type={self.end_effector_type}, "
129
+ f"joint_names={self.joint_names}, "
130
+ f"joint_dof={self.joint_dof}, "
131
+ f"arm_joint_dof={self.arm_joint_dof}, "
132
+ f"init_stand_height={self.init_stand_height}"
133
+ f")"
134
+ )
@@ -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
+ """机器人导航接口类。"""
11
+
12
+ def __init__(self):
13
+ """初始化 RobotNavigation 对象。"""
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
+ """导航到指定目标位置。
20
+
21
+ Args:
22
+ x (float): 目标点的x坐标。
23
+ y (float): 目标点的y坐标。
24
+ z (float): 目标点的z坐标。
25
+ roll (float): 目标点的横滚角。
26
+ pitch (float): 目标点的俯仰角。
27
+ yaw (float): 目标点的偏航角。
28
+
29
+ Returns:
30
+ bool: 导航是否成功。
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
+ """导航到指定的任务点。
45
+
46
+ Args:
47
+ task_point_name (str): 任务点的名称。
48
+
49
+ Returns:
50
+ bool: 导航是否成功。
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
+ """停止导航。
63
+
64
+ Returns:
65
+ bool: 停止导航是否成功。
66
+ """
67
+ return self.robot_navigation.stop_navigation()
68
+
69
+ def get_current_status(self) -> str:
70
+ """获取当前导航状态。
71
+
72
+ Returns:
73
+ str: 当前导航状态。
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
+ """通过位姿初始化定位。
81
+
82
+ Args:
83
+ x (float): 位姿的x坐标。
84
+ y (float): 位姿的y坐标。
85
+ z (float): 位姿的z坐标。
86
+ roll (float): 位姿的横滚角。
87
+ pitch (float): 位姿的俯仰角。
88
+ yaw (float): 位姿的偏航角。
89
+
90
+ Returns:
91
+ bool: 定位初始化是否成功。
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
+ """通过任务点初始化定位。
101
+
102
+ Args:
103
+ task_point_name (str): 任务点的名称。
104
+
105
+ Returns:
106
+ bool: 定位初始化是否成功。
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
+ """加载地图。
112
+
113
+ Args:
114
+ map_name (str): 地图名称。
115
+
116
+ Returns:
117
+ bool: 加载地图是否成功。
118
+ """
119
+ return self.robot_navigation.load_map(map_name)
120
+
121
+ def get_all_maps(self) -> list:
122
+ """获取所有地图名称。
123
+
124
+ Returns:
125
+ list: 地图名称列表。
126
+ """
127
+ return self.robot_navigation.get_all_maps()
128
+
129
+ def get_current_map(self) -> str:
130
+ """获取当前地图名称。
131
+
132
+ Returns:
133
+ str: 当前地图名称。
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()