kuavo-humanoid-sdk 1.2.1b3279__20250911210455-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.
- kuavo_humanoid_sdk/__init__.py +6 -0
- kuavo_humanoid_sdk/common/logger.py +45 -0
- kuavo_humanoid_sdk/interfaces/__init__.py +4 -0
- kuavo_humanoid_sdk/interfaces/data_types.py +288 -0
- kuavo_humanoid_sdk/interfaces/end_effector.py +62 -0
- kuavo_humanoid_sdk/interfaces/robot.py +22 -0
- kuavo_humanoid_sdk/interfaces/robot_info.py +56 -0
- kuavo_humanoid_sdk/kuavo/__init__.py +16 -0
- kuavo_humanoid_sdk/kuavo/core/audio.py +32 -0
- kuavo_humanoid_sdk/kuavo/core/core.py +666 -0
- kuavo_humanoid_sdk/kuavo/core/dex_hand_control.py +114 -0
- kuavo_humanoid_sdk/kuavo/core/leju_claw_control.py +67 -0
- kuavo_humanoid_sdk/kuavo/core/llm_doubao.py +608 -0
- kuavo_humanoid_sdk/kuavo/core/microphone.py +192 -0
- kuavo_humanoid_sdk/kuavo/core/navigation.py +70 -0
- kuavo_humanoid_sdk/kuavo/core/ros/audio.py +110 -0
- kuavo_humanoid_sdk/kuavo/core/ros/control.py +1524 -0
- kuavo_humanoid_sdk/kuavo/core/ros/microphone.py +38 -0
- kuavo_humanoid_sdk/kuavo/core/ros/navigation.py +217 -0
- kuavo_humanoid_sdk/kuavo/core/ros/observation.py +94 -0
- kuavo_humanoid_sdk/kuavo/core/ros/param.py +201 -0
- kuavo_humanoid_sdk/kuavo/core/ros/sat_utils.py +103 -0
- kuavo_humanoid_sdk/kuavo/core/ros/state.py +652 -0
- kuavo_humanoid_sdk/kuavo/core/ros/tools.py +220 -0
- kuavo_humanoid_sdk/kuavo/core/ros/vision.py +234 -0
- kuavo_humanoid_sdk/kuavo/core/ros_env.py +238 -0
- kuavo_humanoid_sdk/kuavo/demo_climbstair.py +249 -0
- kuavo_humanoid_sdk/kuavo/dexterous_hand.py +238 -0
- kuavo_humanoid_sdk/kuavo/leju_claw.py +235 -0
- kuavo_humanoid_sdk/kuavo/logger_client.py +80 -0
- kuavo_humanoid_sdk/kuavo/robot.py +561 -0
- kuavo_humanoid_sdk/kuavo/robot_arm.py +299 -0
- kuavo_humanoid_sdk/kuavo/robot_audio.py +39 -0
- kuavo_humanoid_sdk/kuavo/robot_blockly.py +1162 -0
- kuavo_humanoid_sdk/kuavo/robot_climbstair.py +1607 -0
- kuavo_humanoid_sdk/kuavo/robot_head.py +74 -0
- kuavo_humanoid_sdk/kuavo/robot_info.py +134 -0
- kuavo_humanoid_sdk/kuavo/robot_microphone.py +19 -0
- kuavo_humanoid_sdk/kuavo/robot_navigation.py +135 -0
- kuavo_humanoid_sdk/kuavo/robot_observation.py +64 -0
- kuavo_humanoid_sdk/kuavo/robot_speech.py +24 -0
- kuavo_humanoid_sdk/kuavo/robot_state.py +310 -0
- kuavo_humanoid_sdk/kuavo/robot_tool.py +109 -0
- kuavo_humanoid_sdk/kuavo/robot_vision.py +81 -0
- kuavo_humanoid_sdk/kuavo_strategy/__init__.py +2 -0
- kuavo_humanoid_sdk/kuavo_strategy/grasp_box/grasp_box_strategy.py +1325 -0
- kuavo_humanoid_sdk/kuavo_strategy/kuavo_strategy.py +106 -0
- kuavo_humanoid_sdk/kuavo_strategy_v2/common/data_type.py +340 -0
- kuavo_humanoid_sdk/kuavo_strategy_v2/common/events/base_event.py +215 -0
- kuavo_humanoid_sdk/kuavo_strategy_v2/common/robot_sdk.py +25 -0
- kuavo_humanoid_sdk/kuavo_strategy_v2/pick_place_box/case.py +331 -0
- kuavo_humanoid_sdk/kuavo_strategy_v2/pick_place_box/strategy.py +504 -0
- kuavo_humanoid_sdk/kuavo_strategy_v2/utils/logger_setup.py +40 -0
- kuavo_humanoid_sdk/kuavo_strategy_v2/utils/utils.py +88 -0
- kuavo_humanoid_sdk/msg/__init__.py +4 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/__init__.py +7 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_AprilTagDetection.py +306 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_AprilTagDetectionArray.py +437 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_AudioReceiverData.py +122 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_FTsensorData.py +260 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_JoySticks.py +191 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_Metadata.py +199 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_MmDetectionMsg.py +264 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_RobotActionState.py +112 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_TFArray.py +323 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_TaskPoint.py +175 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/__init__.py +62 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armCollisionCheckInfo.py +160 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armHandPose.py +161 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armHandPoseFree.py +171 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armPoseWithTimeStamp.py +168 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armTargetPoses.py +171 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_bezierCurveCubicPoint.py +178 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_dexhandCommand.py +229 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_dexhandTouchState.py +256 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_endEffectorData.py +227 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPose.py +123 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPose6D.py +123 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPose6DTargetTrajectories.py +320 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoseTargetTrajectories.py +301 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoseWithVision.py +136 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoseWithVisionArray.py +231 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoses.py +149 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoses6D.py +149 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_fullBodyTargetTrajectories.py +258 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_gaitTimeName.py +147 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_gestureInfo.py +218 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_gestureTask.py +149 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_handPose.py +136 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_headBodyPose.py +145 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_ikSolveError.py +171 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_ikSolveParam.py +140 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_imuData.py +165 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_jointBezierTrajectory.py +201 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_jointCmd.py +390 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_jointData.py +205 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_kuavoModeSchedule.py +224 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_lejuClawCommand.py +320 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_lejuClawState.py +341 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_motorParam.py +122 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_picoPoseInfo.py +143 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_picoPoseInfoList.py +220 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_planArmState.py +120 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_qv.py +121 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotArmQVVD.py +177 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotBodyMatrices.py +332 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotHandPosition.py +225 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotHeadMotionData.py +128 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotState.py +222 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_sensorsData.py +655 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_switchGaitByName.py +200 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_tagDataArray.py +216 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_touchSensorStatus.py +162 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_twoArmHandPose.py +273 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_twoArmHandPoseCmd.py +316 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_twoArmHandPoseCmdFree.py +338 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_twoArmHandPoseFree.py +299 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_yoloDetection.py +251 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_yoloOutputData.py +168 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_CreatePath.py +581 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_ExecuteArmAction.py +281 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_GetAllMaps.py +241 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_GetCurrentMap.py +225 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_GetTargetPartPoseInCamera.py +298 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_InitialPoseWithTaskPoint.py +281 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_LoadMap.py +281 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_NavigateToTaskPoint.py +281 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_RepublishTFs.py +373 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_SetInitialPose.py +394 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_SetJoyTopic.py +282 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_SetLEDMode.py +468 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_SetLEDMode_free.py +289 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_SpeechSynthesis.py +270 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_TaskPointOperation.py +536 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/__init__.py +43 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_adjustZeroPoint.py +277 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_changeArmCtrlMode.py +275 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_changeArmCtrlModeKuavo.py +236 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_changeMotorParam.py +299 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_changeTorsoCtrlMode.py +274 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_controlLejuClaw.py +408 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_enableHandTouchSensor.py +304 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_fkSrv.py +395 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_footPose6DTargetTrajectoriesSrv.py +426 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_footPoseTargetTrajectoriesSrv.py +409 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_gestureExecute.py +339 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_gestureExecuteState.py +257 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_gestureList.py +418 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_getCurrentGaitName.py +253 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_getMotorParam.py +299 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_getMotorZeroPoints.py +286 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_handForceLevel.py +330 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_jointMoveTo.py +302 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_planArmTrajectoryBezierCurve.py +422 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_planArmTrajectoryCubicSpline.py +490 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_playmusic.py +268 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_setHwIntialState.py +304 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_setMmCtrlFrame.py +273 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_setMotorEncoderRoundService.py +283 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_setTagId.py +275 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_singleStepControl.py +444 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_twoArmHandPoseCmdFreeSrv.py +716 -0
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_twoArmHandPoseCmdSrv.py +664 -0
- kuavo_humanoid_sdk/msg/motion_capture_ik/__init__.py +7 -0
- kuavo_humanoid_sdk/msg/ocs2_msgs/__init__.py +7 -0
- kuavo_humanoid_sdk/msg/ocs2_msgs/msg/__init__.py +12 -0
- kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_constraint.py +142 -0
- kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_controller_data.py +121 -0
- kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_lagrangian_metrics.py +148 -0
- kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mode_schedule.py +150 -0
- kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_flattened_controller.py +666 -0
- kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_input.py +122 -0
- kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_observation.py +209 -0
- kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_performance_indices.py +140 -0
- kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_solver_data.py +886 -0
- kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_state.py +122 -0
- kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_target_trajectories.py +239 -0
- kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_multiplier.py +148 -0
- kuavo_humanoid_sdk/msg/ocs2_msgs/srv/__init__.py +1 -0
- kuavo_humanoid_sdk/msg/ocs2_msgs/srv/_reset.py +376 -0
- kuavo_humanoid_sdk-1.2.1b3279.dist-info/METADATA +296 -0
- kuavo_humanoid_sdk-1.2.1b3279.dist-info/RECORD +184 -0
- kuavo_humanoid_sdk-1.2.1b3279.dist-info/WHEEL +6 -0
- kuavo_humanoid_sdk-1.2.1b3279.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
from kuavo_humanoid_sdk.kuavo_strategy_v2.common.data_type import Pose, Tag, Frame
|
|
2
|
+
from kuavo_humanoid_sdk.kuavo_strategy_v2.utils.logger_setup import init_logging
|
|
3
|
+
from kuavo_humanoid_sdk.kuavo_strategy_v2.common.events.mobile_manipulate import (
|
|
4
|
+
EventArmMoveKeyPoint, EventPercep, EventWalkToPose, EventHeadMoveKeyPoint)
|
|
5
|
+
from kuavo_humanoid_sdk.kuavo_strategy_v2.common.robot_sdk import RobotSDK
|
|
6
|
+
|
|
7
|
+
import numpy as np
|
|
8
|
+
import os, sys
|
|
9
|
+
mother_dir = os.path.dirname(os.path.abspath(__file__))
|
|
10
|
+
|
|
11
|
+
log_path = init_logging(log_dir=os.path.join(mother_dir, "logs"), filename_prefix="grab_box_v2", enable=True)
|
|
12
|
+
|
|
13
|
+
from configs.config_sim import config
|
|
14
|
+
# from configs.config_real import config
|
|
15
|
+
|
|
16
|
+
from strategy import (
|
|
17
|
+
search_tag_with_head,
|
|
18
|
+
walk_approach_target_with_perception_loop,
|
|
19
|
+
grab_box_and_backward,
|
|
20
|
+
place_box_and_backward,
|
|
21
|
+
return_to_idle
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def test_arm_only():
|
|
26
|
+
"""
|
|
27
|
+
测试仅使用手臂的功能。
|
|
28
|
+
"""
|
|
29
|
+
robot_sdk = RobotSDK()
|
|
30
|
+
|
|
31
|
+
# 初始化事件
|
|
32
|
+
walk_event = EventWalkToPose(
|
|
33
|
+
robot_sdk=robot_sdk,
|
|
34
|
+
timeout=config.common.walk_timeout, # 走路事件的超时时间,单位秒
|
|
35
|
+
yaw_threshold=config.common.walk_yaw_threshold, # 走路事件的偏航角度阈值,单位弧度
|
|
36
|
+
pos_threshold=config.common.walk_pos_threshold, # 走路事件的位置阈值,单位米
|
|
37
|
+
control_mode='cmd_pos_world' # 使用世界坐标系的命令位置控制模式
|
|
38
|
+
)
|
|
39
|
+
head_event = EventHeadMoveKeyPoint(
|
|
40
|
+
robot_sdk=robot_sdk,
|
|
41
|
+
timeout=config.common.head_timeout, # 头部移动事件的超时时间,单位秒
|
|
42
|
+
)
|
|
43
|
+
percep_event = EventPercep(
|
|
44
|
+
robot_sdk=robot_sdk,
|
|
45
|
+
half_fov=config.common.half_fov, # 半视场角度,单位度
|
|
46
|
+
timeout=np.inf, # 头部移动事件的超时时间,单位秒
|
|
47
|
+
)
|
|
48
|
+
arm_event = EventArmMoveKeyPoint(
|
|
49
|
+
robot_sdk=robot_sdk,
|
|
50
|
+
timeout=config.common.arm_timeout, # 手臂移动事件的超时时间,单位秒
|
|
51
|
+
arm_control_mode=config.common.arm_control_mode, # 手臂控制模式
|
|
52
|
+
pos_threshold=config.common.arm_pos_threshold, # 手臂位置阈值,单位米
|
|
53
|
+
angle_threshold=config.common.arm_angle_threshold, # 手臂角度阈值,单位弧度
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
fake_target_tag = Tag(
|
|
57
|
+
id=config.pick.tag_id, # 假设目标箱子的ID为1
|
|
58
|
+
pose=Pose.from_euler(
|
|
59
|
+
pos=(0.3, 0.0, 0.96), # 初始位置猜测,单位米
|
|
60
|
+
euler=(90, 0, -90), # 初始姿态猜测,单位欧拉角(弧度)
|
|
61
|
+
frame=Frame.ODOM, # 使用里程计坐标系
|
|
62
|
+
degrees=True
|
|
63
|
+
)
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
success = grab_box_and_backward(
|
|
67
|
+
walk_event=walk_event,
|
|
68
|
+
arm_event=arm_event,
|
|
69
|
+
box_width=config.common.box_width,
|
|
70
|
+
box_behind_tag=config.pick.box_behind_tag, # 箱子在tag后面的距离,单位米
|
|
71
|
+
box_beneath_tag=config.pick.box_beneath_tag, # 箱子在tag下方的距离,单位米
|
|
72
|
+
box_left_tag=config.pick.box_left_tag, # 箱子在tag左侧的距离,单位米
|
|
73
|
+
tag=fake_target_tag,
|
|
74
|
+
step_back_distance=config.common.step_back_distance, # 搬起后向后平移的距离,单位米
|
|
75
|
+
|
|
76
|
+
box_mass=config.common.box_mass, # 假设箱子质量,单位kg,用来计算纵向wrench
|
|
77
|
+
force_ratio_z=config.pick.force_ratio_z, # 经验系数(根据1.5kg对应5N得出:5/(1.5*9.8)≈0.34
|
|
78
|
+
lateral_force=config.pick.lateral_force, # 侧向夹持力,单位N
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
def grab_one_box(user_input=True):
|
|
82
|
+
"""
|
|
83
|
+
执行抓取一个箱子的完整策略。
|
|
84
|
+
|
|
85
|
+
参数:
|
|
86
|
+
user_input (bool): 是否等待用户输入以继续每个步骤。
|
|
87
|
+
|
|
88
|
+
返回:
|
|
89
|
+
bool: 是否成功完成策略。
|
|
90
|
+
"""
|
|
91
|
+
# 1. 尋找箱子
|
|
92
|
+
|
|
93
|
+
# 初始化机器人
|
|
94
|
+
robot_sdk = RobotSDK()
|
|
95
|
+
|
|
96
|
+
# 初始化事件
|
|
97
|
+
walk_event = EventWalkToPose(
|
|
98
|
+
robot_sdk=robot_sdk,
|
|
99
|
+
timeout=config.common.walk_timeout, # 走路事件的超时时间,单位秒
|
|
100
|
+
yaw_threshold=config.common.walk_yaw_threshold, # 走路事件的偏航角度阈值,单位弧度
|
|
101
|
+
pos_threshold=config.common.walk_pos_threshold, # 走路事件的位置阈值,单位米
|
|
102
|
+
control_mode='cmd_pos_world' # 使用世界坐标系的命令位置控制模式
|
|
103
|
+
)
|
|
104
|
+
head_event = EventHeadMoveKeyPoint(
|
|
105
|
+
robot_sdk=robot_sdk,
|
|
106
|
+
timeout=config.common.head_timeout, # 头部移动事件的超时时间,单位秒
|
|
107
|
+
)
|
|
108
|
+
percep_event = EventPercep(
|
|
109
|
+
robot_sdk=robot_sdk,
|
|
110
|
+
half_fov=config.common.half_fov, # 半视场角度,单位度
|
|
111
|
+
timeout=np.inf, # 头部移动事件的超时时间,单位秒
|
|
112
|
+
)
|
|
113
|
+
arm_event = EventArmMoveKeyPoint(
|
|
114
|
+
robot_sdk=robot_sdk,
|
|
115
|
+
timeout=config.common.arm_timeout, # 手臂移动事件的超时时间,单位秒
|
|
116
|
+
arm_control_mode=config.common.arm_control_mode, # 手臂控制模式
|
|
117
|
+
pos_threshold=config.common.arm_pos_threshold, # 手臂位置阈值,单位米
|
|
118
|
+
angle_threshold=config.common.arm_angle_threshold, # 手臂角度阈值,单位弧度
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
# 1. -------------------- 使用头部寻找目标位置 --------------------
|
|
122
|
+
|
|
123
|
+
success, target_tag = search_tag_with_head(
|
|
124
|
+
robot_sdk=robot_sdk,
|
|
125
|
+
walk_event=walk_event,
|
|
126
|
+
head_event=head_event,
|
|
127
|
+
percep_event=percep_event,
|
|
128
|
+
|
|
129
|
+
init_tag_guess=Tag(
|
|
130
|
+
id=config.pick.tag_id, # 假设目标箱子的ID为1
|
|
131
|
+
pose=Pose.from_euler(
|
|
132
|
+
pos=config.pick.tag_pos_world, # 初始位置猜测,单位米
|
|
133
|
+
euler=config.pick.tag_euler_world, # 初始姿态猜测,单位四元数
|
|
134
|
+
frame=Frame.ODOM, # 使用里程计坐标系
|
|
135
|
+
degrees=False
|
|
136
|
+
)
|
|
137
|
+
),
|
|
138
|
+
|
|
139
|
+
head_search_yaws=config.common.head_search_yaws, # 头部搜索的偏航角度范围,单位度
|
|
140
|
+
head_search_pitchs=config.common.head_search_pitchs, # 头部搜索的俯仰角度范围,单位度
|
|
141
|
+
enable_head_tracking=config.common.enable_head_tracking, # 是否启用头部追踪
|
|
142
|
+
rotate_body=config.common.rotate_body, # 是否允许身体旋转以寻找目标
|
|
143
|
+
walk_use_cmd_vel=config.common.walk_use_cmd_vel
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
if not success:
|
|
147
|
+
print("未能找到目标箱子,退出策略。")
|
|
148
|
+
return False
|
|
149
|
+
|
|
150
|
+
## 在这里添加键盘事件,按特定按键才能继续
|
|
151
|
+
print("======================================================")
|
|
152
|
+
print(f"找到目标Tag,ID: {target_tag.id}, 位置: {target_tag.pose}")
|
|
153
|
+
if user_input:
|
|
154
|
+
input("准备接近搬起Tag,按回车键继续... \n")
|
|
155
|
+
|
|
156
|
+
# 2. -------------------- 走路接近目标位置 --------------------
|
|
157
|
+
|
|
158
|
+
arm_event.arm_reset()
|
|
159
|
+
robot_sdk.control.control_arm_joint_positions(
|
|
160
|
+
joint_positions=[0.0] * 14 # 手臂站立位置的关节角度,单位弧度
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
success, latest_tag = walk_approach_target_with_perception_loop(
|
|
164
|
+
walk_event=walk_event,
|
|
165
|
+
percep_event=percep_event,
|
|
166
|
+
tag=target_tag,
|
|
167
|
+
stand_pose_in_tag=Pose.from_euler(
|
|
168
|
+
pos=config.pick.stand_in_tag_pos, # 站立位置在目标标签中的位置猜测,单位米
|
|
169
|
+
euler=config.pick.stand_in_tag_euler, # 站立位置在目标标签中的姿态猜测,单位欧拉角(弧度)
|
|
170
|
+
frame=Frame.TAG, # 使用标签坐标系
|
|
171
|
+
degrees=False
|
|
172
|
+
),
|
|
173
|
+
enable_percep_when_walking=config.common.enable_percep_when_walking,
|
|
174
|
+
walk_use_cmd_vel=config.common.walk_use_cmd_vel
|
|
175
|
+
)
|
|
176
|
+
|
|
177
|
+
if not success:
|
|
178
|
+
print("未能接近目标箱子,退出策略。")
|
|
179
|
+
return False
|
|
180
|
+
|
|
181
|
+
## 在这里添加键盘事件,按特定按键才能继续
|
|
182
|
+
print("======================================================")
|
|
183
|
+
print(f"已接近目标Tag,ID: {latest_tag.id}, 位置: {latest_tag.pose}")
|
|
184
|
+
if user_input:
|
|
185
|
+
input(" 准备搬框,按回车键继续... \n")
|
|
186
|
+
|
|
187
|
+
# 3. -------------------- 移动手臂搬框 --------------------
|
|
188
|
+
|
|
189
|
+
fake_target_tag = Tag(
|
|
190
|
+
id=config.pick.tag_id, # 假设目标箱子的ID为1
|
|
191
|
+
pose=Pose.from_euler(
|
|
192
|
+
pos=(0.3, 0.0, 0.96), # 初始位置猜测,单位米
|
|
193
|
+
euler=(90, 0, -90), # 初始姿态猜测,单位欧拉角(弧度)
|
|
194
|
+
frame=Frame.ODOM, # 使用里程计坐标系
|
|
195
|
+
degrees=True
|
|
196
|
+
)
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
success = grab_box_and_backward(
|
|
200
|
+
walk_event=walk_event,
|
|
201
|
+
arm_event=arm_event,
|
|
202
|
+
box_width=config.common.box_width,
|
|
203
|
+
box_behind_tag=config.pick.box_behind_tag, # 箱子在tag后面的距离,单位米
|
|
204
|
+
box_beneath_tag=config.pick.box_beneath_tag, # 箱子在tag下方的距离,单位米
|
|
205
|
+
box_left_tag=config.pick.box_left_tag, # 箱子在tag左侧的距离,单位米
|
|
206
|
+
tag=latest_tag,
|
|
207
|
+
step_back_distance=config.common.step_back_distance, # 搬起后向后平移的距离,单位米
|
|
208
|
+
|
|
209
|
+
box_mass=config.common.box_mass, # 假设箱子质量,单位kg,用来计算纵向wrench
|
|
210
|
+
force_ratio_z=config.pick.force_ratio_z, # 经验系数(根据1.5kg对应5N得出:5/(1.5*9.8)≈0.34
|
|
211
|
+
lateral_force=config.pick.lateral_force, # 侧向夹持力,单位N
|
|
212
|
+
walk_use_cmd_vel=config.common.walk_use_cmd_vel
|
|
213
|
+
)
|
|
214
|
+
|
|
215
|
+
if not success:
|
|
216
|
+
print("未能搬起来目标箱子,退出策略。")
|
|
217
|
+
return False
|
|
218
|
+
|
|
219
|
+
## 在这里添加键盘事件,按特定按键才能继续
|
|
220
|
+
print("======================================================")
|
|
221
|
+
if user_input:
|
|
222
|
+
input("准备寻找放置地点,按回车键继续... \n")
|
|
223
|
+
|
|
224
|
+
# 4. -------------------- 尋找放置地點 --------------------
|
|
225
|
+
|
|
226
|
+
success, target_tag = search_tag_with_head(
|
|
227
|
+
robot_sdk=robot_sdk,
|
|
228
|
+
walk_event=walk_event,
|
|
229
|
+
head_event=head_event,
|
|
230
|
+
percep_event=percep_event,
|
|
231
|
+
|
|
232
|
+
init_tag_guess=Tag(
|
|
233
|
+
id=config.place.tag_id, # 假设目标箱子的ID为1
|
|
234
|
+
pose=Pose.from_euler(
|
|
235
|
+
pos=config.place.tag_pos_world, # 初始位置猜测,单位米
|
|
236
|
+
euler=config.place.tag_euler_world, # 初始姿态猜测,单位四元数
|
|
237
|
+
frame=Frame.ODOM, # 使用里程计坐标系
|
|
238
|
+
degrees=False
|
|
239
|
+
)
|
|
240
|
+
),
|
|
241
|
+
|
|
242
|
+
head_search_yaws=config.common.head_search_yaws, # 头部搜索的偏航角度范围,单位度
|
|
243
|
+
head_search_pitchs=config.common.head_search_pitchs, # 头部搜索的俯仰角度范围,单位度
|
|
244
|
+
enable_head_tracking=config.common.enable_head_tracking, # 是否启用头部追踪
|
|
245
|
+
rotate_body=config.common.rotate_body, # 是否允许身体旋转以寻找目标
|
|
246
|
+
walk_use_cmd_vel=config.common.walk_use_cmd_vel
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
if not success:
|
|
250
|
+
print("未能找到目标箱子,退出策略。")
|
|
251
|
+
return False
|
|
252
|
+
|
|
253
|
+
## 在这里添加键盘事件,按特定按键才能继续
|
|
254
|
+
print("======================================================")
|
|
255
|
+
print(f"找到目标Tag,ID: {target_tag.id}, 位置: {target_tag.pose}")
|
|
256
|
+
if user_input:
|
|
257
|
+
input("准备接近放置Tag,按回车键继续... \n")
|
|
258
|
+
|
|
259
|
+
# 5. -------------------- 走路接近放置位置 --------------------
|
|
260
|
+
|
|
261
|
+
success, latest_tag = walk_approach_target_with_perception_loop(
|
|
262
|
+
walk_event=walk_event,
|
|
263
|
+
percep_event=percep_event,
|
|
264
|
+
tag=target_tag,
|
|
265
|
+
stand_pose_in_tag=Pose.from_euler(
|
|
266
|
+
pos=config.place.stand_in_tag_pos, # 站立位置在目标标签中的位置猜测,单位米
|
|
267
|
+
euler=config.place.stand_in_tag_euler, # 站立位置在目标标签中的姿态猜测,单位欧拉角(弧度)
|
|
268
|
+
frame=Frame.TAG, # 使用标签坐标系
|
|
269
|
+
degrees=False
|
|
270
|
+
),
|
|
271
|
+
enable_percep_when_walking=config.common.enable_percep_when_walking,
|
|
272
|
+
walk_use_cmd_vel=config.common.walk_use_cmd_vel
|
|
273
|
+
)
|
|
274
|
+
|
|
275
|
+
if not success:
|
|
276
|
+
print("未能接近目标地点,退出策略。")
|
|
277
|
+
return False
|
|
278
|
+
|
|
279
|
+
## 在这里添加键盘事件,按特定按键才能继续
|
|
280
|
+
print("======================================================")
|
|
281
|
+
print(f"已接近目标Tag,ID: {latest_tag.id}, 位置: {latest_tag.pose}")
|
|
282
|
+
if user_input:
|
|
283
|
+
input("准备放框,按回车键继续... \n")
|
|
284
|
+
|
|
285
|
+
# 6. -------------------- 放下箱子并向后平移 --------------------
|
|
286
|
+
success = place_box_and_backward(
|
|
287
|
+
walk_event=walk_event,
|
|
288
|
+
arm_event=arm_event,
|
|
289
|
+
box_width=config.common.box_width,
|
|
290
|
+
box_behind_tag=config.place.box_behind_tag, # 箱子在tag后面的距离,单位米
|
|
291
|
+
box_beneath_tag=config.place.box_beneath_tag, # 箱子在tag下方的距离,单位米
|
|
292
|
+
box_left_tag=config.place.box_left_tag, # 箱子在tag左侧的距离,单位米
|
|
293
|
+
tag=latest_tag,
|
|
294
|
+
step_back_distance=config.common.step_back_distance, # 搬起后向后平移的距离,单位米
|
|
295
|
+
|
|
296
|
+
box_mass=config.common.box_mass, # 假设箱子质量,单位kg,用来计算纵向wrench
|
|
297
|
+
force_ratio_z=config.place.force_ratio_z, # 经验系数(根据1.5kg对应5N得出:5/(1.5*9.8)≈0.34
|
|
298
|
+
lateral_force=config.place.lateral_force, # 侧向夹持力,单位N,
|
|
299
|
+
walk_use_cmd_vel=config.common.walk_use_cmd_vel
|
|
300
|
+
)
|
|
301
|
+
|
|
302
|
+
if not success:
|
|
303
|
+
print("未能放下目标箱子,退出策略。")
|
|
304
|
+
return False
|
|
305
|
+
|
|
306
|
+
## 在这里添加键盘事件,按特定按键才能继续
|
|
307
|
+
print("======================================================")
|
|
308
|
+
if user_input:
|
|
309
|
+
input("准备回到初始位置,按回车键继续...\n")
|
|
310
|
+
|
|
311
|
+
# end. -------------------- 回到初始位置 --------------------
|
|
312
|
+
# success = return_to_idle(
|
|
313
|
+
# walk_event=walk_event,
|
|
314
|
+
# )
|
|
315
|
+
|
|
316
|
+
# if not success:
|
|
317
|
+
# print("未能回到初始位置,退出策略。")
|
|
318
|
+
# return False
|
|
319
|
+
return True
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
if __name__ == "__main__":
|
|
323
|
+
for eps in range(10):
|
|
324
|
+
print(f"### 案例开始: {eps} ###")
|
|
325
|
+
res = grab_one_box(user_input=True)
|
|
326
|
+
print(f"### 案例结束: {eps} ###")
|
|
327
|
+
|
|
328
|
+
if not res:
|
|
329
|
+
break
|
|
330
|
+
|
|
331
|
+
# test_arm_only()
|