kuavo-humanoid-sdk 1.2.2b3208__20250922170818-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 (186) 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/camera.py +105 -0
  18. kuavo_humanoid_sdk/kuavo/core/ros/control.py +1524 -0
  19. kuavo_humanoid_sdk/kuavo/core/ros/microphone.py +38 -0
  20. kuavo_humanoid_sdk/kuavo/core/ros/navigation.py +217 -0
  21. kuavo_humanoid_sdk/kuavo/core/ros/observation.py +94 -0
  22. kuavo_humanoid_sdk/kuavo/core/ros/param.py +201 -0
  23. kuavo_humanoid_sdk/kuavo/core/ros/sat_utils.py +103 -0
  24. kuavo_humanoid_sdk/kuavo/core/ros/state.py +652 -0
  25. kuavo_humanoid_sdk/kuavo/core/ros/tools.py +220 -0
  26. kuavo_humanoid_sdk/kuavo/core/ros/vision.py +234 -0
  27. kuavo_humanoid_sdk/kuavo/core/ros_env.py +238 -0
  28. kuavo_humanoid_sdk/kuavo/core/sdk_deprecated.py +41 -0
  29. kuavo_humanoid_sdk/kuavo/demo_climbstair.py +249 -0
  30. kuavo_humanoid_sdk/kuavo/dexterous_hand.py +238 -0
  31. kuavo_humanoid_sdk/kuavo/leju_claw.py +235 -0
  32. kuavo_humanoid_sdk/kuavo/logger_client.py +80 -0
  33. kuavo_humanoid_sdk/kuavo/robot.py +646 -0
  34. kuavo_humanoid_sdk/kuavo/robot_arm.py +411 -0
  35. kuavo_humanoid_sdk/kuavo/robot_audio.py +39 -0
  36. kuavo_humanoid_sdk/kuavo/robot_blockly.py +1154 -0
  37. kuavo_humanoid_sdk/kuavo/robot_climbstair.py +1607 -0
  38. kuavo_humanoid_sdk/kuavo/robot_head.py +95 -0
  39. kuavo_humanoid_sdk/kuavo/robot_info.py +134 -0
  40. kuavo_humanoid_sdk/kuavo/robot_microphone.py +19 -0
  41. kuavo_humanoid_sdk/kuavo/robot_navigation.py +135 -0
  42. kuavo_humanoid_sdk/kuavo/robot_observation.py +64 -0
  43. kuavo_humanoid_sdk/kuavo/robot_speech.py +24 -0
  44. kuavo_humanoid_sdk/kuavo/robot_state.py +310 -0
  45. kuavo_humanoid_sdk/kuavo/robot_tool.py +109 -0
  46. kuavo_humanoid_sdk/kuavo/robot_vision.py +81 -0
  47. kuavo_humanoid_sdk/kuavo_strategy/__init__.py +2 -0
  48. kuavo_humanoid_sdk/kuavo_strategy/grasp_box/grasp_box_strategy.py +1325 -0
  49. kuavo_humanoid_sdk/kuavo_strategy/kuavo_strategy.py +106 -0
  50. kuavo_humanoid_sdk/kuavo_strategy_v2/common/data_type.py +340 -0
  51. kuavo_humanoid_sdk/kuavo_strategy_v2/common/events/base_event.py +215 -0
  52. kuavo_humanoid_sdk/kuavo_strategy_v2/common/robot_sdk.py +25 -0
  53. kuavo_humanoid_sdk/kuavo_strategy_v2/pick_place_box/case.py +331 -0
  54. kuavo_humanoid_sdk/kuavo_strategy_v2/pick_place_box/strategy.py +504 -0
  55. kuavo_humanoid_sdk/kuavo_strategy_v2/utils/logger_setup.py +40 -0
  56. kuavo_humanoid_sdk/kuavo_strategy_v2/utils/utils.py +88 -0
  57. kuavo_humanoid_sdk/msg/__init__.py +4 -0
  58. kuavo_humanoid_sdk/msg/kuavo_msgs/__init__.py +7 -0
  59. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_AprilTagDetection.py +306 -0
  60. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_AprilTagDetectionArray.py +437 -0
  61. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_AudioReceiverData.py +122 -0
  62. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_FTsensorData.py +260 -0
  63. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_JoySticks.py +191 -0
  64. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_Metadata.py +199 -0
  65. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_MmDetectionMsg.py +264 -0
  66. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_RobotActionState.py +112 -0
  67. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_TFArray.py +323 -0
  68. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_TaskPoint.py +175 -0
  69. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/__init__.py +62 -0
  70. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armCollisionCheckInfo.py +160 -0
  71. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armHandPose.py +161 -0
  72. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armHandPoseFree.py +171 -0
  73. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armPoseWithTimeStamp.py +168 -0
  74. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armTargetPoses.py +171 -0
  75. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_bezierCurveCubicPoint.py +178 -0
  76. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_dexhandCommand.py +229 -0
  77. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_dexhandTouchState.py +256 -0
  78. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_endEffectorData.py +227 -0
  79. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPose.py +123 -0
  80. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPose6D.py +123 -0
  81. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPose6DTargetTrajectories.py +320 -0
  82. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoseTargetTrajectories.py +301 -0
  83. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoseWithVision.py +136 -0
  84. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoseWithVisionArray.py +231 -0
  85. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoses.py +149 -0
  86. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoses6D.py +149 -0
  87. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_fullBodyTargetTrajectories.py +258 -0
  88. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_gaitTimeName.py +147 -0
  89. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_gestureInfo.py +218 -0
  90. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_gestureTask.py +149 -0
  91. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_handPose.py +136 -0
  92. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_headBodyPose.py +145 -0
  93. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_ikSolveError.py +171 -0
  94. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_ikSolveParam.py +140 -0
  95. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_imuData.py +165 -0
  96. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_jointBezierTrajectory.py +201 -0
  97. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_jointCmd.py +390 -0
  98. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_jointData.py +205 -0
  99. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_kuavoModeSchedule.py +224 -0
  100. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_lejuClawCommand.py +320 -0
  101. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_lejuClawState.py +341 -0
  102. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_motorParam.py +122 -0
  103. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_picoPoseInfo.py +143 -0
  104. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_picoPoseInfoList.py +220 -0
  105. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_planArmState.py +120 -0
  106. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_qv.py +121 -0
  107. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotArmQVVD.py +177 -0
  108. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotBodyMatrices.py +332 -0
  109. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotHandPosition.py +225 -0
  110. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotHeadMotionData.py +128 -0
  111. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotState.py +222 -0
  112. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_sensorsData.py +655 -0
  113. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_switchGaitByName.py +200 -0
  114. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_tagDataArray.py +216 -0
  115. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_touchSensorStatus.py +162 -0
  116. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_twoArmHandPose.py +273 -0
  117. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_twoArmHandPoseCmd.py +316 -0
  118. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_twoArmHandPoseCmdFree.py +338 -0
  119. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_twoArmHandPoseFree.py +299 -0
  120. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_yoloDetection.py +251 -0
  121. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_yoloOutputData.py +168 -0
  122. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_CreatePath.py +581 -0
  123. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_ExecuteArmAction.py +281 -0
  124. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_GetAllMaps.py +241 -0
  125. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_GetCurrentMap.py +225 -0
  126. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_GetTargetPartPoseInCamera.py +298 -0
  127. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_InitialPoseWithTaskPoint.py +281 -0
  128. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_LoadMap.py +281 -0
  129. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_NavigateToTaskPoint.py +281 -0
  130. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_RepublishTFs.py +373 -0
  131. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_SetInitialPose.py +394 -0
  132. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_SetJoyTopic.py +282 -0
  133. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_SetLEDMode.py +468 -0
  134. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_SetLEDMode_free.py +289 -0
  135. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_SpeechSynthesis.py +270 -0
  136. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_TaskPointOperation.py +536 -0
  137. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/__init__.py +43 -0
  138. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_adjustZeroPoint.py +277 -0
  139. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_changeArmCtrlMode.py +275 -0
  140. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_changeArmCtrlModeKuavo.py +236 -0
  141. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_changeMotorParam.py +299 -0
  142. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_changeTorsoCtrlMode.py +274 -0
  143. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_controlLejuClaw.py +408 -0
  144. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_enableHandTouchSensor.py +304 -0
  145. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_fkSrv.py +395 -0
  146. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_footPose6DTargetTrajectoriesSrv.py +426 -0
  147. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_footPoseTargetTrajectoriesSrv.py +409 -0
  148. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_gestureExecute.py +339 -0
  149. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_gestureExecuteState.py +257 -0
  150. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_gestureList.py +418 -0
  151. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_getCurrentGaitName.py +253 -0
  152. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_getMotorParam.py +299 -0
  153. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_getMotorZeroPoints.py +286 -0
  154. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_handForceLevel.py +330 -0
  155. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_jointMoveTo.py +302 -0
  156. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_planArmTrajectoryBezierCurve.py +422 -0
  157. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_planArmTrajectoryCubicSpline.py +490 -0
  158. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_playmusic.py +268 -0
  159. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_setHwIntialState.py +304 -0
  160. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_setMmCtrlFrame.py +273 -0
  161. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_setMotorEncoderRoundService.py +283 -0
  162. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_setTagId.py +275 -0
  163. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_singleStepControl.py +444 -0
  164. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_twoArmHandPoseCmdFreeSrv.py +716 -0
  165. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_twoArmHandPoseCmdSrv.py +664 -0
  166. kuavo_humanoid_sdk/msg/motion_capture_ik/__init__.py +7 -0
  167. kuavo_humanoid_sdk/msg/ocs2_msgs/__init__.py +7 -0
  168. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/__init__.py +12 -0
  169. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_constraint.py +142 -0
  170. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_controller_data.py +121 -0
  171. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_lagrangian_metrics.py +148 -0
  172. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mode_schedule.py +150 -0
  173. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_flattened_controller.py +666 -0
  174. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_input.py +122 -0
  175. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_observation.py +209 -0
  176. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_performance_indices.py +140 -0
  177. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_solver_data.py +886 -0
  178. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_state.py +122 -0
  179. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_target_trajectories.py +239 -0
  180. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_multiplier.py +148 -0
  181. kuavo_humanoid_sdk/msg/ocs2_msgs/srv/__init__.py +1 -0
  182. kuavo_humanoid_sdk/msg/ocs2_msgs/srv/_reset.py +376 -0
  183. kuavo_humanoid_sdk-1.2.2b3208.dist-info/METADATA +297 -0
  184. kuavo_humanoid_sdk-1.2.2b3208.dist-info/RECORD +186 -0
  185. kuavo_humanoid_sdk-1.2.2b3208.dist-info/WHEEL +6 -0
  186. kuavo_humanoid_sdk-1.2.2b3208.dist-info/top_level.txt +1 -0
