当前位置: 首页 > news >正文

上海哪家公司做网站好山东省威海市文登区建设局网站

上海哪家公司做网站好,山东省威海市文登区建设局网站,网站设计文字超链接,甘肃网站推广6.ROS2中自定义接口 文章目录 6.ROS2中自定义接口6.1接口常用的CLI6.2标准的接口形式6.3接口的数据类型6.4自定义接口Reference 在ROS2中接口interface是一种定义消息、服务或动作的规范#xff0c;用于描述数据结构、字段和数据类型。ROS2中的接口可以分为以下的几种消息类型…6.ROS2中自定义接口 文章目录 6.ROS2中自定义接口6.1接口常用的CLI6.2标准的接口形式6.3接口的数据类型6.4自定义接口Reference 在ROS2中接口interface是一种定义消息、服务或动作的规范用于描述数据结构、字段和数据类型。ROS2中的接口可以分为以下的几种消息类型 消息接口消息接口定义了一种数据结构用于在ROS 2节点之间传递信息。消息接口通常用于发布者publishers和订阅者subscribers之间的通信。消息接口由一组字段组成每个字段都有一个名称和一个数据类型。ROS 2使用消息接口来实现发布-订阅模式。服务接口服务接口定义了一种客户端client和服务器server之间的通信协议。服务接口由请求request和响应response两部分组成。客户端发送请求给服务器并等待服务器返回响应。服务接口在ROS 2中用于实现请求-响应模式。动作接口动作接口是ROS 2中的一种高级通信模式它扩展了服务接口允许在执行期间传输连续的反馈信息。动作接口由一个目标goal、一个反馈feedback和一个结果result组成。客户端向服务器发送目标服务器执行相应的操作并提供反馈信息。动作接口用于实现高级的行为控制和任务执行。 接口在ROS2中以.msg、.srv和.action文件的形式定义分别对应消息、服务和动作。这些文件包含了接口的定义包括字段名称和数据类型。通过使用接口ROS2节点可以进行灵活的通信并与其他节点共享数据和执行任务。 6.1接口常用的CLI 1查看接口列表 ros2 interface list2查看某个具体接口的内容 ros2 interface show xxxx6.2标准的接口形式 下面对三种接口类型.msg、.srv、.action都进行举例说明 1消息Message int32 x int32 y这个消息定义了两个int32的字段x和y 2服务Service int32 a int32 b --- int32 sum这个服务定义了一个请求包含两个整型字段a和b以及一个响应包含一个整型字段sum。 3动作Action int32 order --- int32 progress --- int32 result这个动作定义了一个目标包含一个整型字段order一个反馈包含一个整型字段progress以及一个结果包含一个整型字段result。 6.3接口的数据类型 基本数据类型 整型int8, int16, int32, int64, uint8, uint16, uint32, uint64浮点型float32, float64布尔型bool字符型char 数组和序列 数组使用方括号表示例如int32[3]表示包含3个int32元素的数组。序列使用尖括号表示例如std_msgs/String[]表示包含多个std_msgs/String消息的序列。 字符串 字符串类型string表示一个字符串。 时间和持续时间 时间builtin_interfaces/Time表示一个时间戳。持续时间builtin_interfaces/Duration表示一个时间间隔。 其他消息类型 其他消息类型你可以使用其他消息类型作为字段类型以创建更复杂的消息结构。例如geometry_msgs/Point表示一个三维点的消息类型。 6.4自定义接口 这里我的工作空间名为colcon_test_ws我们首先在这个工作空间目录下创建一个新的功能包custom_interfaces ros2 pkg create custom_interfaces --build-type ament_cmake --license Apache-2.0 --dependencies rosidl_default_generators进入功能包然后创建msg和srv目录 cd custom_interfaces mkdir msg srv目录结构如下 . ├── CMakeLists.txt ├── include │ └── custom_interfaces ├── LICENSE ├── msg ├── package.xml ├── src └── srv5 directories, 3 files1自定义构建msg 进入custom_interfaces/msg新建一个Num.msg文件然后写入以下内容 int64 num这里构建了一个自定义的消息消息的内容是64整型的int 2自定义构建srv 进入custom_interfaces/srv新建一个AddThreeInts.srv文件然后写入以下内容 int64 a int64 b int64 c --- int64 sum这里构建了一个自定义的服务消息request包含三个数a、b、cresponse包含一个数sum 3修改配置文件CMakeLists.txt find_package(ament_cmake REQUIRED) find_package(rosidl_default_generators REQUIRED)rosidl_generate_interfaces(${PROJECT_NAME}msg/Num.msgsrv/AddThreeInts.srvDEPENDENCIES # Add packages that above messages depend on )4修改配置文件package.xml buildtool_dependament_cmake/buildtool_depend!-- 添加以下三行 --build_dependrosidl_default_generators/build_dependexec_dependrosidl_default_runtime/exec_dependmember_of_grouprosidl_interface_packages/member_of_group test_dependament_lint_auto/test_dependtest_dependament_lint_common/test_depend然后进行编译 colcon build --packages-select example_custom_interfaces然后查看自定义的消息接口 source install/setup.bash ros2 interface show example_custom_interfaces/msg/NumOutput: int64 num再输入 ros2 interface show example_custom_interfaces/srv/AddThreeIntsOutput: int64 a int64 b int64 c --- int64 sum这样我们就能够在colcon_ws/install/custom_interfaces/include/example_custom_interfaces/example_custom_interfaces/msg/num.hpp看到编译好的msg头文件了在colcon_test_ws/install/custom_interfaces/include/example_custom_interfaces/example_custom_interfaces/srv/add_three_ints.hpp中看到编译好的srv头文件 这里可以使用自定义的服务接口类型把【ROS2笔记五】ROS2服务通信中使用的服务数据类型修改为自定义的如下 service_client_01.cpp #include rclcpp/rclcpp.hpp #include custom_interfaces/srv/add_three_ints.hppclass ServiceClient01: public rclcpp::Node{ public:ServiceClient01(std::string name) : Node(name){RCLCPP_INFO(this-get_logger(), Node: %s has been launched, name.c_str());// 创建客户端client_ this-create_clientcustom_interfaces::srv::AddThreeInts(add_two_ints_srv);}void send_request(int a, int b, int c){RCLCPP_INFO(this-get_logger(), Calculate %d %d %d, a, b, c);// 等待服务上线while (!client_-wait_for_service(std::chrono::seconds(1))){if (!rclcpp::ok()){RCLCPP_ERROR(this-get_logger(), Waiting for service to be interrupted);return;}RCLCPP_INFO(this-get_logger(), Waiting for service);}auto request std::make_sharedcustom_interfaces::srv::AddThreeInts_Request();request-a a;request-b b;request-c c;client_-async_send_request(request, std::bind(ServiceClient01::result_callback_, this, std::placeholders::_1));}private:// 声明客户端rclcpp::Clientcustom_interfaces::srv::AddThreeInts::SharedPtr client_;void result_callback_(rclcpp::Clientcustom_interfaces::srv::AddThreeInts::SharedFuture result_future){auto response result_future.get();RCLCPP_INFO(this-get_logger(), Result: %ld, response-sum);} };int main(int argc, char** argv){rclcpp::init(argc, argv);auto node std::make_sharedServiceClient01(service_client_01);// 调用服务node-send_request(5, 6, 7);rclcpp::spin(node);rclcpp::shutdown();return 0; }service_server_01.cpp #include memory #include rclcpp/rclcpp.hpp #include custom_interfaces/srv/add_three_ints.hppclass ServiceServer01: public rclcpp::Node{ public:ServiceServer01(std::string name) : Node(name){RCLCPP_INFO(this-get_logger(), Node: %s has been launched, name.c_str());// 创建服务add_ints_server_ this-create_servicecustom_interfaces::srv::AddThreeInts(add_two_ints_srv,std::bind(ServiceServer01::handle_add_three_ints, this, std::placeholders::_1, std::placeholders::_2));} private:// 在私有域中再次声明服务rclcpp::Servicecustom_interfaces::srv::AddThreeInts::SharedPtr add_ints_server_;// 服务的处理函数void handle_add_three_ints(const std::shared_ptrcustom_interfaces::srv::AddThreeInts::Request request,std::shared_ptrcustom_interfaces::srv::AddThreeInts::Response response){RCLCPP_INFO(this-get_logger(), Recieve a: %ld b: %ld c: %ld, request-a, request-b, request-c);response-sum request-a request-b request-c;};};int main(int argc, char** argv){rclcpp::init(argc, argv);auto node std::make_sharedServiceServer01(service_server_01);rclcpp::spin(node);rclcpp::shutdown();return 0; }修改CMakeLists.txt find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) # 新加这一行 find_package(custom_interfaces REQUIRED) add_executable(service_server_01 src/service_server_01.cpp) ament_target_dependencies(service_server_01 rclcpp custom_interfaces) #修改这里add_executable(service_client_01 src/service_client_01.cpp) ament_target_dependencies(service_client_01 rclcpp custom_interfaces) #修改这里install(TARGETSservice_server_01service_client_01DESTINATION lib/${PROJECT_NAME} )然后编译运行 colcon build --packages-select example_service_rclcpp source install/setup.bash ros2 run example_service_rclcpp service_client_01ros2 run example_service_rclcpp service_server_01 结果如下 Reference [1]d2lros2 [2]ROS2 Tutorial Official
http://www.hkea.cn/news/14539626/

