主題是充當管道的通道,其他ros節點可以在該通道上發布或讀取資訊。我們下面來進行ros2話題程式設計。
(執行環境ubuntu18.04+ros2dashing)
我們首先建立乙個名為topic_publisher_pkg的新軟體包。 建立程式包時,新增rclcpp和std_msgs作為依賴項。
為了建立乙個具有roscpp和std_msgs作為依賴關係的包,您應該使用以下命令:
[
]: ros2 pkg create topic_publisher_pkg --build-type ament_cmake --dependencies rclcpp std_msgs
在src資料夾下建立乙個******_topic_publisher.cpp
//匯入必要的rclcpp庫
#include
"rclcpp/rclcpp.hpp"
//從std_msgs功能包匯入int32訊息型別
#include
"std_msgs/msg/int32.hpp"
intmain
(int argc,
char
*ar**)
rclcpp::
shutdown()
;return0;
}
在cmake檔案新增
add_executable(******_publisher_node src/******_topic_publisher.cpp)
ament_target_dependencies(******_publisher_node rclcpp std_msgs)
install(targets
******_publisher_node
destination lib/$
)
編譯完成後執行
ros2 run topic_publisher_pkg ******_publisher_node
執行節點
雖然什麼也沒有發生,但是剛剛建立了乙個名為「/counter」話題,我們可以用下面這條指令輸出它:
ros2 topic echo /counter
data: 59
data: 60
data: 61
data: 62
data: 63
data: 64
...
但是,在ros2中,上面這種編碼風格將被棄用,這是因為composition(組成)。在ros2中,與ros1的顯著區別是引入了composition(組合)的概念。從根本上講,這意味著您將能夠在單個程序中組合(執行)多個節點。您可以在這裡閱讀更多有關它的資訊:https:
但是,為了能夠使用節點組合,您將需要以更加物件導向的方式對指令碼進行程式設計。因此,您檢查的第乙個指令碼******_topic_publisher.cpp將無法使用節點組成,在下面,您可以看一下執行完全相同的操作的指令碼,但是該指令碼是使用可組合的方法和類進行編碼的。
#include
"rclcpp/rclcpp.hpp"
#include
"std_msgs/msg/int32.hpp"
#include
using
namespace std::chrono_literals;
//定義乙個類,繼承自rclcpp::node
class
******publisher
:public rclcpp::node
private
://上述的timer_callback函式
void
timer_callback()
//定義上面用到的發布者和計時器(timer)的物件
rclcpp::timerbase::sharedptr timer_;
rclcpp::publisher
::sharedptr publisher_;
size_t count_;};
intmain
(int argc,
char
*ar**)
同樣在cmake檔案新增
add_executable(******_topic_publisher_composable src/******_topic_publisher_composable.cpp)
ament_target_dependencies(******_topic_publisher_composable rclcpp std_msgs)
install(targets
******_publisher_node
******_topic_publisher_composable #在install原來的基礎上新增這一句
destination lib/$
)
使用colcon build編譯後執行:
ros2 run topic_publisher_pkg ******_topic_publisher_composable
同樣使用ros2 topic echo counter可以看到和上面那個節點一樣的輸出。
(文章主要翻譯自ros2-in-5-days-e-book,並在其基礎上根據版本修改了一些東西)
git後續會慢慢更新。
(十三)ROS發布者和訂閱者
參考 本文實現發布者和訂閱者,發布者發布資訊,資訊的內容是編號,訂閱者訂閱發布者訊息,並將解析出來的編號儲存為檔案 直接上 新建發布者節點 include ros ros.h include std msgs string.h include int main int argc,char argv ...
ROS下第乙個發布者程式
int main int argc,char ar sudo gedit cmakelists.txt 修改該配置檔案 find package catkin required components roscpp geometry msgs include directories include a...
ROS基礎學習筆記(四) 發布者訂閱者簡單練習
在之前的功能包的基礎上,移動到功能包中的src資料夾下編輯發布者檔案 vim thetalker.cpp include include ros ros.h include std msgs string.h int main int argc char ar return 0 編輯訂閱者檔案 vi...