在 ROS(Robot Operating System)中,geometry_msgs
是一个非常基础的消息包,它定义了一些常用的几何类型。PoseStamped
和 Twist
是其中两个常用的消息类型,通常用于机器人导航和运动控制。
1. geometry_msgs::msg::PoseStamped
PoseStamped
是一个包含时间戳和位置信息的消息类型。它通常用于描述机器人或其他物体在某一时刻的位置和姿态。具体来说,它包含以下字段:
- header: 一个
std_msgs::Header
类型,包含时间戳和帧 ID。时间戳表示消息生成的时间,帧 ID 表示该位置和姿态是相对于哪个坐标系。 - pose: 一个
geometry_msgs::Pose
类型,包含位置和姿态信息。- position: 一个
geometry_msgs::Point
类型,包含 x、y、z 三个坐标,表示物体在空间中的位置。 - orientation: 一个
geometry_msgs::Quaternion
类型,包含四个分量(x、y、z、w),表示物体的旋转姿态。
- position: 一个
2. geometry_msgs::msg::Twist
Twist
是一个描述物体速度和旋转速度的消息类型。它通常用于机器人的运动控制,描述物体在某一时刻的速度和旋转状态。具体来说,它包含以下字段:
- linear: 一个
geometry_msgs::Vector3
类型,包含 x、y、z 三个分量,表示物体在空间中沿三个坐标轴的线速度。 - angular: 一个
geometry_msgs::Vector3
类型,包含 x、y、z 三个分量,表示物体绕三个坐标轴的角速度。
示例代码
以下是如何在 C++ 中使用这两个类型的基本示例:
#include <geometry_msgs/msg/pose_stamped.hpp>
#include <geometry_msgs/msg/twist.hpp>
int main() {
// 创建 PoseStamped 对象
geometry_msgs::msg::PoseStamped pose_stamped;
pose_stamped.header.stamp = rclcpp::Clock().now();
pose_stamped.header.frame_id = "base_link";
pose_stamped.pose.position.x = 1.0;
pose_stamped.pose.position.y = 2.0;
pose_stamped.pose.position.z = 3.0;
pose_stamped.pose.orientation.x = 0.0;
pose_stamped.pose.orientation.y = 0.0;
pose_stamped.pose.orientation.z = 0.0;
pose_stamped.pose.orientation.w = 1.0;
// 创建 Twist 对象
geometry_msgs::msg::Twist twist;
twist.linear.x = 0.5;
twist.linear.y = 0.0;
twist.linear.z = 0.0;
twist.angular.x = 0.0;
twist.angular.y = 0.0;
twist.angular.z = 0.1;
return 0;
}
在这个示例中:
- 创建了一个
PoseStamped
对象,设置了其时间戳、帧 ID、位置和姿态。 - 创建了一个
Twist
对象,设置了其线速度和角速度。
这些类型在 ROS 中非常常用,用于在节点之间传递位置、速度和姿态信息。