国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ROS2學(xué)習(xí)筆記三:話題Topic

這篇具有很好參考價(jià)值的文章主要介紹了ROS2學(xué)習(xí)筆記三:話題Topic。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

前言

1 話題簡(jiǎn)介

2 常用指令

3?RCLCPP實(shí)現(xiàn)實(shí)現(xiàn)話題

3.1 創(chuàng)建工作空間

3.2 代碼編寫

3.2.1 發(fā)布端編寫

3.2.2 發(fā)布端編寫


前言

ROS2中的一個(gè)重要概念是話題(Topic)。話題是一種通過(guò)發(fā)布者和訂閱者之間進(jìn)行異步通信的機(jī)制。發(fā)布者(Publisher)將消息發(fā)布到特定的話題上,而訂閱者(Subscriber)則可以選擇訂閱感興趣的話題,并接收發(fā)布者發(fā)送的消息。

話題可以用來(lái)傳遞各種類型的消息,例如傳感器數(shù)據(jù)、機(jī)器人狀態(tài)、控制指令等。每個(gè)話題有一個(gè)唯一的名稱,并且可以有多個(gè)發(fā)布者和訂閱者。

ROS2提供了一套API來(lái)操作話題。開發(fā)者可以使用語(yǔ)言(如C++和Python)來(lái)編寫發(fā)布者和訂閱者節(jié)點(diǎn),并在運(yùn)行時(shí)將它們連接到ROS2系統(tǒng)中。

使用話題,開發(fā)者可以實(shí)現(xiàn)多個(gè)節(jié)點(diǎn)之間的解耦和靈活性。不同的節(jié)點(diǎn)可以以不同的速度發(fā)布和接收消息,可以動(dòng)態(tài)地增加或刪除節(jié)點(diǎn),而不會(huì)影響其他節(jié)點(diǎn)的運(yùn)行。

總結(jié)來(lái)說(shuō),ROS2中的話題機(jī)制提供了一種靈活和可擴(kuò)展的通信方式,可以方便地實(shí)現(xiàn)不同節(jié)點(diǎn)之間的消息傳遞和協(xié)作。它是ROS2中重要的基礎(chǔ)組件之一,為構(gòu)建機(jī)器人應(yīng)用提供了強(qiáng)大的功能和便利的開發(fā)體驗(yàn)。

1 話題簡(jiǎn)介

支持1對(duì)1,1對(duì)多,多對(duì)1,多對(duì)多。

為了方便發(fā)送者和接收者進(jìn)行數(shù)據(jù)的交換,ROS2幫我們?cè)跀?shù)據(jù)傳遞時(shí)做好了消息的序列化和反序列化,而且ROS2的消息序列化與反序列化通信是可以做到跨編程語(yǔ)言、跨平臺(tái)和跨設(shè)備之間的。

一個(gè)節(jié)點(diǎn)發(fā)布數(shù)據(jù)到某個(gè)話題上,另外一個(gè)節(jié)點(diǎn)就可以通過(guò)訂閱話題拿到數(shù)據(jù)。

ROS2學(xué)習(xí)筆記三:話題Topic,學(xué)習(xí),筆記,ROS2,機(jī)器人

2 常用指令

首先運(yùn)行一個(gè)發(fā)布節(jié)點(diǎn):

ros2 run demo_nodes_cpp talker

查看上面發(fā)布節(jié)點(diǎn)的話題信息:?

查看話題列表

ros2 topic list -t?

打印話題

ros2 topic echo /chatter?

?查看topic信息

ros2 topic info ?/chatter 

查看消息類型

ros2 interface show std_msgs/msg/String

手動(dòng)發(fā)布命令

ros2 topic pub /chatter std_msgs/msg/String 'data: "123"'

圖形化查看節(jié)點(diǎn)信息

rqt_graph

查看話題頻率

ros2 topic hz /chatter

3?RCLCPP實(shí)現(xiàn)實(shí)現(xiàn)話題

3.1 創(chuàng)建工作空間

cd project/
mkdir -p project/
cd project/
ros2 pkg create cpp_topic --build-type ament_cmake --dependencies rclcpp
touch cpp_topic/src/publisher.cpp

3.2 代碼編寫

調(diào)用Node的成員函數(shù)create_publisher并傳入對(duì)應(yīng)的參數(shù)即可。通過(guò)文檔可以看出,至少需要傳入消息類型(msgT)、話題名稱(topic_name)和 服務(wù)質(zhì)量(qos)。
官方rclcpp文檔地址:rclcpp: rclcpp: ROS Client Library for C++

