Robot Operating System——std_msgs消息类型说明和使用

大纲

在ROS2中,std_msgs 是一个标准消息包,包含了一组常用的消息类型。这些消息类型通常用于基本的数据传输和通信。比如在“主题订阅”的场景下,我们可以直接发布这些类型的消息。

auto msg_ = std::make_unique<std_msgs::msg::String>();
msg_->data = "Hello World: ";

rclcpp::QoS qos(rclcpp::KeepLast{7});
rclcpp::Publisher<std_msgs::msg::String>::SharedPtr pub_ = create_publisher<std_msgs::msg::String>("chatter", qos);

pub_->publish(std::move(msg_));

接收端的回调只要正确指明对应的类型即可

auto callback =
  [this](std_msgs::msg::String::ConstSharedPtr msg) -> void
  {
    RCLCPP_INFO(this->get_logger(), "I heard: [%s]", msg->data.c_str());
  };
  
rclcpp::Subscription<std_msgs::msg::String>::SharedPtr sub_ = create_subscription<std_msgs::msg::String>("chatter", 10, callback);

特点

标准化:std_msgs 提供了一组标准化的消息类型,便于不同节点之间的通信。
简单易用:这些消息类型设计简单,易于理解和使用。
通用性:适用于各种应用场景,提供了基本的数据类型,如整数、浮点数、字符串、布尔值等。
跨平台:std_msgs 消息类型在不同平台上具有一致的表现,确保跨平台兼容性。

类型

std_msgs::msg::Bool

用于表示布尔值。

结构定义

