ros2 发送 float sd[32] 的topic
时间: 2024-12-08 15:16:36 浏览: 22
在Robot Operating System (ROS) 2中,发送像`float sd[32]`这种数组类型的topic,需要创建一个消息类型并将其声明为该数据结构。首先,你需要定义一个msg包(例如`my_package/msg`),然后创建一个新的msg文件,如`vector_float.msg`:
```c++
syntax = "rosidl_interface_typesupport_c";
-msg VectorFloat
header: std_msgs/Header
data: uint32[] vector
```
这里,我们定义了一个名为`VectorFloat`的消息类型,包含一个`std_msgs/Header`头部信息和一个`uint32[]`类型的数组`vector`,因为我们通常将浮点数转换成整数存储。
接下来,在`msg`包中生成消息和服务支持:
```sh
$ ros2 interface generate msg my_package msg<VectorFloat>
```
然后在发布者代码里,你可以这样做:
```c++
#include <my_package/msg/vector_float.hpp>
// ...
void publish_data() {
auto now = rclcpp::Clock::now();
my_package::msg::VectorFloat msg;
msg.header.stamp = now;
for (size_t i = 0; i < sizeof(sd) / sizeof(float); ++i) {
msg.data.push_back(static_cast<uint32_t>(sd[i])); // 将float转为uint32_t
}
your_node_->get_logger().info("Publishing vector_float message: %s", msg.to_string());
your_node_->publisher_->publish(msg);
}
```
阅读全文