導航功能包要求機器人 能夠通過里程計信息源發佈包含速度信息的里程計nav_msgs/Odometry 消息;
本篇整理了nav_msgs/Odometry消息的具體結構,更加清晰一點,以及如果訂閱這種類型的topic時應該如何獲取數據;
瞭解了具體的結構後來看一下簡單一點的訂閱實例:
typedef struct {
float x;
float y;
float th;
} POSE2D;
vector<POSE2D> odom_poses;
void ImageGrabber::GrabOdom(const nav_msgs::Odometry &odom_msg){
cout << "get odom data" << endl;
POSE2D odom_pose;
double odom_time = odom_msg.header.stamp.toSec();
double x = odom_msg.pose.pose.position.x;
double y = odom_msg.pose.pose.position.y;
double ang = odom_msg.pose.pose.orientation.w;
odom_pose.x = x;
odom_pose.y = y;
odom_pose.th = ang;
odom_poses.push_back(odom_pose);
}
這裏需要聲明一下POSE2D的數據包含位置x,y,同時包含機器人的pitch信息th;