< >
Home » ROS与C++入门教程 » ROS与C++入门教程-消息-Traits(特征)

ROS与C++入门教程-消息-Traits(特征)

ROS与C++入门教程-消息-Traits(特征)

说明:

  • 介绍消息Traits及使用

Message Traits(消息特征)

  • 在ROS的C Turtle版本新添加
  • Message traits (和message_traits 命名空间)允许你查询消息中的某种信息。
  • 主要用来适配 C++ types 到ROS的msg types, 同时也方便获取消息的信息,例如:datatype, md5sum和消息定义
  • 所有的traits必需定义在命名空间ros::message_traits

发布和订阅的要求的特征

template<typename M>
struct MD5Sum
{
  static const char* value();
  static const char* value(const M& m);
};

template<typename M>
struct DataType
{
  static const char* value();
  static const char* value(const M& m);
};

template<typename M>
struct Definition
{
  static const char* value();
  static const char* value(const M& m);
};
  • 为了向后兼容,这些默认返回值如__s_getmd5sum() / __getmd5sum()。

Optional Traits(可选特征)

  • template struct IsSimple;

    • 一个“Simple”的消息是,给定一个向量或数组,可以直接拷贝
    • 请注意:由于各种编译器填充规则,你需要标记结构为Simple,要非常小心。
    • 对于simple struct A,A是POD类型, sizeof(A)必需等于它的成员序列化长度和。
  • template struct IsFixedSize;

    • 一个固定大小的消息是一个始终是相同大小。用于优化确定一个向量/数组M的大小。
  • template struct HasHeader;

    • 说明 M 是否有header
  • 要改变为True,你可以简单为你的消息指定和继承TrueType替换FalseType。

template<typename M>
struct Header
{
  static roslib::Header* pointer(M& m);
  static roslib::Header const* pointer(const M& m);
};
  • 返回指向消息的header的指针.如果HasHeader::value为True,默认是返回&m.header ,如果是false,则返回NULL
template<typename M>
struct FrameId
{
  static std::string* pointer(M& m);
  static std::string const* pointer(const M& m);
  static std::string value(const M& m);
};
  • 返回消息的帧ID,如要求的指针或值类型。
template<typename M>
struct TimeStamp
{
  static ros::Time* pointer(M& m);
  static ros::Time const* pointer(const M& m);
  static ros::Time value(const M& m);
};
  • 返回消息的时间戳,如要求的指针或值类型。

  • IsSimple, IsFixedSize 和HasHeader 能用于编译时间,默认是执行:

template<typename M> struct IsSimple : public FalseType {};
  • FalseType/TrueType提供bool的常量value和type typedef ,支持使用boost mpl 和enable_if 。
FalseType::value = false
FalseType::type = FalseType
TrueType::value = true
TrueType::type = TrueType

函数访问

Function

Return Value

md5sum<M>()

MD5Sum<M>::value()

md5sum<M>(const M& m)

MD5Sum<M>::value(m)

datatype<M>()

DataType<M>::value()

datatype<M>(const M& m)

DataType<M>::value(m)

definition<M>()

Definition<M>::value()

definition<M>(const M& m)

Definition<M>::value(m)

hasHeader<M>()

HasHeader<M>::value

isSimple<M>()

IsSimple<M>::value

isFixedSize<M>()

IsFixedSize<M>::value

header<M>(M& m)

Header<M>::pointer(m)

frameId<M>(M& m)

FrameId<M>::pointer(m)

timeStamp<M>(M& m)

TimeStamp<M>::pointer(m)

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ROS与C++入门教程