kuavo-humanoid-sdk 1.2.1b1625__20250804112347-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 (156) 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 +11 -0
  9. kuavo_humanoid_sdk/kuavo/core/audio.py +32 -0
  10. kuavo_humanoid_sdk/kuavo/core/core.py +634 -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/ros/audio.py +92 -0
  14. kuavo_humanoid_sdk/kuavo/core/ros/control.py +1453 -0
  15. kuavo_humanoid_sdk/kuavo/core/ros/observation.py +94 -0
  16. kuavo_humanoid_sdk/kuavo/core/ros/param.py +183 -0
  17. kuavo_humanoid_sdk/kuavo/core/ros/sat_utils.py +103 -0
  18. kuavo_humanoid_sdk/kuavo/core/ros/state.py +634 -0
  19. kuavo_humanoid_sdk/kuavo/core/ros/tools.py +220 -0
  20. kuavo_humanoid_sdk/kuavo/core/ros/vision.py +234 -0
  21. kuavo_humanoid_sdk/kuavo/core/ros_env.py +238 -0
  22. kuavo_humanoid_sdk/kuavo/dexterous_hand.py +201 -0
  23. kuavo_humanoid_sdk/kuavo/leju_claw.py +235 -0
  24. kuavo_humanoid_sdk/kuavo/robot.py +514 -0
  25. kuavo_humanoid_sdk/kuavo/robot_arm.py +248 -0
  26. kuavo_humanoid_sdk/kuavo/robot_audio.py +39 -0
  27. kuavo_humanoid_sdk/kuavo/robot_head.py +50 -0
  28. kuavo_humanoid_sdk/kuavo/robot_info.py +113 -0
  29. kuavo_humanoid_sdk/kuavo/robot_observation.py +64 -0
  30. kuavo_humanoid_sdk/kuavo/robot_state.py +307 -0
  31. kuavo_humanoid_sdk/kuavo/robot_tool.py +109 -0
  32. kuavo_humanoid_sdk/kuavo/robot_vision.py +81 -0
  33. kuavo_humanoid_sdk/kuavo_strategy/__init__.py +2 -0
  34. kuavo_humanoid_sdk/kuavo_strategy/grasp_box/grasp_box_strategy.py +1325 -0
  35. kuavo_humanoid_sdk/kuavo_strategy/kuavo_strategy.py +106 -0
  36. kuavo_humanoid_sdk/kuavo_strategy_v2/common/data_type.py +340 -0
  37. kuavo_humanoid_sdk/kuavo_strategy_v2/common/events/base_event.py +215 -0
  38. kuavo_humanoid_sdk/kuavo_strategy_v2/common/robot_sdk.py +25 -0
  39. kuavo_humanoid_sdk/kuavo_strategy_v2/pick_place_box/case.py +331 -0
  40. kuavo_humanoid_sdk/kuavo_strategy_v2/pick_place_box/strategy.py +504 -0
  41. kuavo_humanoid_sdk/kuavo_strategy_v2/utils/logger_setup.py +40 -0
  42. kuavo_humanoid_sdk/kuavo_strategy_v2/utils/utils.py +88 -0
  43. kuavo_humanoid_sdk/msg/__init__.py +4 -0
  44. kuavo_humanoid_sdk/msg/kuavo_msgs/__init__.py +7 -0
  45. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_AprilTagDetection.py +306 -0
  46. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_AprilTagDetectionArray.py +437 -0
  47. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_JoySticks.py +191 -0
  48. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_Metadata.py +199 -0
  49. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_MmDetectionMsg.py +264 -0
  50. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_RobotActionState.py +112 -0
  51. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_TFArray.py +323 -0
  52. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/__init__.py +58 -0
  53. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armCollisionCheckInfo.py +160 -0
  54. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armHandPose.py +160 -0
  55. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armHandPoseFree.py +171 -0
  56. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armPoseWithTimeStamp.py +168 -0
  57. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armTargetPoses.py +151 -0
  58. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_bezierCurveCubicPoint.py +178 -0
  59. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_dexhandCommand.py +229 -0
  60. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_dexhandTouchState.py +256 -0
  61. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_endEffectorData.py +227 -0
  62. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPose.py +123 -0
  63. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPose6D.py +123 -0
  64. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPose6DTargetTrajectories.py +301 -0
  65. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoseTargetTrajectories.py +301 -0
  66. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoseWithVision.py +136 -0
  67. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoseWithVisionArray.py +231 -0
  68. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoses.py +149 -0
  69. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoses6D.py +149 -0
  70. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_fullBodyTargetTrajectories.py +258 -0
  71. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_gaitTimeName.py +147 -0
  72. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_gestureInfo.py +218 -0
  73. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_gestureTask.py +149 -0
  74. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_handPose.py +136 -0
  75. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_headBodyPose.py +145 -0
  76. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_ikSolveError.py +171 -0
  77. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_ikSolveParam.py +140 -0
  78. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_imuData.py +165 -0
  79. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_jointBezierTrajectory.py +201 -0
  80. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_jointCmd.py +390 -0
  81. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_jointData.py +205 -0
  82. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_lejuClawCommand.py +320 -0
  83. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_lejuClawState.py +341 -0
  84. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_motorParam.py +122 -0
  85. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_picoPoseInfo.py +143 -0
  86. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_picoPoseInfoList.py +220 -0
  87. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_planArmState.py +120 -0
  88. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_qv.py +121 -0
  89. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotArmQVVD.py +177 -0
  90. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotBodyMatrices.py +332 -0
  91. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotHandPosition.py +225 -0
  92. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotHeadMotionData.py +128 -0
  93. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotState.py +222 -0
  94. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_sensorsData.py +495 -0
  95. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_switchGaitByName.py +200 -0
  96. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_tagDataArray.py +216 -0
  97. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_touchSensorStatus.py +162 -0
  98. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_twoArmHandPose.py +272 -0
  99. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_twoArmHandPoseCmd.py +315 -0
  100. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_twoArmHandPoseCmdFree.py +338 -0
  101. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_twoArmHandPoseFree.py +299 -0
  102. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_yoloDetection.py +251 -0
  103. kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_yoloOutputData.py +168 -0
  104. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_ExecuteArmAction.py +281 -0
  105. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_GetTargetPartPoseInCamera.py +298 -0
  106. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_RepublishTFs.py +373 -0
  107. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_SetJoyTopic.py +282 -0
  108. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_SpeechSynthesis.py +270 -0
  109. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/__init__.py +31 -0
  110. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_changeArmCtrlMode.py +275 -0
  111. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_changeArmCtrlModeKuavo.py +236 -0
  112. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_changeMotorParam.py +299 -0
  113. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_changeTorsoCtrlMode.py +274 -0
  114. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_controlLejuClaw.py +408 -0
  115. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_enableHandTouchSensor.py +304 -0
  116. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_fkSrv.py +394 -0
  117. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_footPose6DTargetTrajectoriesSrv.py +410 -0
  118. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_footPoseTargetTrajectoriesSrv.py +409 -0
  119. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_gestureExecute.py +339 -0
  120. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_gestureExecuteState.py +257 -0
  121. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_gestureList.py +418 -0
  122. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_getCurrentGaitName.py +253 -0
  123. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_getMotorParam.py +299 -0
  124. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_handForceLevel.py +330 -0
  125. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_jointMoveTo.py +302 -0
  126. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_planArmTrajectoryBezierCurve.py +421 -0
  127. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_planArmTrajectoryCubicSpline.py +490 -0
  128. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_playmusic.py +268 -0
  129. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_setHwIntialState.py +304 -0
  130. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_setMmCtrlFrame.py +273 -0
  131. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_setMotorEncoderRoundService.py +283 -0
  132. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_setTagId.py +275 -0
  133. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_singleStepControl.py +444 -0
  134. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_twoArmHandPoseCmdFreeSrv.py +716 -0
  135. kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_twoArmHandPoseCmdSrv.py +662 -0
  136. kuavo_humanoid_sdk/msg/motion_capture_ik/__init__.py +7 -0
  137. kuavo_humanoid_sdk/msg/ocs2_msgs/__init__.py +7 -0
  138. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/__init__.py +12 -0
  139. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_constraint.py +142 -0
  140. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_controller_data.py +121 -0
  141. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_lagrangian_metrics.py +148 -0
  142. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mode_schedule.py +150 -0
  143. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_flattened_controller.py +666 -0
  144. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_input.py +122 -0
  145. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_observation.py +209 -0
  146. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_performance_indices.py +140 -0
  147. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_solver_data.py +886 -0
  148. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_state.py +122 -0
  149. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_target_trajectories.py +239 -0
  150. kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_multiplier.py +148 -0
  151. kuavo_humanoid_sdk/msg/ocs2_msgs/srv/__init__.py +1 -0
  152. kuavo_humanoid_sdk/msg/ocs2_msgs/srv/_reset.py +376 -0
  153. kuavo_humanoid_sdk-1.2.1b1625.dist-info/METADATA +291 -0
  154. kuavo_humanoid_sdk-1.2.1b1625.dist-info/RECORD +156 -0
  155. kuavo_humanoid_sdk-1.2.1b1625.dist-info/WHEEL +6 -0
  156. kuavo_humanoid_sdk-1.2.1b1625.dist-info/top_level.txt +1 -0
