|
可以参照博主github上的demo,与官方提供的例子略有不同;
pub
#include <iostream>
#include <string>
#include <memory>
#include &#34;rclcpp/rclcpp.hpp&#34;
#include &#34;std_msgs/msg/string.hpp&#34;
int main(int argc, char* argv[]) {
rclcpp::init(argc, argv);
std::shared_ptr<rclcpp::Node> node = std::make_shared<rclcpp::Node>(&#34;talker&#34;);
std::shared_ptr<rclcpp::Publisher<std_msgs::msg::String>> publisher =
node->create_publisher<std_msgs::msg::String>(&#34;topic&#34;, 10);
rclcpp::WallRate loop_rate(10); // 表示频率,10HZ
auto msg = std_msgs::msg::String();
int count = 0;
while(rclcpp::ok()) {
msg.data = &#34;hello world: &#34; + std::to_string(count++);
publisher->publish(msg);
std::cout << &#34;talker send msg: &#34; << msg.data << &#34;\n&#34;;
loop_rate.sleep();
}
rclcpp::shutdown();
return 0;
}
Sub
#include <iostream>
#include <string>
#include <memory>
#include <functional>
#include &#34;rclcpp/rclcpp.hpp&#34;
#include &#34;std_msgs/msg/string.hpp&#34;
void callback(std::shared_ptr<std_msgs::msg::String> msg) {
std::cout << &#34;receive: &#34; << msg->data << &#34;\n&#34;;
}
int main(int argc, char* argv[]) {
rclcpp::init(argc, argv);
std::shared_ptr<rclcpp::Node> node = std::make_shared<rclcpp::Node>(&#34;listener&#34;);
auto subscriber = node->create_subscription<std_msgs::msg::String>(
&#34;topic&#34;, 10, std::bind(callback, std::placeholders::_1));
rclcpp::spin(node);
rclcpp::shutdown();
return 0;
}CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(ros2_demo)
find_package(rclcpp)
find_package(std_msgs)
add_executable(talker talker.cc)
ament_target_dependencies(talker
rclcpp
std_msgs
)
add_executable(listener listener.cc)
ament_target_dependencies(listener
rclcpp
std_msgs
)
 |
|