解析 const builtin_interfaces::msg::Time & timestamp
1. 数据类型
builtin_interfaces::msg::Time
是 ROS 2 中的一个消息类型,用于表示时间戳。
2. 结构
builtin_interfaces::msg::Time
包含以下字段:
struct Time
{std::uint32_t sec;std::uint32_t nanosec;
};
其中:
- sec:秒部分。
- nanosec:纳秒部分。
3. 参考代码
const builtin_interfaces::msg::Time & timestamp
- 类型:
builtin_interfaces::msg::Time
。 - 引用:
const
引用,表示传递的时间戳对象是只读的。 - 作用:在函数中使用时间戳而不修改它。
示例代码
假设我们有一个函数 identity_transform_stamped
,它接收一个时间戳、父坐标系名称和子坐标系名称,并返回一个单位变换的 TransformStamped
对象。
定义 identity_transform_stamped
函数
#include <geometry_msgs/msg/transform_stamped.hpp>
#include <builtin_interfaces/msg/time.hpp>
#include <tier4_autoware_utils/utils.hpp> // 假设这是自定义库的头文件geometry_msgs::msg::TransformStamped identity_transform_stamped(const builtin_interfaces::msg::Time & timestamp, const std::string & header_frame_id,const std::string & child_frame_id)
{geometry_msgs::msg::TransformStamped transform;transform.header.stamp = timestamp;transform.header.frame_id = header_frame_id;transform.child_frame_id = child_frame_id;transform.transform.rotation = tier4_autoware_utils::createQuaternion(0.0, 0.0, 0.0, 1.0);transform.transform.translation = tier4_autoware_utils::createTranslation(0.0, 0.0, 0.0);return transform;
}
自定义库 tier4_autoware_utils
namespace tier4_autoware_utils
{geometry_msgs::msg::Quaternion createQuaternion(double x, double y, double z, double w){geometry_msgs::msg::Quaternion q;q.x = x;q.y = y;q.z = z;q.w = w;return q;}geometry_msgs::msg::Vector3 createTranslation(double x, double y, double z){geometry_msgs::msg::Vector3 v;v.x = x;v.y = y;v.z = z;return v;}
}
主程序
#include <rclcpp/rclcpp.hpp>
#include <geometry_msgs/msg/transform_stamped.hpp>
#include <builtin_interfaces/msg/time.hpp>
#include "tier4_autoware_utils/utils.hpp" // 假设这是自定义库的头文件geometry_msgs::msg::TransformStamped identity_transform_stamped(const builtin_interfaces::msg::Time & timestamp, const std::string & header_frame_id,const std::string & child_frame_id)
{geometry_msgs::msg::TransformStamped transform;transform.header.stamp = timestamp;transform.header.frame_id = header_frame_id;transform.child_frame_id = child_frame_id;transform.transform.rotation = tier4_autoware_utils::createQuaternion(0.0, 0.0, 0.0, 1.0);transform.transform.translation = tier4_autoware_utils::createTranslation(0.0, 0.0, 0.0);return transform;
}int main(int argc, char ** argv)
{rclcpp::init(argc, argv);auto node = std::make_shared<rclcpp::Node>("example_node");// 创建时间戳builtin_interfaces::msg::Time timestamp;timestamp.sec = 1632480000;timestamp.nanosec = 123456789;// 设置父坐标系和子坐标系名称std::string header_frame_id = "world";std::string child_frame_id = "base_link";// 创建标识变换auto identity_transform = identity_transform_stamped(timestamp, header_frame_id, child_frame_id);// 打印变换信息RCLCPP_INFO(node->get_logger(), "Identity Transform:");RCLCPP_INFO(node->get_logger(), "Timestamp: %ld.%09ld", identity_transform.header.stamp.sec, identity_transform.header.stamp.nanosec);RCLCPP_INFO(node->get_logger(), "Frame ID: %s", identity_transform.header.frame_id.c_str());RCLCPP_INFO(node->get_logger(), "Child Frame ID: %s", identity_transform.child_frame_id.c_str());RCLCPP_INFO(node->get_logger(), "Translation: (%f, %f, %f)",identity_transform.transform.translation.x,identity_transform.transform.translation.y,identity_transform.transform.translation.z);RCLCPP_INFO(node->get_logger(), "Rotation: (%f, %f, %f, %f)",identity_transform.transform.rotation.x,identity_transform.transform.rotation.y,identity_transform.transform.rotation.z,identity_transform.transform.rotation.w);rclcpp::shutdown();return 0;
}
解释
-
builtin_interfaces::msg::Time
数据类型- sec:秒部分。
- nanosec:纳秒部分。
-
const
引用- 类型:
const builtin_interfaces::msg::Time & timestamp
。 - 作用:传递时间戳对象,并保证在函数内部不修改时间戳对象。
- 类型:
总结
- 数据类型:
builtin_interfaces::msg::Time
包含秒和纳秒两部分。 const
引用:传递时间戳对象,并保证在函数内部不修改时间戳对象。- 示例代码:展示了如何使用
builtin_interfaces::msg::Time
创建时间戳,并将其传递给identity_transform_stamped
函数以创建单位变换。