kuavo-humanoid-sdk 1.1.3a1252__py3-none-any.whl → 1.1.6__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/interfaces/data_types.py +0 -46
- kuavo_humanoid_sdk/kuavo/__init__.py +0 -3
- kuavo_humanoid_sdk/kuavo/core/core.py +6 -18
- kuavo_humanoid_sdk/kuavo/core/ros/control.py +19 -645
- kuavo_humanoid_sdk/kuavo/core/ros/param.py +4 -142
- kuavo_humanoid_sdk/kuavo/core/ros/state.py +15 -329
- kuavo_humanoid_sdk/kuavo/core/ros_env.py +1 -229
- kuavo_humanoid_sdk/kuavo/dexterous_hand.py +2 -6
- kuavo_humanoid_sdk/kuavo/leju_claw.py +2 -6
- kuavo_humanoid_sdk/kuavo/robot.py +22 -43
- kuavo_humanoid_sdk/kuavo/robot_info.py +2 -7
- kuavo_humanoid_sdk/kuavo/robot_state.py +2 -6
- kuavo_humanoid_sdk/msg/kuavo_msgs/msg/__init__.py +0 -7
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/__init__.py +0 -4
- kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_playmusic.py +20 -26
- kuavo_humanoid_sdk/msg/motion_capture_ik/msg/__init__.py +9 -0
- kuavo_humanoid_sdk/msg/{kuavo_msgs → motion_capture_ik}/msg/_armHandPose.py +2 -2
- kuavo_humanoid_sdk/msg/{kuavo_msgs → motion_capture_ik}/msg/_handPose.py +2 -2
- kuavo_humanoid_sdk/msg/motion_capture_ik/msg/_headBodyPose.py +145 -0
- kuavo_humanoid_sdk/msg/{kuavo_msgs → motion_capture_ik}/msg/_ikSolveError.py +13 -13
- kuavo_humanoid_sdk/msg/{kuavo_msgs → motion_capture_ik}/msg/_ikSolveParam.py +2 -2
- kuavo_humanoid_sdk/msg/{kuavo_msgs → motion_capture_ik}/msg/_robotArmQVVD.py +2 -2
- kuavo_humanoid_sdk/msg/motion_capture_ik/msg/_robotHandPosition.py +225 -0
- kuavo_humanoid_sdk/msg/{kuavo_msgs → motion_capture_ik}/msg/_twoArmHandPose.py +13 -13
- kuavo_humanoid_sdk/msg/{kuavo_msgs → motion_capture_ik}/msg/_twoArmHandPoseCmd.py +15 -15
- kuavo_humanoid_sdk/msg/motion_capture_ik/srv/__init__.py +4 -0
- kuavo_humanoid_sdk/msg/{kuavo_msgs/srv/_SpeechSynthesis.py → motion_capture_ik/srv/_changeArmCtrlMode.py} +98 -93
- kuavo_humanoid_sdk/msg/{kuavo_msgs → motion_capture_ik}/srv/_changeArmCtrlModeKuavo.py +5 -5
- kuavo_humanoid_sdk/msg/{kuavo_msgs → motion_capture_ik}/srv/_fkSrv.py +13 -13
- kuavo_humanoid_sdk/msg/{kuavo_msgs → motion_capture_ik}/srv/_twoArmHandPoseCmdSrv.py +23 -23
- {kuavo_humanoid_sdk-1.1.3a1252.dist-info → kuavo_humanoid_sdk-1.1.6.dist-info}/METADATA +1 -2
- {kuavo_humanoid_sdk-1.1.3a1252.dist-info → kuavo_humanoid_sdk-1.1.6.dist-info}/RECORD +34 -39
- kuavo_humanoid_sdk/common/global_config.py +0 -16
- kuavo_humanoid_sdk/common/websocket_kuavo_sdk.py +0 -23
- kuavo_humanoid_sdk/kuavo/core/audio.py +0 -36
- kuavo_humanoid_sdk/kuavo/core/ros/audio.py +0 -176
- kuavo_humanoid_sdk/kuavo/core/ros/tools.py +0 -158
- kuavo_humanoid_sdk/kuavo/core/ros/vision.py +0 -522
- kuavo_humanoid_sdk/kuavo/robot_audio.py +0 -39
- kuavo_humanoid_sdk/kuavo/robot_tool.py +0 -62
- kuavo_humanoid_sdk/kuavo/robot_vision.py +0 -90
- {kuavo_humanoid_sdk-1.1.3a1252.dist-info → kuavo_humanoid_sdk-1.1.6.dist-info}/WHEEL +0 -0
- {kuavo_humanoid_sdk-1.1.3a1252.dist-info → kuavo_humanoid_sdk-1.1.6.dist-info}/top_level.txt +0 -0
|
@@ -1,42 +1,32 @@
|
|
|
1
1
|
kuavo_humanoid_sdk/__init__.py,sha256=pdgXhpulXKUcdUPwDVFZCe47AZAkOJdh_YAM8f3g2Ek,141
|
|
2
|
-
kuavo_humanoid_sdk/common/global_config.py,sha256=2iDGXEwjmfc9MQ4jYOYxFyTB_BnLIxf6HYent5dS4gA,315
|
|
3
2
|
kuavo_humanoid_sdk/common/logger.py,sha256=nSIbsJaW4nDcaQdhZebZkjtji6kmWVR8tYO-sUTz3Gg,1246
|
|
4
|
-
kuavo_humanoid_sdk/common/websocket_kuavo_sdk.py,sha256=lfilfXYdZFTasjRudHb_Xc89ah44jWljpQTozVSABGU,675
|
|
5
3
|
kuavo_humanoid_sdk/interfaces/__init__.py,sha256=_zXDinj2T3X7UH19-Xrotc7uYZWHmZqHaMCWU1FYR5I,100
|
|
6
|
-
kuavo_humanoid_sdk/interfaces/data_types.py,sha256=
|
|
4
|
+
kuavo_humanoid_sdk/interfaces/data_types.py,sha256=TCCVE0gmbw6KzCJKCzVCiG5yUl2IY-uIjHO5RKs0y2o,5281
|
|
7
5
|
kuavo_humanoid_sdk/interfaces/end_effector.py,sha256=rlvBrYd_-b5-Px_m2UiHn47wuZJwlqVBrGPdV1lu0Qg,1876
|
|
8
6
|
kuavo_humanoid_sdk/interfaces/robot.py,sha256=qqnq7gRc_mK8xEWnF5pJ7AJUPtry1bpN9eDl8nmE3EM,393
|
|
9
7
|
kuavo_humanoid_sdk/interfaces/robot_info.py,sha256=-rh7VXjMJFYTsx7Ktok5VuI6JF_W2BpJBUbqtYJRkkA,1176
|
|
10
|
-
kuavo_humanoid_sdk/kuavo/__init__.py,sha256=
|
|
11
|
-
kuavo_humanoid_sdk/kuavo/dexterous_hand.py,sha256=
|
|
12
|
-
kuavo_humanoid_sdk/kuavo/leju_claw.py,sha256=
|
|
13
|
-
kuavo_humanoid_sdk/kuavo/robot.py,sha256=
|
|
8
|
+
kuavo_humanoid_sdk/kuavo/__init__.py,sha256=O4gPIQALqxUyNqBPCzzme4EfvTbbbh-IWGhLnhnZW_c,291
|
|
9
|
+
kuavo_humanoid_sdk/kuavo/dexterous_hand.py,sha256=S4giIerF44sfMim1Tp-ZwoSbj7aqX3l_sgxNBS-nZRI,8497
|
|
10
|
+
kuavo_humanoid_sdk/kuavo/leju_claw.py,sha256=6GUtQC_APuWzRAQtJFrSMqq9bUg8mI-g2ZBKYbOT4No,10253
|
|
11
|
+
kuavo_humanoid_sdk/kuavo/robot.py,sha256=AiBHuT2uj8n3tOPr0gEWgZO2hCalaeRhANyafAQuu-c,14239
|
|
14
12
|
kuavo_humanoid_sdk/kuavo/robot_arm.py,sha256=qD8oWSlKdxqc739vvM_18dpJgnMzjBbX41xJiyI6VWg,6946
|
|
15
|
-
kuavo_humanoid_sdk/kuavo/robot_audio.py,sha256=Z0ZN0DldOEWL1iLo9wPgGE9m8J_jQuNKq-QkY6H_PhE,1310
|
|
16
13
|
kuavo_humanoid_sdk/kuavo/robot_head.py,sha256=8caHrPNwg98b4jf5cLJUbsGNovgtXetOqBvuG5vWSXA,1526
|
|
17
|
-
kuavo_humanoid_sdk/kuavo/robot_info.py,sha256=
|
|
18
|
-
kuavo_humanoid_sdk/kuavo/robot_state.py,sha256=
|
|
19
|
-
kuavo_humanoid_sdk/kuavo/
|
|
20
|
-
kuavo_humanoid_sdk/kuavo/robot_vision.py,sha256=AxlD3Ckl2GafsNpPNWYUM89653AN1BvWtMi9stdDALE,3156
|
|
21
|
-
kuavo_humanoid_sdk/kuavo/core/audio.py,sha256=lyoYTKkt3ZEnehh1cJenksrkYUrlHBC559r1JmzysR4,1024
|
|
22
|
-
kuavo_humanoid_sdk/kuavo/core/core.py,sha256=VZfyot7BOeUpwJfjHa7_hcKNegdqYqLCEGLBNeb54fc,18676
|
|
14
|
+
kuavo_humanoid_sdk/kuavo/robot_info.py,sha256=SZ0TeI87hc69Oop4CT1PxU7zSauTxJTJe8fcIIr-h6Q,3912
|
|
15
|
+
kuavo_humanoid_sdk/kuavo/robot_state.py,sha256=X9vPmIK1dYBgaKHanfj0kVaUAMqxopBJWmlbOouTIqQ,10873
|
|
16
|
+
kuavo_humanoid_sdk/kuavo/core/core.py,sha256=PTUjGG6ZZaDv6p70OF4iZEA2-D2uIOKT87Xml59Xi5M,17915
|
|
23
17
|
kuavo_humanoid_sdk/kuavo/core/dex_hand_control.py,sha256=51iLPIKMFKeOhc5TpRCMWTm7Aw8pt6XG9XUB-_swr4Y,5158
|
|
24
18
|
kuavo_humanoid_sdk/kuavo/core/leju_claw_control.py,sha256=RCrnWTMW-L0fOMa1op7t43aGWSyMVqrOjR0lVtIFzqY,3432
|
|
25
|
-
kuavo_humanoid_sdk/kuavo/core/ros_env.py,sha256=
|
|
26
|
-
kuavo_humanoid_sdk/kuavo/core/ros/
|
|
27
|
-
kuavo_humanoid_sdk/kuavo/core/ros/
|
|
28
|
-
kuavo_humanoid_sdk/kuavo/core/ros/param.py,sha256=r8Xve8zsfFBBZQnEbLOCNC1YQhv_h-Xv1hHx6gHkQag,11745
|
|
19
|
+
kuavo_humanoid_sdk/kuavo/core/ros_env.py,sha256=Fq7YfHFjVvoUn-jMsrcHB_gUQ4w1y54jUVKtxV7zNEg,9500
|
|
20
|
+
kuavo_humanoid_sdk/kuavo/core/ros/control.py,sha256=8erUTrGEY-JcqT0u_DTLsK5RFzobjjdOcufIn4tPnek,35305
|
|
21
|
+
kuavo_humanoid_sdk/kuavo/core/ros/param.py,sha256=8XtwH6V59n8IX6TtXB5-lTMvBuhrNJqQaoRkbCYyIJc,6760
|
|
29
22
|
kuavo_humanoid_sdk/kuavo/core/ros/sat_utils.py,sha256=AhBNM-s9nVwRiLZ8gtqC2RvPImkT9uulONSLXk3KooI,3317
|
|
30
|
-
kuavo_humanoid_sdk/kuavo/core/ros/state.py,sha256=
|
|
31
|
-
kuavo_humanoid_sdk/kuavo/core/ros/tools.py,sha256=RF9PVvHEfYBuNYyKRbgtLrFrR15kfPTjtcXmZG17Gk4,6142
|
|
32
|
-
kuavo_humanoid_sdk/kuavo/core/ros/vision.py,sha256=0sVTsfvaaLyHJIos7aUpHi_DkxCD0LDw90ZedK8YFGg,20173
|
|
23
|
+
kuavo_humanoid_sdk/kuavo/core/ros/state.py,sha256=tA5250P82MNwvYJ9QGbcNcWm_n2NWKPqD383GAARiAE,18146
|
|
33
24
|
kuavo_humanoid_sdk/msg/__init__.py,sha256=8TElMWrXsBCGxhJBe3mfgtiAlX4LzgQep66TSwMcaDQ,19
|
|
34
25
|
kuavo_humanoid_sdk/msg/kuavo_msgs/__init__.py,sha256=wk-pfWFvAOl475vxWFVTwbJGejP6UKgivUApv8RvK_8,216
|
|
35
26
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_AprilTagDetection.py,sha256=2Iz0kN1w5IqvXFmK-DN14i-9hrtZNSRSWvxr6tSPIlA,11655
|
|
36
27
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_AprilTagDetectionArray.py,sha256=JayCQPuoFsBQ5nyhVuArhePEPW0FjI4T7dEz88tf6Gw,14938
|
|
37
28
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_Metadata.py,sha256=2uZlLK7eQAj72sCHw40s8PHiXpj_u0JqBgAhIGqnsO8,6857
|
|
38
|
-
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/__init__.py,sha256=
|
|
39
|
-
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armHandPose.py,sha256=JFzYudRq0CIBzrOt2XnSw_fR7FgQerC2L6ntkoHu1eM,5522
|
|
29
|
+
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/__init__.py,sha256=xFpeX8iIKqDgMMzM_kYBoKS5KLMhYys5tyiTQD8v8Lk,866
|
|
40
30
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armPoseWithTimeStamp.py,sha256=miPh7Mim4Zp1wEWw3HrvUOr8dlvJGT-DzffjGUT25xE,5806
|
|
41
31
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armTargetPoses.py,sha256=2egR0jL7ZD0-eUIteC5pdrnADgb29KZMNTNnNZPznOY,5032
|
|
42
32
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_dexhandCommand.py,sha256=cxqVA14d_ylCoZwo4wE2zgv6WqlkT7nqIV_OlZqu9dA,7886
|
|
@@ -47,35 +37,26 @@ kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoseTargetTrajectories.py,sha256=weFk
|
|
|
47
37
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_gaitTimeName.py,sha256=4DoUi8RVuUAG4Su3MoeN9iwelYFGT1U626iKjGSNvo8,4827
|
|
48
38
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_gestureInfo.py,sha256=jxX5x4dNNcTmUJuVD49nGWQVr_q-B3X_klygNvMKFIM,7265
|
|
49
39
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_gestureTask.py,sha256=0oPveCGud3VXHoLHlUqLrq1KOYpCinPWZIMFf-n1bGI,5090
|
|
50
|
-
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_handPose.py,sha256=O8R4Efpv8xaVZW-1y-eGxDZGgdlHEzBNcHXbwNr2V54,4352
|
|
51
40
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_headBodyPose.py,sha256=69JZkFZFNT8xpoixu8BMsZ2BU-WkFW4jSBbI9-jnirM,5119
|
|
52
|
-
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_ikSolveError.py,sha256=jR4JrWr1y_VMI7o8mmoQLAJX4ogno2fSTYXswO-xWSc,6876
|
|
53
|
-
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_ikSolveParam.py,sha256=0gxZMJ-izoEAbQmfiZYjLif18EhOGdVV9envbeekCdE,5797
|
|
54
41
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_imuData.py,sha256=mYEOFd-YfsJzOskHPioyycNccC51G3-uCc7o4DwclPU,6412
|
|
55
42
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_jointCmd.py,sha256=ryln-guf6GVWN0uFTWXzhl4mD0IOmAsvMyEIxuVdzls,13421
|
|
56
43
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_jointData.py,sha256=c8UQLJJPXqN0d2_xJeDjKpWNP6ZGCRPUwZ2tlEp2dLU,6974
|
|
57
44
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_lejuClawCommand.py,sha256=9ntVsgjRFVJNIOeLffFrWlwm0gWErwd5mHyB70RUSus,11018
|
|
58
45
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_lejuClawState.py,sha256=2YZdHBEuWh0GhXViMjNROCcZZcw--Zdox69oGG96Gj4,11611
|
|
59
46
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_questJoySticks.py,sha256=OKag_7VEOV5qFUmFmBd-Lr5iIJ_sMfro4Hrb-jsYrGs,9339
|
|
60
|
-
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotArmQVVD.py,sha256=3jlIrYDHkb6eVDZlfPH8nmb0faDbt9qHwEDBtz0ffNo,5755
|
|
61
47
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotHandPosition.py,sha256=BQYNPRNR3TejYhcYTsI7kKRfwKLKGcnKVEHF2yi3_Hw,8153
|
|
62
48
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotHeadMotionData.py,sha256=mL470CWBjPQ8PxSM2MffeSV3Pn2GP3rFaLquT6LtaBo,4265
|
|
63
49
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotState.py,sha256=LHaCkfHg7bkAy-oHkJke7-kC90utZzlloOv1rsd1sj4,7541
|
|
64
50
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_sensorsData.py,sha256=hHAvPSEAdsQ7lvsR9SXHzFGrRp1WNOqewZe5cz2bolU,19022
|
|
65
51
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_switchGaitByName.py,sha256=saXfUf1k8nT0Y5OW7rBxMi9xBdyHYvsZP8EloYgaLZs,6891
|
|
66
52
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_touchSensorStatus.py,sha256=XsZbTNfmD748TPMBlK88XwsX4Lhg7LtGd_hEQ5e_0sA,7227
|
|
67
|
-
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_twoArmHandPose.py,sha256=9rMuid2MzIOdU06lqYzIQp5N8dbgynhbjqHKk9bkZ9c,10174
|
|
68
|
-
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_twoArmHandPoseCmd.py,sha256=w2_0MTnPo7E8ioBcT0YUIvuJr6efxEtYA-szBdPgSlo,13301
|
|
69
53
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_yoloDetection.py,sha256=Sb7W4mZ2WBLHpUBxPUO0MsLnV7NeSByOXBwMfV87Fhw,8701
|
|
70
54
|
kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_yoloOutputData.py,sha256=kXYLnrYTjKU9yopZJ8NgCEtswLy66WWdh6rj05TL2DY,5696
|
|
71
|
-
kuavo_humanoid_sdk/msg/kuavo_msgs/srv/
|
|
72
|
-
kuavo_humanoid_sdk/msg/kuavo_msgs/srv/__init__.py,sha256=Bq0R5aGfs7iin3vv_hqxdnoB9_YcCZXorcwO2CY_DZY,667
|
|
55
|
+
kuavo_humanoid_sdk/msg/kuavo_msgs/srv/__init__.py,sha256=FFX0pxPEjltERtadS5ud2-UWn8z41yz2eY8hq23Sl9w,537
|
|
73
56
|
kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_changeArmCtrlMode.py,sha256=OI312Z4IOywRn_9ckHmc89eFbBGRpIO9crRz_zlYKIk,9159
|
|
74
|
-
kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_changeArmCtrlModeKuavo.py,sha256=l1t3VqPbn2nVFuPnOHuiLjAUcz08zH1y7R0PO10Lo9E,8040
|
|
75
57
|
kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_changeTorsoCtrlMode.py,sha256=2_CTVtEgaFUaODV8VyTZA0Z6El3hiDcYrBPP9hstnLs,9206
|
|
76
58
|
kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_controlLejuClaw.py,sha256=jSK0OY6JRqPxiCtEGSBnibwc-5sk-JLaP7UOMZTcdJ8,13582
|
|
77
59
|
kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_enableHandTouchSensor.py,sha256=yfutLxkhL5sFJToLNQSEd6dM2dSXgLEOCt4lv8Fkoj4,9881
|
|
78
|
-
kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_fkSrv.py,sha256=oQ8mc0mTDd-qcD5ZFpr_6BNsdj5wMAXm0vN2rzb2q68,14783
|
|
79
60
|
kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_footPoseTargetTrajectoriesSrv.py,sha256=WzvTdNpizYi5_1iREOiwGyOnpv6XVFo5Vt-7YvC0fEg,12371
|
|
80
61
|
kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_gestureExecute.py,sha256=I6-Ohq1fQg3KjI7GWm0eEB1FGaSFwR0wGUYw_i4WPqM,11602
|
|
81
62
|
kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_gestureExecuteState.py,sha256=ChmcjaxNf5ED9o7JE3z_UcSaaGC6tKixvitz7eQEs3I,8717
|
|
@@ -83,13 +64,27 @@ kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_gestureList.py,sha256=Y51SV-xBTW9Rk6jAKam
|
|
|
83
64
|
kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_getCurrentGaitName.py,sha256=50CyEUJseck7b9lopj-3ihxUSy62Mn5PwgbLHCqjuOs,8429
|
|
84
65
|
kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_handForceLevel.py,sha256=YVhwt3RCVdYna6UEKV4oA81aydcPE7ilmVrHetcw-ew,10796
|
|
85
66
|
kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_jointMoveTo.py,sha256=CHM0sooP3GoIvphVn3lut0fWtjuIwgz9DYd6oJ3XCz4,9984
|
|
86
|
-
kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_playmusic.py,sha256=
|
|
67
|
+
kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_playmusic.py,sha256=2OhWGB_QWfzo80IwfNZrFD3W4wd6nWuawru2BO1mwIg,8913
|
|
87
68
|
kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_setHwIntialState.py,sha256=0_GWZCBfmthlwVuYOZLzFMUgjIymL8BxtW6_3ZzSqAE,10204
|
|
88
69
|
kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_setMotorEncoderRoundService.py,sha256=E6A81oVoNeBTc5jDbsCMTM0TLnGvsvoo0JVtwk8cmNA,9815
|
|
89
70
|
kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_setTagId.py,sha256=edQqsBm-LvmT0s55UQ-qVEvqaiGFOBmwF8ox95xcyPY,8970
|
|
90
71
|
kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_singleStepControl.py,sha256=yfCfwqP7H9KJ5GnzTiwpiB0NrczFXkON76i7SRk9eV8,13279
|
|
91
|
-
kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_twoArmHandPoseCmdSrv.py,sha256=U4v52v6Fegii9uvmTLDhbRjfHKh0mhkzj2p6NPb9cqM,28914
|
|
92
72
|
kuavo_humanoid_sdk/msg/motion_capture_ik/__init__.py,sha256=wk-pfWFvAOl475vxWFVTwbJGejP6UKgivUApv8RvK_8,216
|
|
73
|
+
kuavo_humanoid_sdk/msg/motion_capture_ik/msg/__init__.py,sha256=MFFzlDRPEqO2XS-G9QcFFAsOM3h-sschYUfef9rpszQ,268
|
|
74
|
+
kuavo_humanoid_sdk/msg/motion_capture_ik/msg/_armHandPose.py,sha256=OPm4KqKpzTqtF-q-UTGsyWTNLH4PEwezSjuOqadoK54,5536
|
|
75
|
+
kuavo_humanoid_sdk/msg/motion_capture_ik/msg/_handPose.py,sha256=vPMztL544qsUYHbk2KYWLYnNTlVcMY4m01MYxUortLE,4366
|
|
76
|
+
kuavo_humanoid_sdk/msg/motion_capture_ik/msg/_headBodyPose.py,sha256=Sa8mOVMeH9PIM6LS3kKfP-BaFqILTTXxtAJLpY7FyEo,5133
|
|
77
|
+
kuavo_humanoid_sdk/msg/motion_capture_ik/msg/_ikSolveError.py,sha256=DBqZp_nMRB0fwlP4V2-nHkJwkLwbNn-LNcZtMuN58EI,6974
|
|
78
|
+
kuavo_humanoid_sdk/msg/motion_capture_ik/msg/_ikSolveParam.py,sha256=bola3i-GY-k-OhDbd8NNrs9ASaQlbdMtmU2iaD_jKP8,5811
|
|
79
|
+
kuavo_humanoid_sdk/msg/motion_capture_ik/msg/_robotArmQVVD.py,sha256=4fBamid058UyM-P-czvMFA5_LFlJ0coX9UeRKk5kmeY,5769
|
|
80
|
+
kuavo_humanoid_sdk/msg/motion_capture_ik/msg/_robotHandPosition.py,sha256=swzoPp-dA4VeMLvRHnX1KfPWIYzrorcpmJh3UNEANU0,8167
|
|
81
|
+
kuavo_humanoid_sdk/msg/motion_capture_ik/msg/_twoArmHandPose.py,sha256=PJJDAlLrDseRfLfVB5sqVIDmtciMybBEg1hp9TEEV-E,10272
|
|
82
|
+
kuavo_humanoid_sdk/msg/motion_capture_ik/msg/_twoArmHandPoseCmd.py,sha256=6tU3Bx9Bn_LMvnXci4s2kGX5E3-Nfvi_LE71bzI6XXE,13413
|
|
83
|
+
kuavo_humanoid_sdk/msg/motion_capture_ik/srv/__init__.py,sha256=Agetxi8Og-gpF9PkD4uI_TweIMB_iHl_KD8fPfrcWt4,132
|
|
84
|
+
kuavo_humanoid_sdk/msg/motion_capture_ik/srv/_changeArmCtrlMode.py,sha256=NwNn72dD8Eviyy-o61Os7QPnGX1GpQPG_XMkBX1pOQo,9194
|
|
85
|
+
kuavo_humanoid_sdk/msg/motion_capture_ik/srv/_changeArmCtrlModeKuavo.py,sha256=JHs_gLWgYVnbSZltl5LTlxkagnqQRnS9q-MTw-xltX4,8075
|
|
86
|
+
kuavo_humanoid_sdk/msg/motion_capture_ik/srv/_fkSrv.py,sha256=ZBsAFPF36XAJP0fDebc1bRMUm1GRSjSGLBDxgxL1KkE,14874
|
|
87
|
+
kuavo_humanoid_sdk/msg/motion_capture_ik/srv/_twoArmHandPoseCmdSrv.py,sha256=lXLo2tJPJzJUwKhz1kzeVBJ7SPImTzET68yERLiZUwA,29075
|
|
93
88
|
kuavo_humanoid_sdk/msg/ocs2_msgs/__init__.py,sha256=wk-pfWFvAOl475vxWFVTwbJGejP6UKgivUApv8RvK_8,216
|
|
94
89
|
kuavo_humanoid_sdk/msg/ocs2_msgs/msg/__init__.py,sha256=dJBWOS_viXh9umNB2pGUPdSFm9h8ySMOqtIop--PGss,388
|
|
95
90
|
kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_constraint.py,sha256=Fl-vdxvT6FPxWoSpPIw0Jt-anEsYsY1wFiiNMgmwsRA,4621
|
|
@@ -106,7 +101,7 @@ kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_target_trajectories.py,sha256=c8l2__Lu
|
|
|
106
101
|
kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_multiplier.py,sha256=UY0klrLwiuQeEOxBXGrLdivCOhI3HsHUbi5uX7nsT8g,4895
|
|
107
102
|
kuavo_humanoid_sdk/msg/ocs2_msgs/srv/__init__.py,sha256=LaBHLkXuxdf1Z6BCqgWQC2F9yUNSDYC_iQp6NMYAnjQ,22
|
|
108
103
|
kuavo_humanoid_sdk/msg/ocs2_msgs/srv/_reset.py,sha256=KtnylmS0VOjVfa3lldprbhZl04wU3ng5v94jghu3dYU,13379
|
|
109
|
-
kuavo_humanoid_sdk-1.1.
|
|
110
|
-
kuavo_humanoid_sdk-1.1.
|
|
111
|
-
kuavo_humanoid_sdk-1.1.
|
|
112
|
-
kuavo_humanoid_sdk-1.1.
|
|
104
|
+
kuavo_humanoid_sdk-1.1.6.dist-info/METADATA,sha256=H9zTiNKHHFCuubg6XDAQlZJtvfrWBByYD3zVsO-x8TI,10802
|
|
105
|
+
kuavo_humanoid_sdk-1.1.6.dist-info/WHEEL,sha256=g4nMs7d-Xl9-xC9XovUrsDHGXt-FT0E17Yqo92DEfvY,92
|
|
106
|
+
kuavo_humanoid_sdk-1.1.6.dist-info/top_level.txt,sha256=9uSyZoiOEykRMOf0Gm-N9mkyQQg9yOSimfsb632G99c,19
|
|
107
|
+
kuavo_humanoid_sdk-1.1.6.dist-info/RECORD,,
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
class GlobalConfig:
|
|
3
|
-
|
|
4
|
-
_instance = None
|
|
5
|
-
|
|
6
|
-
use_websocket = False
|
|
7
|
-
websocket_host = '127.0.0.1'
|
|
8
|
-
websocket_port = 9090
|
|
9
|
-
websocket_timeout = 5.0
|
|
10
|
-
|
|
11
|
-
def __new__(cls, *args, **kwargs):
|
|
12
|
-
if cls._instance is None:
|
|
13
|
-
cls._instance = super().__new__(cls)
|
|
14
|
-
return cls._instance
|
|
15
|
-
|
|
16
|
-
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import roslibpy
|
|
2
|
-
from kuavo_humanoid_sdk.common.global_config import GlobalConfig
|
|
3
|
-
|
|
4
|
-
class WebSocketKuavoSDK:
|
|
5
|
-
|
|
6
|
-
_instance = None
|
|
7
|
-
_initialized = False
|
|
8
|
-
|
|
9
|
-
def __new__(cls, *args, **kwargs):
|
|
10
|
-
if cls._instance is None:
|
|
11
|
-
cls._instance = super().__new__(cls)
|
|
12
|
-
return cls._instance
|
|
13
|
-
|
|
14
|
-
def __init__(self):
|
|
15
|
-
if not self._initialized:
|
|
16
|
-
self._initialized = True
|
|
17
|
-
self.client = roslibpy.Ros(host=GlobalConfig.websocket_host, port=GlobalConfig.websocket_port)
|
|
18
|
-
self.client.run(timeout=GlobalConfig.websocket_timeout)
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
def __del__(self):
|
|
22
|
-
self.client.terminate()
|
|
23
|
-
self.instance = None
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import time
|
|
2
|
-
import math
|
|
3
|
-
import threading
|
|
4
|
-
import numpy as np
|
|
5
|
-
from typing import Tuple
|
|
6
|
-
from transitions import Machine, State
|
|
7
|
-
|
|
8
|
-
from kuavo_humanoid_sdk.common.logger import SDKLogger
|
|
9
|
-
from kuavo_humanoid_sdk.common.global_config import GlobalConfig
|
|
10
|
-
from kuavo_humanoid_sdk.kuavo.core.ros.audio import Audio, AudioWebsocket
|
|
11
|
-
|
|
12
|
-
class KuavoRobotAudioCore:
|
|
13
|
-
def __init__(self):
|
|
14
|
-
if GlobalConfig.use_websocket:
|
|
15
|
-
self.robot_audio = AudioWebsocket()
|
|
16
|
-
else:
|
|
17
|
-
self.robot_audio = Audio()
|
|
18
|
-
|
|
19
|
-
def play_audio(self, music_number: str, volume: float = 0.5, speed: float = 1.0) -> bool:
|
|
20
|
-
"""
|
|
21
|
-
play music
|
|
22
|
-
"""
|
|
23
|
-
return self.robot_audio.play_audio(music_number, volume, speed)
|
|
24
|
-
|
|
25
|
-
def stop_music(self) -> bool:
|
|
26
|
-
"""
|
|
27
|
-
stop music
|
|
28
|
-
"""
|
|
29
|
-
return self.robot_audio.stop_audio()
|
|
30
|
-
|
|
31
|
-
def text_to_speech(self, text: str, volume: float = 0.5) -> bool:
|
|
32
|
-
"""
|
|
33
|
-
text to speech
|
|
34
|
-
"""
|
|
35
|
-
return self.robot_audio.text_to_speech(text, volume)
|
|
36
|
-
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# coding: utf-8
|
|
3
|
-
from kuavo_humanoid_sdk.common.logger import SDKLogger
|
|
4
|
-
from kuavo_humanoid_sdk.kuavo.core.core import KuavoRobotCore
|
|
5
|
-
from kuavo_humanoid_sdk.common.websocket_kuavo_sdk import WebSocketKuavoSDK
|
|
6
|
-
import roslibpy
|
|
7
|
-
|
|
8
|
-
try:
|
|
9
|
-
import rospy
|
|
10
|
-
from std_msgs.msg import Bool
|
|
11
|
-
from kuavo_humanoid_sdk.msg.kuavo_msgs.srv import playmusic, playmusicRequest
|
|
12
|
-
from kuavo_humanoid_sdk.msg.kuavo_msgs.srv import SpeechSynthesis, SpeechSynthesisRequest
|
|
13
|
-
except:
|
|
14
|
-
pass
|
|
15
|
-
|
|
16
|
-
class Audio:
|
|
17
|
-
"""Audio system interface for controlling audio playback functionality of Kuavo humanoid robot.
|
|
18
|
-
|
|
19
|
-
Provides functionality to play music files.
|
|
20
|
-
"""
|
|
21
|
-
|
|
22
|
-
def __init__(self):
|
|
23
|
-
"""Initialize the audio system."""
|
|
24
|
-
self._audio_stop_publisher = rospy.Publisher('stop_music', Bool, queue_size=10)
|
|
25
|
-
rospy.sleep(0.5) # Wait for publisher initialization
|
|
26
|
-
def play_audio(self, file_name: str,volume: float = 0.5,speed: float = 1.0) -> bool:
|
|
27
|
-
"""Play the specified audio file.
|
|
28
|
-
|
|
29
|
-
Args:
|
|
30
|
-
file_name (str): Name of the audio file to play
|
|
31
|
-
|
|
32
|
-
Returns:
|
|
33
|
-
bool: True if the play request was successfully sent, False otherwise
|
|
34
|
-
"""
|
|
35
|
-
try:
|
|
36
|
-
# Wait for service availability
|
|
37
|
-
rospy.wait_for_service('play_music', timeout=2.0)
|
|
38
|
-
# Create service client
|
|
39
|
-
play_music_service = rospy.ServiceProxy('play_music', playmusic)
|
|
40
|
-
# Call service
|
|
41
|
-
request = playmusicRequest()
|
|
42
|
-
request.music_number = file_name
|
|
43
|
-
volume = min(max(volume , 0), 1.0)
|
|
44
|
-
request.volume = volume
|
|
45
|
-
request.speed = speed
|
|
46
|
-
response = play_music_service(request)
|
|
47
|
-
SDKLogger.info(f"[Robot Audio] Requested to play audio file: {file_name}")
|
|
48
|
-
return True
|
|
49
|
-
except rospy.ROSException as e:
|
|
50
|
-
SDKLogger.error(f"[Robot Audio] Audio playback service unavailable: {str(e)}")
|
|
51
|
-
return False
|
|
52
|
-
except Exception as e:
|
|
53
|
-
SDKLogger.error(f"[Robot Audio] Failed to play audio file: {str(e)}")
|
|
54
|
-
return False
|
|
55
|
-
|
|
56
|
-
def stop_audio(self):
|
|
57
|
-
"""Stop the currently playing audio."""
|
|
58
|
-
try:
|
|
59
|
-
msg = Bool()
|
|
60
|
-
msg.data = True
|
|
61
|
-
self._audio_stop_publisher.publish(msg)
|
|
62
|
-
SDKLogger.info("[Robot Audio] Requested to stop audio playback")
|
|
63
|
-
return True
|
|
64
|
-
except Exception as e:
|
|
65
|
-
SDKLogger.error(f"[Robot Audio] Failed to stop audio playback: {str(e)}")
|
|
66
|
-
return False
|
|
67
|
-
|
|
68
|
-
def text_to_speech(self, text: str,volume: float = 0.5) -> bool:
|
|
69
|
-
"""Synthesize and play the specified text.
|
|
70
|
-
|
|
71
|
-
Args:
|
|
72
|
-
text (str): Text to be played
|
|
73
|
-
|
|
74
|
-
Returns:
|
|
75
|
-
bool: True if the play request was successfully sent, False otherwise
|
|
76
|
-
"""
|
|
77
|
-
try:
|
|
78
|
-
# Wait for service availability
|
|
79
|
-
rospy.wait_for_service('play_music', timeout=2.0)
|
|
80
|
-
# Create service client
|
|
81
|
-
play_music_service = rospy.ServiceProxy('speech_synthesis', SpeechSynthesis)
|
|
82
|
-
# Call service
|
|
83
|
-
request = SpeechSynthesisRequest()
|
|
84
|
-
request.data = text
|
|
85
|
-
request.volume = volume
|
|
86
|
-
response = play_music_service(request)
|
|
87
|
-
SDKLogger.info(f"[Robot Audio] Requested to play audio text: {text}")
|
|
88
|
-
return True
|
|
89
|
-
except rospy.ROSException as e:
|
|
90
|
-
SDKLogger.error(f"[Robot Audio] Audio playback service unavailable: {str(e)}")
|
|
91
|
-
return False
|
|
92
|
-
except Exception as e:
|
|
93
|
-
SDKLogger.error(f"[Robot Audio] Failed to play audio text: {str(e)}")
|
|
94
|
-
return False
|
|
95
|
-
|
|
96
|
-
class AudioWebsocket:
|
|
97
|
-
"""WebSocket-based audio system interface for controlling audio playback functionality of Kuavo humanoid robot.
|
|
98
|
-
|
|
99
|
-
Provides functionality to play music files through WebSocket connection.
|
|
100
|
-
"""
|
|
101
|
-
|
|
102
|
-
def __init__(self):
|
|
103
|
-
"""Initialize the WebSocket audio system."""
|
|
104
|
-
websocket = WebSocketKuavoSDK()
|
|
105
|
-
self._audio_stop_publisher = roslibpy.Topic(websocket.client, 'stop_music', 'std_msgs/Bool')
|
|
106
|
-
self._audio_stop_publisher.advertise()
|
|
107
|
-
|
|
108
|
-
def play_audio(self, file_name: str, volume: float = 0.5, speed: float = 1.0) -> bool:
|
|
109
|
-
"""Play the specified audio file through WebSocket.
|
|
110
|
-
|
|
111
|
-
Args:
|
|
112
|
-
file_name (str): Name of the audio file to play
|
|
113
|
-
volume (float): Volume level (0.0 to 1.0)
|
|
114
|
-
speed (float): Playback speed
|
|
115
|
-
|
|
116
|
-
Returns:
|
|
117
|
-
bool: True if the play request was successfully sent, False otherwise
|
|
118
|
-
"""
|
|
119
|
-
try:
|
|
120
|
-
websocket = WebSocketKuavoSDK()
|
|
121
|
-
service = roslibpy.Service(websocket.client, 'play_music', 'kuavo_msgs/playmusic')
|
|
122
|
-
|
|
123
|
-
volume = min(max(volume, 0), 1.0)
|
|
124
|
-
request = {
|
|
125
|
-
"music_number": file_name,
|
|
126
|
-
"volume": volume,
|
|
127
|
-
"speed": speed
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
response = service.call(request)
|
|
131
|
-
SDKLogger.info(f"[Robot Audio] Requested to play audio file: {file_name}")
|
|
132
|
-
return True
|
|
133
|
-
except Exception as e:
|
|
134
|
-
SDKLogger.error(f"[Robot Audio] Failed to play audio file: {str(e)}")
|
|
135
|
-
return False
|
|
136
|
-
|
|
137
|
-
def stop_audio(self) -> bool:
|
|
138
|
-
"""Stop the currently playing audio through WebSocket."""
|
|
139
|
-
try:
|
|
140
|
-
msg = {
|
|
141
|
-
"data": True
|
|
142
|
-
}
|
|
143
|
-
self._audio_stop_publisher.publish(roslibpy.Message(msg))
|
|
144
|
-
SDKLogger.info("[Robot Audio] Requested to stop audio playback")
|
|
145
|
-
return True
|
|
146
|
-
except Exception as e:
|
|
147
|
-
SDKLogger.error(f"[Robot Audio] Failed to stop audio playback: {str(e)}")
|
|
148
|
-
return False
|
|
149
|
-
|
|
150
|
-
def text_to_speech(self, text: str, volume: float = 0.5) -> bool:
|
|
151
|
-
"""Synthesize and play the specified text through WebSocket.
|
|
152
|
-
|
|
153
|
-
Args:
|
|
154
|
-
text (str): Text to be played
|
|
155
|
-
volume (float): Volume level (0.0 to 1.0)
|
|
156
|
-
|
|
157
|
-
Returns:
|
|
158
|
-
bool: True if the play request was successfully sent, False otherwise
|
|
159
|
-
"""
|
|
160
|
-
try:
|
|
161
|
-
websocket = WebSocketKuavoSDK()
|
|
162
|
-
service = roslibpy.Service(websocket.client, 'speech_synthesis', 'kuavo_msgs/SpeechSynthesis')
|
|
163
|
-
|
|
164
|
-
request = {
|
|
165
|
-
"data": text,
|
|
166
|
-
"volume": volume
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
response = service.call(request)
|
|
170
|
-
SDKLogger.info(f"[Robot Audio] Requested to play audio text: {text}")
|
|
171
|
-
return True
|
|
172
|
-
except Exception as e:
|
|
173
|
-
SDKLogger.error(f"[Robot Audio] Failed to play audio text: {str(e)}")
|
|
174
|
-
return False
|
|
175
|
-
|
|
176
|
-
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
#! /usr/bin/env python3
|
|
2
|
-
# coding: utf-8
|
|
3
|
-
|
|
4
|
-
import copy
|
|
5
|
-
import time
|
|
6
|
-
import numpy as np
|
|
7
|
-
from typing import Tuple, Union
|
|
8
|
-
from kuavo_humanoid_sdk.common.logger import SDKLogger
|
|
9
|
-
|
|
10
|
-
try:
|
|
11
|
-
import rospy
|
|
12
|
-
import tf2_ros
|
|
13
|
-
import tf.transformations as tf_trans
|
|
14
|
-
from std_msgs.msg import Float64
|
|
15
|
-
from nav_msgs.msg import Odometry
|
|
16
|
-
from sensor_msgs.msg import JointState
|
|
17
|
-
from kuavo_humanoid_sdk.msg.kuavo_msgs.msg import sensorsData, lejuClawState, gaitTimeName, dexhandTouchState
|
|
18
|
-
from geometry_msgs.msg import TransformStamped
|
|
19
|
-
except ImportError:
|
|
20
|
-
pass
|
|
21
|
-
|
|
22
|
-
from kuavo_humanoid_sdk.interfaces.data_types import (PoseQuaternion, HomogeneousMatrix)
|
|
23
|
-
from kuavo_humanoid_sdk.kuavo.core.ros.param import make_robot_param, EndEffectorType
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
class KuavoRobotToolsCore:
|
|
28
|
-
"""Provides core ROS tools for Kuavo humanoid robot transformations.
|
|
29
|
-
|
|
30
|
-
Attributes:
|
|
31
|
-
tf_buffer (tf2_ros.Buffer): TF2 transform buffer for storing transforms
|
|
32
|
-
tf_listener (tf2_ros.TransformListener): TF2 transform listener
|
|
33
|
-
"""
|
|
34
|
-
|
|
35
|
-
def __init__(self):
|
|
36
|
-
"""Initializes TF2 buffer and listener for coordinate transformations."""
|
|
37
|
-
if not hasattr(self, '_initialized'):
|
|
38
|
-
# 初始化TF2相关组件
|
|
39
|
-
self.tf_buffer = tf2_ros.Buffer(cache_time=rospy.Duration(10))
|
|
40
|
-
self.tf_listener = tf2_ros.TransformListener(self.tf_buffer)
|
|
41
|
-
|
|
42
|
-
def _get_tf_tree_transform(self, target_frame: str, source_frame: str,
|
|
43
|
-
time=0.0, timeout=1.0,
|
|
44
|
-
return_type: str = "pose_quaternion") -> Union[PoseQuaternion, HomogeneousMatrix, None]:
|
|
45
|
-
"""Gets transform between coordinate frames.
|
|
46
|
-
|
|
47
|
-
Args:
|
|
48
|
-
target_frame (str): Target coordinate frame name
|
|
49
|
-
source_frame (str): Source coordinate frame name
|
|
50
|
-
time (rospy.Time, optional): Time of transform. Defaults to latest.
|
|
51
|
-
timeout (float, optional): Wait timeout in seconds. Defaults to 1.0.
|
|
52
|
-
return_type (str, optional): Return data format. Options:
|
|
53
|
-
"pose_quaternion", "homogeneous". Defaults to "pose_quaternion".
|
|
54
|
-
|
|
55
|
-
Returns:
|
|
56
|
-
Union[PoseQuaternion, HomogeneousMatrix, None]: Requested transform data
|
|
57
|
-
or None if failed
|
|
58
|
-
|
|
59
|
-
Raises:
|
|
60
|
-
tf2_ros.LookupException: If transform is not available
|
|
61
|
-
tf2_ros.ConnectivityException: If transform connectivity issue
|
|
62
|
-
tf2_ros.ExtrapolationException: If transform time is out of range
|
|
63
|
-
"""
|
|
64
|
-
time = rospy.Time(time)
|
|
65
|
-
try:
|
|
66
|
-
transform = self.tf_buffer.lookup_transform(
|
|
67
|
-
target_frame,
|
|
68
|
-
source_frame,
|
|
69
|
-
time,
|
|
70
|
-
rospy.Duration(timeout)
|
|
71
|
-
)
|
|
72
|
-
return self._parse_transform(transform.transform, return_type)
|
|
73
|
-
except Exception as e:
|
|
74
|
-
SDKLogger.error(f"Transform error: {str(e)}")
|
|
75
|
-
return None
|
|
76
|
-
|
|
77
|
-
def _parse_transform(self, transform, return_type: str) -> Union[PoseQuaternion, HomogeneousMatrix, None]:
|
|
78
|
-
"""Parses transform data to specified format.
|
|
79
|
-
|
|
80
|
-
Args:
|
|
81
|
-
transform (geometry_msgs/Transform): Input transform data
|
|
82
|
-
return_type (str): Output format type. Valid values:
|
|
83
|
-
"pose_quaternion", "homogeneous"
|
|
84
|
-
|
|
85
|
-
Returns:
|
|
86
|
-
Union[PoseQuaternion, HomogeneousMatrix, None]: Parsed transform data
|
|
87
|
-
in requested format, or None if invalid input
|
|
88
|
-
|
|
89
|
-
Note:
|
|
90
|
-
Falls back to pose_quaternion format if invalid return_type specified
|
|
91
|
-
"""
|
|
92
|
-
if return_type == "pose_quaternion":
|
|
93
|
-
return PoseQuaternion(
|
|
94
|
-
position=(transform.translation.x,
|
|
95
|
-
transform.translation.y,
|
|
96
|
-
transform.translation.z),
|
|
97
|
-
orientation=(transform.rotation.x,
|
|
98
|
-
transform.rotation.y,
|
|
99
|
-
transform.rotation.z,
|
|
100
|
-
transform.rotation.w)
|
|
101
|
-
)
|
|
102
|
-
elif return_type == "homogeneous":
|
|
103
|
-
return HomogeneousMatrix(
|
|
104
|
-
matrix=self._transform_to_homogeneous(transform)
|
|
105
|
-
)
|
|
106
|
-
else:
|
|
107
|
-
SDKLogger.warn(f"Invalid return_type: {return_type}, using default(pose_quaternion)")
|
|
108
|
-
return self._parse_transform(transform, "pose_quaternion")
|
|
109
|
-
|
|
110
|
-
def _transform_to_homogeneous(self, transform) -> np.ndarray:
|
|
111
|
-
"""Converts geometry_msgs/Transform to homogeneous matrix.
|
|
112
|
-
|
|
113
|
-
Args:
|
|
114
|
-
transform (geometry_msgs/Transform): Input transform message
|
|
115
|
-
|
|
116
|
-
Returns:
|
|
117
|
-
np.ndarray: 4x4 homogeneous transformation matrix (numpy.float32)
|
|
118
|
-
|
|
119
|
-
Example:
|
|
120
|
-
>>> matrix = _transform_to_homogeneous(transform_msg)
|
|
121
|
-
>>> print(matrix.shape)
|
|
122
|
-
(4, 4)
|
|
123
|
-
"""
|
|
124
|
-
# 四元数转旋转矩阵
|
|
125
|
-
rotation = [
|
|
126
|
-
transform.rotation.x,
|
|
127
|
-
transform.rotation.y,
|
|
128
|
-
transform.rotation.z,
|
|
129
|
-
transform.rotation.w
|
|
130
|
-
]
|
|
131
|
-
rot_matrix = tf_trans.quaternion_matrix(rotation)
|
|
132
|
-
|
|
133
|
-
# 设置平移分量
|
|
134
|
-
translation = [
|
|
135
|
-
transform.translation.x,
|
|
136
|
-
transform.translation.y,
|
|
137
|
-
transform.translation.z
|
|
138
|
-
]
|
|
139
|
-
rot_matrix[:3, 3] = translation
|
|
140
|
-
|
|
141
|
-
return rot_matrix.astype(np.float32) # 确保矩阵数据类型一致
|
|
142
|
-
|
|
143
|
-
# if __name__ == "__main__":
|
|
144
|
-
# robot_tools = KuavoRobotToolsCore()
|
|
145
|
-
# time.sleep(0.1)
|
|
146
|
-
# # 获取位姿信息
|
|
147
|
-
# pose = robot_tools._get_tf_tree_transform("odom", "base_link", return_type="pose_quaternion")
|
|
148
|
-
# print(f"Position: {pose.position}")
|
|
149
|
-
# print(f"Orientation: {pose.orientation}")
|
|
150
|
-
|
|
151
|
-
# # 获取齐次矩阵
|
|
152
|
-
# homogeneous = robot_tools._get_tf_tree_transform("odom", "base_link", return_type="homogeneous")
|
|
153
|
-
# print(f"Transformation matrix:\n{homogeneous.matrix}")
|
|
154
|
-
|
|
155
|
-
# # 矩阵运算示例
|
|
156
|
-
# transform_matrix = homogeneous.matrix
|
|
157
|
-
# inverse_matrix = np.linalg.inv(transform_matrix) # 求逆变换
|
|
158
|
-
# print(f"Inverse matrix:\n{inverse_matrix}")
|