@@ -0,0 +1,6 @@
1
+ from .msg import *
2
+ from .interfaces import *
3
+ from .kuavo import *
4
+ from .kuavo_strategy import *
5
+ from .kuavo_strategy.grasp_box import *
6
+ from kuavo_humanoid_sdk.common.logger import SDKLogger, disable_sdk_logging
@@ -0,0 +1,45 @@
1
+ import logging
2
+ import os
3
+ from pathlib import Path
4
+ from logging.handlers import RotatingFileHandler
5
+ def setup_logger():
6
+ logger = logging.getLogger('kuavo-humanoid-sdk')
7
+ logger.setLevel(logging.DEBUG)
8
+ log_suffix = f'log/kuavo_humanoid_sdk'
9
+ log_dir = f'/var/{log_suffix}'
10
+ try:
11
+ # Check if we have write permission for /var directory
12
+ if not os.access('/var/log/', os.W_OK):
13
+ log_dir = f'./{log_suffix}'
14
+ Path(log_dir).mkdir(parents=True, exist_ok=True)
15
+ except Exception as e:
16
+ # If creation in /var fails, create in current directory
17
+ log_dir = f'./{log_suffix}'
18
+ Path(log_dir).mkdir(parents=True, exist_ok=True)
19
+ log_file = f'{log_dir}/kuavo_humanoid_sdk.log'
20
+
21
+ print(f'kuavo-humanoid-sdk log_file: {log_file}')
22
+
23
+ fh = RotatingFileHandler(log_file, maxBytes=2*1024*1024, backupCount=5) # 每个日志文件最大 2 MB,保留 5 个备份文件
24
+ fh.setLevel(logging.DEBUG)
25
+
26
+ ch = logging.StreamHandler()
27
+ ch.setLevel(logging.DEBUG)
28
+
29
+ formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
30
+ fh.setFormatter(formatter)
31
+ ch.setFormatter(formatter)
32
+
33
+ logger.addHandler(fh)
34
+ logger.addHandler(ch)
35
+ return logger
36
+
37
+ def disable_sdk_logging():
38
+ """
39
+ Disable SDK logging.
40
+ """
41
+ logging.disable()
42
+
43
+
44
+ """ Logger """
45
+ SDKLogger = setup_logger()
@@ -0,0 +1,4 @@
1
+ from .data_types import *
2
+ from .robot import *
3
+ from .end_effector import *
4
+ from .robot_info import *
@@ -0,0 +1,288 @@
1
+ from typing import Tuple
2
+ from enum import Enum
3
+ from dataclasses import dataclass
4
+ import numpy as np
5
+
6
+ @dataclass
7
+ class KuavoJointData:
8
+ """表示机器人关节状态的数据类"""
9
+ position: list
10
+ """关节位置(角度)列表,单位为弧度"""
11
+ velocity: list
12
+ """关节速度列表,单位为弧度/秒"""
13
+ torque: list
14
+ """关节扭矩/力矩列表,单位为牛顿·米或安培"""
15
+ acceleration:list
16
+ """关节加速度列表,单位为弧度/秒²"""
17
+
18
+ @dataclass
19
+ class KuavoImuData:
20
+ """表示机器人IMU(惯性测量单元)数据的数据类"""
21
+ gyro : Tuple[float, float, float]
22
+ """绕x、y、z轴的角速度,单位为弧度/秒"""
23
+ acc : Tuple[float, float, float]
24
+ """x、y、z轴的线性加速度,单位为米/秒²"""
25
+ free_acc: Tuple[float, float, float]
26
+ """自由加速度(重力补偿),x、y、z轴,单位为米/秒²"""
27
+ quat: Tuple[float, float, float, float]
28
+ """方向四元数 (x, y, z, w)"""
29
+
30
+ @dataclass
31
+ class KuavoOdometry:
32
+ """表示机器人里程计数据的数据类"""
33
+ position: Tuple[float, float, float]
34
+ """机器人在世界坐标系中的位置 (x, y, z),单位为米"""
35
+ orientation: Tuple[float, float, float, float]
36
+ """机器人方向四元数 (x, y, z, w)"""
37
+ linear: Tuple[float, float, float]
38
+ """世界坐标系中的线性速度 (x, y, z),单位为米/秒"""
39
+ angular: Tuple[float, float, float]
40
+ """世界坐标系中的角速度 (x, y, z),单位为弧度/秒"""
41
+
42
+ class KuavoArmCtrlMode(Enum):
43
+ """表示Kuavo机器人手臂控制模式的枚举类。"""
44
+ ArmFixed = 0
45
+ """手臂固定(冻结)模式"""
46
+ AutoSwing = 1
47
+ """自动摆臂模式"""
48
+ ExternalControl = 2
49
+ """手臂由外部命令控制"""
50
+
51
+ class KuavoManipulationMpcFrame(Enum):
52
+ """表示Kuavo机器人末端执行器 Manipulation MPC 坐标系的枚举类"""
53
+ KeepCurrentFrame = 0
54
+ """保持当前坐标系"""
55
+ WorldFrame = 1
56
+ """世界坐标系"""
57
+ LocalFrame = 2
58
+ """本地坐标系"""
59
+ VRFrame = 3
60
+ """VR坐标系"""
61
+ ManipulationWorldFrame = 4
62
+ """操作世界坐标系"""
63
+ ERROR = -1
64
+ """错误状态"""
65
+
66
+ class KuavoManipulationMpcCtrlMode(Enum):
67
+ """表示Kuavo机器人 Manipulation MPC 控制模式的枚举类"""
68
+ NoControl = 0
69
+ """无控制"""
70
+ ArmOnly = 1
71
+ """仅控制手臂"""
72
+ BaseOnly = 2
73
+ """仅控制底座"""
74
+ BaseArm = 3
75
+ """同时控制底座和手臂"""
76
+ ERROR = -1
77
+ """错误状态"""
78
+
79
+ class KuavoManipulationMpcControlFlow(Enum):
80
+ """表示Kuavo机器人 Manipulation MPC 控制数据流的枚举类"""
81
+ ThroughFullBodyMpc = 0
82
+ """控制数据通过全身MPC后进入WBC"""
83
+ DirectToWbc = 1
84
+ """控制数据直接流向WBC,不经过全身MPC"""
85
+ Error = -1
86
+ """无效的控制路径"""
87
+
88
+ @dataclass
89
+ class EndEffectorState:
90
+ """表示末端执行器状态的数据类。
91
+
92
+ 参数:
93
+ position (list): 浮点数,末端执行器位置,范围: [0, 100] \n
94
+ velocity (list): 浮点数,速度 \n
95
+ effort (list): 浮点数,力矩 \n
96
+ state (GraspingState): 夹爪抓取状态 \n
97
+ """
98
+ position: list
99
+ velocity: list
100
+ effort: list
101
+ class GraspingState(Enum):
102
+ """表示末端执行器抓取状态的枚举类。"""
103
+
104
+ ERROR = -1
105
+ """错误状态"""
106
+ UNKNOWN = 0
107
+ """未知状态"""
108
+ MOVING = 1
109
+ """正在移动到目标位置"""
110
+ REACHED = 2
111
+ """到达目标位置"""
112
+ GRABBED = 3
113
+ """成功抓取物体"""
114
+
115
+ state: GraspingState
116
+
117
+ class EndEffectorSide(Enum):
118
+ """表示末端执行器类型的枚举类。"""
119
+ LEFT = 'left'
120
+ """左末端执行器"""
121
+ RIGHT = 'right'
122
+ """右末端执行器"""
123
+ BOTH = 'both'
124
+ """左右末端执行器"""
125
+
126
+ @dataclass
127
+ class KuavoPose:
128
+ """表示机器人姿态的数据类。"""
129
+ position: Tuple[float, float, float] # x, y, z
130
+ orientation: Tuple[float, float, float, float] # x, y, z, w
131
+
132
+ def __str__(self) -> str:
133
+ """Returns a formatted string representation of the pose.
134
+
135
+ Returns:
136
+ str: Formatted pose string with position and orientation
137
+ """
138
+ return (
139
+ f"Position (x,y,z): ({self.position[0]:.3f}, {self.position[1]:.3f}, {self.position[2]:.3f})\n"
140
+ f"Orientation (x,y,z,w): ({self.orientation[0]:.3f}, {self.orientation[1]:.3f}, "
141
+ f"{self.orientation[2]:.3f}, {self.orientation[3]:.3f})"
142
+ )
143
+
144
+ @dataclass
145
+ class KuavoIKParams:
146
+ """表示IK节点参数的数据类。"""
147
+ # snopt参数
148
+ major_optimality_tol: float = 1e-3
149
+ major_feasibility_tol: float = 1e-3
150
+ minor_feasibility_tol: float = 1e-3
151
+ major_iterations_limit: float = 100
152
+ # 约束和成本参数
153
+ oritation_constraint_tol: float = 1e-3
154
+ pos_constraint_tol: float = 1e-3 # 0.001m,当pos_cost_weight==0.0时生效
155
+ pos_cost_weight: float = 0.0 # 如果需要高精度,请将此值设为0.0!!!
156
+
157
+ @dataclass
158
+ class KuavoDexHandTouchState:
159
+ """表示灵巧手触觉状态的数据类。"""
160
+
161
+ @dataclass
162
+ class KuavoTouchState:
163
+ """表示灵巧手触觉状态的数据类"""
164
+ normal_force1: int # 法向力1
165
+ """法向力1"""
166
+ normal_force2: int # 法向力2
167
+ """法向力2"""
168
+ normal_force3: int # 法向力3
169
+ """法向力3"""
170
+ tangential_force1: int # 切向力1
171
+ """切向力1"""
172
+ tangential_force2: int # 切向力2
173
+ """切向力2"""
174
+ tangential_force3: int # 切向力3
175
+ """切向力3"""
176
+ tangential_direction1: int # 切向力方向1
177
+ """切向力方向1"""
178
+ tangential_direction2: int # 切向力方向2
179
+ """切向力方向2"""
180
+ tangential_direction3: int # 切向力方向3
181
+ """切向力方向3"""
182
+ self_proximity1: int # 自电容接近传感器1
183
+ """自电容接近传感器1"""
184
+ self_proximity2: int # 自电容接近传感器2
185
+ """自电容接近传感器2"""
186
+ mutual_proximity: int # 互电容接近传感器
187
+ """互电容接近传感器"""
188
+ status: int # 传感器状态
189
+ """传感器状态"""
190
+ # 5个手指
191
+ data: Tuple[KuavoTouchState, KuavoTouchState, KuavoTouchState, KuavoTouchState, KuavoTouchState]
192
+
193
+ @dataclass
194
+ class AprilTagData:
195
+ """表示检测到的AprilTag信息及姿态估计"""
196
+ id: list
197
+ """检测到的AprilTag ID列表(整数)"""
198
+ size: list
199
+ """标签物理尺寸列表,单位为米(浮点数)"""
200
+ pose: list
201
+ """表示标签姿态的PoseQuaternion对象列表"""
202
+
203
+ @dataclass
204
+ class HomogeneousMatrix:
205
+ """用于3D变换的4x4齐次变换矩阵。
206
+
207
+ 表示3D空间中的旋转和平移。可用于坐标系变换和姿态合成。 \n
208
+
209
+ 属性:
210
+ matrix (np.ndarray): 形状为(4, 4)的4x4 numpy数组,包含::
211
+
212
+ [[R, t],
213
+ [0, 1]]
214
+
215
+ 其中R是3x3旋转矩阵,t是3x1平移向量
216
+ """
217
+ matrix: np.ndarray # 形状(4,4)的齐次变换矩阵
218
+
219
+ @dataclass
220
+ class PoseQuaternion:
221
+ """使用位置和四元数方向的3D姿态表示"""
222
+ position: Tuple[float, float, float]
223
+ """XYZ坐标,单位为米"""
224
+ orientation: Tuple[float, float, float, float]
225
+ """单位四元数,采用(x, y, z, w)格式,遵循ROS约定"""
226
+
227
+
228
+ @dataclass
229
+ class KuavoJointCommand:
230
+ """表示机器人关节命令的数据类\n
231
+ """
232
+ joint_q: list
233
+ """关节位置命令列表,单位为弧度"""
234
+ joint_v: list
235
+ """关节速度命令列表,单位为弧度/秒"""
236
+ """关节扭矩/力矩命令列表,单位为牛顿·米或安培"""
237
+ tau: list
238
+ """关节扭矩/力矩命令列表,单位为牛顿·米或安培"""
239
+ tau_max: list
240
+ """每个关节的最大允许扭矩列表"""
241
+ tau_ratio: list
242
+ """每个关节的扭矩比率(实际/最大)列表"""
243
+ joint_kp: list
244
+ """位置控制比例增益列表"""
245
+ joint_kd: list
246
+ """速度控制微分增益列表"""
247
+ control_modes: list
248
+ """每个关节的控制模式整数列表"""
249
+
250
+
251
+ @dataclass
252
+ class KuavoTwist:
253
+ """表示机器人扭转(速度)数据的数据类"""
254
+ linear: Tuple[float, float, float]
255
+ """线性速度 (x, y, z),单位为米/秒"""
256
+ angular: Tuple[float, float, float]
257
+ """角速度 (x, y, z),单位为弧度/秒"""
258
+
259
+
260
+ @dataclass
261
+ class KuavoMotorParam:
262
+ """表示机器人电机参数的数据类"""
263
+ Kp: float
264
+ """位置控制比例增益"""
265
+ Kd: float
266
+ """速度控制微分增益"""
267
+ id: int
268
+ """电机ID"""
269
+
270
+
271
+ @dataclass
272
+ class AprilTagDetection:
273
+ """表示AprilTag检测结果的数据类"""
274
+ @dataclass
275
+ class Point:
276
+ x: float
277
+ y: float
278
+ z: float
279
+
280
+ @dataclass
281
+ class Quaternion:
282
+ x: float
283
+ y: float
284
+ z: float
285
+ w: float
286
+
287
+ position: Point
288
+ orientation: Quaternion
@@ -0,0 +1,62 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Tuple
3
+ from kuavo_humanoid_sdk.interfaces.data_types import EndEffectorSide, EndEffectorState
4
+
5
+ class EndEffector(ABC):
6
+ def __init__(self, joint_names: list):
7
+ self._joint_names = joint_names
8
+
9
+ def joint_names(self)->list:
10
+ """Returns the joint names of the end effector.
11
+
12
+ Returns:
13
+ list: The joint names of the end effector.
14
+ """
15
+ return self._joint_names
16
+
17
+ def joint_count(self) -> int:
18
+ """Returns the total number of joints in the end effector.
19
+
20
+ The joint_names list contains joints for both left and right end effectors.
21
+ For a single end effector, the number of joints would be joint_names.size/2.
22
+
23
+ Returns:
24
+ int: The total number of joints in the end effector.
25
+ """
26
+ return len(self._joint_names)
27
+
28
+ @abstractmethod
29
+ def control(self, target_positions:list, target_velocities:list, target_torques:list)->bool:
30
+ pass
31
+
32
+ @abstractmethod
33
+ def control_right(self, target_positions:list, target_velocities:list, target_torques:list)->bool:
34
+ pass
35
+
36
+ @abstractmethod
37
+ def control_left(self, target_positions:list, target_velocities:list, target_torques:list)->bool:
38
+ pass
39
+
40
+ @abstractmethod
41
+ def open(self, side:EndEffectorSide)->bool:
42
+ pass
43
+
44
+ @abstractmethod
45
+ def get_state(self)->Tuple[EndEffectorState, EndEffectorState]:
46
+ pass
47
+
48
+ @abstractmethod
49
+ def get_position(self)->Tuple[list, list]:
50
+ pass
51
+
52
+ @abstractmethod
53
+ def get_velocity(self)->Tuple[list, list]:
54
+ pass
55
+
56
+ @abstractmethod
57
+ def get_effort(self)->Tuple[list, list]:
58
+ pass
59
+
60
+ @abstractmethod
61
+ def get_grasping_state(self)->Tuple[EndEffectorState.GraspingState, EndEffectorState.GraspingState]:
62
+ pass
@@ -0,0 +1,22 @@
1
+
2
+ from abc import ABC, abstractmethod
3
+
4
+ class RobotBase(ABC):
5
+ def __init__(self, robot_type: str = "kuavo"):
6
+ self._robot_type = robot_type
7
+
8
+ @property
9
+ def robot_type(self) -> str:
10
+ return self._robot_type
11
+
12
+ @abstractmethod
13
+ def trot(self):
14
+ pass
15
+
16
+ @abstractmethod
17
+ def stance(self):
18
+ pass
19
+
20
+ @abstractmethod
21
+ def jump(self):
22
+ pass
@@ -0,0 +1,56 @@
1
+ from abc import ABC, abstractmethod
2
+
3
+ class RobotInfoBase(ABC):
4
+ def __init__(self, robot_type: str = "kuavo"):
5
+ self._robot_type = robot_type
6
+
7
+ @property
8
+ def robot_type(self) -> str:
9
+ """
10
+ Get the robot type, e.g. "kuavo"
11
+ """
12
+ return self._robot_type
13
+
14
+ @property
15
+ @abstractmethod
16
+ def robot_version(self) -> str:
17
+ """
18
+ Get the robot version, e.g. "42", "43"
19
+ """
20
+ pass
21
+
22
+ @property
23
+ @abstractmethod
24
+ def end_effector_type(self) -> str:
25
+ """
26
+ Get the end effector type, e.g. "lejuclaw"...
27
+ """
28
+ pass
29
+
30
+ @property
31
+ @abstractmethod
32
+ def joint_names(self) -> list:
33
+ """
34
+ Get the joint names, e.g. ["joint1", "joint2", ...]
35
+ """
36
+ pass
37
+
38
+ @property
39
+ @abstractmethod
40
+ def joint_dof(self) -> int:
41
+ """
42
+ Get the joint degrees of freedom, e.g. 28
43
+ """
44
+ pass
45
+
46
+ @property
47
+ @abstractmethod
48
+ def arm_joint_dof(self) -> int:
49
+ """
50
+ Get the arm joint degrees of freedom, e.g. 14
51
+ """
52
+ pass
53
+
54
+ def __str__(self) -> str:
55
+ pass
56
+
@@ -0,0 +1,16 @@
1
+ from .robot import KuavoSDK, KuavoRobot
2
+ from .robot_info import KuavoRobotInfo
3
+ from .robot_state import KuavoRobotState
4
+ from .robot_vision import KuavoRobotVision
5
+ from .robot_tool import KuavoRobotTools
6
+ from .robot_arm import KuavoRobotArm
7
+ from .robot_head import KuavoRobotHead
8
+ from .robot_audio import KuavoRobotAudio
9
+ from .dexterous_hand import DexterousHand, TouchDexterousHand
10
+ from .leju_claw import LejuClaw
11
+ from .robot_observation import KuavoRobotObservation
12
+ from .robot_blockly import RobotControlBlockly
13
+ from .robot_microphone import RobotMicrophone
14
+ from .robot_navigation import RobotNavigation
15
+ from .robot_speech import RobotSpeech
16
+ from .dexterous_hand import DexterousHand
@@ -0,0 +1,32 @@
1
+ import time
2
+ import math
3
+ import threading
4
+ import numpy as np
5
+ from typing import Tuple
6
+ from transitions import Machine, State
7
+
8
+ from kuavo_humanoid_sdk.common.logger import SDKLogger
9
+ from kuavo_humanoid_sdk.kuavo.core.ros.audio import Audio
10
+
11
+ class KuavoRobotAudioCore:
12
+ def __init__(self):
13
+ self.robot_audio = Audio()
14
+
15
+ def play_audio(self, music_number: str, volume: int = 100, speed: float = 1.0) -> bool:
16
+ """
17
+ play music
18
+ """
19
+ return self.robot_audio.play_audio(music_number, volume, speed)
20
+
21
+ def stop_music(self) -> bool:
22
+ """
23
+ stop music
24
+ """
25
+ return self.robot_audio.stop_audio()
26
+
27
+ def text_to_speech(self, text: str, volume: float = 0.5) -> bool:
28
+ """
29
+ text to speech
30
+ """
31
+ return self.robot_audio.text_to_speech(text, volume)
32
+