当前位置:网站首页>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)
边栏推荐
猜你喜欢

合宙Cat1 4G模块Air724UG配置RNDIS网卡或PPP拨号,通过RNDIS网卡使开发板上网(以RV1126/1109开发板为例)

DOM Clobbering的原理及应用

EuROC 数据集格式及相关代码

天呐,七夕我收到9份告白~

Babbitt | Metaverse daily must-read: Weibo animation will recruit all kinds of virtual idols around the world and provide support for them...

解决错误:The package-lock.json file was created with an old version of npm

巴比特 | 元宇宙每日必读:微博动漫将招募全球各类虚拟偶像并为其提供扶持...

火灾报警联网FC18中CAN光端机常见问题解答和使用指导

How does EasyCVR call the double-speed playback of device recording through the interface?

BigDecimal 使用注意!!“别踩坑”
随机推荐
使用.NET简单实现一个Redis的高性能克隆版(二)
合宙Cat1 4G模块Air724UG配置RNDIS网卡或PPP拨号,通过RNDIS网卡使开发板上网(以RV1126/1109开发板为例)
Documentary on Security Reinforcement of Network Range Monitoring System (1)—SSL/TLS Encrypted Transmission of Log Data
容器化 | 在 NFS 备份恢复 RadonDB MySQL 集群数据
C#爬虫之通过Selenium获取浏览器请求响应结果
浅谈web网站架构演变过程
【填空题】130道面试填空题
用Excel绘制统计图
PHP代码审计10—命令执行漏洞
[Distributed Advanced] Let's fill in those pits in Redis distributed locks.
力扣学习---0804
vantui 组件 van-field 路由切换时,字体样式混乱问题
通俗易懂-二维数组只能省略行不能省略列-人话版本
golang安装和基础配置
Go language Go language, understand Go language file operation in one article
路由技术
Flask框架实现注册加密功能详解【Flask企业课学习】
敏捷开发项目管理的一些心得
PHP代码审计7—文件上传漏洞
CPU突然飙高系统反应慢,是怎么导致的?有什么办法排查?