相关文章:

  • 电子商务网站建设与维护的考试高端网站建设知识
  • 贵阳58同城做网站公司有哪些返佣网站都是自己做的
  • 万站群cms云南省住房与城乡建设厅网站
  • 哪些网站可以免费看剧phpcms网站转移
  • 邯郸装修网站建设有什么网站可以帮人做模具吗
  • 用KEGG网站做KEGG富集分析修改wordpress中附件上传大小
  • 高明骏域网站建设泉州app开发
  • cms企业网站系统城乡住房建设厅网站
  • 装修公司网站设计专做品牌的网站
  • 青岛网上房地产网站软件开发全过程
  • 亿藤互联网站建设开发网站pr怎么提升
  • 毕业设计代做网站都有哪些网站优秀设计方案
  • 谷歌怎么把两个网站做反链临沂设计网站的公司
  • 简述网站制作过程做游戏网站赚钱么
  • 做搜狗手机网站点击软百度网盘网站开发文档模板
  • 网站开发教程 布局cp网站开发搭建网站多少钱一套
  • 广州户外拓展廊坊百度优化
  • 网站建设内链茶叶网站策划方案
  • 做网站 信科网站建设便宜厦门公司网站制作流程
  • 大兴网站建设费用设计网站平台风格
  • 怎么做个人网站建设网络广告投放渠道有哪些
  • 免费网站统计工具wordpress装饰
  • 济南卓远网站建设做网站 十万
  • 亿建联网站是谁做的淮南先锋网
  • 自学做网站可以嘛泰州网站建设方案推广
  • 做游戏本测评的网站修改wordpress标签大小
  • 资源网站很难做公司注册流程步骤图
  • 建站套餐和定制网站的区别wordpress行业模版
  • 成都专业做网站公司哪家好网站快速搭建平台
  • 做公司网站的总结扫描到网站目录然后怎么做