diff --git a/src/brain/config/bt_carry_boxes.xml b/src/brain/config/bt_carry_boxes.xml new file mode 100644 index 0000000..aeb49a3 --- /dev/null +++ b/src/brain/config/bt_carry_boxes.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/brain/config/robot_skills.yaml b/src/brain/config/robot_skills.yaml index d286849..5dec7b0 100644 --- a/src/brain/config/robot_skills.yaml +++ b/src/brain/config/robot_skills.yaml @@ -16,6 +16,18 @@ interfaces: - Arm.action +- name: WaistControl + version: 1.0.0 + description: "腰部控制" + interfaces: + - WaistControl.action + +- name: CameraTakePhoto + version: 1.0.0 + description: "相机拍照" + interfaces: + - CameraTakePhoto.action + - name: HandControl version: 1.0.0 description: "手部控制" diff --git a/src/brain/include/brain/skill_manager.hpp b/src/brain/include/brain/skill_manager.hpp index c27dbe6..b06f5e2 100644 --- a/src/brain/include/brain/skill_manager.hpp +++ b/src/brain/include/brain/skill_manager.hpp @@ -22,6 +22,8 @@ #include "interfaces/action/arm.hpp" #include "interfaces/action/slam_mode.hpp" #include "nav2_msgs/action/navigate_to_pose.hpp" +#include "interfaces/action/camera_take_photo.hpp" +#include "interfaces/action/waist_control.hpp" namespace brain { @@ -360,6 +362,20 @@ struct SkillActionTrait static std::string message(const interfaces::action::HandControl::Result & r) {return r.message;} }; template<> +struct SkillActionTrait +{ + static constexpr const char * skill_name = "CameraTakePhoto"; + static bool success(const interfaces::action::CameraTakePhoto::Result & r) {return r.success;} + static std::string message(const interfaces::action::CameraTakePhoto::Result & r) {return r.message;} +}; +template<> +struct SkillActionTrait +{ + static constexpr const char * skill_name = "WaistControl"; + static bool success(const interfaces::action::WaistControl::Result & r) {return r.success;} + static std::string message(const interfaces::action::WaistControl::Result & r) {return r.message;} +}; +template<> struct SkillActionTrait { static constexpr const char * skill_name = "LegControl"; @@ -419,7 +435,9 @@ using SkillActionTypes = std::tuple< interfaces::action::LegControl, interfaces::action::VisionGraspObject, interfaces::action::SlamMode, - nav2_msgs::action::NavigateToPose + nav2_msgs::action::NavigateToPose, + interfaces::action::CameraTakePhoto, + interfaces::action::WaistControl >; /** diff --git a/src/brain/src/cerebellum_node.cpp b/src/brain/src/cerebellum_node.cpp index c9e59dd..7e68178 100644 --- a/src/brain/src/cerebellum_node.cpp +++ b/src/brain/src/cerebellum_node.cpp @@ -75,9 +75,9 @@ CerebellumNode::CerebellumNode(const rclcpp::NodeOptions & options) skill_manager_ = std::make_unique(this, action_clients_.get(), nullptr); DeclareAndLoadParameters(); + LoadSkillsFile(); ConfigureActionHooks(); ConfigureServiceHooks(); - LoadSkillsFile(); SetupStatsTimerAndPublisher(); SetupExecuteBtServer(); diff --git a/src/brain/src/cerebrum_node.cpp b/src/brain/src/cerebrum_node.cpp index d353b42..b3c0935 100644 --- a/src/brain/src/cerebrum_node.cpp +++ b/src/brain/src/cerebrum_node.cpp @@ -82,7 +82,7 @@ struct UpdatingFlagGuard */ CerebrumNode::CerebrumNode(const rclcpp::NodeOptions & options) : rclcpp::Node("cerebrum_node", options), - bt_config_file_path_(ament_index_cpp::get_package_share_directory("brain") + std::string("/config/bt_vision_grasp.xml")) + bt_config_file_path_(ament_index_cpp::get_package_share_directory("brain") + std::string("/config/bt_carry_boxes.xml")) { InitializeRegistries(); DeclareParameters(); diff --git a/src/brain/src/skill_manager.cpp b/src/brain/src/skill_manager.cpp index 5669304..1217c23 100644 --- a/src/brain/src/skill_manager.cpp +++ b/src/brain/src/skill_manager.cpp @@ -25,6 +25,8 @@ #include "interfaces/srv/map_load.hpp" #include "interfaces/action/arm.hpp" #include "nav2_msgs/action/navigate_to_pose.hpp" +#include "interfaces/action/waist_control.hpp" +#include "interfaces/action/camera_take_photo.hpp" using interfaces::action::ArmSpaceControl; using interfaces::action::Arm; @@ -32,6 +34,8 @@ using interfaces::action::HandControl; using interfaces::action::LegControl; using interfaces::action::VisionGraspObject; using interfaces::srv::VisionObjectRecognition; +using interfaces::action::CameraTakePhoto; +using interfaces::action::WaistControl; namespace brain { @@ -173,6 +177,12 @@ void SkillManager::register_interfaces_(const SkillSpec & s) {"HandControl", [this](const std::string & topic, const std::string & internal_skill) { register_action_client_default("HandControl", topic, internal_skill); }}, + {"WaistControl", [this](const std::string & topic, const std::string & internal_skill) { + register_action_client_default("WaistControl", topic, internal_skill); + }}, + {"CameraTakePhoto", [this](const std::string & topic, const std::string & internal_skill) { + register_action_client_default("CameraTakePhoto", topic, internal_skill); + }}, {"LegControl", [this](const std::string & topic, const std::string & internal_skill) { register_action_client_default("LegControl", topic, internal_skill); }},