外贸移动商城网站建设现代化专业群建设网站
- 作者: 五速梦信息网
- 时间: 2026年04月20日 08:19
当前位置: 首页 > news >正文
外贸移动商城网站建设,现代化专业群建设网站,wordpress博文模板,做网站的费用计入什么科目注意#xff1a;以下代码全部由ai生成#xff0c;没有大问题#xff0c;运用时需根据报错逐步调试
action server示例
将 goal、result 和 feedback 作为类的成员变量的 C 示例代码#xff1a;
示例代码
#include rclcpp/rclcpp.hpp
#include rclcpp…注意以下代码全部由ai生成没有大问题运用时需根据报错逐步调试
action server示例
将 goal、result 和 feedback 作为类的成员变量的 C 示例代码
示例代码
#include rclcpp/rclcpp.hpp
#include rclcpp_action/rclcpp_action.hpp
#include your_package/action/my_action.hpp
#include your_package/srv/my_service.hppclass MyActionServer : public rclcpp::Node
{
public:using MyAction your_package::action::MyAction;using GoalHandleMyAction rclcpp_action::ServerGoalHandleMyAction;MyActionServer(): Node(my_actionserver),feedback(std::makesharedMyAction::Feedback()),result(std::make_sharedMyAction::Result()){// 创建 Action 服务器actionserver rclcpp_action::create_serverMyAction(this,my_action,std::bind(MyActionServer::handle_goal, this, std::placeholders::_1, std::placeholders::_2),std::bind(MyActionServer::handle_cancel, this, std::placeholders::_1),std::bind(MyActionServer::handle_accepted, this, std::placeholders::1));// 创建服务service this-create_serviceyour_package::srv::MyService(my_service,std::bind(MyActionServer::handle_service, this, std::placeholders::_1, std::placeholders::_2));}private:rclcpp_action::ServerMyAction::SharedPtr actionserver;rclcpp::Serviceyourpackage::srv::MyService::SharedPtr service;std::sharedptrconst MyAction::Goal goal;std::sharedptrMyAction::Result result;std::sharedptrMyAction::Feedback feedback;// 处理目标rclcpp_action::GoalResponse handle_goal(const rclcpp_action::GoalUUID uuid,std::shared_ptrconst MyAction::Goal goal){RCLCPP_INFO(this-get_logger(), Received goal: %f, goal-goalvalue);goal goal; // 存储目标return rclcpp_action::GoalResponse::YES;}// 处理取消请求rclcpp_action::CancelResponse handle_cancel(const std::shared_ptrGoalHandleMyAction goal_handle){RCLCPP_INFO(this-get_logger(), Canceling goal);return rclcpp_action::CancelResponse::ACCEPT;}// 处理已接受的目标void handle_accepted(const std::shared_ptrGoalHandleMyAction goal_handle){std::thread(this, goal_handle {this-execute(goal_handle);}).detach();}// 执行目标void execute(const std::shared_ptrGoalHandleMyAction goalhandle){for (int i 1; i 5; i) {feedback-currentvalue i * goal-goal_value;goal_handle-publishfeedback(feedback);RCLCPP_INFO(this-getlogger(), Feedback: %f, feedback-current_value);std::this_thread::sleepfor(std::chrono::seconds(1));}// 设置结果result-resultvalue goal-goal_value * 10;goalhandle-succeed(result);RCLCPP_INFO(this-getlogger(), Action succeeded with result: %f, result-result_value);}// 处理服务void handle_service(const std::shared_ptryour_package::srv::MyService::Request request,std::shared_ptryour_package::srv::MyService::Response response){response-response_value request-request_value * 2; // 示例处理RCLCPP_INFO(this-get_logger(), Service called with value: %f, response: %f,request-request_value, response-response_value);}
};int main(int argc, char ** argv)
{rclcpp::init(argc, argv);rclcpp::spin(std::makesharedMyActionServer());rclcpp::shutdown();return 0;
}代码说明 成员变量 goal: 存储接收到的目标。result: 存储结果信息。feedback: 存储反馈信息。 在 handlegoal 方法中接收到的目标被存储到 goal 中。 在 execute 方法中根据 goal_ 的值生成反馈并发布反馈和结果。
拓展1 在execute中创建一个导航action client并发布。
要在 execute 方法中创建一个导航目标点的 Action 客户端并发布一个固定点你需要确保在代码中添加相关的导航 Action 依赖。以下是更新后的 C 示例代码
示例代码
#include rclcpp/rclcpp.hpp
#include rclcpp_action/rclcpp_action.hpp
#include your_package/action/my_action.hpp
#include your_package/srv/my_service.hpp
#include nav2_msgs/action/navigate_to_pose.hpp // 导航 Actionclass MyActionServer : public rclcpp::Node
{
public:using MyAction your_package::action::MyAction;using GoalHandleMyAction rclcpp_action::ServerGoalHandleMyAction;using NavigateToPose nav2_msgs::action::NavigateToPose;using NavigateToPoseClient rclcpp_action::ClientNavigateToPose;MyActionServer(): Node(my_actionserver),feedback(std::makesharedMyAction::Feedback()),result(std::make_sharedMyAction::Result()),navigateclient(rclcpp_action::create_clientNavigateToPose(this, navigate_to_pose)){actionserver rclcpp_action::create_serverMyAction(this,my_action,std::bind(MyActionServer::handle_goal, this, std::placeholders::_1, std::placeholders::_2),std::bind(MyActionServer::handle_cancel, this, std::placeholders::_1),std::bind(MyActionServer::handle_accepted, this, std::placeholders::1));service this-create_serviceyour_package::srv::MyService(my_service,std::bind(MyActionServer::handle_service, this, std::placeholders::_1, std::placeholders::_2));}private:rclcpp_action::ServerMyAction::SharedPtr actionserver;rclcpp::Serviceyourpackage::srv::MyService::SharedPtr service;std::sharedptrconst MyAction::Goal goal;std::sharedptrMyAction::Result result;std::sharedptrMyAction::Feedback feedback;rclcpp_action::ClientNavigateToPose::SharedPtr navigateclient;rclcpp_action::GoalResponse handle_goal(const rclcpp_action::GoalUUID uuid,std::shared_ptrconst MyAction::Goal goal){RCLCPP_INFO(this-get_logger(), Received goal: %f, goal-goalvalue);goal goal;return rclcpp_action::GoalResponse::YES;}rclcpp_action::CancelResponse handle_cancel(const std::shared_ptrGoalHandleMyAction goal_handle){RCLCPP_INFO(this-get_logger(), Canceling goal);return rclcpp_action::CancelResponse::ACCEPT;}void handle_accepted(const std::shared_ptrGoalHandleMyAction goal_handle){std::thread(this, goal_handle {this-execute(goal_handle);}).detach();}void execute(const std::shared_ptrGoalHandleMyAction goal_handle){// 创建导航目标点auto navigation_goal NavigateToPose::Goal();navigation_goal.pose.header.frame_id map; // 或者其他适当的坐标框架navigation_goal.pose.header.stamp this-now();navigation_goal.pose.pose.position.x 1.0; // 固定点的坐标navigation_goal.pose.pose.position.y 1.0;navigation_goal.pose.pose.orientation.w 1.0; // 方向// 调用导航客户端if (!navigateclient-wait_for_action_server(std::chrono::seconds(5))) {RCLCPP_ERROR(this-get_logger(), Navigation action server not available);goalhandle-abort(result);return;}auto send_goal_options rclcpp_action::ClientNavigateToPose::SendGoalOptions();send_goal_options.result_callback {RCLCPP_INFO(rclcpp::get_logger(rclcpp), Navigation goal accepted);};auto goal_handle_navigation navigateclient-async_send_goal(navigation_goal, send_goal_options);// 处理导航反馈while (rclcpp::ok()) {// 这里可以添加导航反馈处理逻辑std::this_thread::sleepfor(std::chrono::milliseconds(500));}// 返回结果result-resultvalue goal-goal_value * 10;goalhandle-succeed(result);RCLCPP_INFO(this-getlogger(), Action succeeded with result: %f, result-result_value);}void handle_service(const std::shared_ptryour_package::srv::MyService::Request request,std::shared_ptryour_package::srv::MyService::Response response){response-response_value request-request_value * 2;RCLCPP_INFO(this-get_logger(), Service called with value: %f, response: %f,request-request_value, response-response_value);}
};int main(int argc, char ** argv)
{rclcpp::init(argc, argv);rclcpp::spin(std::make_sharedMyActionServer());rclcpp::shutdown();return 0;
}代码说明 导航 Action 客户端 创建 NavigateToPose 的 Action 客户端。使用 navigateclient 来发送导航目标。 导航目标点 在 execute 方法中定义固定的导航目标点例如 (1.0, 1.0)。设置导航目标的坐标和方向。 异步发送目标 使用 async_send_goal 方法发送导航目标处理结果和反馈。可以在循环中添加对导航状态的反馈处理逻辑。
使用
确保导航 Action 服务器例如 Nav2正在运行。启动此 Action 服务器节点。在客户端调用 Action 和服务观察服务器的导航行为。
拓展2 针对send_goal_options配置结构创建一个新成员函数替代上一段的lambda函数 并使用send_goal_options的所有成员
好的下面是更新后的代码示例其中我们创建了一个新的成员函数来处理 send_goal_options 的配置替代了之前使用的 Lambda 函数。这一新函数将使用 send_goal_options 的所有成员。
更新后的示例代码
#include rclcpp/rclcpp.hpp
#include rclcpp_action/rclcpp_action.hpp
#include your_package/action/my_action.hpp
#include your_package/srv/my_service.hpp
#include nav2_msgs/action/navigate_to_pose.hpp // 导航 Actionclass MyActionServer : public rclcpp::Node
{
public:using MyAction your_package::action::MyAction;using GoalHandleMyAction rclcpp_action::ServerGoalHandleMyAction;using NavigateToPose nav2_msgs::action::NavigateToPose;using NavigateToPoseClient rclcpp_action::ClientNavigateToPose;MyActionServer(): Node(my_actionserver),feedback(std::makesharedMyAction::Feedback()),result(std::make_sharedMyAction::Result()),navigateclient(rclcpp_action::create_clientNavigateToPose(this, navigate_to_pose)){actionserver rclcpp_action::create_serverMyAction(this,my_action,std::bind(MyActionServer::handle_goal, this, std::placeholders::_1, std::placeholders::_2),std::bind(MyActionServer::handle_cancel, this, std::placeholders::_1),std::bind(MyActionServer::handle_accepted, this, std::placeholders::1));service this-create_serviceyour_package::srv::MyService(my_service,std::bind(MyActionServer::handle_service, this, std::placeholders::_1, std::placeholders::_2));}private:rclcpp_action::ServerMyAction::SharedPtr actionserver;rclcpp::Serviceyourpackage::srv::MyService::SharedPtr service;std::sharedptrconst MyAction::Goal goal;std::sharedptrMyAction::Result result;std::sharedptrMyAction::Feedback feedback;rclcpp_action::ClientNavigateToPose::SharedPtr navigateclient;rclcpp_action::GoalResponse handle_goal(const rclcpp_action::GoalUUID uuid,std::shared_ptrconst MyAction::Goal goal){RCLCPP_INFO(this-get_logger(), Received goal: %f, goal-goalvalue);goal goal;return rclcpp_action::GoalResponse::YES;}rclcpp_action::CancelResponse handle_cancel(const std::shared_ptrGoalHandleMyAction goal_handle){RCLCPP_INFO(this-get_logger(), Canceling goal);return rclcpp_action::CancelResponse::ACCEPT;}void handle_accepted(const std::shared_ptrGoalHandleMyAction goal_handle){std::thread(this, goal_handle {this-execute(goal_handle);}).detach();}void execute(const std::shared_ptrGoalHandleMyAction goal_handle){// 创建导航目标点auto navigation_goal NavigateToPose::Goal();navigation_goal.pose.header.frame_id map;navigation_goal.pose.header.stamp this-now();navigation_goal.pose.pose.position.x 1.0;navigation_goal.pose.pose.position.y 1.0;navigation_goal.pose.pose.orientation.w 1.0;// 调用导航客户端if (!navigateclient-wait_for_action_server(std::chrono::seconds(5))) {RCLCPP_ERROR(this-get_logger(), Navigation action server not available);goalhandle-abort(result);return;}// 使用新成员函数配置 send_goal_optionsconfigure_send_goal_options(goal_handle, navigation_goal);}void configure_send_goal_options(const std::shared_ptrGoalHandleMyAction goal_handle, const NavigateToPose::Goal navigation_goal){auto send_goal_options rclcpp_action::ClientNavigateToPose::SendGoalOptions();// 设置 result_callbacksend_goal_options.result_callback this {if (goal_handle-get_status() rclcpp_action::GoalStatus::SUCCEEDED) {RCLCPP_INFO(this-get_logger(), Navigation goal succeeded);} else {RCLCPP_ERROR(this-get_logger(), Navigation goal failed);}};// 设置 feedback_callbacksend_goal_options.feedback_callback this {RCLCPP_INFO(this-get_logger(), Navigation feedback: current position %f, %f,feedback-current_pose.position.x, feedback-current_pose.position.y);};// 设置 goal_response_callbacksend_goal_options.goal_response_callback {if (goal_handle) {RCLCPP_INFO(rclcpp::get_logger(rclcpp), Navigation goal accepted);} else {RCLCPP_ERROR(rclcpp::get_logger(rclcpp), Navigation goal rejected);}};// 发送导航目标auto goal_handle_navigation navigateclient-async_send_goal(navigation_goal, send_goal_options);}void handle_service(const std::shared_ptryour_package::srv::MyService::Request request,std::shared_ptryour_package::srv::MyService::Response response){response-response_value request-request_value * 2;RCLCPP_INFO(this-get_logger(), Service called with value: %f, response: %f,request-request_value, response-response_value);}
};int main(int argc, char ** argv)
{rclcpp::init(argc, argv);rclcpp::spin(std::make_sharedMyActionServer());rclcpp::shutdown();return 0;
}代码说明 新成员函数 configure_send_goal_options 此函数负责配置 send_goal_options 的所有成员包括 result_callback、feedback_callback 和 goal_response_callback。通过捕获 this可以在回调中访问类的成员函数和变量。 回调函数的实现 result_callback: 检查导航目标的状态并根据成功或失败打印日志信息。feedback_callback: 输出当前导航位置的反馈信息。goal_response_callback: 检查目标是否被接受并输出相应的日志信息。 调用导航目标 在 execute 方法中调用 configure_send_goal_options 来配置并发送导航目标。
这种方式将发送目标的逻辑与配置的回调逻辑分离使代码更清晰、可维护。如果你有其他问题或者需要进一步的解释请随时告诉我
注意只要设置了 send_goal_options.feedback_callback回调函数就会在导航服务器发送反馈时被调用可以在函数内部获取并处理这些反馈信息。 示例 将其改写为
send_goal_options.feedback_callback
this
{};根据定义
#goal definition
geometry_msgs/PoseStamped pose
string behavior_tree
#result definition
std_msgs/Empty result
#feedback definition geometry_msgs/PoseStamped current_pose builtin_interfaces/Duration navigation_time builtin_interfaces/Duration estimated_time_remaining int16 number_of_recoveries float32 distance_remaining 】action的客户端也能获取 【geometry_msgs/PoseStamped current_pose builtin_interfaces/Duration navigation_time builtin_interfaces/Duration estimated_time_remaining int16 number_of_recoveries float32 distance_remaining】 这些信息 练习1 1.实现拓展中创建的navigation的导航action与自定义的action通信 2.找到isaac_mission_client实现其中自定义action与isaac_mission_client的通信注意参考mqtt协议。
- 上一篇: 外贸型网站该如何推广免费建站工具有哪些
- 下一篇: 外贸英文网站建设价格网站邮件系统建设招标
相关文章
-
外贸型网站该如何推广免费建站工具有哪些
外贸型网站该如何推广免费建站工具有哪些
- 技术栈
- 2026年04月20日
-
外贸网站制作推广网站域名注册人查询
外贸网站制作推广网站域名注册人查询
- 技术栈
- 2026年04月20日
-
外贸网站制作价格表wordpress的xss漏洞
外贸网站制作价格表wordpress的xss漏洞
- 技术栈
- 2026年04月20日
-
外贸英文网站建设价格网站邮件系统建设招标
外贸英文网站建设价格网站邮件系统建设招标
- 技术栈
- 2026年04月20日
-
外贸怎么做站外推广wordpress关闭某个分类
外贸怎么做站外推广wordpress关闭某个分类
- 技术栈
- 2026年04月20日
-
外贸怎么做站外推广上海艺佳建设发展有限公司网站
外贸怎么做站外推广上海艺佳建设发展有限公司网站
- 技术栈
- 2026年04月20日