namespace std_msgs
{
namespace msg
{

struct Bool
{
  bool data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • data:一个布尔类型的字段,用于存储布尔值(true 或 false)。

示例用法

#include "std_msgs/msg/bool.hpp"
#include <iostream>

int main() {
    std_msgs::msg::Bool bool_msg;
    bool_msg.data = true;

    std::cout << "Bool message data: " << (bool_msg.data ? "true" : "false") << std::endl;

    return 0;
}

std_msgs::msg::Byte

用于表示单个字节的数据。

结构定义

namespace std_msgs
{
namespace msg
{

struct Byte
{
  uint8_t data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • data:一个无符号8位整数类型的字段,用于存储单个字节的数据。

示例用法

#include "std_msgs/msg/byte.hpp"
#include <iostream>

int main() {
    std_msgs::msg::Byte byte_msg;
    byte_msg.data = 65;  // ASCII code for 'A'

    std::cout << "Byte message data: " << static_cast<int>(byte_msg.data) << std::endl;

    return 0;
}

std_msgs::msg::ByteMultiArray

用于表示多维字节数组。

结构定义

namespace std_msgs
{
namespace msg
{

struct ByteMultiArray
{
  std_msgs::msg::MultiArrayLayout layout;
  std::vector<uint8_t> data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • layout:一个 std_msgs::msg::MultiArrayLayout 类型的字段,用于描述数组的布局信息。
  • data:一个 std::vector<uint8_t> 类型的字段,用于存储字节数组的数据。

示例用法

#include "std_msgs/msg/byte_multi_array.hpp"
#include "std_msgs/msg/multi_array_layout.hpp"
#include "std_msgs/msg/multi_array_dimension.hpp"
#include <iostream>

int main() {
    std_msgs::msg::ByteMultiArray byte_multi_array_msg;

    // 设置布局信息
    std_msgs::msg::MultiArrayDimension dim;
    dim.label = "dimension1";
    dim.size = 3;
    dim.stride = 3;
    byte_multi_array_msg.layout.dim.push_back(dim);
    byte_multi_array_msg.layout.data_offset = 0;

    // 设置数据
    byte_multi_array_msg.data = {65, 66, 67};  // ASCII codes for 'A', 'B', 'C'

    // 输出布局信息和数据
    std::cout << "Layout:" << std::endl;
    for (const auto& d : byte_multi_array_msg.layout.dim) {
        std::cout << "  Label: " << d.label << std::endl;
        std::cout << "  Size: " << d.size << std::endl;
        std::cout << "  Stride: " << d.stride << std::endl;
    }
    std::cout << "Data Offset: " << byte_multi_array_msg.layout.data_offset << std::endl;

    std::cout << "Data:" << std::endl;
    for (const auto& byte : byte_multi_array_msg.data) {
        std::cout << "  " << static_cast<int>(byte) << std::endl;
    }

    return 0;
}

std_msgs::msg::Char

用于表示单个字符的数据。

结构定义

namespace std_msgs
{
namespace msg
{

struct Char
{
  uint8_t data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • data:一个无符号8位整数类型的字段,用于存储单个字符的数据。

示例用法

#include "std_msgs/msg/char.hpp"
#include <iostream>

int main() {
    std_msgs::msg::Char char_msg;
    char_msg.data = 'A';  // ASCII code for 'A'

    std::cout << "Char message data: " << static_cast<char>(char_msg.data) << std::endl;

    return 0;
}

std_msgs::msg::ColorRGBA

用于表示颜色信息,包括红色、绿色、蓝色和透明度(alpha)通道。

结构定义

namespace std_msgs
{
namespace msg
{

struct ColorRGBA
{
  float r;
  float g;
  float b;
  float a;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • r:一个浮点数,表示红色通道的值。
  • g:一个浮点数,表示绿色通道的值。
  • b:一个浮点数,表示蓝色通道的值。
  • a:一个浮点数,表示透明度(alpha)通道的值。

示例用法

#include "std_msgs/msg/color_rgba.hpp"
#include <iostream>

int main() {
    std_msgs::msg::ColorRGBA color_msg;
    color_msg.r = 1.0f;  // 红色通道
    color_msg.g = 0.0f;  // 绿色通道
    color_msg.b = 0.0f;  // 蓝色通道
    color_msg.a = 1.0f;  // 透明度通道

    std::cout << "ColorRGBA message:" << std::endl;
    std::cout << "  R: " << color_msg.r << std::endl;
    std::cout << "  G: " << color_msg.g << std::endl;
    std::cout << "  B: " << color_msg.b << std::endl;
    std::cout << "  A: " << color_msg.a << std::endl;

    return 0;
}

std_msgs::msg::Empty

这个消息类型没有任何字段,通常用于触发某些事件或动作,而不需要传递任何数据。

结构定义

namespace std_msgs
{
namespace msg
{

struct Empty
{
  // This message has no data members
};

}  // namespace msg
}  // namespace std_msgs

示例用法

#include "std_msgs/msg/empty.hpp"
#include <iostream>

int main() {
    std_msgs::msg::Empty empty_msg;

    // Since the message has no data, there's nothing to set or print
    std::cout << "Empty message created." << std::endl;

    return 0;
}

std_msgs::msg::Float32

用于表示单精度浮点数的数据。

结构定义

namespace std_msgs
{
namespace msg
{

struct Float32
{
  float data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • data:一个浮点数类型的字段,用于存储单精度浮点数的数据。

示例用法

#include "std_msgs/msg/float32.hpp"
#include <iostream>

int main() {
    std_msgs::msg::Float32 float_msg;
    float_msg.data = 3.14f;  // 设置浮点数值

    std::cout << "Float32 message data: " << float_msg.data << std::endl;

    return 0;
}

std_msgs::msg::Float32MultiArray

用于表示多维单精度浮点数数组。

结构定义

namespace std_msgs
{
namespace msg
{

struct Float32MultiArray
{
  std_msgs::msg::MultiArrayLayout layout;
  std::vector<float> data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • layout:一个 std_msgs::msg::MultiArrayLayout 类型的字段,用于描述数组的布局信息。
  • data:一个 std::vector 类型的字段,用于存储单精度浮点数数组的数据。

示例用法

#include "std_msgs/msg/float32_multi_array.hpp"
#include "std_msgs/msg/multi_array_layout.hpp"
#include "std_msgs/msg/multi_array_dimension.hpp"
#include <iostream>

int main() {
    std_msgs::msg::Float32MultiArray float_multi_array_msg;

    // 设置布局信息
    std_msgs::msg::MultiArrayDimension dim;
    dim.label = "dimension1";
    dim.size = 3;
    dim.stride = 3;
    float_multi_array_msg.layout.dim.push_back(dim);
    float_multi_array_msg.layout.data_offset = 0;

    // 设置数据
    float_multi_array_msg.data = {1.1f, 2.2f, 3.3f};

    // 输出布局信息和数据
    std::cout << "Layout:" << std::endl;
    for (const auto& d : float_multi_array_msg.layout.dim) {
        std::cout << "  Label: " << d.label << std::endl;
        std::cout << "  Size: " << d.size << std::endl;
        std::cout << "  Stride: " << d.stride << std::endl;
    }
    std::cout << "Data Offset: " << float_multi_array_msg.layout.data_offset << std::endl;

    std::cout << "Data:" << std::endl;
    for (const auto& value : float_multi_array_msg.data) {
        std::cout << "  " << value << std::endl;
    }

    return 0;
}

std_msgs::msg::Float64

用于表示双精度浮点数的数据。

结构定义

namespace std_msgs
{
namespace msg
{

struct Float64
{
  double data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • data:一个双精度浮点数类型的字段,用于存储双精度浮点数的数据。

示例用法

#include "std_msgs/msg/float64.hpp"
#include <iostream>

int main() {
    std_msgs::msg::Float64 float_msg;
    float_msg.data = 3.141592653589793;  // 设置双精度浮点数值

    std::cout << "Float64 message data: " << float_msg.data << std::endl;

    return 0;
}

std_msgs::msg::Float64MultiArray

用于表示多维双精度浮点数数组。

结构定义

namespace std_msgs
{
namespace msg
{

struct Float64MultiArray
{
  std_msgs::msg::MultiArrayLayout layout;
  std::vector<double> data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • layout:一个 std_msgs::msg::MultiArrayLayout 类型的字段,用于描述数组的布局信息。
  • data:一个 std::vector 类型的字段,用于存储双精度浮点数数组的数据。

示例用法

#include "std_msgs/msg/float64_multi_array.hpp"
#include "std_msgs/msg/multi_array_layout.hpp"
#include "std_msgs/msg/multi_array_dimension.hpp"
#include <iostream>

int main() {
    std_msgs::msg::Float64MultiArray float_multi_array_msg;

    // 设置布局信息
    std_msgs::msg::MultiArrayDimension dim;
    dim.label = "dimension1";
    dim.size = 3;
    dim.stride = 3;
    float_multi_array_msg.layout.dim.push_back(dim);
    float_multi_array_msg.layout.data_offset = 0;

    // 设置数据
    float_multi_array_msg.data = {1.1, 2.2, 3.3};

    // 输出布局信息和数据
    std::cout << "Layout:" << std::endl;
    for (const auto& d : float_multi_array_msg.layout.dim) {
        std::cout << "  Label: " << d.label << std::endl;
        std::cout << "  Size: " << d.size << std::endl;
        std::cout << "  Stride: " << d.stride << std::endl;
    }
    std::cout << "Data Offset: " << float_multi_array_msg.layout.data_offset << std::endl;

    std::cout << "Data:" << std::endl;
    for (const auto& value : float_multi_array_msg.data) {
        std::cout << "  " << value << std::endl;
    }

    return 0;
}

std_msgs::msg::Header

这个消息类型用于在消息中包含时间戳和帧 ID 信息。

结构定义

namespace std_msgs
{
namespace msg
{

struct Header
{
  builtin_interfaces::msg::Time stamp;
  std::string frame_id;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • stamp:一个 builtin_interfaces::msg::Time 类型的字段,表示消息的时间戳。
  • frame_id:一个字符串,表示消息所属的坐标系的 ID。

示例用法

#include "std_msgs/msg/header.hpp"
#include "builtin_interfaces/msg/time.hpp"
#include <iostream>

int main() {
    std_msgs::msg::Header header;
    header.stamp.sec = 1625079042;  // 设置秒数
    header.stamp.nanosec = 123456789;  // 设置纳秒数
    header.frame_id = "base_link";

    std::cout << "Header:" << std::endl;
    std::cout << "  Stamp: " << header.stamp.sec << " seconds, " << header.stamp.nanosec << " nanoseconds" << std::endl;
    std::cout << "  Frame ID: " << header.frame_id << std::endl;

    return 0;
}

std_msgs::msg::Int8

用于表示8位有符号整数的数据。

结构定义

namespace std_msgs
{
namespace msg
{

struct Int8
{
  int8_t data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • data:一个8位有符号整数类型的字段,用于存储8位有符号整数的数据。

示例用法

#include "std_msgs/msg/int8.hpp"
#include <iostream>

int main() {
    std_msgs::msg::Int8 int8_msg;
    int8_msg.data = -42;  // 设置8位有符号整数值

    std::cout << "Int8 message data: " << static_cast<int>(int8_msg.data) << std::endl;

    return 0;
}

std_msgs::msg::Int8MultiArray

用于表示多维8位有符号整数数组。

结构定义

namespace std_msgs
{
namespace msg
{

struct Int8MultiArray
{
  std_msgs::msg::MultiArrayLayout layout;
  std::vector<int8_t> data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • layout:一个 std_msgs::msg::MultiArrayLayout 类型的字段,用于描述数组的布局信息。
  • data:一个 std::vector<int8_t> 类型的字段,用于存储8位有符号整数数组的数据。

示例用法

#include "std_msgs/msg/int8_multi_array.hpp"
#include "std_msgs/msg/multi_array_layout.hpp"
#include "std_msgs/msg/multi_array_dimension.hpp"
#include <iostream>

int main() {
    std_msgs::msg::Int8MultiArray int8_multi_array_msg;

    // 设置布局信息
    std_msgs::msg::MultiArrayDimension dim;
    dim.label = "dimension1";
    dim.size = 3;
    dim.stride = 3;
    int8_multi_array_msg.layout.dim.push_back(dim);
    int8_multi_array_msg.layout.data_offset = 0;

    // 设置数据
    int8_multi_array_msg.data = {1, -2, 3};

    // 输出布局信息和数据
    std::cout << "Layout:" << std::endl;
    for (const auto& d : int8_multi_array_msg.layout.dim) {
        std::cout << "  Label: " << d.label << std::endl;
        std::cout << "  Size: " << d.size << std::endl;
        std::cout << "  Stride: " << d.stride << std::endl;
    }
    std::cout << "Data Offset: " << int8_multi_array_msg.layout.data_offset << std::endl;

    std::cout << "Data:" << std::endl;
    for (const auto& value : int8_multi_array_msg.data) {
        std::cout << "  " << static_cast<int>(value) << std::endl;
    }

    return 0;
}

std_msgs::msg::Int16

用于表示16位有符号整数的数据。

结构定义

namespace std_msgs
{
namespace msg
{

struct Int16
{
  int16_t data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • data:一个16位有符号整数类型的字段,用于存储16位有符号整数的数据。

示例用法

#include "std_msgs/msg/int16.hpp"
#include <iostream>

int main() {
    std_msgs::msg::Int16 int16_msg;
    int16_msg.data = -12345;  // 设置16位有符号整数值

    std::cout << "Int16 message data: " << int16_msg.data << std::endl;

    return 0;
}

std_msgs::msg::Int16MultiArray

用于表示多维16位有符号整数数组。

结构定义

namespace std_msgs
{
namespace msg
{

struct Int16MultiArray
{
  std_msgs::msg::MultiArrayLayout layout;
  std::vector<int16_t> data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • layout:一个 std_msgs::msg::MultiArrayLayout 类型的字段,用于描述数组的布局信息。
  • data:一个 std::vector<int16_t> 类型的字段,用于存储16位有符号整数数组的数据。

示例用法

#include "std_msgs/msg/int16_multi_array.hpp"
#include "std_msgs/msg/multi_array_layout.hpp"
#include "std_msgs/msg/multi_array_dimension.hpp"
#include <iostream>

int main() {
    std_msgs::msg::Int16MultiArray int16_multi_array_msg;

    // 设置布局信息
    std_msgs::msg::MultiArrayDimension dim;
    dim.label = "dimension1";
    dim.size = 3;
    dim.stride = 3;
    int16_multi_array_msg.layout.dim.push_back(dim);
    int16_multi_array_msg.layout.data_offset = 0;

    // 设置数据
    int16_multi_array_msg.data = {100, -200, 300};

    // 输出布局信息和数据
    std::cout << "Layout:" << std::endl;
    for (const auto& d : int16_multi_array_msg.layout.dim) {
        std::cout << "  Label: " << d.label << std::endl;
        std::cout << "  Size: " << d.size << std::endl;
        std::cout << "  Stride: " << d.stride << std::endl;
    }
    std::cout << "Data Offset: " << int16_multi_array_msg.layout.data_offset << std::endl;

    std::cout << "Data:" << std::endl;
    for (const auto& value : int16_multi_array_msg.data) {
        std::cout << "  " << value << std::endl;
    }

    return 0;
}

std_msgs::msg::Int32

用于表示32位有符号整数的数据。

结构定义

namespace std_msgs
{
namespace msg
{

struct Int32
{
  int32_t data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • data:一个32位有符号整数类型的字段,用于存储32位有符号整数的数据。

示例用法

#include "std_msgs/msg/int32.hpp"
#include <iostream>

int main() {
    std_msgs::msg::Int32 int32_msg;
    int32_msg.data = 123456789;  // 设置32位有符号整数值

    std::cout << "Int32 message data: " << int32_msg.data << std::endl;

    return 0;
}

std_msgs::msg::Int32MultiArray

用于表示多维32位有符号整数数组。

结构定义

namespace std_msgs
{
namespace msg
{

struct Int32MultiArray
{
  std_msgs::msg::MultiArrayLayout layout;
  std::vector<int32_t> data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • layout:一个 std_msgs::msg::MultiArrayLayout 类型的字段,用于描述数组的布局信息。
  • data:一个 std::vector<int32_t> 类型的字段,用于存储32位有符号整数数组的数据。

示例用法

#include "std_msgs/msg/int32_multi_array.hpp"
#include "std_msgs/msg/multi_array_layout.hpp"
#include "std_msgs/msg/multi_array_dimension.hpp"
#include <iostream>

int main() {
    std_msgs::msg::Int32MultiArray int32_multi_array_msg;

    // 设置布局信息
    std_msgs::msg::MultiArrayDimension dim;
    dim.label = "dimension1";
    dim.size = 3;
    dim.stride = 3;
    int32_multi_array_msg.layout.dim.push_back(dim);
    int32_multi_array_msg.layout.data_offset = 0;

    // 设置数据
    int32_multi_array_msg.data = {100, -200, 300};

    // 输出布局信息和数据
    std::cout << "Layout:" << std::endl;
    for (const auto& d : int32_multi_array_msg.layout.dim) {
        std::cout << "  Label: " << d.label << std::endl;
        std::cout << "  Size: " << d.size << std::endl;
        std::cout << "  Stride: " << d.stride << std::endl;
    }
    std::cout << "Data Offset: " << int32_multi_array_msg.layout.data_offset << std::endl;

    std::cout << "Data:" << std::endl;
    for (const auto& value : int32_multi_array_msg.data) {
        std::cout << "  " << value << std::endl;
    }

    return 0;
}

std_msgs::msg::Int64

用于表示64位有符号整数的数据。

结构定义

namespace std_msgs
{
namespace msg
{

struct Int64
{
  int64_t data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • data:一个64位有符号整数类型的字段,用于存储64位有符号整数的数据。

示例用法

#include "std_msgs/msg/int64.hpp"
#include <iostream>

int main() {
    std_msgs::msg::Int64 int64_msg;
    int64_msg.data = 1234567890123456789;  // 设置64位有符号整数值

    std::cout << "Int64 message data: " << int64_msg.data << std::endl;

    return 0;
}

std_msgs::msg::Int64MultiArray

用于表示多维64位有符号整数数组。

结构定义

namespace std_msgs
{
namespace msg
{

struct Int64MultiArray
{
  std_msgs::msg::MultiArrayLayout layout;
  std::vector<int64_t> data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • layout:一个 std_msgs::msg::MultiArrayLayout 类型的字段,用于描述数组的布局信息。
  • data:一个 std::vector<int64_t> 类型的字段,用于存储64位有符号整数数组的数据。

示例用法

#include "std_msgs/msg/int64_multi_array.hpp"
#include "std_msgs/msg/multi_array_layout.hpp"
#include "std_msgs/msg/multi_array_dimension.hpp"
#include <iostream>

int main() {
    std_msgs::msg::Int64MultiArray int64_multi_array_msg;

    // 设置布局信息
    std_msgs::msg::MultiArrayDimension dim;
    dim.label = "dimension1";
    dim.size = 3;
    dim.stride = 3;
    int64_multi_array_msg.layout.dim.push_back(dim);
    int64_multi_array_msg.layout.data_offset = 0;

    // 设置数据
    int64_multi_array_msg.data = {10000000000, -20000000000, 30000000000};

    // 输出布局信息和数据
    std::cout << "Layout:" << std::endl;
    for (const auto& d : int64_multi_array_msg.layout.dim) {
        std::cout << "  Label: " << d.label << std::endl;
        std::cout << "  Size: " << d.size << std::endl;
        std::cout << "  Stride: " << d.stride << std::endl;
    }
    std::cout << "Data Offset: " << int64_multi_array_msg.layout.data_offset << std::endl;

    std::cout << "Data:" << std::endl;
    for (const auto& value : int64_multi_array_msg.data) {
        std::cout << "  " << value << std::endl;
    }

    return 0;
}

std_msgs::msg::MultiArrayDimension

这个消息类型通常用于描述多维数组的维度信息。

结构定义

namespace std_msgs
{
namespace msg
{

struct MultiArrayDimension
{
  std::string label;
  uint32_t size;
  uint32_t stride;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • label:一个字符串,用于描述该维度的标签。
  • size:一个无符号32位整数,表示该维度的大小。
  • stride:一个无符号32位整数,表示该维度的步长。

示例用法

#include "std_msgs/msg/multi_array_dimension.hpp"
#include <iostream>

int main() {
    std_msgs::msg::MultiArrayDimension dim;
    dim.label = "height";
    dim.size = 10;
    dim.stride = 1;

    std::cout << "Label: " << dim.label << std::endl;
    std::cout << "Size: " << dim.size << std::endl;
    std::cout << "Stride: " << dim.stride << std::endl;

    return 0;
}

std_msgs::msg::MultiArrayLayout

这个消息类型通常用于描述多维数组的布局信息。

结构定义

namespace std_msgs
{
namespace msg
{

struct MultiArrayLayout
{
  std::vector<MultiArrayDimension> dim;
  uint32_t data_offset;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • dim:一个 std::vector,包含多个 MultiArrayDimension 对象,用于描述每个维度的信息。
  • data_offset:一个无符号32位整数,表示数据的偏移量。

示例用法

#include "std_msgs/msg/multi_array_layout.hpp"
#include "std_msgs/msg/multi_array_dimension.hpp"
#include <iostream>

int main() {
    std_msgs::msg::MultiArrayLayout layout;
    std_msgs::msg::MultiArrayDimension dim1;
    dim1.label = "height";
    dim1.size = 10;
    dim1.stride = 1;

    std_msgs::msg::MultiArrayDimension dim2;
    dim2.label = "width";
    dim2.size = 20;
    dim2.stride = 10;

    layout.dim.push_back(dim1);
    layout.dim.push_back(dim2);
    layout.data_offset = 0;

    std::cout << "Layout:" << std::endl;
    for (const auto& dim : layout.dim) {
        std::cout << "  Label: " << dim.label << std::endl;
        std::cout << "  Size: " << dim.size << std::endl;
        std::cout << "  Stride: " << dim.stride << std::endl;
    }
    std::cout << "Data Offset: " << layout.data_offset << std::endl;

    return 0;
}

std_msgs::msg::UInt8

用于表示8位无符号整数的数据。

结构定义

namespace std_msgs
{
namespace msg
{

struct UInt8
{
  uint8_t data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • data:一个8位无符号整数类型的字段,用于存储8位无符号整数的数据。

示例用法

#include "std_msgs/msg/uint8.hpp"
#include <iostream>

int main() {
    std_msgs::msg::UInt8 uint8_msg;
    uint8_msg.data = 255;  // 设置8位无符号整数值

    std::cout << "UInt8 message data: " << static_cast<unsigned int>(uint8_msg.data) << std::endl;

    return 0;
}

std_msgs::msg::UInt8MultiArray

用于表示多维8位无符号整数数组。

结构定义

namespace std_msgs
{
namespace msg
{

struct UInt8MultiArray
{
  std_msgs::msg::MultiArrayLayout layout;
  std::vector<uint8_t> data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • layout:一个 std_msgs::msg::MultiArrayLayout 类型的字段,用于描述数组的布局信息。
  • data:一个 std::vector<uint8_t> 类型的字段,用于存储8位无符号整数数组的数据。

示例用法

#include "std_msgs/msg/uint8_multi_array.hpp"
#include "std_msgs/msg/multi_array_layout.hpp"
#include "std_msgs/msg/multi_array_dimension.hpp"
#include <iostream>

int main() {
    std_msgs::msg::UInt8MultiArray uint8_multi_array_msg;

    // 设置布局信息
    std_msgs::msg::MultiArrayDimension dim;
    dim.label = "dimension1";
    dim.size = 3;
    dim.stride = 3;
    uint8_multi_array_msg.layout.dim.push_back(dim);
    uint8_multi_array_msg.layout.data_offset = 0;

    // 设置数据
    uint8_multi_array_msg.data = {10, 20, 30};

    // 输出布局信息和数据
    std::cout << "Layout:" << std::endl;
    for (const auto& d : uint8_multi_array_msg.layout.dim) {
        std::cout << "  Label: " << d.label << std::endl;
        std::cout << "  Size: " << d.size << std::endl;
        std::cout << "  Stride: " << d.stride << std::endl;
    }
    std::cout << "Data Offset: " << uint8_multi_array_msg.layout.data_offset << std::endl;

    std::cout << "Data:" << std::endl;
    for (const auto& value : uint8_multi_array_msg.data) {
        std::cout << "  " << static_cast<unsigned int>(value) << std::endl;
    }

    return 0;
}

std_msgs::msg::UInt16

用于表示16位无符号整数的数据。

结构定义

namespace std_msgs
{
namespace msg
{

struct UInt16
{
  uint16_t data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • data:一个16位无符号整数类型的字段,用于存储16位无符号整数的数据。

示例用法

#include "std_msgs/msg/uint16.hpp"
#include <iostream>

int main() {
    std_msgs::msg::UInt16 uint16_msg;
    uint16_msg.data = 65535;  // 设置16位无符号整数值

    std::cout << "UInt16 message data: " << uint16_msg.data << std::endl;

    return 0;
}

std_msgs::msg::UInt16MultiArray

用于表示多维16位无符号整数数组。

结构定义

namespace std_msgs
{
namespace msg
{

struct UInt16MultiArray
{
  std_msgs::msg::MultiArrayLayout layout;
  std::vector<uint16_t> data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • layout:一个 std_msgs::msg::MultiArrayLayout 类型的字段,用于描述数组的布局信息。
  • data:一个 std::vector<uint16_t> 类型的字段,用于存储16位无符号整数数组的数据。

示例用法

#include "std_msgs/msg/uint16_multi_array.hpp"
#include "std_msgs/msg/multi_array_layout.hpp"
#include "std_msgs/msg/multi_array_dimension.hpp"
#include <iostream>

int main() {
    std_msgs::msg::UInt16MultiArray uint16_multi_array_msg;

    // 设置布局信息
    std_msgs::msg::MultiArrayDimension dim;
    dim.label = "dimension1";
    dim.size = 3;
    dim.stride = 3;
    uint16_multi_array_msg.layout.dim.push_back(dim);
    uint16_multi_array_msg.layout.data_offset = 0;

    // 设置数据
    uint16_multi_array_msg.data = {1000, 2000, 3000};

    // 输出布局信息和数据
    std::cout << "Layout:" << std::endl;
    for (const auto& d : uint16_multi_array_msg.layout.dim) {
        std::cout << "  Label: " << d.label << std::endl;
        std::cout << "  Size: " << d.size << std::endl;
        std::cout << "  Stride: " << d.stride << std::endl;
    }
    std::cout << "Data Offset: " << uint16_multi_array_msg.layout.data_offset << std::endl;

    std::cout << "Data:" << std::endl;
    for (const auto& value : uint16_multi_array_msg.data) {
        std::cout << "  " << value << std::endl;
    }

    return 0;
}

std_msgs::msg::UInt32

用于表示32位无符号整数的数据。

结构定义

namespace std_msgs
{
namespace msg
{

struct UInt32
{
  uint32_t data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • data:一个32位无符号整数类型的字段,用于存储32位无符号整数的数据。

示例用法

#include "std_msgs/msg/uint32.hpp"
#include <iostream>

int main() {
    std_msgs::msg::UInt32 uint32_msg;
    uint32_msg.data = 4294967295;  // 设置32位无符号整数值

    std::cout << "UInt32 message data: " << uint32_msg.data << std::endl;

    return 0;
}

std_msgs::msg::UInt32MultiArray

用于表示多维32位无符号整数数组。

结构定义

namespace std_msgs
{
namespace msg
{

struct UInt32MultiArray
{
  std_msgs::msg::MultiArrayLayout layout;
  std::vector<uint32_t> data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • layout:一个 std_msgs::msg::MultiArrayLayout 类型的字段,用于描述数组的布局信息。
  • data:一个 std::vector<uint32_t> 类型的字段,用于存储32位无符号整数数组的数据

示例用法

#include "std_msgs/msg/uint32_multi_array.hpp"
#include "std_msgs/msg/multi_array_layout.hpp"
#include "std_msgs/msg/multi_array_dimension.hpp"
#include <iostream>

int main() {
    std_msgs::msg::UInt32MultiArray uint32_multi_array_msg;

    // 设置布局信息
    std_msgs::msg::MultiArrayDimension dim;
    dim.label = "dimension1";
    dim.size = 3;
    dim.stride = 3;
    uint32_multi_array_msg.layout.dim.push_back(dim);
    uint32_multi_array_msg.layout.data_offset = 0;

    // 设置数据
    uint32_multi_array_msg.data = {100000, 200000, 300000};

    // 输出布局信息和数据
    std::cout << "Layout:" << std::endl;
    for (const auto& d : uint32_multi_array_msg.layout.dim) {
        std::cout << "  Label: " << d.label << std::endl;
        std::cout << "  Size: " << d.size << std::endl;
        std::cout << "  Stride: " << d.stride << std::endl;
    }
    std::cout << "Data Offset: " << uint32_multi_array_msg.layout.data_offset << std::endl;

    std::cout << "Data:" << std::endl;
    for (const auto& value : uint32_multi_array_msg.data) {
        std::cout << "  " << value << std::endl;
    }

    return 0;
}

std_msgs::msg::UInt64

用于表示64位无符号整数的数据。

结构定义

namespace std_msgs
{
namespace msg
{

struct UInt64
{
  uint64_t data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • data:一个64位无符号整数类型的字段,用于存储64位无符号整数的数据。

示例用法

#include "std_msgs/msg/uint64.hpp"
#include <iostream>

int main() {
    std_msgs::msg::UInt64 uint64_msg;
    uint64_msg.data = 18446744073709551615ULL;  // 设置64位无符号整数值

    std::cout << "UInt64 message data: " << uint64_msg.data << std::endl;

    return 0;
}

std_msgs::msg::UInt64MultiArray

用于表示多维64位无符号整数数组。

结构定义

namespace std_msgs
{
namespace msg
{

struct UInt64MultiArray
{
  std_msgs::msg::MultiArrayLayout layout;
  std::vector<uint64_t> data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • layout:一个 std_msgs::msg::MultiArrayLayout 类型的字段,用于描述数组的布局信息。
  • data:一个 std::vector<uint64_t> 类型的字段,用于存储64位无符号整数数组的数据

示例用法

#include "std_msgs/msg/uint64_multi_array.hpp"
#include "std_msgs/msg/multi_array_layout.hpp"
#include "std_msgs/msg/multi_array_dimension.hpp"
#include <iostream>

int main() {
    std_msgs::msg::UInt64MultiArray uint64_multi_array_msg;

    // 设置布局信息
    std_msgs::msg::MultiArrayDimension dim;
    dim.label = "dimension1";
    dim.size = 3;
    dim.stride = 3;
    uint64_multi_array_msg.layout.dim.push_back(dim);
    uint64_multi_array_msg.layout.data_offset = 0;

    // 设置数据
    uint64_multi_array_msg.data = {1000000000000, 2000000000000, 3000000000000};

    // 输出布局信息和数据
    std::cout << "Layout:" << std::endl;
    for (const auto& d : uint64_multi_array_msg.layout.dim) {
        std::cout << "  Label: " << d.label << std::endl;
        std::cout << "  Size: " << d.size << std::endl;
        std::cout << "  Stride: " << d.stride << std::endl;
    }
    std::cout << "Data Offset: " << uint64_multi_array_msg.layout.data_offset << std::endl;

    std::cout << "Data:" << std::endl;
    for (const auto& value : uint64_multi_array_msg.data) {
        std::cout << "  " << value << std::endl;
    }

    return 0;
}

std_msgs::msg::String

用于表示字符串数据。

结构定义

namespace std_msgs
{
namespace msg
{

struct String
{
  std::string data;
};

}  // namespace msg
}  // namespace std_msgs

字段说明

  • data:一个 std::string 类型的字段,用于存储字符串数据。

示例用法

#include "std_msgs/msg/string.hpp"
#include <iostream>

int main() {
    std_msgs::msg::String string_msg;
    string_msg.data = "Hello, ROS 2!";  // 设置字符串值

    std::cout << "String message data: " << string_msg.data << std::endl;

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

breaksoftware

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值