ROS2學(xué)習(xí)筆記三:話題Topic,學(xué)習(xí),筆記,ROS2,機(jī)器人

消息接口是ROS2通信時(shí)必須的一部分,通過(guò)消息接口ROS2才能完成消息的序列化和反序列化。ROS2為定義好了常用的消息接口,并生成了相應(yīng)的C++和Python的依賴文件,通過(guò)腳本直接導(dǎo)入。

通過(guò)ros2 pkg指令創(chuàng)建的功能包目錄結(jié)構(gòu)如下:

$ tree -a

.
└── cpp_topic
? ? ├── CMakeLists.txt
? ? ├── include
? ? │???└── cpp_topic
? ? ├── package.xml
? ? └── src
? ? ? ? └── publisher.cpp

3.2.1 發(fā)布端編寫

publisher.cpp

/*****ros2官方demo*******/
#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;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.8)
project(cpp_topic)

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  add_compile_options(-Wall -Wextra -Wpedantic)
endif()

# find dependencies
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)

add_executable(pulisher src/publisher.cpp)
ament_target_dependencies(pulisher rclcpp std_msgs)

install(TARGETS
  pulisher
  DESTINATION lib/${PROJECT_NAME})

if(BUILD_TESTING)
  find_package(ament_lint_auto REQUIRED)
  # the following line skips the linter which checks for copyrights
  # comment the line when a copyright and license is added to all source files
  set(ament_cmake_copyright_FOUND TRUE)
  # the following line skips cpplint (only works in a git repo)
  # comment the line when this package is in a git repo and when
  # a copyright and license is added to all source files
  set(ament_cmake_cpplint_FOUND TRUE)
  ament_lint_auto_find_test_dependencies()
endif()

ament_package()

package.xml

<?xml version="1.0"?>
<?xml-model  schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
  <name>cpp_topic</name>
  <version>0.0.0</version>
  <description>TODO: Package description</description>
  <maintainer email="xxxxx@xxx.com">linux</maintainer>
  <license>TODO: License declaration</license>

  <buildtool_depend>ament_cmake</buildtool_depend>

  <depend>rclcpp</depend>
  <depend>std_msgs</depend>

  <test_depend>ament_lint_auto</test_depend>
  <test_depend>ament_lint_common</test_depend>

  <export>
    <build_type>ament_cmake</build_type>
  </export>
</package>

在project目錄運(yùn)行如下編譯指令

colcon build --packages-select cpp_topic

編譯完成后目錄如下:

ROS2學(xué)習(xí)筆記三:話題Topic,學(xué)習(xí),筆記,ROS2,機(jī)器人

運(yùn)行

source install/setup.bash
ros2 run cpp_topic pulisher

ROS2學(xué)習(xí)筆記三:話題Topic,學(xué)習(xí),筆記,ROS2,機(jī)器人

此時(shí)可以通過(guò)命令訂閱該topic

ROS2學(xué)習(xí)筆記三:話題Topic,學(xué)習(xí),筆記,ROS2,機(jī)器人

3.2.2 發(fā)布端編寫

上面過(guò)程中是通過(guò)ros2自動(dòng)的命令進(jìn)行話題的訂閱,下面使用c++代碼實(shí)現(xiàn)話題訂閱。

創(chuàng)建訂閱節(jié)點(diǎn)文件

touch cpp_topic/src/subscriber.cpp

subscriber.cpp:

/*****ros2官方demo*******/
#include <functional>
#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 & 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;
}

CMakeLists.txt增加如下代碼

add_executable(subscriber src/subscriber.cpp)
ament_target_dependencies(subscriber rclcpp std_msgs)

install(TARGETS
  subscriber
  DESTINATION lib/${PROJECT_NAME})

在project目錄運(yùn)行如下編譯指令

colcon build --packages-select cpp_topic

在project目錄先運(yùn)行上面的發(fā)布節(jié)點(diǎn)

source install/setup.bash
ros2 run cpp_topic pulisher

?新開一個(gè)終端進(jìn)入到project目錄,運(yùn)行訂閱節(jié)點(diǎn)

source install/setup.bash
ros2 run cpp_topic subscriber

ROS2學(xué)習(xí)筆記三:話題Topic,學(xué)習(xí),筆記,ROS2,機(jī)器人?

?

