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,376 @@
1
+ # This Python file uses the following encoding: utf-8
2
+ """autogenerated by genpy from ocs2_msgs/resetRequest.msg. Do not edit."""
3
+ import codecs
4
+ import sys
5
+ python3 = True if sys.hexversion > 0x03000000 else False
6
+ import genpy
7
+ import struct
8
+
9
+ import ocs2_msgs.msg
10
+
11
+ class resetRequest(genpy.Message):
12
+ _md5sum = "7759e1cea687346062f2674a13fe14ee"
13
+ _type = "ocs2_msgs/resetRequest"
14
+ _has_header = False # flag to mark the presence of a Header object
15
+ _full_text = """# Reset service
16
+ bool reset
17
+ mpc_target_trajectories targetTrajectories
18
+
19
+ ================================================================================
20
+ MSG: ocs2_msgs/mpc_target_trajectories
21
+ # MPC target trajectories
22
+
23
+ float64[] timeTrajectory # MPC target time trajectory
24
+ mpc_state[] stateTrajectory # MPC target state trajectory
25
+ mpc_input[] inputTrajectory # MPC target input trajectory
26
+
27
+
28
+ ================================================================================
29
+ MSG: ocs2_msgs/mpc_state
30
+ # MPC internal model state vector
31
+ float32[] value
32
+
33
+ ================================================================================
34
+ MSG: ocs2_msgs/mpc_input
35
+ # MPC internal model input vector
36
+
37
+ float32[] value"""
38
+ __slots__ = ['reset','targetTrajectories']
39
+ _slot_types = ['bool','ocs2_msgs/mpc_target_trajectories']
40
+
41
+ def __init__(self, *args, **kwds):
42
+ """
43
+ Constructor. Any message fields that are implicitly/explicitly
44
+ set to None will be assigned a default value. The recommend
45
+ use is keyword arguments as this is more robust to future message
46
+ changes. You cannot mix in-order arguments and keyword arguments.
47
+
48
+ The available fields are:
49
+ reset,targetTrajectories
50
+
51
+ :param args: complete set of field values, in .msg order
52
+ :param kwds: use keyword arguments corresponding to message field names
53
+ to set specific fields.
54
+ """
55
+ if args or kwds:
56
+ super(resetRequest, self).__init__(*args, **kwds)
57
+ # message fields cannot be None, assign default values for those that are
58
+ if self.reset is None:
59
+ self.reset = False
60
+ if self.targetTrajectories is None:
61
+ self.targetTrajectories = ocs2_msgs.msg.mpc_target_trajectories()
62
+ else:
63
+ self.reset = False
64
+ self.targetTrajectories = ocs2_msgs.msg.mpc_target_trajectories()
65
+
66
+ def _get_types(self):
67
+ """
68
+ internal API method
69
+ """
70
+ return self._slot_types
71
+
72
+ def serialize(self, buff):
73
+ """
74
+ serialize message into buffer
75
+ :param buff: buffer, ``StringIO``
76
+ """
77
+ try:
78
+ _x = self.reset
79
+ buff.write(_get_struct_B().pack(_x))
80
+ length = len(self.targetTrajectories.timeTrajectory)
81
+ buff.write(_struct_I.pack(length))
82
+ pattern = '<%sd'%length
83
+ buff.write(struct.Struct(pattern).pack(*self.targetTrajectories.timeTrajectory))
84
+ length = len(self.targetTrajectories.stateTrajectory)
85
+ buff.write(_struct_I.pack(length))
86
+ for val1 in self.targetTrajectories.stateTrajectory:
87
+ length = len(val1.value)
88
+ buff.write(_struct_I.pack(length))
89
+ pattern = '<%sf'%length
90
+ buff.write(struct.Struct(pattern).pack(*val1.value))
91
+ length = len(self.targetTrajectories.inputTrajectory)
92
+ buff.write(_struct_I.pack(length))
93
+ for val1 in self.targetTrajectories.inputTrajectory:
94
+ length = len(val1.value)
95
+ buff.write(_struct_I.pack(length))
96
+ pattern = '<%sf'%length
97
+ buff.write(struct.Struct(pattern).pack(*val1.value))
98
+ except struct.error as se: self._check_types(struct.error("%s: '%s' when writing '%s'" % (type(se), str(se), str(locals().get('_x', self)))))
99
+ except TypeError as te: self._check_types(ValueError("%s: '%s' when writing '%s'" % (type(te), str(te), str(locals().get('_x', self)))))
100
+
101
+ def deserialize(self, str):
102
+ """
103
+ unpack serialized message in str into this message instance
104
+ :param str: byte array of serialized message, ``str``
105
+ """
106
+ if python3:
107
+ codecs.lookup_error("rosmsg").msg_type = self._type
108
+ try:
109
+ if self.targetTrajectories is None:
110
+ self.targetTrajectories = ocs2_msgs.msg.mpc_target_trajectories()
111
+ end = 0
112
+ start = end
113
+ end += 1
114
+ (self.reset,) = _get_struct_B().unpack(str[start:end])
115
+ self.reset = bool(self.reset)
116
+ start = end
117
+ end += 4
118
+ (length,) = _struct_I.unpack(str[start:end])
119
+ pattern = '<%sd'%length
120
+ start = end
121
+ s = struct.Struct(pattern)
122
+ end += s.size
123
+ self.targetTrajectories.timeTrajectory = s.unpack(str[start:end])
124
+ start = end
125
+ end += 4
126
+ (length,) = _struct_I.unpack(str[start:end])
127
+ self.targetTrajectories.stateTrajectory = []
128
+ for i in range(0, length):
129
+ val1 = ocs2_msgs.msg.mpc_state()
130
+ start = end
131
+ end += 4
132
+ (length,) = _struct_I.unpack(str[start:end])
133
+ pattern = '<%sf'%length
134
+ start = end
135
+ s = struct.Struct(pattern)
136
+ end += s.size
137
+ val1.value = s.unpack(str[start:end])
138
+ self.targetTrajectories.stateTrajectory.append(val1)
139
+ start = end
140
+ end += 4
141
+ (length,) = _struct_I.unpack(str[start:end])
142
+ self.targetTrajectories.inputTrajectory = []
143
+ for i in range(0, length):
144
+ val1 = ocs2_msgs.msg.mpc_input()
145
+ start = end
146
+ end += 4
147
+ (length,) = _struct_I.unpack(str[start:end])
148
+ pattern = '<%sf'%length
149
+ start = end
150
+ s = struct.Struct(pattern)
151
+ end += s.size
152
+ val1.value = s.unpack(str[start:end])
153
+ self.targetTrajectories.inputTrajectory.append(val1)
154
+ return self
155
+ except struct.error as e:
156
+ raise genpy.DeserializationError(e) # most likely buffer underfill
157
+
158
+
159
+ def serialize_numpy(self, buff, numpy):
160
+ """
161
+ serialize message with numpy array types into buffer
162
+ :param buff: buffer, ``StringIO``
163
+ :param numpy: numpy python module
164
+ """
165
+ try:
166
+ _x = self.reset
167
+ buff.write(_get_struct_B().pack(_x))
168
+ length = len(self.targetTrajectories.timeTrajectory)
169
+ buff.write(_struct_I.pack(length))
170
+ pattern = '<%sd'%length
171
+ buff.write(self.targetTrajectories.timeTrajectory.tostring())
172
+ length = len(self.targetTrajectories.stateTrajectory)
173
+ buff.write(_struct_I.pack(length))
174
+ for val1 in self.targetTrajectories.stateTrajectory:
175
+ length = len(val1.value)
176
+ buff.write(_struct_I.pack(length))
177
+ pattern = '<%sf'%length
178
+ buff.write(val1.value.tostring())
179
+ length = len(self.targetTrajectories.inputTrajectory)
180
+ buff.write(_struct_I.pack(length))
181
+ for val1 in self.targetTrajectories.inputTrajectory:
182
+ length = len(val1.value)
183
+ buff.write(_struct_I.pack(length))
184
+ pattern = '<%sf'%length
185
+ buff.write(val1.value.tostring())
186
+ except struct.error as se: self._check_types(struct.error("%s: '%s' when writing '%s'" % (type(se), str(se), str(locals().get('_x', self)))))
187
+ except TypeError as te: self._check_types(ValueError("%s: '%s' when writing '%s'" % (type(te), str(te), str(locals().get('_x', self)))))
188
+
189
+ def deserialize_numpy(self, str, numpy):
190
+ """
191
+ unpack serialized message in str into this message instance using numpy for array types
192
+ :param str: byte array of serialized message, ``str``
193
+ :param numpy: numpy python module
194
+ """
195
+ if python3:
196
+ codecs.lookup_error("rosmsg").msg_type = self._type
197
+ try:
198
+ if self.targetTrajectories is None:
199
+ self.targetTrajectories = ocs2_msgs.msg.mpc_target_trajectories()
200
+ end = 0
201
+ start = end
202
+ end += 1
203
+ (self.reset,) = _get_struct_B().unpack(str[start:end])
204
+ self.reset = bool(self.reset)
205
+ start = end
206
+ end += 4
207
+ (length,) = _struct_I.unpack(str[start:end])
208
+ pattern = '<%sd'%length
209
+ start = end
210
+ s = struct.Struct(pattern)
211
+ end += s.size
212
+ self.targetTrajectories.timeTrajectory = numpy.frombuffer(str[start:end], dtype=numpy.float64, count=length)
213
+ start = end
214
+ end += 4
215
+ (length,) = _struct_I.unpack(str[start:end])
216
+ self.targetTrajectories.stateTrajectory = []
217
+ for i in range(0, length):
218
+ val1 = ocs2_msgs.msg.mpc_state()
219
+ start = end
220
+ end += 4
221
+ (length,) = _struct_I.unpack(str[start:end])
222
+ pattern = '<%sf'%length
223
+ start = end
224
+ s = struct.Struct(pattern)
225
+ end += s.size
226
+ val1.value = numpy.frombuffer(str[start:end], dtype=numpy.float32, count=length)
227
+ self.targetTrajectories.stateTrajectory.append(val1)
228
+ start = end
229
+ end += 4
230
+ (length,) = _struct_I.unpack(str[start:end])
231
+ self.targetTrajectories.inputTrajectory = []
232
+ for i in range(0, length):
233
+ val1 = ocs2_msgs.msg.mpc_input()
234
+ start = end
235
+ end += 4
236
+ (length,) = _struct_I.unpack(str[start:end])
237
+ pattern = '<%sf'%length
238
+ start = end
239
+ s = struct.Struct(pattern)
240
+ end += s.size
241
+ val1.value = numpy.frombuffer(str[start:end], dtype=numpy.float32, count=length)
242
+ self.targetTrajectories.inputTrajectory.append(val1)
243
+ return self
244
+ except struct.error as e:
245
+ raise genpy.DeserializationError(e) # most likely buffer underfill
246
+
247
+ _struct_I = genpy.struct_I
248
+ def _get_struct_I():
249
+ global _struct_I
250
+ return _struct_I
251
+ _struct_B = None
252
+ def _get_struct_B():
253
+ global _struct_B
254
+ if _struct_B is None:
255
+ _struct_B = struct.Struct("<B")
256
+ return _struct_B
257
+ # This Python file uses the following encoding: utf-8
258
+ """autogenerated by genpy from ocs2_msgs/resetResponse.msg. Do not edit."""
259
+ import codecs
260
+ import sys
261
+ python3 = True if sys.hexversion > 0x03000000 else False
262
+ import genpy
263
+ import struct
264
+
265
+
266
+ class resetResponse(genpy.Message):
267
+ _md5sum = "89bb254424e4cffedbf494e7b0ddbfea"
268
+ _type = "ocs2_msgs/resetResponse"
269
+ _has_header = False # flag to mark the presence of a Header object
270
+ _full_text = """bool done
271
+ """
272
+ __slots__ = ['done']
273
+ _slot_types = ['bool']
274
+
275
+ def __init__(self, *args, **kwds):
276
+ """
277
+ Constructor. Any message fields that are implicitly/explicitly
278
+ set to None will be assigned a default value. The recommend
279
+ use is keyword arguments as this is more robust to future message
280
+ changes. You cannot mix in-order arguments and keyword arguments.
281
+
282
+ The available fields are:
283
+ done
284
+
285
+ :param args: complete set of field values, in .msg order
286
+ :param kwds: use keyword arguments corresponding to message field names
287
+ to set specific fields.
288
+ """
289
+ if args or kwds:
290
+ super(resetResponse, self).__init__(*args, **kwds)
291
+ # message fields cannot be None, assign default values for those that are
292
+ if self.done is None:
293
+ self.done = False
294
+ else:
295
+ self.done = False
296
+
297
+ def _get_types(self):
298
+ """
299
+ internal API method
300
+ """
301
+ return self._slot_types
302
+
303
+ def serialize(self, buff):
304
+ """
305
+ serialize message into buffer
306
+ :param buff: buffer, ``StringIO``
307
+ """
308
+ try:
309
+ _x = self.done
310
+ buff.write(_get_struct_B().pack(_x))
311
+ except struct.error as se: self._check_types(struct.error("%s: '%s' when writing '%s'" % (type(se), str(se), str(locals().get('_x', self)))))
312
+ except TypeError as te: self._check_types(ValueError("%s: '%s' when writing '%s'" % (type(te), str(te), str(locals().get('_x', self)))))
313
+
314
+ def deserialize(self, str):
315
+ """
316
+ unpack serialized message in str into this message instance
317
+ :param str: byte array of serialized message, ``str``
318
+ """
319
+ if python3:
320
+ codecs.lookup_error("rosmsg").msg_type = self._type
321
+ try:
322
+ end = 0
323
+ start = end
324
+ end += 1
325
+ (self.done,) = _get_struct_B().unpack(str[start:end])
326
+ self.done = bool(self.done)
327
+ return self
328
+ except struct.error as e:
329
+ raise genpy.DeserializationError(e) # most likely buffer underfill
330
+
331
+
332
+ def serialize_numpy(self, buff, numpy):
333
+ """
334
+ serialize message with numpy array types into buffer
335
+ :param buff: buffer, ``StringIO``
336
+ :param numpy: numpy python module
337
+ """
338
+ try:
339
+ _x = self.done
340
+ buff.write(_get_struct_B().pack(_x))
341
+ except struct.error as se: self._check_types(struct.error("%s: '%s' when writing '%s'" % (type(se), str(se), str(locals().get('_x', self)))))
342
+ except TypeError as te: self._check_types(ValueError("%s: '%s' when writing '%s'" % (type(te), str(te), str(locals().get('_x', self)))))
343
+
344
+ def deserialize_numpy(self, str, numpy):
345
+ """
346
+ unpack serialized message in str into this message instance using numpy for array types
347
+ :param str: byte array of serialized message, ``str``
348
+ :param numpy: numpy python module
349
+ """
350
+ if python3:
351
+ codecs.lookup_error("rosmsg").msg_type = self._type
352
+ try:
353
+ end = 0
354
+ start = end
355
+ end += 1
356
+ (self.done,) = _get_struct_B().unpack(str[start:end])
357
+ self.done = bool(self.done)
358
+ return self
359
+ except struct.error as e:
360
+ raise genpy.DeserializationError(e) # most likely buffer underfill
361
+
362
+ _struct_I = genpy.struct_I
363
+ def _get_struct_I():
364
+ global _struct_I
365
+ return _struct_I
366
+ _struct_B = None
367
+ def _get_struct_B():
368
+ global _struct_B
369
+ if _struct_B is None:
370
+ _struct_B = struct.Struct("<B")
371
+ return _struct_B
372
+ class reset(object):
373
+ _type = 'ocs2_msgs/reset'
374
+ _md5sum = '5d381de3cef01856decae8f3f4a35b69'
375
+ _request_class = resetRequest
376
+ _response_class = resetResponse
@@ -0,0 +1,297 @@
1
+ Metadata-Version: 2.1
2
+ Name: kuavo-humanoid-sdk
3
+ Version: 1.2.1b3302
4
+ Summary: A Python SDK for kuavo humanoid robot.
5
+ Home-page: https://gitee.com/leju-robot/kuavo-ros-opensource/
6
+ Author: ['lejurobot']
7
+ Author-email: edu@lejurobot.com
8
+ License: MIT
9
+ Project-URL: Documentation, https://gitee.com/leju-robot/kuavo-ros-opensource/
10
+ Project-URL: Source Code, https://gitee.com/leju-robot/kuavo-ros-opensource/
11
+ Keywords: kuavo,humanoid,robot,robotics,lejurobot,ros
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: License :: OSI Approved :: MIT License
15
+ Classifier: Operating System :: POSIX :: Linux
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.8
18
+ Classifier: Programming Language :: Python :: 3.9
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
21
+ Requires-Python: >=3.8
22
+ Description-Content-Type: text/markdown
23
+ Requires-Dist: numpy
24
+ Requires-Dist: transitions
25
+ Requires-Dist: pyOpenSSL (>=22.1.0)
26
+ Requires-Dist: scikit-learn
27
+ Requires-Dist: funasr
28
+ Requires-Dist: torchaudio
29
+ Requires-Dist: websockets
30
+ Requires-Dist: ultralytics
31
+
32
+ # Kuavo Humanoid SDK
33
+
34
+ 一个用于控制 Kuavo 人形机器人的 Python SDK,提供了机器人状态管理、机械臂和头部控制以及末端执行器操作的接口, 它设计用于在 ROS 环境中工作。
35
+
36
+ **警告**: 该SDK目前仅支持**ROS1**。暂不支持ROS2。
37
+
38
+ ![Kuavo 4Pro Robot](https://kuavo.lejurobot.com/manual/assets/images/kuavo_4pro-cf84d43f1c370666c6e810d2807ae3e4.png)
39
+
40
+ ## 特性
41
+
42
+ - 机器人状态管理
43
+ - IMU数据(加速度、角速度、欧拉角)
44
+ - 关节/电机状态(位置、速度、力矩)
45
+ - 躯干状态(位置、姿态、速度)
46
+ - 里程计信息
47
+ - 末端执行器状态:
48
+ - 夹爪(lejuclaw): 位置、速度、力矩、抓取状态
49
+ - 灵巧手(qiangnao): 位置、速度、力矩
50
+ - 触觉灵巧手(qiangnao_touch): 位置、速度、力矩、触觉状态
51
+ - 末端执行器位置和姿态
52
+ - 运动状态: 站立、行走、自定义单步控制
53
+
54
+ - 运动控制
55
+ - 手臂控制
56
+ - 关节位置控制
57
+ - 通过逆运动学(IK)的末端执行器6D控制
58
+ - 用于计算末端执行器位姿的正运动学(FK)
59
+ - 复杂动作的关键帧序列控制
60
+ - 末端执行器控制
61
+ - 夹爪控制(可配置速度和力矩的位置控制)
62
+ - 灵巧手控制
63
+ - 位置控制
64
+ - 预定义手势(OK、666、握拳等)控制
65
+ - 头部控制
66
+ - 位置控制
67
+ - 躯干控制
68
+ - 高度控制(下蹲)
69
+ - 前/后倾控制
70
+ - 动态运动控制
71
+ - 站立
72
+ - 踏步
73
+ - 行走(xy 和 yaw 偏航速度控制)
74
+ - 自定义单步控制
75
+ - 机器人基本信息
76
+ - 机器人类型(kuavo)
77
+ - 机器人版本
78
+ - 末端执行器类型
79
+ - 关节名称
80
+ - 总自由度(28)
81
+ - 手臂自由度(每臂7个)
82
+ - 头部自由度(2个)
83
+ - 腿部自由度(12个)
84
+ - 音频接口
85
+ - 播放指定的音频文件
86
+ - 停止播放音频
87
+ - TTS 文本合成音频
88
+ - 视觉接口
89
+ - 获取指定坐标系下的 AprilTag 检测数据
90
+ - 观测接口
91
+ - 获取机器人控制指令
92
+ - 搬箱子策略模块
93
+ - 查找 Apriltag
94
+ - 到达世界坐标系下的目标点位姿
95
+ - 搬箱子
96
+ - 放置箱子
97
+ ## 安装
98
+
99
+ **注意:目前SDK有两个版本,稳定版和测试版。它们的区别如下:**
100
+
101
+ - 稳定版:对应 [kuavo-ros-opensource](https://gitee.com/leju-robot/kuavo-ros-opensource/) 仓库 `master` 分支提供的功能。
102
+ - 测试版:比官方版本更激进,也提供更丰富的功能,对应 [kuavo-ros-opensource](https://gitee.com/leju-robot/kuavo-ros-opensource/) 仓库 `beta` 分支提供的功能。
103
+
104
+ **友情提醒:请明确您需要安装的版本。如果您的SDK版本与 `kuavo-ros-opensource` 不匹配,某些功能可能无法使用。**
105
+
106
+ 使用 pip 安装最新的 **稳定版** Kuavo Humanoid SDK:
107
+ ```bash
108
+ pip install kuavo-humanoid-sdk
109
+ ```
110
+
111
+ 使用 pip 安装最新的 **测试版** Kuavo Humanoid SDK:
112
+ ```bash
113
+ pip install --pre kuavo-humanoid-sdk
114
+ ```
115
+
116
+ 对于本地开发安装(可编辑模式),请使用:
117
+ ```bash
118
+ cd src/kuavo_humanoid_sdk
119
+ chmod +x install.sh
120
+ ./install.sh
121
+ ```
122
+
123
+ ## 版本升级
124
+ 在升级版本之前,您可以使用以下命令查看当前安装的版本:
125
+ ```bash
126
+ pip show kuavo-humanoid-sdk
127
+ # Output:
128
+ Name: kuavo-humanoid-sdk
129
+ Version: 1.1.6
130
+ ...
131
+ ```
132
+
133
+ **提示:如果版本号包含字母 b,则表示是测试版,例如,Version: 0.1.2b113**
134
+
135
+ 从稳定版本更新到最新的稳定版本:
136
+ ```bash
137
+ pip install --upgrade kuavo_humanoid_sdk
138
+ ```
139
+
140
+ 从测试版更新到最新的稳定版本:
141
+ ```bash
142
+ pip install --upgrade --force-reinstall kuavo_humanoid_sdk
143
+ # or
144
+ pip uninstall kuavo_humanoid_sdk && pip install kuavo_humanoid_sdk
145
+ ```
146
+
147
+ 从测试版/稳定版更新到最新的测试版:
148
+ ```bash
149
+ pip install --upgrade --pre kuavo_humanoid_sdk
150
+ ```
151
+
152
+ ## 安装包信息
153
+
154
+ 您可以使用 pip 来查看包信息:
155
+ ```bash
156
+ pip show kuavo-humanoid-sdk
157
+ ```
158
+
159
+ ## 快速开始
160
+
161
+ 以下是一个简单的示例,用于快速使用 Kuavo Humanoid SDK:
162
+
163
+ > **警告**:
164
+ > 在运行任何代码示例之前,请确保已经启动机器人, 否则 SDK 无法正常工作:
165
+ >
166
+ > - 如果是命令行启动,则请确保类似下面的命令已经执行:
167
+ > - 仿真模式: ``roslaunch humanoid_controllers load_kuavo_mujoco_sim.launch`` (示例命令)
168
+ > - 真实机器人: ``roslaunch humanoid_controllers load_kuavo_real.launch`` (示例命令)
169
+ > - 如果是 h12 遥控器等启动方式,也请确保已经让机器人启动(站立)
170
+
171
+ ```python3
172
+ # Copyright (c) 2025 Leju Robotics. Licensed under the MIT License.
173
+ import time
174
+ from kuavo_humanoid_sdk import KuavoSDK, KuavoRobot
175
+
176
+ def main():
177
+ if not KuavoSDK().Init(): # Init! !!! IMPORTANT !!!
178
+ print("Init KuavoSDK failed, exit!")
179
+ exit(1)
180
+ robot = KuavoRobot()
181
+
182
+ """ arm reset """
183
+ print("Switching to arm reset mode...")
184
+ robot.arm_reset()
185
+
186
+ """ stance """
187
+ print("Switching to stance mode...")
188
+ robot.stance()
189
+
190
+ """ trot """
191
+ print("Switching to trot mode...")
192
+ robot.trot()
193
+
194
+ """ walk forward """
195
+ print("Starting forward walk...")
196
+ duration = 4.0 # seconds
197
+ speed = 0.3 # m/s
198
+ start_time = time.time()
199
+ while (time.time() - start_time < duration):
200
+ robot.walk(linear_x=speed, linear_y=0.0, angular_z=0.0)
201
+ time.sleep(0.1) # Small sleep to prevent busy loop
202
+
203
+ if __name__ == "__main__":
204
+ main()
205
+ ```
206
+
207
+ ## 文档
208
+ 我们提供两种文档格式:
209
+ - HTML 格式: [docs/html](docs/html), **但是需要您自己在SDK目录下执行`gen_docs.sh`脚本生成**
210
+ - Markdown 格式: [docs/markdown](docs/markdown)
211
+
212
+ 您可以在 SDK 的源码目录下执行以下命令生成文档, 文档会输出到 `docs/html` 和 `docs/markdown` 文件夹中:
213
+ ```bash
214
+ cd <kuavo-ros-opensource>/src/kuavo_humanoid_sdk
215
+ chmod +x gen_docs.sh
216
+ ./gen_docs.sh
217
+ ```
218
+
219
+ **我们强烈推荐您阅读 `html` 文档, 因为它更适合阅读。**
220
+
221
+ 对于Markdown 文档, 请访问:
222
+
223
+ https://gitee.com/leju-robot/kuavo-ros-opensource/tree/master/src/kuavo_humanoid_sdk/docs/markdown/index.md
224
+
225
+ ## 使用示例
226
+
227
+ > **警告**:
228
+ > 在运行任何代码示例之前,请确保已经启动机器人, 否则 SDK 无法正常工作:
229
+ >
230
+ > - 如果是命令行启动,则请确保类似下面的命令已经执行:
231
+ > - 仿真模式: ``roslaunch humanoid_controllers load_kuavo_mujoco_sim.launch`` (示例命令)
232
+ > - 真实机器人: ``roslaunch humanoid_controllers load_kuavo_real.launch`` (示例命令)
233
+ > - 如果是 h12 遥控器等启动方式,也请确保已经让机器人启动(站立)
234
+
235
+ ### 基本信息示例
236
+
237
+ 一个获取机器人基本信息的示例。
238
+
239
+ [https://gitee.com/leju-robot/kuavo-ros-opensource/tree/master/src/kuavo_humanoid_sdk/examples/atomic_skills/robot_info_example.py](https://gitee.com/leju-robot/kuavo-ros-opensource/tree/master/src/kuavo_humanoid_sdk/examples/atomic_skills/robot_info_example.py)
240
+
241
+ ### 运动控制示例
242
+
243
+ 一个基本示例,用于初始化 SDK 并控制机器人运动。
244
+
245
+ [https://gitee.com/leju-robot/kuavo-ros-opensource/tree/master/src/kuavo_humanoid_sdk/examples/atomic_skills/motion_example.py](https://gitee.com/leju-robot/kuavo-ros-opensource/tree/master/src/kuavo_humanoid_sdk/examples/atomic_skills/motion_example.py)
246
+
247
+ ### 末端执行器控制示例
248
+
249
+ #### LejuClaw 夹爪
250
+
251
+ 展示如何控制 LejuClaw 夹爪末端执行器的示例,包括位置、速度和力矩控制。
252
+
253
+ [https://gitee.com/leju-robot/kuavo-ros-opensource/tree/master/src/kuavo_humanoid_sdk/examples/atomic_skills/lejuclaw_example.py](https://gitee.com/leju-robot/kuavo-ros-opensource/tree/master/src/kuavo_humanoid_sdk/examples/atomic_skills/lejuclaw_example.py)
254
+
255
+ #### QiangNao 灵巧手
256
+
257
+ 展示如何控制 QiangNao 灵巧手的示例,这是一个具有多个自由度的灵巧机器人手,可用于复杂的操作任务。
258
+
259
+ [https://gitee.com/leju-robot/kuavo-ros-opensource/tree/master/src/kuavo_humanoid_sdk/examples/atomic_skills/dexhand_example.py](https://gitee.com/leju-robot/kuavo-ros-opensource/tree/master/src/kuavo_humanoid_sdk/examples/atomic_skills/dexhand_example.py)
260
+
261
+ ### 手臂控制示例
262
+
263
+ 展示手臂轨迹控制和目标姿态控制的示例。
264
+
265
+ [https://gitee.com/leju-robot/kuavo-ros-opensource/tree/master/src/kuavo_humanoid_sdk/examples/atomic_skills/ctrl_arm_example.py](https://gitee.com/leju-robot/kuavo-ros-opensource/tree/master/src/kuavo_humanoid_sdk/examples/atomic_skills/ctrl_arm_example.py)
266
+
267
+ ### 手臂正向运动学和逆向运动学示例
268
+
269
+ 展示如何使用正向运动学(FK)从关节角度计算末端执行器位置,以及如何使用逆向运动学(IK)计算实现期望末端执行器姿态所需的关节角度的示例。
270
+
271
+ [https://gitee.com/leju-robot/kuavo-ros-opensource/tree/master/src/kuavo_humanoid_sdk/examples/atomic_skills/arm_ik_example.py](https://gitee.com/leju-robot/kuavo-ros-opensource/tree/master/src/kuavo_humanoid_sdk/examples/atomic_skills/arm_ik_example.py)
272
+
273
+ ### 头部控制示例
274
+
275
+ 展示如何控制机器人头部运动的示例,包括点头(俯仰)和摇头(偏航)动作。
276
+
277
+ [https://gitee.com/leju-robot/kuavo-ros-opensource/tree/master/src/kuavo_humanoid_sdk/examples/atomic_skills/ctrl_head_example.py](https://gitee.com/leju-robot/kuavo-ros-opensource/tree/master/src/kuavo_humanoid_sdk/examples/atomic_skills/ctrl_head_example.py)
278
+
279
+ ### 单步控制示例
280
+
281
+ 展示如何控制机器人按照自定义落足点轨迹运动的示例。
282
+
283
+ [https://gitee.com/leju-robot/kuavo-ros-opensource/tree/master/src/kuavo_humanoid_sdk/examples/atomic_skills/step_control_example.py](https://gitee.com/leju-robot/kuavo-ros-opensource/tree/master/src/kuavo_humanoid_sdk/examples/atomic_skills/step_control_example.py)
284
+
285
+
286
+ ## 许可证
287
+
288
+ 本项目使用 MIT 许可证授权,详情信息请查看 LICENSE 文件。
289
+
290
+ ## 联系与支持
291
+
292
+ 如有任何问题、支持需求或错误报告,请通过以下方式联系我们:
293
+
294
+ - 邮箱: edu@lejurobot.com
295
+ - 网站: https://gitee.com/leju-robot/kuavo-ros-opensource/
296
+ - 源代码: https://gitee.com/leju-robot/kuavo-ros-opensource/
297
+ - 问题追踪: https://gitee.com/leju-robot/kuavo-ros-opensource/issues