kuavo-humanoid-sdk 1.2.1b3269__20250911204115-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.1b3269.dist-info/METADATA +296 -0
  182. kuavo_humanoid_sdk-1.2.1b3269.dist-info/RECORD +184 -0
  183. kuavo_humanoid_sdk-1.2.1b3269.dist-info/WHEEL +6 -0
  184. kuavo_humanoid_sdk-1.2.1b3269.dist-info/top_level.txt +1 -0
@@ -0,0 +1,299 @@
1
+ #!/usr/bin/env python3
2
+ # coding: utf-8
3
+
4
+ import math
5
+ from typing import Tuple
6
+ from kuavo_humanoid_sdk.interfaces.data_types import KuavoArmCtrlMode, KuavoIKParams, KuavoPose, KuavoManipulationMpcFrame, KuavoManipulationMpcCtrlMode, KuavoManipulationMpcControlFlow
7
+ from kuavo_humanoid_sdk.kuavo.core.core import KuavoRobotCore
8
+ from kuavo_humanoid_sdk.kuavo.robot_info import KuavoRobotInfo
9
+
10
+ class KuavoRobotArm:
11
+ """Kuavo机器人手臂控制类。
12
+
13
+ 提供了控制机器人手臂的各种接口,包括关节位置控制、轨迹控制、末端执行器姿态控制等。
14
+ """
15
+ def __init__(self):
16
+ self._kuavo_core = KuavoRobotCore()
17
+ self._robot_info = KuavoRobotInfo(robot_type="kuavo")
18
+
19
+ def arm_reset(self)-> bool:
20
+ """重置机器人手臂。
21
+
22
+ Returns:
23
+ bool: 重置成功返回True,否则返回False。
24
+ """
25
+ return self._kuavo_core.robot_arm_reset()
26
+
27
+ def manipulation_mpc_reset(self)-> bool:
28
+ """重置机器人 Manipulation MPC 控制器。
29
+
30
+ Returns:
31
+ bool: 重置成功返回True,否则返回False。
32
+ """
33
+ return self._kuavo_core.robot_manipulation_mpc_reset()
34
+
35
+ def control_arm_target_poses(self, times: list, q_frames: list) -> bool:
36
+ """控制机器人手臂目标姿态(已废弃)。
37
+
38
+ .. deprecated::
39
+ 请使用 :meth:`control_arm_joint_trajectory` 替代此函数。
40
+
41
+ Args:
42
+ times (list): 时间间隔列表,单位秒
43
+ q_frames (list): 关节位置列表,单位弧度
44
+
45
+ Returns:
46
+ bool: 控制成功返回True,否则返回False
47
+
48
+ Note:
49
+ 此函数已废弃,请使用 :meth:`control_arm_joint_trajectory` 函数。
50
+ """
51
+ if len(times) != len(q_frames):
52
+ raise ValueError("Invalid input. times and joint_q must have thesame length.")
53
+
54
+ # Check if joint positions are within ±180 degrees (±π radians)
55
+ q_degs = []
56
+ for q in q_frames:
57
+ if any(abs(pos) > math.pi for pos in q):
58
+ raise ValueError("Joint positions must be within ±π rad (±180 deg)")
59
+ if len(q) != self._robot_info.arm_joint_dof:
60
+ raise ValueError(
61
+ "Invalid position length. Expected {}, got {}".format(self._robot_info.arm_joint_dof, len(q)))
62
+ # Convert joint positions from radians to degrees
63
+ q_degs.append([(p * 180.0 / math.pi) for p in q])
64
+
65
+ return self._kuavo_core.control_robot_arm_target_poses(times=times, joint_q=q_degs)
66
+ def control_arm_joint_positions(self, joint_position:list)->bool:
67
+ """控制机器人手臂关节位置。
68
+
69
+ Args:
70
+ joint_position (list): 关节位置列表,单位为弧度
71
+
72
+ Raises:
73
+ ValueError: 如果关节位置列表长度不正确
74
+ ValueError: 如果关节位置超出[-π, π]范围
75
+ RuntimeError: 如果在控制手臂时机器人不在站立状态
76
+
77
+ Returns:
78
+ bool: 控制成功返回True,否则返回False
79
+ """
80
+ if len(joint_position) != self._robot_info.arm_joint_dof:
81
+ raise ValueError("Invalid position length. Expected {}, got {}".format(self._robot_info.arm_joint_dof, len(joint_position)))
82
+
83
+ # Check if joint positions are within ±180 degrees (±π radians)
84
+ for pos in joint_position:
85
+ if abs(pos) > math.pi:
86
+ raise ValueError(f"Joint position {pos} rad exceeds ±π rad (±180 deg) limit")
87
+
88
+ return self._kuavo_core.control_robot_arm_joint_positions(joint_data=joint_position)
89
+
90
+ def control_arm_joint_trajectory(self, times:list, joint_q:list)->bool:
91
+ """控制机器人手臂关节轨迹。
92
+
93
+ Args:
94
+ times (list): 时间间隔列表,单位为秒
95
+ joint_q (list): 关节位置列表,单位为弧度
96
+
97
+ Raises:
98
+ ValueError: 如果times列表长度不正确
99
+ ValueError: 如果关节位置列表长度不正确
100
+ ValueError: 如果关节位置超出[-π, π]范围
101
+ RuntimeError: 如果在控制手臂时机器人不在站立状态
102
+
103
+ Returns:
104
+ bool: 控制成功返回True,否则返回False
105
+ """
106
+ if len(times) != len(joint_q):
107
+ raise ValueError("Invalid input. times and joint_q must have thesame length.")
108
+
109
+ # Check if joint positions are within ±180 degrees (±π radians)
110
+ q_degs = []
111
+ for q in joint_q:
112
+ if any(abs(pos) > math.pi for pos in q):
113
+ raise ValueError("Joint positions must be within ±π rad (±180 deg)")
114
+ if len(q) != self._robot_info.arm_joint_dof:
115
+ raise ValueError("Invalid position length. Expected {}, got {}".format(self._robot_info.arm_joint_dof, len(q)))
116
+ # Convert joint positions from radians to degrees
117
+ q_degs.append([(p * 180.0 / math.pi) for p in q])
118
+
119
+ return self._kuavo_core.control_robot_arm_joint_trajectory(times=times, joint_q=q_degs)
120
+
121
+ def control_robot_end_effector_pose(self, left_pose: KuavoPose, right_pose: KuavoPose, frame: KuavoManipulationMpcFrame)->bool:
122
+ """控制机器人末端执行器姿态。
123
+
124
+ Args:
125
+ left_pose (KuavoPose): 左手臂姿态,包含xyz位置和四元数方向
126
+ right_pose (KuavoPose): 右手臂姿态,包含xyz位置和四元数方向
127
+ frame (KuavoManipulationMpcFrame): 末端执行器姿态的坐标系
128
+
129
+ Returns:
130
+ bool: 控制成功返回True,否则返回False
131
+ """
132
+ return self._kuavo_core.control_robot_end_effector_pose(left_pose, right_pose, frame)
133
+
134
+ def set_fixed_arm_mode(self) -> bool:
135
+ """固定/冻结机器人手臂。
136
+
137
+ Returns:
138
+ bool: 固定/冻结成功返回True,否则返回False
139
+ """
140
+ return self._kuavo_core.change_robot_arm_ctrl_mode(KuavoArmCtrlMode.ArmFixed)
141
+
142
+ def set_auto_swing_arm_mode(self) -> bool:
143
+ """设置手臂自动摆动模式。
144
+
145
+ Returns:
146
+ bool: 设置成功返回True,否则返回False
147
+ """
148
+ return self._kuavo_core.change_robot_arm_ctrl_mode(KuavoArmCtrlMode.AutoSwing)
149
+
150
+ def arm_ik_free(self,
151
+ left_pose: KuavoPose,
152
+ right_pose: KuavoPose,
153
+ left_elbow_pos_xyz: list = [0.0, 0.0, 0.0],
154
+ right_elbow_pos_xyz: list = [0.0, 0.0, 0.0],
155
+ arm_q0: list = None,
156
+ params: KuavoIKParams=None) -> list:
157
+ return self._kuavo_core.arm_ik_free(left_pose, right_pose, left_elbow_pos_xyz, right_elbow_pos_xyz, arm_q0, params)
158
+
159
+ def set_external_control_arm_mode(self) -> bool:
160
+ """设置手臂外部控制模式。
161
+
162
+ Returns:
163
+ bool: 设置成功返回True,否则返回False
164
+ """
165
+ return self._kuavo_core.change_robot_arm_ctrl_mode(KuavoArmCtrlMode.ExternalControl)
166
+
167
+ def set_manipulation_mpc_mode(self, ctrl_mode: KuavoManipulationMpcCtrlMode) -> bool:
168
+ """设置 Manipulation MPC 控制模式。
169
+
170
+ Returns:
171
+ bool: 设置成功返回True,否则返回False
172
+ """
173
+ return self._kuavo_core.change_manipulation_mpc_ctrl_mode(ctrl_mode)
174
+
175
+ def set_manipulation_mpc_control_flow(self, control_flow: KuavoManipulationMpcControlFlow) -> bool:
176
+ """设置 Manipulation MPC 控制流。
177
+
178
+ Returns:
179
+ bool: 设置成功返回True,否则返回False
180
+ """
181
+ return self._kuavo_core.change_manipulation_mpc_control_flow(control_flow)
182
+
183
+ def set_manipulation_mpc_frame(self, frame: KuavoManipulationMpcFrame) -> bool:
184
+ """设置 Manipulation MPC 坐标系。
185
+
186
+ Returns:
187
+ bool: 设置成功返回True,否则返回False
188
+ """
189
+ return self._kuavo_core.change_manipulation_mpc_frame(frame)
190
+
191
+ """ 手臂正向运动学和逆向运动学 """
192
+ def arm_ik(self,
193
+ left_pose: KuavoPose,
194
+ right_pose: KuavoPose,
195
+ left_elbow_pos_xyz: list = [0.0, 0.0, 0.0],
196
+ right_elbow_pos_xyz: list = [0.0, 0.0, 0.0],
197
+ arm_q0: list = None,
198
+ params: KuavoIKParams=None) -> list:
199
+ """机器人手臂逆向运动学求解
200
+
201
+ Args:
202
+ left_pose (KuavoPose): 左手臂目标姿态,包含xyz位置和四元数方向
203
+ right_pose (KuavoPose): 右手臂目标姿态,包含xyz位置和四元数方向
204
+ left_elbow_pos_xyz (list): 左肘部位置。如果为[0.0, 0.0, 0.0],则忽略
205
+ right_elbow_pos_xyz (list): 右肘部位置。如果为[0.0, 0.0, 0.0],则忽略
206
+ arm_q0 (list, optional): 初始关节位置,单位为弧度。如果为None,则忽略
207
+ params (KuavoIKParams, optional): 逆向运动学参数。如果为None,则忽略,包含:
208
+ - major_optimality_tol: 主要最优性容差 \n
209
+ - major_feasibility_tol: 主要可行性容差 \n
210
+ - minor_feasibility_tol: 次要可行性容差 \n
211
+ - major_iterations_limit: 主要迭代次数限制 \n
212
+ - oritation_constraint_tol: 方向约束容差 \n
213
+ - pos_constraint_tol: 位置约束容差,当pos_cost_weight==0.0时生效 \n
214
+ - pos_cost_weight: 位置代价权重。设为0.0可获得高精度 \n
215
+
216
+ Returns:
217
+ list: 关节位置列表,单位为弧度。如果计算失败返回None
218
+
219
+ Warning:
220
+ 此函数需要在初始化SDK时设置 :attr:`KuavoSDK.Options.WithIK` 选项。
221
+ """
222
+ return self._kuavo_core.arm_ik(left_pose, right_pose, left_elbow_pos_xyz, right_elbow_pos_xyz, arm_q0, params)
223
+
224
+ def arm_ik_free(self,
225
+ left_pose: KuavoPose,
226
+ right_pose: KuavoPose,
227
+ left_elbow_pos_xyz: list = [0.0, 0.0, 0.0],
228
+ right_elbow_pos_xyz: list = [0.0, 0.0, 0.0],
229
+ arm_q0: list = None,
230
+ params: KuavoIKParams=None) -> list:
231
+ return self._kuavo_core.arm_ik_free(left_pose, right_pose, left_elbow_pos_xyz, right_elbow_pos_xyz, arm_q0, params)
232
+
233
+ def arm_fk(self, q: list) -> Tuple[KuavoPose, KuavoPose]:
234
+ """机器人手臂正向运动学求解
235
+
236
+ Args:
237
+ q (list): 关节位置列表,单位为弧度
238
+
239
+ Returns:
240
+ Tuple[KuavoPose, KuavoPose]: 左右手臂姿态的元组,
241
+ 如果计算失败返回(None, None)
242
+
243
+ Warning:
244
+ 此函数需要在初始化SDK时设置 :attr:`KuavoSDK.Options.WithIK` 选项。
245
+ """
246
+ if len(q) != self._robot_info.arm_joint_dof:
247
+ raise ValueError("Invalid position length. Expected {}, got {}".format(self._robot_info.arm_joint_dof, len(q)))
248
+
249
+ result = self._kuavo_core.arm_fk(q)
250
+ if result is None:
251
+ return None, None
252
+ return result
253
+
254
+ def control_hand_wrench(self, left_wrench: list, right_wrench: list) -> bool:
255
+ """控制机器人末端力/力矩
256
+
257
+ Args:
258
+ left_wrench (list): 左手臂6维力控指令 [Fx, Fy, Fz, Tx, Ty, Tz]
259
+ right_wrench (list): 右手臂6维力控指令 [Fx, Fy, Fz, Tx, Ty, Tz]
260
+ 单位:
261
+ Fx,Fy,Fz: 牛顿(N)
262
+ Tx,Ty,Tz: 牛·米(N·m)
263
+
264
+ Returns:
265
+ bool: 控制成功返回True, 否则返回False
266
+ """
267
+ return self._kuavo_core.control_hand_wrench(left_wrench, right_wrench)
268
+
269
+ def is_arm_collision(self)->bool:
270
+ """判断当前是否发生碰撞
271
+
272
+ Returns:
273
+ bool: 发生碰撞返回True,否则返回False
274
+ """
275
+ return self._kuavo_core.is_arm_collision()
276
+
277
+ def release_arm_collision_mode(self):
278
+ """释放碰撞模式
279
+ """
280
+ self._kuavo_core.release_arm_collision_mode()
281
+
282
+ def wait_arm_collision_complete(self):
283
+ """等待碰撞完成
284
+ """
285
+ self._kuavo_core.wait_arm_collision_complete()
286
+
287
+ def set_arm_collision_mode(self, enable: bool):
288
+ """设置碰撞模式
289
+ """
290
+ self._kuavo_core.set_arm_collision_mode(enable)
291
+
292
+
293
+
294
+ # if __name__ == "__main__":
295
+ # arm = KuavoRobotArm()
296
+ # arm.set_manipulation_mpc_mode(KuavoManipulationMpcCtrlMode.ArmOnly)
297
+ # arm.set_manipulation_mpc_control_flow(KuavoManipulationMpcControlFlow.DirectToWbc)
298
+ # arm.set_manipulation_mpc_frame(KuavoManipulationMpcFrame.WorldFrame)
299
+ # arm.control_robot_end_effector_pose(KuavoPose(position=[0.3, 0.4, 0.9], orientation=[0.0, 0.0, 0.0, 1.0]), KuavoPose(position=[0.3, -0.5, 1.0], orientation=[0.0, 0.0, 0.0, 1.0]), KuavoManipulationMpcFrame.WorldFrame)
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env python3
2
+ # coding: utf-8
3
+ from kuavo_humanoid_sdk.kuavo.core.audio import KuavoRobotAudioCore
4
+
5
+ class KuavoRobotAudio:
6
+ """Kuavo 机器人音频系统接口,用于控制音频播放功能。
7
+
8
+ 提供音乐文件播放功能。
9
+ """
10
+
11
+ def __init__(self):
12
+ """初始化音频系统。"""
13
+ self.audio = KuavoRobotAudioCore()
14
+
15
+ def play_audio(self, file_name: str, volume: int = 100, speed: float = 1.0) -> bool:
16
+ """播放指定的音频文件。
17
+
18
+ Args:
19
+ file_name (str): 要播放的音频文件名
20
+
21
+ Returns:
22
+ bool: 如果播放请求成功发送返回True,否则返回False
23
+ """
24
+ return self.audio.play_audio(file_name, volume, speed)
25
+
26
+ def stop_music(self):
27
+ """停止当前正在播放的音频。"""
28
+ return self.audio.stop_music()
29
+
30
+ def text_to_speech(self, text: str, volume: float = 0.5) -> bool:
31
+ """将指定文本合成并播放。
32
+
33
+ Args:
34
+ text (str): 要播放的文本
35
+
36
+ Returns:
37
+ bool: 如果播放请求成功发送返回True,否则返回False
38
+ """
39
+ return self.audio.text_to_speech(text, volume)