0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

機(jī)器人多節(jié)點話題通信編程方法

麥辣雞腿堡 ? 來源:古月居 ? 作者:古月居 ? 2023-11-27 17:48 ? 次閱讀

編程方法

了解了話題的基本原理,接下來我們就要開始編寫代碼啦。

創(chuàng)建工作空間

請大家先按照這個流程創(chuàng)建工作空間、下載課程的例程代碼,并進(jìn)行編譯。

$ 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例程,在這個例程中,我們會先創(chuàng)建一個發(fā)布者,發(fā)布話題“chatter”,周期發(fā)送“Hello World”這個字符串,消息類型是ROS中標(biāo)準(zhǔn)定義的String,再創(chuàng)建一個訂閱者,訂閱“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系統(tǒng)中話題通信的方法,依然沿用了ROS2中話題通信的完整流程。

代碼解析

發(fā)布者的實現(xiàn)方法

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;
}

訂閱者的實現(xiàn)方法

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;
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 機(jī)器人
    +關(guān)注

    關(guān)注

    210

    文章

    28007

    瀏覽量

    205579
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3544

    瀏覽量

    93489
  • 程序
    +關(guān)注

    關(guān)注

    115

    文章

    3749

    瀏覽量

    80672
收藏 人收藏

    評論

    相關(guān)推薦

    機(jī)器人設(shè)計中PID控制的編程方法是什么?

    什么是PID控制?機(jī)器人設(shè)計中PID控制的編程方法是什么?
    發(fā)表于 06-30 06:53

    機(jī)器人編程的區(qū)別

    在前一篇文章中講了機(jī)器人編程的區(qū)別,但總感覺講的比較空泛,這篇文章繼續(xù)講講那些區(qū)別。計算機(jī)編程機(jī)器人編程最大的區(qū)別就是一個是控制虛擬的,
    發(fā)表于 09-01 07:12

    Motoman機(jī)器人離線編程

    歡迎關(guān)注Jungle的Motoman機(jī)器人離線編程專欄系列文章:Motoman機(jī)器人離線編程——Motocom32開發(fā)簡介Motoman機(jī)器人
    發(fā)表于 09-07 07:33

    多節(jié)點大容量FPGA系統(tǒng)的遠(yuǎn)程升級方法

    多節(jié)點大容量FPGA系統(tǒng)的遠(yuǎn)程升級方法:針對目前廣泛使用的以大容量FPGA 實現(xiàn)主要功能的多節(jié)點系統(tǒng)的遠(yuǎn)程升級問題,提出了一種基于ATmega64 單片機(jī)和RS485 總線以及接入以太網(wǎng)的主控
    發(fā)表于 11-20 17:42 ?17次下載

    多節(jié)點大容量FPGA系統(tǒng)的遠(yuǎn)程升級方法

    多節(jié)點大容量FPGA系統(tǒng)的遠(yuǎn)程升級方法 針對目前廣泛使用的以大容量FPGA實現(xiàn)主要功能的多節(jié)點系統(tǒng)的遠(yuǎn)程升級問題,提出了一種基于ATmega64單片機(jī)和RS485總
    發(fā)表于 03-29 15:09 ?798次閱讀
    <b class='flag-5'>多節(jié)點</b>大容量FPGA系統(tǒng)的遠(yuǎn)程升級<b class='flag-5'>方法</b>

    機(jī)器人多傳感器測距系統(tǒng)研究與設(shè)計

    機(jī)器人多傳感器測距系統(tǒng)研究與設(shè)計......
    發(fā)表于 12-23 14:46 ?10次下載

    機(jī)器人多傳感器信息融合測距系統(tǒng)設(shè)計

    機(jī)器人多傳感器信息融合測距系統(tǒng)設(shè)計....
    發(fā)表于 12-23 15:00 ?16次下載

    智能機(jī)器人多傳感器融合感知方法

    智能機(jī)器人多傳感器融合感知方法,感興趣的小伙伴們可以瞧一瞧。
    發(fā)表于 09-20 16:10 ?19次下載

    常用的機(jī)器人編程方法有哪些

    機(jī)器人編程【robotprogramming】為使機(jī)器人完成某種任務(wù)而設(shè)置的動作順序描述。機(jī)器人運動和作業(yè)的指令都是由程序進(jìn)行控制,常見的編制方法
    發(fā)表于 08-15 17:41 ?1.6w次閱讀

    基于區(qū)塊鏈的智能機(jī)器人多傳感信息加密控制方法

    基于區(qū)塊鏈的智能機(jī)器人多傳感信息加密控制方法
    發(fā)表于 06-23 10:44 ?5次下載

    焊接機(jī)器人編程方法及流程技巧

    焊接機(jī)器人編程方法有什么?所謂焊接機(jī)器人是從事焊接的工業(yè)機(jī)器人,廣泛應(yīng)用于汽車制造、造船、航空等領(lǐng)域。使用
    的頭像 發(fā)表于 01-13 10:47 ?1.4w次閱讀
    焊接<b class='flag-5'>機(jī)器人</b><b class='flag-5'>編程</b><b class='flag-5'>方法</b>及流程技巧

    焊接機(jī)器人多少錢一臺?

    焊接機(jī)器人多少錢一臺?根據(jù)機(jī)器人本體的型號、臂長和焊機(jī)型號的不同價格也不盡相同,市面上的焊接機(jī)器人價格范圍在3-20萬不等。
    的頭像 發(fā)表于 03-08 09:17 ?3552次閱讀
    焊接<b class='flag-5'>機(jī)器人多</b>少錢一臺?

    焊接機(jī)器人編程方法及流程技巧

    焊接機(jī)器人編程方法有什么?所謂焊接機(jī)器人是從事焊接的工業(yè)機(jī)器人,廣泛應(yīng)用于汽車制造、造船、航空等領(lǐng)域。使用
    的頭像 發(fā)表于 07-13 16:46 ?1944次閱讀
    焊接<b class='flag-5'>機(jī)器人</b><b class='flag-5'>編程</b><b class='flag-5'>方法</b>及流程技巧

    機(jī)器人多節(jié)點動作通信編程方法

    編程方法 相比之前話題和服務(wù)的程序,動作通信的例程相對較長,我們一起來運行并分析一下。 運行示例程序 $ source /opt/tros/local_setup.bash $ sou
    的頭像 發(fā)表于 11-27 17:10 ?350次閱讀
    <b class='flag-5'>機(jī)器人多節(jié)點</b>動作<b class='flag-5'>通信</b><b class='flag-5'>編程</b><b class='flag-5'>方法</b>

    機(jī)器人多節(jié)點話題通信模型介紹

    節(jié)點實現(xiàn)了機(jī)器人各種各樣的功能,但這些功能并不是獨立的,之間會有千絲萬縷的聯(lián)系,其中最重要的一種聯(lián)系方式就是話題,它是節(jié)點間傳遞數(shù)據(jù)的橋梁。 通信
    的頭像 發(fā)表于 11-27 17:25 ?420次閱讀
    <b class='flag-5'>機(jī)器人多節(jié)點</b><b class='flag-5'>話題</b><b class='flag-5'>通信</b>模型介紹