当前位置:网站首页>ros2订阅esp32发布的电池电压数据
ros2订阅esp32发布的电池电压数据
2022-08-04 18:34:00 【zhangrelay】
一个最简单的订阅和发布案例如下:
pub-

#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"
using namespace std::chrono_literals;
int main(int argc, char * argv[])
{
rclcpp::init(argc, argv);
auto node = rclcpp::Node::make_shared("simple_publisher");
auto pub = node->create_publisher<std_msgs::msg::String>("/my_message", 10);
std_msgs::msg::String myMessage;
size_t counter{0};
rclcpp::WallRate loop_rate(500ms);
while (rclcpp::ok())
{
myMessage.data = "Hello, ros2 world! " + std::to_string(counter++);
RCLCPP_INFO(node->get_logger(), "Publishing: '%s'", myMessage.data.c_str());
try
{
pub->publish(myMessage);
rclcpp::spin_some(node);
} catch (const rclcpp::exceptions::RCLError & e)
{
RCLCPP_ERROR(node->get_logger(), "Errore type : %s", e.what());
}
loop_rate.sleep();
}
rclcpp::shutdown();
return 0;
}sub-

#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"
std::shared_ptr<rclcpp::Node> node = nullptr;
void TopicCallback(const std_msgs::msg::String::SharedPtr msg)
{
RCLCPP_INFO(node->get_logger(), "I heard the message : '%s'", msg->data.c_str());
}
int main(int argc, char *argv[])
{
rclcpp::init(argc, argv);
node = std::make_shared<rclcpp::Node>("simple_subscriber");
auto sub = node->create_subscription<std_msgs::msg::String>("/my_message", 10, TopicCallback);
rclcpp::spin(node);
rclcpp::shutdown();
return 0;
}esp32参考:
esp32发布机器人电池电压到ros2(micro-ros+CoCube)
数据类型是float32,需要修改,开启float32发布和订阅:
发布

#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/float32.hpp"
using namespace std::chrono_literals;
int main(int argc, char * argv[])
{
rclcpp::init(argc, argv);
auto node = rclcpp::Node::make_shared("simple_publisher");
auto pub = node->create_publisher<std_msgs::msg::Float32>("/my_message", 10);
std_msgs::msg::Float32 myMessage;
rclcpp::WallRate loop_rate(500ms);
while (rclcpp::ok())
{
myMessage.data++;
RCLCPP_INFO(node->get_logger(), "Publishing: '%f'", myMessage.data);
try
{
pub->publish(myMessage);
rclcpp::spin_some(node);
} catch (const rclcpp::exceptions::RCLError & e)
{
RCLCPP_ERROR(node->get_logger(), "Errore type : %s", e.what());
}
loop_rate.sleep();
}
rclcpp::shutdown();
return 0;
}
订阅

#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/float32.hpp"
std::shared_ptr<rclcpp::Node> node = nullptr;
void TopicCallback(const std_msgs::msg::Float32::SharedPtr msg)
{
RCLCPP_INFO(node->get_logger(), "I heard the message : '%f'", msg->data);
}
int main(int argc, char *argv[])
{
rclcpp::init(argc, argv);
node = std::make_shared<rclcpp::Node>("simple_subscriber");
auto sub = node->create_subscription<std_msgs::msg::Float32>("/my_message", 10, TopicCallback);
rclcpp::spin(node);
rclcpp::shutdown();
return 0;
}
再稍作修改,可以得到订阅esp32机器人电池电压的数据:
#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/float32.hpp"
std::shared_ptr<rclcpp::Node> node = nullptr;
void TopicCallback(const std_msgs::msg::Float32::SharedPtr msg)
{
RCLCPP_INFO(node->get_logger(), "Robot battery voltage : '%f'", msg->data);
}
int main(int argc, char *argv[])
{
rclcpp::init(argc, argv);
node = std::make_shared<rclcpp::Node>("battery_sub");
auto sub = node->create_subscription<std_msgs::msg::Float32>("/robot_battery", 1, TopicCallback);
rclcpp::spin(node);
rclcpp::shutdown();
return 0;
}
还遇到一些小问题^_^
#include <cstdio> #include <memory> #include "rclcpp/rclcpp.hpp" #include "rclcpp_components/register_node_macro.hpp" #include "std_msgs/msg/string.hpp" #include "demo_nodes_cpp/visibility_control.h" namespace demo_nodes_cpp { class ListenerBestEffort : public rclcpp::Node { public: DEMO_NODES_CPP_PUBLIC explicit ListenerBestEffort(const rclcpp::NodeOptions & options) : Node("listener", options) { setvbuf(stdout, NULL, _IONBF, BUFSIZ); auto callback = [this](std_msgs::msg::String::ConstSharedPtr msg) -> void { RCLCPP_INFO(this->get_logger(), "I heard: [%s]", msg->data.c_str()); }; sub_ = create_subscription<std_msgs::msg::String>("chatter", rclcpp::SensorDataQoS(), callback); } private: rclcpp::Subscription<std_msgs::msg::String>::SharedPtr sub_; }; } // namespace demo_nodes_cpp RCLCPP_COMPONENTS_REGISTER_NODE(demo_nodes_cpp::ListenerBestEffort)
边栏推荐
- 图解LeetCode——899. 有序队列(难度:困难)
- Matlab drawing 1
- Flink/Scala - Storing data with RedisSink
- 在表格数据集上训练变分自编码器 (VAE)示例
- 什么是网站监控,网站监控软件有什么用?
- 方法的重写
- 如何给MySQL添加自定义语法 ?
- How can test engineers break through career bottlenecks?
- How does the intelligent video surveillance platform EasyCVR use the interface to export iframe addresses in batches?
- How does EasyCVR call the double-speed playback of device recording through the interface?
猜你喜欢
随机推荐
(ECCV-2022)GaitEdge:超越普通的端到端步态识别,提高实用性
Route lazy loading
Google Earth Engine APP - one-click online viewing of global images from 1984 to this year and loading an image analysis at the same time
localstorage本地存储的方法
方法的重写
【简答题】月薪4k和月薪8k的区别就在这里
After EasyCVR is locally connected to the national standard device to map the public network, the local device cannot play and cascade the solution
Activity数据库字段说明
VPC2187/8 电流模式 PWM 控制器 4-100VIN 超宽压启动、高度集成电源控制芯片推荐
离线同步odps到mysql 中文乱码是因为?mysql已是utf8mb4
buuctf(探险1)
2019年海淀区青少年程序设计挑战活动小学组复赛试题详细答案
12. SAP ABAP OData 服务如何支持 $select 有选择性地仅读取部分模型字段值
EasyCVR本地接入国标设备映射公网后,本地设备出现无法播放与级联的解决方法
vantui 组件 van-field 路由切换时,字体样式混乱问题
dotnet core 使用 CoreRT 将程序编译为 Native 程序
网站设计师:Nicepage 4.15 Crack By Xacker
dotnet core 输出调试信息到 DebugView 软件
浅谈web网站架构演变过程
老电脑怎么重装系统win10









