kuavo-humanoid-sdk 1.2.1b3279__tar.gz → 1.2.1b3290__tar.gz
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.
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/PKG-INFO +1 -1
- kuavo_humanoid_sdk-1.2.1b3290/kuavo_humanoid_sdk/kuavo/core/ros/camera.py +105 -0
- kuavo_humanoid_sdk-1.2.1b3290/kuavo_humanoid_sdk/kuavo/core/sdk_deprecated.py +41 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/robot_arm.py +114 -2
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/robot_blockly.py +39 -47
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/robot_head.py +24 -3
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk.egg-info/PKG-INFO +1 -1
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk.egg-info/SOURCES.txt +2 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/README.md +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/__init__.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/common/logger.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/interfaces/__init__.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/interfaces/data_types.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/interfaces/end_effector.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/interfaces/robot.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/interfaces/robot_info.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/__init__.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/core/audio.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/core/core.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/core/dex_hand_control.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/core/leju_claw_control.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/core/llm_doubao.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/core/microphone.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/core/navigation.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/core/ros/audio.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/core/ros/control.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/core/ros/microphone.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/core/ros/navigation.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/core/ros/observation.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/core/ros/param.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/core/ros/sat_utils.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/core/ros/state.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/core/ros/tools.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/core/ros/vision.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/core/ros_env.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/demo_climbstair.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/dexterous_hand.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/leju_claw.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/logger_client.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/robot.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/robot_audio.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/robot_climbstair.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/robot_info.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/robot_microphone.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/robot_navigation.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/robot_observation.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/robot_speech.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/robot_state.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/robot_tool.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo/robot_vision.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo_strategy/__init__.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo_strategy/grasp_box/grasp_box_strategy.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo_strategy/kuavo_strategy.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo_strategy_v2/common/data_type.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo_strategy_v2/common/events/base_event.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo_strategy_v2/common/robot_sdk.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo_strategy_v2/pick_place_box/case.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo_strategy_v2/pick_place_box/strategy.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo_strategy_v2/utils/logger_setup.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/kuavo_strategy_v2/utils/utils.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/__init__.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/__init__.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_AprilTagDetection.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_AprilTagDetectionArray.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_AudioReceiverData.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_FTsensorData.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_JoySticks.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_Metadata.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_MmDetectionMsg.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_RobotActionState.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_TFArray.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_TaskPoint.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/__init__.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armCollisionCheckInfo.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armHandPose.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armHandPoseFree.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armPoseWithTimeStamp.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_armTargetPoses.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_bezierCurveCubicPoint.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_dexhandCommand.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_dexhandTouchState.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_endEffectorData.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPose.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPose6D.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPose6DTargetTrajectories.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoseTargetTrajectories.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoseWithVision.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoseWithVisionArray.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoses.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_footPoses6D.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_fullBodyTargetTrajectories.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_gaitTimeName.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_gestureInfo.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_gestureTask.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_handPose.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_headBodyPose.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_ikSolveError.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_ikSolveParam.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_imuData.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_jointBezierTrajectory.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_jointCmd.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_jointData.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_kuavoModeSchedule.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_lejuClawCommand.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_lejuClawState.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_motorParam.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_picoPoseInfo.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_picoPoseInfoList.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_planArmState.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_qv.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotArmQVVD.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotBodyMatrices.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotHandPosition.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotHeadMotionData.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_robotState.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_sensorsData.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_switchGaitByName.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_tagDataArray.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_touchSensorStatus.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_twoArmHandPose.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_twoArmHandPoseCmd.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_twoArmHandPoseCmdFree.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_twoArmHandPoseFree.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_yoloDetection.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/msg/_yoloOutputData.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_CreatePath.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_ExecuteArmAction.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_GetAllMaps.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_GetCurrentMap.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_GetTargetPartPoseInCamera.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_InitialPoseWithTaskPoint.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_LoadMap.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_NavigateToTaskPoint.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_RepublishTFs.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_SetInitialPose.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_SetJoyTopic.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_SetLEDMode.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_SetLEDMode_free.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_SpeechSynthesis.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_TaskPointOperation.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/__init__.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_adjustZeroPoint.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_changeArmCtrlMode.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_changeArmCtrlModeKuavo.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_changeMotorParam.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_changeTorsoCtrlMode.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_controlLejuClaw.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_enableHandTouchSensor.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_fkSrv.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_footPose6DTargetTrajectoriesSrv.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_footPoseTargetTrajectoriesSrv.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_gestureExecute.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_gestureExecuteState.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_gestureList.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_getCurrentGaitName.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_getMotorParam.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_getMotorZeroPoints.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_handForceLevel.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_jointMoveTo.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_planArmTrajectoryBezierCurve.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_planArmTrajectoryCubicSpline.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_playmusic.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_setHwIntialState.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_setMmCtrlFrame.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_setMotorEncoderRoundService.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_setTagId.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_singleStepControl.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_twoArmHandPoseCmdFreeSrv.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/kuavo_msgs/srv/_twoArmHandPoseCmdSrv.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/motion_capture_ik/__init__.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/ocs2_msgs/__init__.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/ocs2_msgs/msg/__init__.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_constraint.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_controller_data.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_lagrangian_metrics.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mode_schedule.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_flattened_controller.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_input.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_observation.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_performance_indices.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_solver_data.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_state.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_mpc_target_trajectories.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/ocs2_msgs/msg/_multiplier.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/ocs2_msgs/srv/__init__.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk/msg/ocs2_msgs/srv/_reset.py +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk.egg-info/dependency_links.txt +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk.egg-info/requires.txt +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/kuavo_humanoid_sdk.egg-info/top_level.txt +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/setup.cfg +0 -0
- {kuavo_humanoid_sdk-1.2.1b3279 → kuavo_humanoid_sdk-1.2.1b3290}/setup.py +0 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# coding: utf-8
|
|
3
|
+
import rospy
|
|
4
|
+
from std_msgs.msg import Bool, Int16MultiArray
|
|
5
|
+
from kuavo_humanoid_sdk.common.logger import SDKLogger
|
|
6
|
+
from kuavo_humanoid_sdk.kuavo.core.core import KuavoRobotCore
|
|
7
|
+
from sensor_msgs.msg import Image
|
|
8
|
+
from cv_bridge import CvBridge, CvBridgeError
|
|
9
|
+
from kuavo_msgs.msg import yoloOutputData, yoloDetection
|
|
10
|
+
import threading
|
|
11
|
+
|
|
12
|
+
class CameraROSInterface:
|
|
13
|
+
def __init__(self):
|
|
14
|
+
self.bridge = CvBridge()
|
|
15
|
+
|
|
16
|
+
self.cameras = {
|
|
17
|
+
'head': {
|
|
18
|
+
'topic': '/camera/color/image_raw',
|
|
19
|
+
'pub_topic': '/model_output_data',
|
|
20
|
+
'publisher': None
|
|
21
|
+
},
|
|
22
|
+
'chest': {
|
|
23
|
+
'topic': '/chest_cam',
|
|
24
|
+
'pub_topic': '/chest_detection_data',
|
|
25
|
+
'publisher': None
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
self.cv_image_shape = None
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def init_ros_node(self):
|
|
33
|
+
if not rospy.get_node_uri():
|
|
34
|
+
rospy.init_node('YOLO_detection', anonymous=True)
|
|
35
|
+
|
|
36
|
+
for camera in self.cameras.values():
|
|
37
|
+
camera['publisher'] = rospy.Publisher(
|
|
38
|
+
camera['pub_topic'],
|
|
39
|
+
yoloDetection,
|
|
40
|
+
queue_size=1,
|
|
41
|
+
tcp_nodelay=True
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
def get_camera_image(self, camera):
|
|
45
|
+
if camera not in self.cameras:
|
|
46
|
+
rospy.logerr(f"Unknown camera: {camera}")
|
|
47
|
+
return None
|
|
48
|
+
|
|
49
|
+
try:
|
|
50
|
+
# 使用rospy.wait_for_message()获取一帧图像
|
|
51
|
+
msg = rospy.wait_for_message(self.cameras[camera]['topic'], Image, timeout=1.0)
|
|
52
|
+
cv_image = self.bridge.imgmsg_to_cv2(msg, "bgr8")
|
|
53
|
+
self.cv_image_shape = cv_image.shape
|
|
54
|
+
return cv_image
|
|
55
|
+
except rospy.ROSException as e:
|
|
56
|
+
print(f"Timeout waiting for {camera} camera image: {e}")
|
|
57
|
+
return None
|
|
58
|
+
except CvBridgeError as e:
|
|
59
|
+
rospy.logerr(f"{camera.capitalize()} Camera CvBridge Error: {e}")
|
|
60
|
+
return None
|
|
61
|
+
|
|
62
|
+
def node_spin(self):
|
|
63
|
+
rospy.spin()
|
|
64
|
+
|
|
65
|
+
def node_is_shutdown(self):
|
|
66
|
+
return rospy.is_shutdown()
|
|
67
|
+
|
|
68
|
+
def tensor_to_msg(self, results):
|
|
69
|
+
if not results:
|
|
70
|
+
return None
|
|
71
|
+
else:
|
|
72
|
+
yolo_detections = yoloDetection()
|
|
73
|
+
for result in results:
|
|
74
|
+
boxes = result.boxes.cpu().numpy()
|
|
75
|
+
|
|
76
|
+
xywh = boxes.xywh # center-x(i,0), center-y(i,1), width(i,2), height(i,3)
|
|
77
|
+
class_ids = result.boxes.cls.int().cpu().numpy()
|
|
78
|
+
class_names = [result.names[cls.item()] for cls in result.boxes.cls.int()]
|
|
79
|
+
confs = boxes.conf
|
|
80
|
+
|
|
81
|
+
for i in range(len(xywh)):
|
|
82
|
+
yolo_output_data = yoloOutputData(
|
|
83
|
+
class_name=class_names[i],
|
|
84
|
+
class_id=int(class_ids[i]),
|
|
85
|
+
confidence=confs[i],
|
|
86
|
+
x_pos=xywh[i][0],
|
|
87
|
+
y_pos=xywh[i][1],
|
|
88
|
+
height=xywh[i][2],
|
|
89
|
+
width=xywh[i][3]
|
|
90
|
+
)
|
|
91
|
+
yolo_detections.data.append(yolo_output_data)
|
|
92
|
+
return yolo_detections
|
|
93
|
+
|
|
94
|
+
def publish_results(self, results, camera):
|
|
95
|
+
if not results:
|
|
96
|
+
rospy.loginfo(f"No results to publish for {camera} camera.")
|
|
97
|
+
return
|
|
98
|
+
|
|
99
|
+
if camera not in self.cameras:
|
|
100
|
+
rospy.logerr(f"Unknown camera: {camera}")
|
|
101
|
+
return
|
|
102
|
+
|
|
103
|
+
yolo_detections = self.tensor_to_msg(results)
|
|
104
|
+
if yolo_detections:
|
|
105
|
+
self.cameras[camera]['publisher'].publish(yolo_detections)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import warnings
|
|
2
|
+
from deprecated import deprecated
|
|
3
|
+
|
|
4
|
+
def custom_formatwarning(message, category, filename, lineno, file=None, line=None):
|
|
5
|
+
return f"\033[33mWarning: {filename}:{lineno} - {message}\033[0m\n"
|
|
6
|
+
|
|
7
|
+
warnings.formatwarning = custom_formatwarning
|
|
8
|
+
|
|
9
|
+
def sdk_deprecated(reason=None, version=None, replacement=None, removed_in=None, remove_date=None):
|
|
10
|
+
"""
|
|
11
|
+
SDK专用的弃用装饰器,支持函数和类
|
|
12
|
+
|
|
13
|
+
Args:
|
|
14
|
+
reason (str): 弃用原因
|
|
15
|
+
version (str): 弃用版本
|
|
16
|
+
replacement (str): 替代函数/类名,如果为None则自动生成
|
|
17
|
+
removed_in (str): 将在哪个版本移除
|
|
18
|
+
remove_date (str): 将在哪个日期移除 (格式: YYYY-MM-DD)
|
|
19
|
+
"""
|
|
20
|
+
# 构建reason字符串,包含replacement、removed_in和remove_date信息
|
|
21
|
+
if reason is None:
|
|
22
|
+
reason = ""
|
|
23
|
+
if replacement:
|
|
24
|
+
if reason:
|
|
25
|
+
reason += f",建议使用 {replacement} 替代"
|
|
26
|
+
else:
|
|
27
|
+
reason = f"建议使用 {replacement} 替代"
|
|
28
|
+
if removed_in:
|
|
29
|
+
if reason:
|
|
30
|
+
reason += f",将在版本 {removed_in} 移除"
|
|
31
|
+
else:
|
|
32
|
+
reason = f"将在版本 {removed_in} 移除"
|
|
33
|
+
if remove_date:
|
|
34
|
+
if reason:
|
|
35
|
+
reason += f",预计移除日期: {remove_date}"
|
|
36
|
+
else:
|
|
37
|
+
reason = f"预计移除日期: {remove_date}"
|
|
38
|
+
|
|
39
|
+
# 使用标准的deprecated装饰器
|
|
40
|
+
return deprecated(version=version, reason=reason)
|
|
41
|
+
|
|
@@ -5,38 +5,56 @@ import math
|
|
|
5
5
|
from typing import Tuple
|
|
6
6
|
from kuavo_humanoid_sdk.interfaces.data_types import KuavoArmCtrlMode, KuavoIKParams, KuavoPose, KuavoManipulationMpcFrame, KuavoManipulationMpcCtrlMode, KuavoManipulationMpcControlFlow
|
|
7
7
|
from kuavo_humanoid_sdk.kuavo.core.core import KuavoRobotCore
|
|
8
|
+
from kuavo_humanoid_sdk.kuavo.core.sdk_deprecated import sdk_deprecated
|
|
8
9
|
from kuavo_humanoid_sdk.kuavo.robot_info import KuavoRobotInfo
|
|
9
10
|
|
|
11
|
+
@sdk_deprecated(reason="接口废弃", version="1.2.2", replacement="KuavoRobot", remove_date="2026-06-30")
|
|
10
12
|
class KuavoRobotArm:
|
|
11
13
|
"""Kuavo机器人手臂控制类。
|
|
12
14
|
|
|
13
15
|
提供了控制机器人手臂的各种接口,包括关节位置控制、轨迹控制、末端执行器姿态控制等。
|
|
16
|
+
|
|
17
|
+
.. warning::
|
|
18
|
+
此类已过期废弃,将在 2026-06-30 移除。
|
|
19
|
+
请使用 KuavoRobot 类替代。
|
|
14
20
|
"""
|
|
15
21
|
def __init__(self):
|
|
16
22
|
self._kuavo_core = KuavoRobotCore()
|
|
17
23
|
self._robot_info = KuavoRobotInfo(robot_type="kuavo")
|
|
18
24
|
|
|
25
|
+
@sdk_deprecated(reason="接口废弃", version="1.2.2", replacement="KuavoRobot.arm_reset", remove_date="2026-06-30")
|
|
19
26
|
def arm_reset(self)-> bool:
|
|
20
27
|
"""重置机器人手臂。
|
|
21
28
|
|
|
29
|
+
.. warning::
|
|
30
|
+
此接口已过期废弃,将在 2026-06-30 移除。
|
|
31
|
+
请使用 KuavoRobot.arm_reset() 替代。
|
|
32
|
+
|
|
22
33
|
Returns:
|
|
23
34
|
bool: 重置成功返回True,否则返回False。
|
|
24
35
|
"""
|
|
25
36
|
return self._kuavo_core.robot_arm_reset()
|
|
26
37
|
|
|
38
|
+
@sdk_deprecated(reason="接口废弃", version="1.2.2", replacement="KuavoRobot.manipulation_mpc_reset", remove_date="2026-06-30")
|
|
27
39
|
def manipulation_mpc_reset(self)-> bool:
|
|
28
40
|
"""重置机器人 Manipulation MPC 控制器。
|
|
29
41
|
|
|
42
|
+
.. warning::
|
|
43
|
+
此接口已过期废弃,将在 2026-06-30 移除。
|
|
44
|
+
请使用 KuavoRobot.manipulation_mpc_reset() 替代。
|
|
45
|
+
|
|
30
46
|
Returns:
|
|
31
47
|
bool: 重置成功返回True,否则返回False。
|
|
32
48
|
"""
|
|
33
49
|
return self._kuavo_core.robot_manipulation_mpc_reset()
|
|
34
50
|
|
|
51
|
+
@sdk_deprecated(reason="接口废弃", version="1.2.2", replacement="KuavoRobot.control_arm_joint_trajectory", remove_date="2026-06-30")
|
|
35
52
|
def control_arm_target_poses(self, times: list, q_frames: list) -> bool:
|
|
36
53
|
"""控制机器人手臂目标姿态(已废弃)。
|
|
37
54
|
|
|
38
|
-
..
|
|
39
|
-
|
|
55
|
+
.. warning::
|
|
56
|
+
此接口已过期废弃,将在 2026-06-30 移除。
|
|
57
|
+
请使用 KuavoRobot.control_arm_joint_trajectory() 替代。
|
|
40
58
|
|
|
41
59
|
Args:
|
|
42
60
|
times (list): 时间间隔列表,单位秒
|
|
@@ -63,9 +81,14 @@ class KuavoRobotArm:
|
|
|
63
81
|
q_degs.append([(p * 180.0 / math.pi) for p in q])
|
|
64
82
|
|
|
65
83
|
return self._kuavo_core.control_robot_arm_target_poses(times=times, joint_q=q_degs)
|
|
84
|
+
@sdk_deprecated(reason="接口废弃", version="1.2.2", replacement="KuavoRobot.control_arm_joint_positions", remove_date="2026-06-30")
|
|
66
85
|
def control_arm_joint_positions(self, joint_position:list)->bool:
|
|
67
86
|
"""控制机器人手臂关节位置。
|
|
68
87
|
|
|
88
|
+
.. warning::
|
|
89
|
+
此接口已过期废弃,将在 2026-06-30 移除。
|
|
90
|
+
请使用 KuavoRobot.control_arm_joint_positions() 替代。
|
|
91
|
+
|
|
69
92
|
Args:
|
|
70
93
|
joint_position (list): 关节位置列表,单位为弧度
|
|
71
94
|
|
|
@@ -87,9 +110,14 @@ class KuavoRobotArm:
|
|
|
87
110
|
|
|
88
111
|
return self._kuavo_core.control_robot_arm_joint_positions(joint_data=joint_position)
|
|
89
112
|
|
|
113
|
+
@sdk_deprecated(reason="接口废弃", version="1.2.2", replacement="KuavoRobot.control_arm_joint_trajectory", remove_date="2026-06-30")
|
|
90
114
|
def control_arm_joint_trajectory(self, times:list, joint_q:list)->bool:
|
|
91
115
|
"""控制机器人手臂关节轨迹。
|
|
92
116
|
|
|
117
|
+
.. warning::
|
|
118
|
+
此接口已过期废弃,将在 2026-06-30 移除。
|
|
119
|
+
请使用 KuavoRobot.control_arm_joint_trajectory() 替代。
|
|
120
|
+
|
|
93
121
|
Args:
|
|
94
122
|
times (list): 时间间隔列表,单位为秒
|
|
95
123
|
joint_q (list): 关节位置列表,单位为弧度
|
|
@@ -118,9 +146,14 @@ class KuavoRobotArm:
|
|
|
118
146
|
|
|
119
147
|
return self._kuavo_core.control_robot_arm_joint_trajectory(times=times, joint_q=q_degs)
|
|
120
148
|
|
|
149
|
+
@sdk_deprecated(reason="接口废弃", version="1.2.2", replacement="KuavoRobot.control_robot_end_effector_pose", remove_date="2026-06-30")
|
|
121
150
|
def control_robot_end_effector_pose(self, left_pose: KuavoPose, right_pose: KuavoPose, frame: KuavoManipulationMpcFrame)->bool:
|
|
122
151
|
"""控制机器人末端执行器姿态。
|
|
123
152
|
|
|
153
|
+
.. warning::
|
|
154
|
+
此接口已过期废弃,将在 2026-06-30 移除。
|
|
155
|
+
请使用 KuavoRobot.control_robot_end_effector_pose() 替代。
|
|
156
|
+
|
|
124
157
|
Args:
|
|
125
158
|
left_pose (KuavoPose): 左手臂姿态,包含xyz位置和四元数方向
|
|
126
159
|
right_pose (KuavoPose): 右手臂姿态,包含xyz位置和四元数方向
|
|
@@ -131,22 +164,33 @@ class KuavoRobotArm:
|
|
|
131
164
|
"""
|
|
132
165
|
return self._kuavo_core.control_robot_end_effector_pose(left_pose, right_pose, frame)
|
|
133
166
|
|
|
167
|
+
@sdk_deprecated(reason="接口废弃", version="1.2.2", replacement="KuavoRobot.set_fixed_arm_mode", remove_date="2026-06-30")
|
|
134
168
|
def set_fixed_arm_mode(self) -> bool:
|
|
135
169
|
"""固定/冻结机器人手臂。
|
|
136
170
|
|
|
171
|
+
.. warning::
|
|
172
|
+
此接口已过期废弃,将在 2026-06-30 移除。
|
|
173
|
+
请使用 KuavoRobot.set_fixed_arm_mode() 替代。
|
|
174
|
+
|
|
137
175
|
Returns:
|
|
138
176
|
bool: 固定/冻结成功返回True,否则返回False
|
|
139
177
|
"""
|
|
140
178
|
return self._kuavo_core.change_robot_arm_ctrl_mode(KuavoArmCtrlMode.ArmFixed)
|
|
141
179
|
|
|
180
|
+
@sdk_deprecated(reason="接口废弃", version="1.2.2", replacement="KuavoRobot.set_auto_swing_arm_mode", remove_date="2026-06-30")
|
|
142
181
|
def set_auto_swing_arm_mode(self) -> bool:
|
|
143
182
|
"""设置手臂自动摆动模式。
|
|
144
183
|
|
|
184
|
+
.. warning::
|
|
185
|
+
此接口已过期废弃,将在 2026-06-30 移除。
|
|
186
|
+
请使用 KuavoRobot.set_auto_swing_arm_mode() 替代。
|
|
187
|
+
|
|
145
188
|
Returns:
|
|
146
189
|
bool: 设置成功返回True,否则返回False
|
|
147
190
|
"""
|
|
148
191
|
return self._kuavo_core.change_robot_arm_ctrl_mode(KuavoArmCtrlMode.AutoSwing)
|
|
149
192
|
|
|
193
|
+
@sdk_deprecated(reason="接口废弃", version="1.2.2", replacement="KuavoRobot.arm_ik_free", remove_date="2026-06-30")
|
|
150
194
|
def arm_ik_free(self,
|
|
151
195
|
left_pose: KuavoPose,
|
|
152
196
|
right_pose: KuavoPose,
|
|
@@ -154,41 +198,68 @@ class KuavoRobotArm:
|
|
|
154
198
|
right_elbow_pos_xyz: list = [0.0, 0.0, 0.0],
|
|
155
199
|
arm_q0: list = None,
|
|
156
200
|
params: KuavoIKParams=None) -> list:
|
|
201
|
+
"""机器人手臂自由空间逆向运动学求解
|
|
202
|
+
|
|
203
|
+
.. warning::
|
|
204
|
+
此接口已过期废弃,将在 2026-06-30 移除。
|
|
205
|
+
请使用 KuavoRobot.arm_ik_free() 替代。
|
|
206
|
+
"""
|
|
157
207
|
return self._kuavo_core.arm_ik_free(left_pose, right_pose, left_elbow_pos_xyz, right_elbow_pos_xyz, arm_q0, params)
|
|
158
208
|
|
|
209
|
+
@sdk_deprecated(reason="接口废弃", version="1.2.2", replacement="KuavoRobot.set_external_control_arm_mode", remove_date="2026-06-30")
|
|
159
210
|
def set_external_control_arm_mode(self) -> bool:
|
|
160
211
|
"""设置手臂外部控制模式。
|
|
161
212
|
|
|
213
|
+
.. warning::
|
|
214
|
+
此接口已过期废弃,将在 2026-06-30 移除。
|
|
215
|
+
请使用 KuavoRobot.set_external_control_arm_mode() 替代。
|
|
216
|
+
|
|
162
217
|
Returns:
|
|
163
218
|
bool: 设置成功返回True,否则返回False
|
|
164
219
|
"""
|
|
165
220
|
return self._kuavo_core.change_robot_arm_ctrl_mode(KuavoArmCtrlMode.ExternalControl)
|
|
166
221
|
|
|
222
|
+
@sdk_deprecated(reason="接口废弃", version="1.2.2", replacement="KuavoRobot.set_manipulation_mpc_mode", remove_date="2026-06-30")
|
|
167
223
|
def set_manipulation_mpc_mode(self, ctrl_mode: KuavoManipulationMpcCtrlMode) -> bool:
|
|
168
224
|
"""设置 Manipulation MPC 控制模式。
|
|
169
225
|
|
|
226
|
+
.. warning::
|
|
227
|
+
此接口已过期废弃,将在 2026-06-30 移除。
|
|
228
|
+
请使用 KuavoRobot.set_manipulation_mpc_mode() 替代。
|
|
229
|
+
|
|
170
230
|
Returns:
|
|
171
231
|
bool: 设置成功返回True,否则返回False
|
|
172
232
|
"""
|
|
173
233
|
return self._kuavo_core.change_manipulation_mpc_ctrl_mode(ctrl_mode)
|
|
174
234
|
|
|
235
|
+
@sdk_deprecated(reason="接口废弃", version="1.2.2", replacement="KuavoRobot.set_manipulation_mpc_control_flow", remove_date="2026-06-30")
|
|
175
236
|
def set_manipulation_mpc_control_flow(self, control_flow: KuavoManipulationMpcControlFlow) -> bool:
|
|
176
237
|
"""设置 Manipulation MPC 控制流。
|
|
177
238
|
|
|
239
|
+
.. warning::
|
|
240
|
+
此接口已过期废弃,将在 2026-06-30 移除。
|
|
241
|
+
请使用 KuavoRobot.set_manipulation_mpc_control_flow() 替代。
|
|
242
|
+
|
|
178
243
|
Returns:
|
|
179
244
|
bool: 设置成功返回True,否则返回False
|
|
180
245
|
"""
|
|
181
246
|
return self._kuavo_core.change_manipulation_mpc_control_flow(control_flow)
|
|
182
247
|
|
|
248
|
+
@sdk_deprecated(reason="接口废弃", version="1.2.2", replacement="KuavoRobot.set_manipulation_mpc_frame", remove_date="2026-06-30")
|
|
183
249
|
def set_manipulation_mpc_frame(self, frame: KuavoManipulationMpcFrame) -> bool:
|
|
184
250
|
"""设置 Manipulation MPC 坐标系。
|
|
185
251
|
|
|
252
|
+
.. warning::
|
|
253
|
+
此接口已过期废弃,将在 2026-06-30 移除。
|
|
254
|
+
请使用 KuavoRobot.set_manipulation_mpc_frame() 替代。
|
|
255
|
+
|
|
186
256
|
Returns:
|
|
187
257
|
bool: 设置成功返回True,否则返回False
|
|
188
258
|
"""
|
|
189
259
|
return self._kuavo_core.change_manipulation_mpc_frame(frame)
|
|
190
260
|
|
|
191
261
|
""" 手臂正向运动学和逆向运动学 """
|
|
262
|
+
@sdk_deprecated(reason="接口废弃", version="1.2.2", replacement="KuavoRobot.arm_ik", remove_date="2026-06-30")
|
|
192
263
|
def arm_ik(self,
|
|
193
264
|
left_pose: KuavoPose,
|
|
194
265
|
right_pose: KuavoPose,
|
|
@@ -198,6 +269,10 @@ class KuavoRobotArm:
|
|
|
198
269
|
params: KuavoIKParams=None) -> list:
|
|
199
270
|
"""机器人手臂逆向运动学求解
|
|
200
271
|
|
|
272
|
+
.. warning::
|
|
273
|
+
此接口已过期废弃,将在 2026-06-30 移除。
|
|
274
|
+
请使用 KuavoRobot.arm_ik() 替代。
|
|
275
|
+
|
|
201
276
|
Args:
|
|
202
277
|
left_pose (KuavoPose): 左手臂目标姿态,包含xyz位置和四元数方向
|
|
203
278
|
right_pose (KuavoPose): 右手臂目标姿态,包含xyz位置和四元数方向
|
|
@@ -221,6 +296,7 @@ class KuavoRobotArm:
|
|
|
221
296
|
"""
|
|
222
297
|
return self._kuavo_core.arm_ik(left_pose, right_pose, left_elbow_pos_xyz, right_elbow_pos_xyz, arm_q0, params)
|
|
223
298
|
|
|
299
|
+
@sdk_deprecated(reason="接口废弃", version="1.2.2", replacement="KuavoRobot.arm_ik_free", remove_date="2026-06-30")
|
|
224
300
|
def arm_ik_free(self,
|
|
225
301
|
left_pose: KuavoPose,
|
|
226
302
|
right_pose: KuavoPose,
|
|
@@ -228,11 +304,22 @@ class KuavoRobotArm:
|
|
|
228
304
|
right_elbow_pos_xyz: list = [0.0, 0.0, 0.0],
|
|
229
305
|
arm_q0: list = None,
|
|
230
306
|
params: KuavoIKParams=None) -> list:
|
|
307
|
+
"""机器人手臂自由空间逆向运动学求解(重复定义)
|
|
308
|
+
|
|
309
|
+
.. warning::
|
|
310
|
+
此接口已过期废弃,将在 2026-06-30 移除。
|
|
311
|
+
请使用 KuavoRobot.arm_ik_free() 替代。
|
|
312
|
+
"""
|
|
231
313
|
return self._kuavo_core.arm_ik_free(left_pose, right_pose, left_elbow_pos_xyz, right_elbow_pos_xyz, arm_q0, params)
|
|
232
314
|
|
|
315
|
+
@sdk_deprecated(reason="接口废弃", version="1.2.2", replacement="KuavoRobot.arm_fk", remove_date="2026-06-30")
|
|
233
316
|
def arm_fk(self, q: list) -> Tuple[KuavoPose, KuavoPose]:
|
|
234
317
|
"""机器人手臂正向运动学求解
|
|
235
318
|
|
|
319
|
+
.. warning::
|
|
320
|
+
此接口已过期废弃,将在 2026-06-30 移除。
|
|
321
|
+
请使用 KuavoRobot.arm_fk() 替代。
|
|
322
|
+
|
|
236
323
|
Args:
|
|
237
324
|
q (list): 关节位置列表,单位为弧度
|
|
238
325
|
|
|
@@ -251,9 +338,14 @@ class KuavoRobotArm:
|
|
|
251
338
|
return None, None
|
|
252
339
|
return result
|
|
253
340
|
|
|
341
|
+
@sdk_deprecated(reason="接口废弃", version="1.2.2", replacement="KuavoRobot.control_hand_wrench", remove_date="2026-06-30")
|
|
254
342
|
def control_hand_wrench(self, left_wrench: list, right_wrench: list) -> bool:
|
|
255
343
|
"""控制机器人末端力/力矩
|
|
256
344
|
|
|
345
|
+
.. warning::
|
|
346
|
+
此接口已过期废弃,将在 2026-06-30 移除。
|
|
347
|
+
请使用 KuavoRobot.control_hand_wrench() 替代。
|
|
348
|
+
|
|
257
349
|
Args:
|
|
258
350
|
left_wrench (list): 左手臂6维力控指令 [Fx, Fy, Fz, Tx, Ty, Tz]
|
|
259
351
|
right_wrench (list): 右手臂6维力控指令 [Fx, Fy, Fz, Tx, Ty, Tz]
|
|
@@ -266,26 +358,46 @@ class KuavoRobotArm:
|
|
|
266
358
|
"""
|
|
267
359
|
return self._kuavo_core.control_hand_wrench(left_wrench, right_wrench)
|
|
268
360
|
|
|
361
|
+
@sdk_deprecated(reason="接口废弃", version="1.2.2", replacement="KuavoRobot.is_arm_collision", remove_date="2026-06-30")
|
|
269
362
|
def is_arm_collision(self)->bool:
|
|
270
363
|
"""判断当前是否发生碰撞
|
|
271
364
|
|
|
365
|
+
.. warning::
|
|
366
|
+
此接口已过期废弃,将在 2026-06-30 移除。
|
|
367
|
+
请使用 KuavoRobot.is_arm_collision() 替代。
|
|
368
|
+
|
|
272
369
|
Returns:
|
|
273
370
|
bool: 发生碰撞返回True,否则返回False
|
|
274
371
|
"""
|
|
275
372
|
return self._kuavo_core.is_arm_collision()
|
|
276
373
|
|
|
374
|
+
@sdk_deprecated(reason="接口废弃", version="1.2.2", replacement="KuavoRobot.release_arm_collision_mode", remove_date="2026-06-30")
|
|
277
375
|
def release_arm_collision_mode(self):
|
|
278
376
|
"""释放碰撞模式
|
|
377
|
+
|
|
378
|
+
.. warning::
|
|
379
|
+
此接口已过期废弃,将在 2026-06-30 移除。
|
|
380
|
+
请使用 KuavoRobot.release_arm_collision_mode() 替代。
|
|
279
381
|
"""
|
|
280
382
|
self._kuavo_core.release_arm_collision_mode()
|
|
281
383
|
|
|
384
|
+
@sdk_deprecated(reason="接口废弃", version="1.2.2", replacement="KuavoRobot.wait_arm_collision_complete", remove_date="2026-06-30")
|
|
282
385
|
def wait_arm_collision_complete(self):
|
|
283
386
|
"""等待碰撞完成
|
|
387
|
+
|
|
388
|
+
.. warning::
|
|
389
|
+
此接口已过期废弃,将在 2026-06-30 移除。
|
|
390
|
+
请使用 KuavoRobot.wait_arm_collision_complete() 替代。
|
|
284
391
|
"""
|
|
285
392
|
self._kuavo_core.wait_arm_collision_complete()
|
|
286
393
|
|
|
394
|
+
@sdk_deprecated(reason="接口废弃", version="1.2.2", replacement="KuavoRobot.set_arm_collision_mode", remove_date="2026-06-30")
|
|
287
395
|
def set_arm_collision_mode(self, enable: bool):
|
|
288
396
|
"""设置碰撞模式
|
|
397
|
+
|
|
398
|
+
.. warning::
|
|
399
|
+
此接口已过期废弃,将在 2026-06-30 移除。
|
|
400
|
+
请使用 KuavoRobot.set_arm_collision_mode() 替代。
|
|
289
401
|
"""
|
|
290
402
|
self._kuavo_core.set_arm_collision_mode(enable)
|
|
291
403
|
|
|
@@ -28,9 +28,8 @@ from geometry_msgs.msg import Pose, Point, Quaternion
|
|
|
28
28
|
from std_msgs.msg import Float64MultiArray
|
|
29
29
|
|
|
30
30
|
import inspect
|
|
31
|
-
from model_utils import *
|
|
32
|
-
import model_utils as model_utils
|
|
33
|
-
|
|
31
|
+
from kuavo_humanoid_sdk.kuavo.core.model_utils.model_utils import *
|
|
32
|
+
from kuavo_humanoid_sdk.kuavo.core.model_utils import model_utils as model_utils
|
|
34
33
|
|
|
35
34
|
from enum import IntEnum
|
|
36
35
|
# Global flag for handling Ctrl+C
|
|
@@ -45,24 +44,6 @@ else:
|
|
|
45
44
|
INIT_ARM_POS = [22.91831, 0, 0, -45.83662, 22.91831, 0, 0, -45.83662] # task.info: shoudler_center: 0.4rad, elbow_center: -0.8rad
|
|
46
45
|
|
|
47
46
|
|
|
48
|
-
|
|
49
|
-
global ACTION_FILE_FOLDER, package_path, THRESHOLD_HEAD_CONTROL_COUNT, FLOAT_MAX
|
|
50
|
-
THRESHOLD_HEAD_CONTROL_COUNT = 30
|
|
51
|
-
FLOAT_MAX = float('inf')
|
|
52
|
-
|
|
53
|
-
package_name = 'planarmwebsocketservice'
|
|
54
|
-
package_path = rospkg.RosPack().get_path(package_name)
|
|
55
|
-
sudo_user = os.environ.get("SUDO_USER")
|
|
56
|
-
if sudo_user:
|
|
57
|
-
user_info = pwd.getpwnam(sudo_user)
|
|
58
|
-
home_path = user_info.pw_dir
|
|
59
|
-
else:
|
|
60
|
-
home_path = os.path.expanduser("~")
|
|
61
|
-
ACTION_FILE_FOLDER = os.path.join(home_path, '.config', 'lejuconfig', 'action_files')
|
|
62
|
-
plan_arm_state_progress = 0
|
|
63
|
-
plan_arm_state_status = False
|
|
64
|
-
|
|
65
|
-
|
|
66
47
|
def signal_handler(sig, frame):
|
|
67
48
|
"""Signal handler for catching Ctrl+C and safely stopping the robot.
|
|
68
49
|
|
|
@@ -287,16 +268,29 @@ class RobotControlBlockly:
|
|
|
287
268
|
g_robot_type = "ocs2"
|
|
288
269
|
self.loop = None
|
|
289
270
|
self.init_ros_publishers()
|
|
271
|
+
self.THRESHOLD_HEAD_CONTROL_COUNT = 30
|
|
272
|
+
self.FLOAT_MAX = float('inf')
|
|
290
273
|
self.to_stance()
|
|
291
274
|
|
|
275
|
+
package_name = 'planarmwebsocketservice'
|
|
276
|
+
self.package_path = rospkg.RosPack().get_path(package_name)
|
|
277
|
+
sudo_user = os.environ.get("SUDO_USER")
|
|
278
|
+
if sudo_user:
|
|
279
|
+
user_info = pwd.getpwnam(sudo_user)
|
|
280
|
+
home_path = user_info.pw_dir
|
|
281
|
+
else:
|
|
282
|
+
home_path = os.path.expanduser("~")
|
|
283
|
+
self.ACTION_FILE_FOLDER = os.path.join(home_path, '.config', 'lejuconfig', 'action_files')
|
|
284
|
+
self.plan_arm_state_progress = 0
|
|
285
|
+
self.plan_arm_state_status = False
|
|
286
|
+
|
|
292
287
|
def set_action_file_path(self, proj_name: str):
|
|
293
288
|
"""Set the action file path for a specific project.
|
|
294
289
|
|
|
295
290
|
Args:
|
|
296
291
|
proj_name (str): Project name.
|
|
297
292
|
"""
|
|
298
|
-
|
|
299
|
-
ACTION_FILE_FOLDER = package_path + "/upload_files/" + proj_name + "/action_files"
|
|
293
|
+
self.ACTION_FILE_FOLDER = self.package_path + "/upload_files/" + proj_name + "/action_files"
|
|
300
294
|
|
|
301
295
|
def init_ros_publishers(self):
|
|
302
296
|
"""Initialize ROS publishers and subscribers for arm, hand, head control topics, sensor data, and trajectory state."""
|
|
@@ -318,7 +312,7 @@ class RobotControlBlockly:
|
|
|
318
312
|
Only publishes when robot type is 'ocs2' and trajectory is not finished.
|
|
319
313
|
"""
|
|
320
314
|
global kuavo_arm_traj_pub, control_hand_pub, control_head_pub, g_robot_type
|
|
321
|
-
if g_robot_type == "ocs2" and len(ocs2_joint_state.position) > 0 and plan_arm_state_status is False:
|
|
315
|
+
if g_robot_type == "ocs2" and len(ocs2_joint_state.position) > 0 and self.plan_arm_state_status is False:
|
|
322
316
|
kuavo_arm_traj_pub.publish(ocs2_joint_state)
|
|
323
317
|
control_hand_pub.publish(ocs2_hand_state)
|
|
324
318
|
# control_head_pub.publish(ocs2_head_state)
|
|
@@ -349,9 +343,8 @@ class RobotControlBlockly:
|
|
|
349
343
|
Args:
|
|
350
344
|
msg (planArmState): Arm trajectory state message.
|
|
351
345
|
"""
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
plan_arm_state_status = msg.is_finished
|
|
346
|
+
self.plan_arm_state_progress = msg.progress
|
|
347
|
+
self.plan_arm_state_status = msg.is_finished
|
|
355
348
|
|
|
356
349
|
def traj_callback(self, msg):
|
|
357
350
|
"""Callback for trajectory messages, parses trajectory points and updates global arm, hand, and head state variables.
|
|
@@ -597,14 +590,13 @@ class RobotControlBlockly:
|
|
|
597
590
|
"""
|
|
598
591
|
global g_robot_type
|
|
599
592
|
g_robot_type = "ocs2"
|
|
600
|
-
|
|
601
|
-
plan_arm_state_status = False
|
|
593
|
+
self.plan_arm_state_status = False
|
|
602
594
|
|
|
603
595
|
action_filename = action_file + ".tact"
|
|
604
596
|
if proj_name is None:
|
|
605
|
-
action_file_path = os.path.expanduser(f"{ACTION_FILE_FOLDER}/{action_filename}")
|
|
597
|
+
action_file_path = os.path.expanduser(f"{self.ACTION_FILE_FOLDER}/{action_filename}")
|
|
606
598
|
else:
|
|
607
|
-
action_file_path = package_path + "/upload_files/" + proj_name + "/action_files/" + action_filename
|
|
599
|
+
action_file_path = self.package_path + "/upload_files/" + proj_name + "/action_files/" + action_filename
|
|
608
600
|
if not os.path.exists(action_file_path):
|
|
609
601
|
print(f"Action file not found: {action_file_path}")
|
|
610
602
|
return
|
|
@@ -623,7 +615,7 @@ class RobotControlBlockly:
|
|
|
623
615
|
self.play_music(music_file)
|
|
624
616
|
self.plan_arm_trajectory_bezier_curve_client(req)
|
|
625
617
|
time.sleep(0.5)
|
|
626
|
-
while plan_arm_state_status is False:
|
|
618
|
+
while self.plan_arm_state_status is False:
|
|
627
619
|
time.sleep(0.01)
|
|
628
620
|
print("action file executed")
|
|
629
621
|
|
|
@@ -635,13 +627,12 @@ class RobotControlBlockly:
|
|
|
635
627
|
pitch (float): Pitch angle in degrees.
|
|
636
628
|
"""
|
|
637
629
|
try:
|
|
638
|
-
global THRESHOLD_HEAD_CONTROL_COUNT, FLOAT_MAX
|
|
639
630
|
self.robot.stance()
|
|
640
631
|
yaw = math.radians(yaw)
|
|
641
632
|
pitch = math.radians(pitch)
|
|
642
633
|
self.robot.control_head(yaw, pitch)
|
|
643
|
-
diff_yaw_min = FLOAT_MAX
|
|
644
|
-
diff_pitch_min = FLOAT_MAX
|
|
634
|
+
diff_yaw_min = self.FLOAT_MAX
|
|
635
|
+
diff_pitch_min = self.FLOAT_MAX
|
|
645
636
|
times_count = 0
|
|
646
637
|
while True:
|
|
647
638
|
time.sleep(0.01)
|
|
@@ -657,7 +648,7 @@ class RobotControlBlockly:
|
|
|
657
648
|
diff_pitch_min = diff_pitch
|
|
658
649
|
continue
|
|
659
650
|
times_count += 1
|
|
660
|
-
if times_count > THRESHOLD_HEAD_CONTROL_COUNT:
|
|
651
|
+
if times_count > self.THRESHOLD_HEAD_CONTROL_COUNT:
|
|
661
652
|
break
|
|
662
653
|
|
|
663
654
|
except Exception as e:
|
|
@@ -670,12 +661,11 @@ class RobotControlBlockly:
|
|
|
670
661
|
yaw (float): Yaw angle in degrees.
|
|
671
662
|
"""
|
|
672
663
|
try:
|
|
673
|
-
global THRESHOLD_HEAD_CONTROL_COUNT, FLOAT_MAX
|
|
674
664
|
self.robot.stance()
|
|
675
665
|
yaw = math.radians(yaw)
|
|
676
666
|
self.robot.control_head(yaw, current_head_joint_state[1])
|
|
677
667
|
times_count = 0
|
|
678
|
-
diff_yaw_min = FLOAT_MAX
|
|
668
|
+
diff_yaw_min = self.FLOAT_MAX
|
|
679
669
|
while True:
|
|
680
670
|
time.sleep(0.01)
|
|
681
671
|
diff_yaw = abs(current_head_joint_state[0] - yaw)
|
|
@@ -684,7 +674,7 @@ class RobotControlBlockly:
|
|
|
684
674
|
diff_yaw_min = diff_yaw
|
|
685
675
|
continue
|
|
686
676
|
times_count += 1
|
|
687
|
-
if times_count > THRESHOLD_HEAD_CONTROL_COUNT:
|
|
677
|
+
if times_count > self.THRESHOLD_HEAD_CONTROL_COUNT:
|
|
688
678
|
break
|
|
689
679
|
except Exception as e:
|
|
690
680
|
print(f"Robot head control failed: {str(e)}")
|
|
@@ -696,12 +686,11 @@ class RobotControlBlockly:
|
|
|
696
686
|
pitch (float): Pitch angle in degrees.
|
|
697
687
|
"""
|
|
698
688
|
try:
|
|
699
|
-
global THRESHOLD_HEAD_CONTROL_COUNT, FLOAT_MAX
|
|
700
689
|
self.robot.stance()
|
|
701
690
|
pitch = math.radians(pitch)
|
|
702
691
|
self.robot.control_head(current_head_joint_state[0], pitch)
|
|
703
692
|
times_count = 0
|
|
704
|
-
diff_pitch_min = FLOAT_MAX
|
|
693
|
+
diff_pitch_min = self.FLOAT_MAX
|
|
705
694
|
while True:
|
|
706
695
|
time.sleep(0.01)
|
|
707
696
|
diff_pitch = abs(current_head_joint_state[1] - pitch)
|
|
@@ -710,7 +699,7 @@ class RobotControlBlockly:
|
|
|
710
699
|
diff_pitch_min = diff_pitch
|
|
711
700
|
continue
|
|
712
701
|
times_count += 1
|
|
713
|
-
if times_count > THRESHOLD_HEAD_CONTROL_COUNT:
|
|
702
|
+
if times_count > self.THRESHOLD_HEAD_CONTROL_COUNT:
|
|
714
703
|
break
|
|
715
704
|
except Exception as e:
|
|
716
705
|
print(f"Robot head control failed: {str(e)}")
|
|
@@ -1086,14 +1075,18 @@ class RobotControlBlockly:
|
|
|
1086
1075
|
if not is_yolo_init:
|
|
1087
1076
|
yolo_detection = YOLO_detection()
|
|
1088
1077
|
yolo_detection.init_ros_node()
|
|
1089
|
-
caller_file_path =
|
|
1078
|
+
caller_file_path = self.package_path + "/upload_files/"
|
|
1079
|
+
print(f"caller_file_path: {caller_file_path}")
|
|
1090
1080
|
model_path = os.path.join(os.path.dirname(caller_file_path), 'best.pt')
|
|
1091
1081
|
# print(f"函数被文件调用: {model_path}")
|
|
1092
1082
|
model = yolo_detection.load_model(model_path)
|
|
1083
|
+
result = yolo_detection.camera_interface.get_camera_image("head")
|
|
1084
|
+
if result is None:
|
|
1085
|
+
print("No head camera image...")
|
|
1086
|
+
return
|
|
1093
1087
|
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
IMAGE_CENTER_Y = yolo_detection.cv_image_shape[0] / 2.0
|
|
1088
|
+
IMAGE_CENTER_X = yolo_detection.camera_interface.cv_image_shape[1] / 2.0
|
|
1089
|
+
IMAGE_CENTER_Y = yolo_detection.camera_interface.cv_image_shape[0] / 2.0
|
|
1097
1090
|
# rospy.loginfo(f"IMAGE_CENTER_X: {IMAGE_CENTER_X}")
|
|
1098
1091
|
# rospy.loginfo(f"IMAGE_CENTER_Y: {IMAGE_CENTER_Y}")
|
|
1099
1092
|
MOVE_SPEED_Y = 0.05 # Y方向移动速度
|
|
@@ -1102,7 +1095,6 @@ class RobotControlBlockly:
|
|
|
1102
1095
|
while not rospy.is_shutdown():
|
|
1103
1096
|
|
|
1104
1097
|
results = yolo_detection.get_detections("head", model)
|
|
1105
|
-
|
|
1106
1098
|
if not results:
|
|
1107
1099
|
continue
|
|
1108
1100
|
|