#include "rclcpp/rclcpp.hpp"
#include "sensor_msgs/msg/point_cloud2.hpp"
int num=0;
void chatterCallback(const sensor_msgs::msg::PointCloud2::SharedPtr msg)
{
num++;
std::cout << "I heard: " <<num<< std::endl;
}
int main(int argc, char **argv)
{
rclcpp::init(argc, argv);
auto node = rclcpp::Node::make_shared("talker");
auto m_pointCloudPublic = node->create_publisher<sensor_msgs::msg::PointCloud2>("pointcloud_test", rclcpp::QoS(rclcpp::KeepLast(1)).reliable().transient_local());
//auto m_pointCloudPublic = node->create_publisher<sensor_msgs::msg::PointCloud2>("pointcloud_test", 10);
sensor_msgs::msg::PointCloud2 m_pointCloudMsg;
//Subscription的几种设置方法
//rclcpp::Subscription<sensor_msgs::msg::PointCloud2>::SharedPtr sub;
// auto sub = node->create_subscription<sensor_msgs::msg::PointCloud2>(
// "pointcloud_test", 10,chatterCallback);
// auto sub = node->create_subscription<sensor_msgs::msg::PointCloud2>(
// "pointcloud_test",rclcpp::SystemDefaultsQoS(),chatterCallback);
auto sub = node->create_subscription<sensor_msgs::msg::PointCloud2>(
"pointcloud_test",rclcpp::QoS(rclcpp::KeepLast(1)).reliable().transient_local(),chatterCallback);
auto period = std::chrono::milliseconds(1000);
rclcpp::Rate loop_rate(period);
while (rclcpp::ok())
{
m_pointCloudPublic->publish(m_pointCloudMsg);
rclcpp::spin_some(node->get_node_base_interface());
loop_rate.sleep();
}
rclcpp::shutdown();
return 0;
}
可以通过reliable()转到定义查看原代码中的几种设置,有:
reliable(),best_effort(),durability_volatile(),transient_local().
需要清楚对应关系.