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

.我爱你 网站网站建设公司收费

.我爱你 网站,网站建设公司收费,高校两学一做专题网站,广告设计公司企业简介背景 节点是通过 ROS 2进行通信的可执行进程。在本教程中#xff0c;节点将通过主题以字符串消息的形式相互传递信息。这里使用的例子是一个简单的“说话者”和“倾听者”系统#xff1b;一个节点发布数据#xff0c;另一个节点订阅该主题#xff0c;以便它可以接收该数…背景 节点是通过 ROS 2进行通信的可执行进程。在本教程中节点将通过主题以字符串消息的形式相互传递信息。这里使用的例子是一个简单的“说话者”和“倾听者”系统一个节点发布数据另一个节点订阅该主题以便它可以接收该数据。 任务 1 创建包 打开一个新终端并获取 ROS 2 安装的源代码以便ros2命令可以运行。 导航到上一教程ros2_ws中创建的目录。 回想一下包应该在src目录中创建而不是在工作区的根目录中。因此导航到ros2_ws/src并运行包创建命令 ros2 pkg create --build-type ament_cmake cpp_pubsubcpp_pubsub您的终端将返回一条消息验证您的包及其所有必需文件和文件夹的创建。 导航到ros2_ws/src/cpp_pubsub/src. 回想一下这是任何 CMake 包中包含可执行文件的源文件所属的目录。 2 编写发布者节点 输入以下命令来下载示例 talker 代码 Linux苹果系统视窗 wget -O publisher_member_function.cpp https://raw.githubusercontent.com/ros2/examples/galactic/rclcpp/topics/minimal_publisher/member_function.cpp现在将有一个名为 的新文件publisher_member_function.cpp。使用您喜欢的文本编辑器打开文件。 #include chrono #include functional #include memory #include string#include rclcpp/rclcpp.hpp #include std_msgs/msg/string.hppusing namespace std::chrono_literals;/* This example creates a subclass of Node and uses std::bind() to register a * member function as a callback from the timer. */class MinimalPublisher : public rclcpp::Node {public:MinimalPublisher(): Node(minimal_publisher), count_(0){publisher_ this-create_publisherstd_msgs::msg::String(topic, 10);timer_ this-create_wall_timer(500ms, std::bind(MinimalPublisher::timer_callback, this));}private:void timer_callback(){auto message std_msgs::msg::String();message.data Hello, world! std::to_string(count_);RCLCPP_INFO(this-get_logger(), Publishing: %s, message.data.c_str());publisher_-publish(message);}rclcpp::TimerBase::SharedPtr timer_;rclcpp::Publisherstd_msgs::msg::String::SharedPtr publisher_;size_t count_; };int main(int argc, char * argv[]) {rclcpp::init(argc, argv);rclcpp::spin(std::make_sharedMinimalPublisher());rclcpp::shutdown();return 0; }2.1 检查代码 代码的顶部包含您将使用的标准 C 标头。标准 C 头文件之后是rclcpp/rclcpp.hpp包含文件它允许您使用 ROS 2 系统最常见的部分。最后是std_msgs/msg/string.hpp其中包括您将用于发布数据的内置消息类型。 这些线代表节点的依赖关系。回想一下必须将依赖项添加到package.xml和CMakeLists.txt您将在下一节中执行此操作。 #include chrono #include functional #include memory #include string#include rclcpp/rclcpp.hpp #include std_msgs/msg/string.hppusing namespace std::chrono_literals;下一行MinimalPublisher通过继承创建节点类rclcpp::Node。代码中的每个都this指的是节点。 class MinimalPublisher : public rclcpp::Node公共构造函数命名节点minimal_publisher并初始化count_为 0。在构造函数内发布者使用String消息类型、主题名称topic以及备份时限制消息所需的队列大小进行初始化。接下来timer_被初始化这导致该timer_callback函数每秒执行两次。 public:MinimalPublisher(): Node(minimal_publisher), count_(0){publisher_ this-create_publisherstd_msgs::msg::String(topic, 10);timer_ this-create_wall_timer(500ms, std::bind(MinimalPublisher::timer_callback, this));}该timer_callback函数是设置消息数据和实际发布消息的地方。该RCLCPP_INFO宏确保每条发布的消息都打印到控制台。 private:void timer_callback(){auto message std_msgs::msg::String();message.data Hello, world! std::to_string(count_);RCLCPP_INFO(this-get_logger(), Publishing: %s, message.data.c_str());publisher_-publish(message);}最后是计时器、发布者和计数器字段的声明。 rclcpp::TimerBase::SharedPtr timer_; rclcpp::Publisherstd_msgs::msg::String::SharedPtr publisher_; size_t count_;类之后MinimalPublisher是main节点实际执行的地方。 rclcpp::init初始化 ROS 2并rclcpp::spin开始处理来自节点的数据包括来自计时器的回调。 int main(int argc, char * argv[]) {rclcpp::init(argc, argv);rclcpp::spin(std::make_sharedMinimalPublisher());rclcpp::shutdown();return 0; } 2.2 添加依赖 导航回到已为您创建和文件的ros2_ws/src/cpp_pubsub目录。CMakeLists.txtpackage.xml package.xml使用文本编辑器打开。 如上一篇教程中所述请务必填写description、maintainer和license标签 descriptionExamples of minimal publisher/subscriber using rclcpp/description maintainer emailyouemail.comYour Name/maintainer licenseApache License 2.0/license在 buildtool 依赖项后添加新行ament_cmake并粘贴与节点的 include 语句相对应的以下依赖项 dependrclcpp/depend dependstd_msgs/depend这声明了包的需求rclcpp以及std_msgs其代码何时执行。 确保保存文件。 2.3 CMakeLists.txt 现在打开CMakeLists.txt文件。在现有依赖项下方添加以下行find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) find_package(std_msgs REQUIRED)之后添加可执行文件并命名它talker以便您可以使用以下命令运行节点ros2 run add_executable(talker src/publisher_member_function.cpp) ament_target_dependencies(talker rclcpp std_msgs)最后添加该install(TARGETS…)部分以便可以找到您的可执行文件ros2 run install(TARGETStalkerDESTINATION lib/${PROJECT_NAME})您可以通过删除一些不必要的部分和注释来清理您的CMakeLists.txt内容因此它看起来像这样 cmake_minimum_required(VERSION 3.5) project(cpp_pubsub)# Default to C14 if(NOT CMAKE_CXX_STANDARD)set(CMAKE_CXX_STANDARD 14) endif()if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES Clang)add_compile_options(-Wall -Wextra -Wpedantic) endif()find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) find_package(std_msgs REQUIRED)add_executable(talker src/publisher_member_function.cpp) ament_target_dependencies(talker rclcpp std_msgs)install(TARGETStalkerDESTINATION lib/${PROJECT_NAME})ament_package()您现在可以构建包获取本地安装文件并运行它但我们首先创建订阅者节点以便您可以看到完整的系统在工作。 3 写入订阅者节点 返回ros2_ws/src/cpp_pubsub/src创建下一个节点。在终端中输入以下代码 Linux苹果系统视窗 wget -O subscriber_member_function.cpp https://raw.githubusercontent.com/ros2/examples/galactic/rclcpp/topics/minimal_subscriber/member_function.cppls现在在控制台输入将返回 publisher_member_function.cpp subscriber_member_function.cppsubscriber_member_function.cpp使用文本编辑器打开。 #include memory#include rclcpp/rclcpp.hpp #include std_msgs/msg/string.hpp using std::placeholders::_1;class MinimalSubscriber : public rclcpp::Node {public:MinimalSubscriber(): Node(minimal_subscriber){subscription_ this-create_subscriptionstd_msgs::msg::String(topic, 10, std::bind(MinimalSubscriber::topic_callback, this, _1));}private:void topic_callback(const std_msgs::msg::String msg) const{RCLCPP_INFO(this-get_logger(), I heard: %s, msg.data.c_str());}rclcpp::Subscriptionstd_msgs::msg::String::SharedPtr subscription_; };int main(int argc, char * argv[]) {rclcpp::init(argc, argv);rclcpp::spin(std::make_sharedMinimalSubscriber());rclcpp::shutdown();return 0; }3.1 检查代码 订阅者节点的代码与发布者的代码几乎相同。现在节点已命名minimal_subscriber构造函数使用节点的create_subscription类来执行回调。 没有计时器因为订阅者只需在数据发布到topic主题时做出响应。 public:MinimalSubscriber(): Node(minimal_subscriber){subscription_ this-create_subscriptionstd_msgs::msg::String(topic, 10, std::bind(MinimalSubscriber::topic_callback, this, _1));}回想一下主题教程发布者和订阅者使用的主题名称和消息类型必须匹配才能允许他们进行通信。 该topic_callback函数接收通过主题发布的字符串消息数据并使用宏将其简单地写入控制台RCLCPP_INFO。 该类中唯一的字段声明是订阅。 private:void topic_callback(const std_msgs::msg::String msg) const{RCLCPP_INFO(this-get_logger(), I heard: %s, msg.data.c_str());}rclcpp::Subscriptionstd_msgs::msg::String::SharedPtr subscription_;功能main完全相同只是现在它旋转节点MinimalSubscriber。对于发布者节点来说旋转意味着启动计时器但对于订阅者来说它只是意味着准备好接收消息。 由于该节点与发布者节点具有相同的依赖关系因此无需添加任何新内容package.xml。 3.2 CMakeLists.txt 重新打开CMakeLists.txt并在发布者条目下方添加订阅者节点的可执行文件和目标。 add_executable(listener src/subscriber_member_function.cpp) ament_target_dependencies(listener rclcpp std_msgs)install(TARGETStalkerlistenerDESTINATION lib/${PROJECT_NAME})确保保存文件然后您的发布/订阅系统就可以使用了。 4 构建并运行 您可能已经安装了rclcpp和std_msgs软件包作为 ROS 2 系统的一部分。在构建之前最好rosdep在工作区的根目录 ( ros2_ws) 中运行以检查是否缺少依赖项 Linux苹果系统视窗 rosdep install -i --from-path src --rosdistro galactic -y仍在工作区的根目录中ros2_ws构建新包 Linux苹果系统视窗 colcon build --packages-select cpp_pubsub打开一个新终端导航到ros2_ws并获取安装文件 Linux苹果系统视窗 . install/setup.bash现在运行 talker 节点 ros2 run cpp_pubsub talker终端应开始每 0.5 秒发布一次信息消息如下所示 [INFO] [minimal_publisher]: Publishing: Hello World: 0 [INFO] [minimal_publisher]: Publishing: Hello World: 1 [INFO] [minimal_publisher]: Publishing: Hello World: 2 [INFO] [minimal_publisher]: Publishing: Hello World: 3 [INFO] [minimal_publisher]: Publishing: Hello World: 4打开另一个终端再次从内部获取安装文件ros2_ws然后启动侦听器节点 ros2 run cpp_pubsub listener侦听器将开始将消息打印到控制台从发布者当时的消息计数开始如下所示 [INFO] [minimal_subscriber]: I heard: Hello World: 10 [INFO] [minimal_subscriber]: I heard: Hello World: 11 [INFO] [minimal_subscriber]: I heard: Hello World: 12 [INFO] [minimal_subscriber]: I heard: Hello World: 13 [INFO] [minimal_subscriber]: I heard: Hello World: 14在每个终端中输入CtrlC以停止节点旋转。
http://www.pierceye.com/news/152262/

