kuavo-humanoid-sdk 1.2.1b3302__20250916170841-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 +561 -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.1b3302.dist-info/METADATA +297 -0
  184. kuavo_humanoid_sdk-1.2.1b3302.dist-info/RECORD +186 -0
  185. kuavo_humanoid_sdk-1.2.1b3302.dist-info/WHEEL +6 -0
  186. kuavo_humanoid_sdk-1.2.1b3302.dist-info/top_level.txt +1 -0
@@ -0,0 +1,310 @@
1
+ #!/usr/bin/env python3
2
+ # coding: utf-8
3
+ import time
4
+ import copy
5
+ from typing import Tuple
6
+ from kuavo_humanoid_sdk.interfaces.data_types import (
7
+ KuavoImuData, KuavoJointData, KuavoOdometry, KuavoArmCtrlMode,EndEffectorState,
8
+ KuavoManipulationMpcControlFlow, KuavoManipulationMpcCtrlMode, KuavoManipulationMpcFrame)
9
+ from kuavo_humanoid_sdk.kuavo.core.ros.state import KuavoRobotStateCore
10
+
11
+ class KuavoRobotState:
12
+ def __init__(self, robot_type: str = "kuavo"):
13
+ self._rs_core = KuavoRobotStateCore()
14
+
15
+ @property
16
+ def imu_data(self) -> KuavoImuData:
17
+ """获取 Kuavo 机器人IMU数据。
18
+
19
+ 获取机器人当前的 IMU 传感器数据,包括陀螺仪、加速度计、自由加速度和方向四元数测量值。
20
+
21
+ Returns:
22
+ :class:`KuavoImuData`: IMU数据包含:
23
+ * gyro (:obj:`tuple` of :obj:`float`): 陀螺仪测量值 (x, y, z),单位rad/s
24
+ * acc (:obj:`tuple` of :obj:`float`): 加速度计测量值 (x, y, z),单位m/s^2
25
+ * free_acc (:obj:`tuple` of :obj:`float`): 自由加速度 (x, y, z),单位m/s^2
26
+ * quat (:obj:`tuple` of :obj:`float`): 方向四元数 (x, y, z, w)
27
+ """
28
+ return self._rs_core.imu_data
29
+
30
+ @property
31
+ def joint_state(self) -> KuavoJointData:
32
+ """获取 Kuavo 机器人关节数据。
33
+
34
+ 获取机器人关节数据,包括关节位置、速度、扭矩和加速度。
35
+
36
+ 数据包括:
37
+ - 关节位置(角度),单位为弧度
38
+ - 关节速度,单位为弧度/秒
39
+ - 关节扭矩/力矩,单位为牛顿米、安培
40
+ - 关节加速度
41
+
42
+ Returns:
43
+ KuavoJointData: 包含以下关节状态数据的字典:
44
+ * position (list[float]): 关节位置,长度 = joint_dof(28)
45
+ * velocity (list[float]): 关节速度,长度 = joint_dof(28)
46
+ * torque (list[float]): 关节扭矩,长度 = joint_dof(28)
47
+ * acceleration (list[float]): 关节加速度,长度 = joint_dof(28)
48
+ """
49
+ return self._rs_core.joint_data
50
+
51
+ @property
52
+ def com_height(self)->float:
53
+ """获取机器人实时的质心高度。
54
+
55
+ Returns:
56
+ float: 机器人质心高度,单位为米。
57
+
58
+ Note:
59
+ 如果需要获取机器人初始化站立时的质心高度,请使用 :attr:`KuavoRobotInfo.init_stand_height` 属性。
60
+ """
61
+ return self._rs_core.com_height
62
+
63
+ @property
64
+ def odometry(self) -> KuavoOdometry:
65
+ """获取 Kuavo 机器人里程计数据。
66
+
67
+ 获取机器人当前的里程计数据,包括位置、方向、线速度和角速度测量值。
68
+
69
+ Returns:
70
+ KuavoOdometry: 包含以下里程计数据的字典:
71
+ * position (tuple): 位置 (x, y, z),单位为米
72
+ * orientation (tuple): 方向四元数 (x, y, z, w)
73
+ * linear (tuple): 线速度 (x, y, z),单位为m/s
74
+ * angular (tuple): 角速度 (x, y, z),单位为rad/s
75
+ """
76
+ return self._rs_core.odom_data
77
+
78
+
79
+ def robot_position(self) -> Tuple[float, float, float]:
80
+ """返回 Kuavo 机器人在世界坐标系中的位置。
81
+
82
+ Returns:
83
+ Tuple[float, float, float]: 位置 (x, y, z),单位为米。
84
+ """
85
+ return tuple(self._rs_core.odom_data.position)
86
+
87
+ def robot_orientation(self) -> Tuple[float, float, float, float]:
88
+ """返回 Kuavo 机器人在世界坐标系中的方向。
89
+
90
+ Returns:
91
+ Tuple[float, float, float, float]: 方向四元数 (x, y, z, w)。
92
+ """
93
+ return tuple(self._rs_core.odom_data.orientation)
94
+
95
+ def linear_velocity(self) -> Tuple[float, float, float]:
96
+ """返回 Kuavo 机器人在世界坐标系中的线速度。
97
+
98
+ Returns:
99
+ Tuple[float, float, float]: 线速度 (x, y, z),单位为m/s。
100
+ """
101
+ return tuple(self._rs_core.odom_data.linear)
102
+
103
+
104
+ def angular_velocity(self) -> Tuple[float, float, float]:
105
+ """返回 Kuavo 机器人在世界坐标系中的角速度。
106
+
107
+ Returns:
108
+ Tuple[float, float, float]: 角速度 (x, y, z)。
109
+ """
110
+ return tuple(self._rs_core.odom_data.angular)
111
+
112
+ def arm_joint_state(self) -> KuavoJointData:
113
+ """获取 Kuavo 机器人手臂关节的当前状态。
114
+
115
+ 获取 Kuavo 机器人手臂关节的当前状态,包括:
116
+ - 关节位置(角度),单位为弧度
117
+ - 关节速度,单位为弧度/秒
118
+ - 关节扭矩/力矩,单位为牛顿米、安培
119
+ - 关节加速度
120
+
121
+ Returns:
122
+ KuavoJointData: 手臂关节数据包含:
123
+ * position: list[float] * arm_dof(14)
124
+ * velocity: list[float] * arm_dof(14)
125
+ * torque: list[float] * arm_dof(14)
126
+ * acceleration: list[float] * arm_dof(14)
127
+ """
128
+ # Get arm joint states from index 12 to 25 (14 arm joints)
129
+ arm_joint_indices = range(12, 12+14)
130
+ return KuavoJointData(
131
+ position=[self._rs_core.joint_data.position[i] for i in arm_joint_indices],
132
+ velocity=[self._rs_core.joint_data.velocity[i] for i in arm_joint_indices],
133
+ torque=[self._rs_core.joint_data.torque[i] for i in arm_joint_indices],
134
+ acceleration=[self._rs_core.joint_data.acceleration[i] for i in arm_joint_indices]
135
+ )
136
+
137
+ def arm_control_mode(self) -> KuavoArmCtrlMode:
138
+ """获取 Kuavo 机器人手臂的当前控制模式。
139
+
140
+ Returns:
141
+ KuavoArmCtrlMode: 当前手臂控制模式:
142
+ * ArmFixed: 0 - 机器人手臂处于固定位置。
143
+ * AutoSwing: 1 - 机器人手臂处于自动摆动模式。
144
+ * ExternalControl: 2 - 机器人手臂由外部控制。
145
+ * None - 机器人手臂处于未知状态。
146
+ """
147
+ return KuavoArmCtrlMode(self._rs_core.arm_control_mode)
148
+
149
+ def manipulation_mpc_ctrl_mode(self) -> KuavoManipulationMpcCtrlMode:
150
+ """获取 Kuavo 机器人 Manipulation MPC 的当前控制模式。
151
+
152
+ Returns:
153
+ KuavoManipulationMpcCtrlMode: 当前 Manipulation MPC 控制模式。
154
+ """
155
+ return self._rs_core.manipulation_mpc_ctrl_mode
156
+
157
+ def manipulation_mpc_control_flow(self) -> KuavoManipulationMpcControlFlow:
158
+ """获取 Kuavo 机器人 Manipulation MPC 的当前控制流。
159
+
160
+ Returns:
161
+ KuavoManipulationMpcControlFlow: 当前 Manipulation MPC 控制流。
162
+ """
163
+ return self._rs_core.manipulation_mpc_control_flow
164
+
165
+ def manipulation_mpc_frame(self) -> KuavoManipulationMpcFrame:
166
+ """获取机器人操作MPC的当前帧。
167
+
168
+ Returns:
169
+ KuavoManipulationMpcFrame: 末端执行器 Manipulation MPC 坐标系
170
+ """
171
+ return self._rs_core.manipulation_mpc_frame
172
+
173
+ def pitch_limit_enabled(self) -> bool:
174
+ """获取机器人 basePitch 限制状态, 如果开启则返回True,否则返回False。
175
+
176
+ Returns:
177
+ bool: 如果机器人 basePitch 限制开启返回True,否则返回False。
178
+ """
179
+ return self._rs_core.pitch_limit_enabled
180
+
181
+ def head_joint_state(self) -> KuavoJointData:
182
+ """获取机器人头部关节的当前状态。
183
+
184
+ 获取机器人头部关节的当前状态数据,包括位置、速度、扭矩和加速度值。
185
+
186
+ Returns:
187
+ KuavoJointData: 包含头部关节状态的数据结构:
188
+ * position (list[float]): 关节位置,单位为弧度,长度=head_dof(2)
189
+ * velocity (list[float]): 关节速度,单位为rad/s,长度=head_dof(2)
190
+ * torque (list[float]): 关节扭矩,单位为Nm,长度=head_dof(2)
191
+ * acceleration (list[float]): 关节加速度,单位为rad/s^2,长度=head_dof(2)
192
+
193
+ 关节顺序为 [偏航角, 俯仰角]。
194
+ """
195
+ # Get head joint states from last 2 indices
196
+ head_joint_indices = range(len(self._rs_core.joint_data.position)-2, len(self._rs_core.joint_data.position))
197
+ return KuavoJointData(
198
+ position=[self._rs_core.joint_data.position[i] for i in head_joint_indices],
199
+ velocity=[self._rs_core.joint_data.velocity[i] for i in head_joint_indices],
200
+ torque=[self._rs_core.joint_data.torque[i] for i in head_joint_indices],
201
+ acceleration=[self._rs_core.joint_data.acceleration[i] for i in head_joint_indices]
202
+ )
203
+
204
+ def eef_state(self)->Tuple[EndEffectorState, EndEffectorState]:
205
+ """获取机器人末端执行器的当前状态。
206
+
207
+ Returns:
208
+ Tuple[EndEffectorState, EndEffectorState]: 包含左右末端执行器状态的元组。
209
+ 每个EndEffectorState包含:
210
+ - position: (float, float, float) ,XYZ位置,单位为米
211
+ - orientation: (float, float, float, float) ,四元数方向
212
+ - state: EndEffectorState.GraspingState ,当前抓取状态 (UNKNOWN, OPEN, CLOSED)
213
+ """
214
+ return copy.deepcopy(self._rs_core.eef_state)
215
+
216
+ def gait_name(self)->str:
217
+ """获取机器人的当前步态名称。
218
+
219
+ Returns:
220
+ str: 当前步态的名称,例如 'trot'、'walk'、'stance'、'custom_gait'。
221
+ """
222
+ return self._rs_core.gait_name()
223
+
224
+
225
+ def is_stance(self) -> bool:
226
+ """检查机器人当前是否处于站立模式。
227
+
228
+ Returns:
229
+ bool: 如果机器人处于站立模式返回True,否则返回False。
230
+ """
231
+ return self._rs_core.is_gait('stance')
232
+
233
+ def is_walk(self) -> bool:
234
+ """检查机器人当前是否处于行走模式。
235
+
236
+ Returns:
237
+ bool: 如果机器人处于行走模式返回True,否则返回False。
238
+ """
239
+ return self._rs_core.is_gait('walk')
240
+
241
+ def is_step_control(self) -> bool:
242
+ """检查机器人当前是否处于单步控制模式。
243
+
244
+ Returns:
245
+ bool: 如果机器人处于单步控制模式返回True,否则返回False。
246
+ """
247
+ return self._rs_core.is_gait('custom_gait')
248
+
249
+ def wait_for_stance(self, timeout:float=5.0)->bool:
250
+ """等待机器人进入站立模式。
251
+
252
+ Args:
253
+ timeout (float): 等待机器人进入站立状态的最长时间,单位为秒。
254
+
255
+ Returns:
256
+ bool: 如果机器人在指定超时时间内进入站立状态返回True,否则返回False。
257
+ """
258
+ wait_time = 0
259
+ while not self._rs_core.is_gait('stance') and wait_time < timeout:
260
+ time.sleep(0.1)
261
+ wait_time += 0.1
262
+ return self._rs_core.is_gait('stance')
263
+
264
+ def wait_for_trot(self, timeout:float=5.0)->bool:
265
+ """等待机器人进入踏步状态。
266
+
267
+ Args:
268
+ timeout (float): 等待机器人进入踏步状态的最长时间,单位为秒。
269
+
270
+ Returns:
271
+ bool: 如果机器人在指定超时时间内进入踏步状态返回True,否则返回False。
272
+ """
273
+ return self.wait_for_walk(timeout=timeout)
274
+
275
+ def wait_for_walk(self, timeout:float=5.0)->bool:
276
+ """等待机器人进入行走模式。
277
+
278
+ Args:
279
+ timeout (float): 等待机器人进入行走状态的最长时间,单位为秒。
280
+
281
+ Returns:
282
+ bool: 如果机器人在指定超时时间内进入行走状态返回True,否则返回False。
283
+ """
284
+ wait_time = 0
285
+ while not self._rs_core.is_gait('walk') and wait_time < timeout:
286
+ time.sleep(0.1)
287
+ wait_time += 0.1
288
+ return self._rs_core.is_gait('walk')
289
+
290
+ def wait_for_step_control(self, timeout:float=5.0)->bool:
291
+ """等待机器人进入单步控制模式。
292
+
293
+ Args:
294
+ timeout (float): 等待机器人进入单步控制模式的最长时间,单位为秒。
295
+
296
+ Returns:
297
+ bool: 如果机器人在指定超时时间内进入单步控制模式返回True,否则返回False。
298
+ """
299
+ wait_time = 0
300
+ while not self._rs_core.is_gait('custom_gait') and wait_time < timeout:
301
+ time.sleep(0.1)
302
+ wait_time += 0.1
303
+ return self._rs_core.is_gait('custom_gait')
304
+
305
+ # if __name__ == "__main__":
306
+ # state = KuavoRobotState()
307
+ # print(state.manipulation_mpc_frame())
308
+ # print(state.manipulation_mpc_control_flow())
309
+ # print(state.manipulation_mpc_ctrl_mode())
310
+ # print(state.arm_control_mode())
@@ -0,0 +1,109 @@
1
+ #!/usr/bin/env python3
2
+ # coding: utf-8
3
+ import math
4
+ from kuavo_humanoid_sdk.common.logger import SDKLogger
5
+ from kuavo_humanoid_sdk.interfaces.data_types import (PoseQuaternion, HomogeneousMatrix, KuavoPose)
6
+ from kuavo_humanoid_sdk.kuavo.core.ros.tools import KuavoRobotToolsCore
7
+ from typing import Union, Tuple
8
+
9
+ class KuavoRobotTools:
10
+ """机器人工具类,提供坐标系转换接口。
11
+
12
+ 该类封装了不同机器人坐标系之间的坐标变换查询功能,支持多种返回数据格式。
13
+ """
14
+
15
+ def __init__(self):
16
+ self.tools_core = KuavoRobotToolsCore()
17
+
18
+ def get_tf_transform(self, target_frame: str, source_frame: str,
19
+ return_type: str = "pose_quaternion") -> Union[PoseQuaternion, HomogeneousMatrix, None]:
20
+ """获取指定坐标系之间的变换。
21
+
22
+ Args:
23
+ target_frame (str): 目标坐标系名称
24
+ source_frame (str): 源坐标系名称
25
+ return_type (str, optional): 返回数据格式类型。有效值: \n
26
+ - "pose_quaternion" : 四元数姿态格式, \n
27
+ - "homogeneous" : 齐次矩阵格式。默认为"pose_quaternion"。\n
28
+
29
+ Returns:
30
+ Union[PoseQuaternion, HomogeneousMatrix, None]:
31
+ 指定格式的变换数据,如果失败则返回None
32
+
33
+ Raises:
34
+ ValueError: 如果提供了无效的 return_type
35
+ """
36
+ return self.tools_core._get_tf_tree_transform(target_frame, source_frame, return_type=return_type)
37
+
38
+ def get_base_to_odom(self, return_type: str = "pose_quaternion") -> Union[PoseQuaternion, HomogeneousMatrix, None]:
39
+ """获取从base_link到odom坐标系的变换。
40
+
41
+ Args:
42
+ return_type (str, optional): 返回格式类型。与get_tf_transform相同,默认为"pose_quaternion"。
43
+
44
+ Returns:
45
+ Union[PoseQuaternion, HomogeneousMatrix, None]: 变换数据或 None
46
+ """
47
+ return self.get_tf_transform("odom", "base_link", return_type)
48
+
49
+ def get_camera_to_base(self, return_type: str = "homogeneous") -> Union[PoseQuaternion, HomogeneousMatrix, None]:
50
+ """获取从camera_link到base_link坐标系的变换。
51
+
52
+ Args:
53
+ return_type (str, optional): 返回格式类型。与get_tf_transform相同,默认为"homogeneous"。
54
+
55
+ Returns:
56
+ Union[PoseQuaternion, HomogeneousMatrix, None]: 变换数据或None
57
+ """
58
+ return self.get_tf_transform("base_link", "camera_link", return_type)
59
+
60
+ def get_link_position(self, link_name: str, reference_frame: str = "base_link") -> Union[Tuple[float, float, float], None]:
61
+ """获取指定机械臂关节链接的位置
62
+
63
+ Args:
64
+ link_name (str): 关节链接名称,如"zarm_l1_link"
65
+ reference_frame (str): 参考坐标系,默认为base_link
66
+
67
+ Returns:
68
+ Tuple[float, float, float] | None: 三维位置坐标(x,y,z),失败返回None
69
+ """
70
+ try:
71
+ # 获取从参考坐标系到目标链接的变换
72
+ transform = self.tools_core._get_tf_tree_transform(
73
+ reference_frame,
74
+ link_name,
75
+ return_type="pose_quaternion"
76
+ )
77
+ if transform:
78
+ return transform.position, transform.orientation
79
+ return None
80
+ except Exception as e:
81
+ SDKLogger.error(f"获取{link_name}位置失败: {str(e)}")
82
+ return None
83
+
84
+ def get_link_pose(self, link_name: str, reference_frame: str = "base_link"):
85
+ """获取指定机械臂关节链接的位置
86
+
87
+ Args:
88
+ link_name (str): 关节链接名称,如"zarm_l1_link"
89
+ reference_frame (str): 参考坐标系,默认为base_link
90
+
91
+ Returns:
92
+ Tuple[float, float, float] | None: 三维位置坐标(x,y,z),失败返回None
93
+ """
94
+ try:
95
+ # 获取从参考坐标系到目标链接的变换
96
+ transform = self.tools_core._get_tf_tree_transform(
97
+ reference_frame,
98
+ link_name,
99
+ return_type="pose_quaternion"
100
+ )
101
+ if transform:
102
+ return KuavoPose(
103
+ position=transform.position,
104
+ orientation=transform.orientation
105
+ )
106
+ return None
107
+ except Exception as e:
108
+ SDKLogger.error(f"获取{link_name}位置失败: {str(e)}")
109
+ return None
@@ -0,0 +1,81 @@
1
+ #!/usr/bin/env python3
2
+ # coding: utf-8
3
+ import math
4
+ from kuavo_humanoid_sdk.common.logger import SDKLogger
5
+ from kuavo_humanoid_sdk.interfaces.data_types import (AprilTagData)
6
+ from kuavo_humanoid_sdk.kuavo.core.ros.vision import KuavoRobotVisionCore
7
+
8
+ class KuavoRobotVision:
9
+ """Kuavo机器人视觉系统接口。
10
+
11
+ 提供从不同坐标系获取AprilTag检测数据的接口。
12
+ """
13
+
14
+ def __init__(self, robot_type: str = "kuavo"):
15
+ """初始化视觉系统。
16
+
17
+ Args:
18
+ robot_type (str, optional): 机器人类型标识符。默认为"kuavo"
19
+ """
20
+ if not hasattr(self, '_initialized'):
21
+ self._vision_core = KuavoRobotVisionCore()
22
+
23
+ def get_data_by_id(self, target_id: int, data_source: str = "base") -> dict:
24
+ """获取指定ID的AprilTag检测数据。
25
+
26
+ Args:
27
+ target_id (int): 要检索的AprilTag ID
28
+ data_source (str, optional): 数据源坐标系。可以是"base"、"camera"或"odom"。默认为"base"。
29
+
30
+ Returns:
31
+ dict: 包含位置、方向和元数据的检测数据
32
+ """
33
+ return self._vision_core._get_data_by_id(target_id, data_source)
34
+
35
+ def get_data_by_id_from_camera(self, target_id: int) -> dict:
36
+ """从相机坐标系获取AprilTag数据。
37
+
38
+ Args:
39
+ target_id (int): 要检索的AprilTag ID
40
+
41
+ Returns:
42
+ dict: 包含位置、方向和元数据的检测数据。参见 :meth:`get_data_by_id` 的返回格式说明。
43
+ """
44
+ return self._vision_core._get_data_by_id(target_id, "camera")
45
+
46
+ def get_data_by_id_from_base(self, target_id: int) -> dict:
47
+ """从基座坐标系获取AprilTag数据。
48
+
49
+ Args:
50
+ target_id (int): 要检索的AprilTag ID
51
+
52
+ Returns:
53
+ dict: 包含位置、方向和元数据的检测数据。参见 :meth:`get_data_by_id` 的返回格式说明。
54
+ """
55
+ return self._vision_core._get_data_by_id(target_id, "base")
56
+
57
+ def get_data_by_id_from_odom(self, target_id: int) -> dict:
58
+ """从里程计坐标系获取AprilTag数据。
59
+
60
+ Args:
61
+ target_id (int): 要检索的AprilTag ID
62
+
63
+ Returns:
64
+ dict: 包含位置、方向和元数据的检测数据。参见 :meth:`get_data_by_id` 的返回格式说明。
65
+ """
66
+ return self._vision_core._get_data_by_id(target_id, "odom")
67
+
68
+ @property
69
+ def apriltag_data_from_camera(self) -> AprilTagData:
70
+ """AprilTagData: 相机坐标系中检测到的所有AprilTag(属性)"""
71
+ return self._vision_core.apriltag_data_from_camera
72
+
73
+ @property
74
+ def apriltag_data_from_base(self) -> AprilTagData:
75
+ """AprilTagData: 基座坐标系中检测到的所有AprilTag(属性)"""
76
+ return self._vision_core.apriltag_data_from_base
77
+
78
+ @property
79
+ def apriltag_data_from_odom(self) -> AprilTagData:
80
+ """AprilTagData: 里程计坐标系中检测到的所有AprilTag(属性)"""
81
+ return self._vision_core.apriltag_data_from_odom
@@ -0,0 +1,2 @@
1
+ from .kuavo_strategy import *
2
+ from .grasp_box.grasp_box_strategy import *