@@ -0,0 +1,248 @@
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_joint_positions(self, joint_position:list)->bool:
36
+ """控制机器人手臂关节位置。
37
+
38
+ Args:
39
+ joint_position (list): 关节位置列表,单位为弧度
40
+
41
+ Raises:
42
+ ValueError: 如果关节位置列表长度不正确
43
+ ValueError: 如果关节位置超出[-π, π]范围
44
+ RuntimeError: 如果在控制手臂时机器人不在站立状态
45
+
46
+ Returns:
47
+ bool: 控制成功返回True,否则返回False
48
+ """
49
+ if len(joint_position) != self._robot_info.arm_joint_dof:
50
+ raise ValueError("Invalid position length. Expected {}, got {}".format(self._robot_info.arm_joint_dof, len(joint_position)))
51
+
52
+ # Check if joint positions are within ±180 degrees (±π radians)
53
+ for pos in joint_position:
54
+ if abs(pos) > math.pi:
55
+ raise ValueError(f"Joint position {pos} rad exceeds ±π rad (±180 deg) limit")
56
+
57
+ return self._kuavo_core.control_robot_arm_joint_positions(joint_data=joint_position)
58
+
59
+ def control_arm_joint_trajectory(self, times:list, joint_q:list)->bool:
60
+ """控制机器人手臂关节轨迹。
61
+
62
+ Args:
63
+ times (list): 时间间隔列表,单位为秒
64
+ joint_q (list): 关节位置列表,单位为弧度
65
+
66
+ Raises:
67
+ ValueError: 如果times列表长度不正确
68
+ ValueError: 如果关节位置列表长度不正确
69
+ ValueError: 如果关节位置超出[-π, π]范围
70
+ RuntimeError: 如果在控制手臂时机器人不在站立状态
71
+
72
+ Returns:
73
+ bool: 控制成功返回True,否则返回False
74
+ """
75
+ if len(times) != len(joint_q):
76
+ raise ValueError("Invalid input. times and joint_q must have thesame length.")
77
+
78
+ # Check if joint positions are within ±180 degrees (±π radians)
79
+ q_degs = []
80
+ for q in joint_q:
81
+ if any(abs(pos) > math.pi for pos in q):
82
+ raise ValueError("Joint positions must be within ±π rad (±180 deg)")
83
+ if len(q) != self._robot_info.arm_joint_dof:
84
+ raise ValueError("Invalid position length. Expected {}, got {}".format(self._robot_info.arm_joint_dof, len(q)))
85
+ # Convert joint positions from radians to degrees
86
+ q_degs.append([(p * 180.0 / math.pi) for p in q])
87
+
88
+ return self._kuavo_core.control_robot_arm_joint_trajectory(times=times, joint_q=q_degs)
89
+
90
+ def control_robot_end_effector_pose(self, left_pose: KuavoPose, right_pose: KuavoPose, frame: KuavoManipulationMpcFrame)->bool:
91
+ """控制机器人末端执行器姿态。
92
+
93
+ Args:
94
+ left_pose (KuavoPose): 左手臂姿态,包含xyz位置和四元数方向
95
+ right_pose (KuavoPose): 右手臂姿态,包含xyz位置和四元数方向
96
+ frame (KuavoManipulationMpcFrame): 末端执行器姿态的坐标系
97
+
98
+ Returns:
99
+ bool: 控制成功返回True,否则返回False
100
+ """
101
+ return self._kuavo_core.control_robot_end_effector_pose(left_pose, right_pose, frame)
102
+
103
+ def set_fixed_arm_mode(self) -> bool:
104
+ """固定/冻结机器人手臂。
105
+
106
+ Returns:
107
+ bool: 固定/冻结成功返回True,否则返回False
108
+ """
109
+ return self._kuavo_core.change_robot_arm_ctrl_mode(KuavoArmCtrlMode.ArmFixed)
110
+
111
+ def set_auto_swing_arm_mode(self) -> bool:
112
+ """设置手臂自动摆动模式。
113
+
114
+ Returns:
115
+ bool: 设置成功返回True,否则返回False
116
+ """
117
+ return self._kuavo_core.change_robot_arm_ctrl_mode(KuavoArmCtrlMode.AutoSwing)
118
+
119
+ def set_external_control_arm_mode(self) -> bool:
120
+ """设置手臂外部控制模式。
121
+
122
+ Returns:
123
+ bool: 设置成功返回True,否则返回False
124
+ """
125
+ return self._kuavo_core.change_robot_arm_ctrl_mode(KuavoArmCtrlMode.ExternalControl)
126
+
127
+ def set_manipulation_mpc_mode(self, ctrl_mode: KuavoManipulationMpcCtrlMode) -> bool:
128
+ """设置 Manipulation MPC 控制模式。
129
+
130
+ Returns:
131
+ bool: 设置成功返回True,否则返回False
132
+ """
133
+ return self._kuavo_core.change_manipulation_mpc_ctrl_mode(ctrl_mode)
134
+
135
+ def set_manipulation_mpc_control_flow(self, control_flow: KuavoManipulationMpcControlFlow) -> bool:
136
+ """设置 Manipulation MPC 控制流。
137
+
138
+ Returns:
139
+ bool: 设置成功返回True,否则返回False
140
+ """
141
+ return self._kuavo_core.change_manipulation_mpc_control_flow(control_flow)
142
+
143
+ def set_manipulation_mpc_frame(self, frame: KuavoManipulationMpcFrame) -> bool:
144
+ """设置 Manipulation MPC 坐标系。
145
+
146
+ Returns:
147
+ bool: 设置成功返回True,否则返回False
148
+ """
149
+ return self._kuavo_core.change_manipulation_mpc_frame(frame)
150
+
151
+ """ 手臂正向运动学和逆向运动学 """
152
+ def arm_ik(self,
153
+ left_pose: KuavoPose,
154
+ right_pose: KuavoPose,
155
+ left_elbow_pos_xyz: list = [0.0, 0.0, 0.0],
156
+ right_elbow_pos_xyz: list = [0.0, 0.0, 0.0],
157
+ arm_q0: list = None,
158
+ params: KuavoIKParams=None) -> list:
159
+ """机器人手臂逆向运动学求解
160
+
161
+ Args:
162
+ left_pose (KuavoPose): 左手臂目标姿态,包含xyz位置和四元数方向
163
+ right_pose (KuavoPose): 右手臂目标姿态,包含xyz位置和四元数方向
164
+ left_elbow_pos_xyz (list): 左肘部位置。如果为[0.0, 0.0, 0.0],则忽略
165
+ right_elbow_pos_xyz (list): 右肘部位置。如果为[0.0, 0.0, 0.0],则忽略
166
+ arm_q0 (list, optional): 初始关节位置,单位为弧度。如果为None,则忽略
167
+ params (KuavoIKParams, optional): 逆向运动学参数。如果为None,则忽略,包含:
168
+ - major_optimality_tol: 主要最优性容差 \n
169
+ - major_feasibility_tol: 主要可行性容差 \n
170
+ - minor_feasibility_tol: 次要可行性容差 \n
171
+ - major_iterations_limit: 主要迭代次数限制 \n
172
+ - oritation_constraint_tol: 方向约束容差 \n
173
+ - pos_constraint_tol: 位置约束容差,当pos_cost_weight==0.0时生效 \n
174
+ - pos_cost_weight: 位置代价权重。设为0.0可获得高精度 \n
175
+
176
+ Returns:
177
+ list: 关节位置列表,单位为弧度。如果计算失败返回None
178
+
179
+ Warning:
180
+ 此函数需要在初始化SDK时设置 :attr:`KuavoSDK.Options.WithIK` 选项。
181
+ """
182
+ return self._kuavo_core.arm_ik(left_pose, right_pose, left_elbow_pos_xyz, right_elbow_pos_xyz, arm_q0, params)
183
+
184
+ def arm_fk(self, q: list) -> Tuple[KuavoPose, KuavoPose]:
185
+ """机器人手臂正向运动学求解
186
+
187
+ Args:
188
+ q (list): 关节位置列表,单位为弧度
189
+
190
+ Returns:
191
+ Tuple[KuavoPose, KuavoPose]: 左右手臂姿态的元组,
192
+ 如果计算失败返回(None, None)
193
+
194
+ Warning:
195
+ 此函数需要在初始化SDK时设置 :attr:`KuavoSDK.Options.WithIK` 选项。
196
+ """
197
+ if len(q) != self._robot_info.arm_joint_dof:
198
+ raise ValueError("Invalid position length. Expected {}, got {}".format(self._robot_info.arm_joint_dof, len(q)))
199
+
200
+ result = self._kuavo_core.arm_fk(q)
201
+ if result is None:
202
+ return None, None
203
+ return result
204
+
205
+ def control_hand_wrench(self, left_wrench: list, right_wrench: list) -> bool:
206
+ """控制机器人末端力/力矩
207
+
208
+ Args:
209
+ left_wrench (list): 左手臂6维力控指令 [Fx, Fy, Fz, Tx, Ty, Tz]
210
+ right_wrench (list): 右手臂6维力控指令 [Fx, Fy, Fz, Tx, Ty, Tz]
211
+ 单位:
212
+ Fx,Fy,Fz: 牛顿(N)
213
+ Tx,Ty,Tz: 牛·米(N·m)
214
+
215
+ Returns:
216
+ bool: 控制成功返回True, 否则返回False
217
+ """
218
+ return self._kuavo_core.control_hand_wrench(left_wrench, right_wrench)
219
+
220
+ def is_arm_collision(self)->bool:
221
+ """判断当前是否发生碰撞
222
+
223
+ Returns:
224
+ bool: 发生碰撞返回True,否则返回False
225
+ """
226
+ return self._kuavo_core.is_arm_collision()
227
+
228
+ def release_arm_collision_mode(self):
229
+ """释放碰撞模式
230
+ """
231
+ self._kuavo_core.release_arm_collision_mode()
232
+
233
+ def wait_arm_collision_complete(self):
234
+ """等待碰撞完成
235
+ """
236
+ self._kuavo_core.wait_arm_collision_complete()
237
+
238
+ def set_arm_collision_mode(self, enable: bool):
239
+ """设置碰撞模式
240
+ """
241
+ self._kuavo_core.set_arm_collision_mode(enable)
242
+
243
+ # if __name__ == "__main__":
244
+ # arm = KuavoRobotArm()
245
+ # arm.set_manipulation_mpc_mode(KuavoManipulationMpcCtrlMode.ArmOnly)
246
+ # arm.set_manipulation_mpc_control_flow(KuavoManipulationMpcControlFlow.DirectToWbc)
247
+ # arm.set_manipulation_mpc_frame(KuavoManipulationMpcFrame.WorldFrame)
248
+ # 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)
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env python3
2
+ # coding: utf-8
3
+ import math
4
+ from kuavo_humanoid_sdk.kuavo.core.core import KuavoRobotCore
5
+ from kuavo_humanoid_sdk.common.logger import SDKLogger
6
+
7
+ class KuavoRobotHead:
8
+ """机器人头部控制类"""
9
+ def __init__(self):
10
+ self._kuavo_core = KuavoRobotCore()
11
+
12
+ def control_head(self, yaw: float, pitch: float)->bool:
13
+ """控制机器人头部。
14
+
15
+ Args:
16
+ yaw (float): 头部偏航角,单位为弧度,范围 [-1.396, 1.396] (-80度 到 80度)。
17
+ pitch (float): 头部俯仰角,单位为弧度,范围 [-0.436, 0.436] (-25度 到 25度)。
18
+
19
+ Returns:
20
+ bool: 如果控制成功返回True,否则返回False。
21
+ """
22
+ # Check yaw limits (-80 to 80 degrees)
23
+ if yaw < -math.pi*4/9 or yaw > math.pi*4/9: # -80 to 80 degrees in radians
24
+ 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")
25
+ limited_yaw = min(math.pi*4/9, max(-math.pi*4/9, yaw))
26
+
27
+ # Check pitch limits (-25 to 25 degrees)
28
+ if pitch < -math.pi/7.2 - 0.001 or pitch > math.pi/7.2 + 0.001: # -25 to 25 degrees in radians
29
+ 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")
30
+ limited_pitch = min(math.pi/7.2, max(-math.pi/7.2, pitch))
31
+ return self._kuavo_core.control_robot_head(yaw=limited_yaw, pitch=limited_pitch)
32
+
33
+ def enable_head_tracking(self, target_id: int)->bool:
34
+ """启用头部跟踪功能,在机器人运动过程中,头部将始终追踪指定的 Apriltag ID
35
+
36
+ Args:
37
+ target_id (int): 目标ID。
38
+
39
+ Returns:
40
+ bool: 如果启用成功返回True,否则返回False。
41
+ """
42
+ return self._kuavo_core.enable_head_tracking(target_id)
43
+
44
+ def disable_head_tracking(self)->bool:
45
+ """禁用头部跟踪功能。
46
+
47
+ Returns:
48
+ bool: 如果禁用成功返回True,否则返回False。
49
+ """
50
+ return self._kuavo_core.disable_head_tracking()
@@ -0,0 +1,113 @@
1
+ #!/usr/bin/env python3
2
+ # coding: utf-8
3
+ from typing import Tuple
4
+ from kuavo_humanoid_sdk.interfaces.robot_info import RobotInfoBase
5
+ from kuavo_humanoid_sdk.kuavo.core.ros.param import RosParameter, make_robot_param
6
+
7
+ class KuavoRobotInfo(RobotInfoBase):
8
+ def __init__(self, robot_type: str = "kuavo"):
9
+ super().__init__(robot_type=robot_type)
10
+
11
+ # Load robot parameters from ROS parameter server
12
+ kuavo_ros_param = make_robot_param()
13
+ self._ros_param = RosParameter()
14
+
15
+ self._robot_version = kuavo_ros_param['robot_version']
16
+ self._end_effector_type = kuavo_ros_param['end_effector_type']
17
+ self._arm_joint_dof = kuavo_ros_param['arm_dof']
18
+ self._joint_dof = kuavo_ros_param['arm_dof'] + kuavo_ros_param['leg_dof'] + kuavo_ros_param['head_dof']
19
+ self._joint_names = kuavo_ros_param['joint_names']
20
+ self._end_frames_names = kuavo_ros_param['end_frames_names']
21
+ self._head_joint_dof = kuavo_ros_param['head_dof']
22
+ self._head_joint_names = self._joint_names[-2:]
23
+ self._arm_joint_names = self._joint_names[12:self._arm_joint_dof + 12]
24
+ @property
25
+ def robot_version(self) -> str:
26
+ """返回 Kuavo 机器人的版本。
27
+
28
+ Returns:
29
+ str: 机器人版本号,例如 "42"、"45" 等。
30
+ """
31
+ return self._robot_version
32
+
33
+ @property
34
+ def end_effector_type(self) -> str:
35
+ """返回 Kuavo 机器人末端执行器的类型。
36
+
37
+ Returns:
38
+ str: 末端执行器类型,其中:
39
+ - ``qiangnao`` 表示普通灵巧手
40
+ - ``lejuclaw`` 表示乐聚二指夹爪
41
+ - ``qiangnao_touch`` 表示触觉灵巧手
42
+ - ...
43
+ """
44
+ return self._end_effector_type
45
+
46
+ @property
47
+ def joint_names(self) -> list:
48
+ """返回 Kuavo 机器人所有关节的名称。
49
+
50
+ Returns:
51
+ list: 包含所有关节名称的列表。
52
+ """
53
+ return self._joint_names
54
+
55
+ @property
56
+ def joint_dof(self) -> int:
57
+ """返回 Kuavo 机器人的总关节数。
58
+
59
+ Returns:
60
+ int: 总关节数,例如 28。
61
+ """
62
+ return self._joint_dof
63
+
64
+ @property
65
+ def arm_joint_dof(self) -> int:
66
+ """返回 Kuavo 机器人双臂的关节数。
67
+
68
+ Returns:
69
+ int: 双臂的关节数,例如 14。
70
+ """
71
+ return self._arm_joint_dof
72
+
73
+ @property
74
+ def arm_joint_names(self) -> list:
75
+ """返回 Kuavo 机器人双臂关节的名称。
76
+
77
+ Returns:
78
+ list: 包含双臂关节名称的列表。
79
+ """
80
+ return self._arm_joint_names
81
+
82
+ @property
83
+ def head_joint_dof(self) -> int:
84
+ """返回 Kuavo 机器人头部的关节数。
85
+
86
+ Returns:
87
+ int: 头部的关节数,例如 2。
88
+ """
89
+ return self._head_joint_dof
90
+
91
+ @property
92
+ def head_joint_names(self) -> list:
93
+ """返回 Kuavo 机器人头部关节的名称。
94
+
95
+ Returns:
96
+ list: 包含头部关节名称的列表。
97
+ """
98
+ return self._head_joint_names
99
+
100
+ @property
101
+ def eef_frame_names(self) -> Tuple[str, str]:
102
+ """返回 Kuavo 机器人末端执行器坐标系的名称。
103
+
104
+ Returns:
105
+ Tuple[str, str]: 包含末端执行器坐标系名称的元组,其中:\n
106
+ - 第一个元素是左手坐标系名称\n
107
+ - 第二个元素是右手坐标系名称\n
108
+ 例如 ("zarm_l7_link", "zarm_r7_link") \n
109
+ """
110
+ return self._end_frames_names[1], self._end_frames_names[2]
111
+
112
+ def __str__(self) -> str:
113
+ return f"KuavoRobotInfo(robot_type={self.robot_type}, robot_version={self.robot_version}, end_effector_type={self.end_effector_type}, joint_names={self.joint_names}, joint_dof={self.joint_dof}, arm_joint_dof={self.arm_joint_dof})"
@@ -0,0 +1,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