無(wú)論你是初學(xué)者還是有經(jīng)驗(yàn)的開發(fā)者,希望我的博客能對(duì)你的學(xué)習(xí)之路有所幫助。如果你覺(jué)得這篇文章有用,不妨點(diǎn)擊點(diǎn)贊、收藏,或者留下你的評(píng)論分享你的見(jiàn)解和經(jīng)驗(yàn),也歡迎你對(duì)我博客的內(nèi)容提出建議和問(wèn)題。每一次的點(diǎn)贊、評(píng)論、分享和關(guān)注都是對(duì)我的最大支持,也是對(duì)我持續(xù)分享和創(chuàng)作的動(dòng)力。

閱讀我的CSDN主頁(yè),解鎖更多精彩內(nèi)容:Tech Embedded-CSDN博客文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-806972.html

到了這里,關(guān)于ROS2學(xué)習(xí)筆記三:話題Topic的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 2 ROS2話題通訊基礎(chǔ)(1)

    2 ROS2話題通訊基礎(chǔ)(1)

    其他ROS2學(xué)習(xí)筆記: ROS2學(xué)習(xí)筆記 代碼倉(cāng)庫(kù):Github連接地址 歡迎各位互相學(xué)習(xí)交流 話題通信是一種單向通信模型,一方發(fā)布數(shù)據(jù),一方訂閱數(shù)據(jù),適用于連續(xù)不間斷的通訊場(chǎng)景,如小車SLAM導(dǎo)航過(guò)程中的位姿信息等等。話題是一個(gè)通訊的管道,ROS2的話題發(fā)布方和接收方無(wú)論是

    2024年02月02日
    瀏覽(28)
  • ros2 基礎(chǔ)學(xué)習(xí) 15- URDF:機(jī)器人建模方法

    ros2 基礎(chǔ)學(xué)習(xí) 15- URDF:機(jī)器人建模方法

    ROS是機(jī)器人操作系統(tǒng),當(dāng)然要給機(jī)器人使用啦,不過(guò)在使用之前,還得讓ROS認(rèn)識(shí)下我們使用的機(jī)器人,如何把一個(gè)機(jī)器人介紹給ROS呢? 為此,ROS專門提供了一種機(jī)器人建模方法——URDF(Unified Robot Description Format,統(tǒng)一機(jī)器人描述格式),用來(lái)描述機(jī)器人外觀、性能等各方面屬

    2024年02月01日
    瀏覽(31)
  • ROS2之topic

    ROS2之topic

    查看topic輸出: ros2 topic echo topic_name 查看topic頻率: ros2 topic hz topic_name 查看有哪些topic: ros2 topic list 查看每個(gè)topic及其message type: ros2 topic list -t 在某個(gè)topic上使用命令行pub數(shù)據(jù): 按默認(rèn)周期發(fā)送: ros2 topic pub topic_name msg_type \\\'args\\\' 注意,args要使用yaml格式 只發(fā)送一次: ros2

    2024年02月11日
    瀏覽(19)
  • 制作一個(gè)ros2機(jī)器人需要學(xué)習(xí)的課本(還不全面)

    1《C語(yǔ)言》---這個(gè)是基礎(chǔ)200頁(yè)左右 2《C++》-----500-600頁(yè) 3《高等數(shù)學(xué)》-----沒(méi)有這個(gè)無(wú)法計(jì)算動(dòng)態(tài)電路 4《電路分析》-----沒(méi)有這個(gè)沒(méi)法設(shè)計(jì)硬件電路 5《英語(yǔ)5000詞匯》最少也得達(dá)到美國(guó)小學(xué)生畢業(yè)時(shí)候的詞匯水平5000詞匯量 6《ros1》因?yàn)閞os2沒(méi)有一本中文課本---有那么一本寫的沒(méi)

    2024年02月05日
    瀏覽(24)
  • 【ros2 control 機(jī)器人驅(qū)動(dòng)開發(fā)】簡(jiǎn)單雙關(guān)節(jié)機(jī)器人學(xué)習(xí)-example 1

    【ros2 control 機(jī)器人驅(qū)動(dòng)開發(fā)】簡(jiǎn)單雙關(guān)節(jié)機(jī)器人學(xué)習(xí)-example 1

    【ros2 control 機(jī)器人驅(qū)動(dòng)開發(fā)】簡(jiǎn)單雙關(guān)節(jié)機(jī)器人學(xué)習(xí)-example 1 本系列文件主要有以下目標(biāo)和內(nèi)容: 為系統(tǒng)、傳感器和執(zhí)行器創(chuàng)建 HardwareInterface 以URDF文件的形式創(chuàng)建機(jī)器人描述 加載配置并使用啟動(dòng)文件啟動(dòng)機(jī)器人 控制RRBot的兩個(gè)關(guān)節(jié)(兩旋轉(zhuǎn)關(guān)節(jié)機(jī)器人) 六自由度機(jī)器人的

    2024年02月04日
    瀏覽(58)
  • ROS學(xué)習(xí)筆記(二):ROS話題的發(fā)布與訂閱

    第十講 ?發(fā)布者Publisher的編程 1. 創(chuàng)建功能包 learning_topic? $ cd ~/test1/src? $ catkin_create_pkg learning_topic std_msgs rospy roscpp geometry_msgs turtlesim 2.執(zhí)行C++文件程序如下:放在創(chuàng)建的功能包的/learning_topic/src里 程序名為velocity_publisher.cpp 2.如何實(shí)現(xiàn)一個(gè)發(fā)布者(發(fā)布到ros自帶節(jié)點(diǎn) ) (1)初

    2024年02月04日
    瀏覽(32)
  • ros2機(jī)器人foxy版用筆記本攝像頭跑單目orb_slam3

    ros2機(jī)器人foxy版用筆記本攝像頭跑單目orb_slam3

    環(huán)境: ??? Ubuntu 20.04 ??? ROS2 foxy ??? OpenCV 4.4.0(4版本以上的應(yīng)該都可以) 安裝orb_slam3 搭建環(huán)境參考: https://mp.csdn.net/mp_blog/creation/editor/129137521 這將在lib文件夾中創(chuàng)建libORB_SLAM3.so,只需要安裝到這一步,生成 libORB_SLAM3.so 動(dòng)態(tài)庫(kù)即可。后面的ros程序安裝是ros1的,ros1早晚會(huì)

    2024年02月11日
    瀏覽(22)
  • 【ROS2機(jī)器人入門到實(shí)戰(zhàn)】2.ROS與ROS2對(duì)比

    【ROS2機(jī)器人入門到實(shí)戰(zhàn)】2.ROS與ROS2對(duì)比

    當(dāng)前平臺(tái)文章匯總地址:ROS2機(jī)器人從入門到實(shí)戰(zhàn) 獲取完整教程及配套資料代碼,請(qǐng)關(guān)注公眾號(hào)魚香ROS獲取 教程配套機(jī)器人開發(fā)平臺(tái):兩驅(qū)版| 四驅(qū)版 為方便交流,搭建了機(jī)器人技術(shù)問(wèn)答社區(qū):地址 fishros.org.cn 經(jīng)過(guò)上一節(jié)的學(xué)習(xí),相信你已經(jīng)對(duì)ROS和ROS2的發(fā)展有了一定的了解

    2024年02月04日
    瀏覽(28)
  • 【ROS2機(jī)器人入門到實(shí)戰(zhàn)】ROS2接口介紹

    【ROS2機(jī)器人入門到實(shí)戰(zhàn)】ROS2接口介紹

    當(dāng)前平臺(tái)文章匯總地址:ROS2機(jī)器人從入門到實(shí)戰(zhàn) 獲取完整教程及配套資料代碼,請(qǐng)關(guān)注公眾號(hào)魚香ROS獲取 教程配套機(jī)器人開發(fā)平臺(tái):兩驅(qū)版| 四驅(qū)版 為方便交流,搭建了機(jī)器人技術(shù)問(wèn)答社區(qū):地址 fishros.org.cn 本節(jié)小魚將會(huì)帶你學(xué)習(xí)認(rèn)識(shí)一個(gè)新的概念,叫做interface,即接口。

    2024年02月05日
    瀏覽(26)
  • 【ROS2機(jī)器人入門到實(shí)戰(zhàn)】ROS2節(jié)點(diǎn)介紹

    【ROS2機(jī)器人入門到實(shí)戰(zhàn)】ROS2節(jié)點(diǎn)介紹

    當(dāng)前平臺(tái)文章匯總地址:ROS2機(jī)器人從入門到實(shí)戰(zhàn) 獲取完整教程及配套資料代碼,請(qǐng)關(guān)注公眾號(hào)魚香ROS獲取 教程配套機(jī)器人開發(fā)平臺(tái):兩驅(qū)版| 四驅(qū)版 為方便交流,搭建了機(jī)器人技術(shù)問(wèn)答社區(qū):地址 fishros.org.cn ROS2中每一個(gè)節(jié)點(diǎn)也是只負(fù)責(zé)一個(gè)單獨(dú)的模塊化的功能(比如一個(gè)

    2024年02月06日
    瀏覽(61)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包