相关文章:

  • 建设领域信用系统网站邢台网站建设讯息
  • 建设网站技术人员先进事迹无锡有哪些做网站的公司
  • 2016网站设计欣赏企业网站推广建设
  • 国外简洁的网站跨境电商服务平台有哪些
  • 国内做网站技术支持 网站建设
  • 绍兴做团购的网站织梦转易优cms
  • 百度 网站 质量度扬州市工程建设招标网
  • 营销网站建设流程图优化营商环境发言稿
  • 设计网站公司有哪些怎么做网店
  • 高端的网站设计费用外贸营销型网站建设平台
  • 买源码做网站简单嘛贵阳百度seo点击软件
  • 省建设注册管理网站网站的维护和推广
  • wordpress 插件站wordpress本地mp3
  • 爱站工具包的主要功能很有设计感的企业网站
  • 地下城钓鱼网站如何做iis添加网站无法访问
  • 招聘网站大全网站开发liucheng
  • erlang做网站优势深圳集团网站建设公司好
  • 烟台公司建网站seo网站推广 沈阳
  • 没有网站做APP企业网站模板建站
  • 国内炫酷的网站首页网站开发交易平台
  • 大型网站建设公司制作网站好大夫在线免费咨询
  • 有哪些设计的很优秀的网站诸暨市住房建设局网站
  • 建设网站网站建站延吉手机网站建设开发
  • 网站建设一意见08wordpress主题
  • 做网站备案不少天网络设计包括哪些
  • 仿腾讯视频网站源码个人制作网站工具
  • 泉州网站制作建设163注册企业邮箱
  • 漳州市建设局网站6热e国产-网站正在建设中-手机版
  • 给公司做网站数据分析江门网站设计制作
  • 怎么做新网站安宁网站建设熊掌号