0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

机器人多节点话题通信编程方法

麦辣鸡腿堡 来源:古月居 作者:古月居 2023-11-27 17:48 次阅读

编程方法

了解了话题的基本原理,接下来我们就要开始编写代码啦。

创建工作空间

请大家先按照这个流程创建工作空间、下载课程的例程代码,并进行编译。

$ mkdir –p dev_ws/src
$ cd /userdata/dev_ws/src
$ git clone https://gitee.com/guyuehome/togetherros_tutorials.git
$ cd /userdata/dev_ws/
$ colcon build

图片

运行示例程序

编译成功后,我们尝试运行话题通信的Hello World例程,在这个例程中,我们会先创建一个发布者,发布话题“chatter”,周期发送“Hello World”这个字符串,消息类型是ROS中标准定义的String,再创建一个订阅者,订阅“chatter”这个话题,从而接收到“Hello World”这个字符串。

图片

$ source /opt/tros/local_setup.bash
$ source install/local_setup.bash
$ ros2 run learning_topic_cpp talker
$ ros2 run learning_topic_cpp listener

图片

这就是TogetherROS系统中话题通信的方法,依然沿用了ROS2中话题通信的完整流程。

代码解析

发布者的实现方法

publisher_member_function.cpp:

#include < chrono >
#include < functional >
#include < memory >
#include < string >


#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"


using 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_publisher< std_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::Publisher< std_msgs::msg::String >::SharedPtr publisher_;
    size_t count_;
};


int main(int argc, char * argv[])
{
  rclcpp::init(argc, argv);
  rclcpp::spin(std::make_shared< MinimalPublisher >());
  rclcpp::shutdown();
  return 0;
}

订阅者的实现方法

subscriber_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_subscription< std_msgs::msg::String >(
      "topic", 10, std::bind(&MinimalSubscriber::topic_callback, this, _1));
    }


  private:
    void topic_callback(const std_msgs::msg::String::SharedPtr msg) const
{
      RCLCPP_INFO(this- >get_logger(), "I heard: '%s'", msg- >data.c_str());
    }
    rclcpp::Subscription< std_msgs::msg::String >::SharedPtr subscription_;
};


int main(int argc, char * argv[])
{
  rclcpp::init(argc, argv);
  rclcpp::spin(std::make_shared< MinimalSubscriber >());
  rclcpp::shutdown();
  return 0;
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    210

    文章

    28191

    浏览量

    206483
  • 编程
    +关注

    关注

    88

    文章

    3591

    浏览量

    93592
  • 程序
    +关注

    关注

    116

    文章

    3775

    浏览量

    80839
收藏 人收藏

    评论

    相关推荐

    机器人设计中PID控制的编程方法是什么?

    什么是PID控制?机器人设计中PID控制的编程方法是什么?
    发表于 06-30 06:53

    机器人编程的区别

    在前一篇文章中讲了机器人编程的区别,但总感觉讲的比较空泛,这篇文章继续讲讲那些区别。计算机编程机器人编程最大的区别就是一个是控制虚拟的,
    发表于 09-01 07:12

    Motoman机器人离线编程

    欢迎关注Jungle的Motoman机器人离线编程专栏系列文章:Motoman机器人离线编程——Motocom32开发简介Motoman机器人
    发表于 09-07 07:33

    多节点大容量FPGA系统的远程升级方法

    多节点大容量FPGA系统的远程升级方法:针对目前广泛使用的以大容量FPGA 实现主要功能的多节点系统的远程升级问题,提出了一种基于ATmega64 单片机和RS485 总线以及接入以太网的主控
    发表于 11-20 17:42 17次下载

    多节点大容量FPGA系统的远程升级方法

    多节点大容量FPGA系统的远程升级方法 针对目前广泛使用的以大容量FPGA实现主要功能的多节点系统的远程升级问题,提出了一种基于ATmega64单片机和RS485总
    发表于 03-29 15:09 807次阅读
    <b class='flag-5'>多节点</b>大容量FPGA系统的远程升级<b class='flag-5'>方法</b>

    机器人多传感器测距系统研究与设计

    机器人多传感器测距系统研究与设计......
    发表于 12-23 14:46 10次下载

    机器人多传感器信息融合测距系统设计

    机器人多传感器信息融合测距系统设计....
    发表于 12-23 15:00 16次下载

    智能机器人多传感器融合感知方法

    智能机器人多传感器融合感知方法,感兴趣的小伙伴们可以瞧一瞧。
    发表于 09-20 16:10 19次下载

    常用的机器人编程方法有哪些

    机器人编程【robotprogramming】为使机器人完成某种任务而设置的动作顺序描述。机器人运动和作业的指令都是由程序进行控制,常见的编制方法
    发表于 08-15 17:41 1.6w次阅读

    基于区块链的智能机器人多传感信息加密控制方法

    基于区块链的智能机器人多传感信息加密控制方法
    发表于 06-23 10:44 5次下载

    焊接机器人编程方法及流程技巧

    焊接机器人编程方法有什么?所谓焊接机器人是从事焊接的工业机器人,广泛应用于汽车制造、造船、航空等领域。使用
    的头像 发表于 01-13 10:47 1.4w次阅读
    焊接<b class='flag-5'>机器人</b><b class='flag-5'>编程</b><b class='flag-5'>方法</b>及流程技巧

    焊接机器人多少钱一台?

    焊接机器人多少钱一台?根据机器人本体的型号、臂长和焊机型号的不同价格也不尽相同,市面上的焊接机器人价格范围在3-20万不等。
    的头像 发表于 03-08 09:17 3706次阅读
    焊接<b class='flag-5'>机器人多</b>少钱一台?

    焊接机器人编程方法及流程技巧

    焊接机器人编程方法有什么?所谓焊接机器人是从事焊接的工业机器人,广泛应用于汽车制造、造船、航空等领域。使用
    的头像 发表于 07-13 16:46 2052次阅读
    焊接<b class='flag-5'>机器人</b><b class='flag-5'>编程</b><b class='flag-5'>方法</b>及流程技巧

    机器人多节点动作通信编程方法

    编程方法 相比之前话题和服务的程序,动作通信的例程相对较长,我们一起来运行并分析一下。 运行示例程序 $ source /opt/tros/local_setup.bash $ sou
    的头像 发表于 11-27 17:10 399次阅读
    <b class='flag-5'>机器人多节点</b>动作<b class='flag-5'>通信</b><b class='flag-5'>编程</b><b class='flag-5'>方法</b>

    机器人多节点话题通信模型介绍

    节点实现了机器人各种各样的功能,但这些功能并不是独立的,之间会有千丝万缕的联系,其中最重要的一种联系方式就是话题,它是节点间传递数据的桥梁。 通信
    的头像 发表于 11-27 17:25 448次阅读
    <b class='flag-5'>机器人多节点</b><b class='flag-5'>话题</b><b class='flag-5'>通信</b>模型介绍