实现nav_msgs::Path转换成std::vector<cv::Point>
实现nav_msgs::Path转换成std::vector
要将nav_msgs::Path转换为std::vector
首先,确保已经安装了ROS和OpenCV库,并将它们包含在项目中。
在代码中包含必要的头文件:
1
2
3
4
5#include <ros/ros.h>
#include <nav_msgs/Path.h>
#include <opencv2/opencv.hpp>
#include <vector>实现转换函数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19std::vector<cv::Point> pathToPoints(const nav_msgs::Path& path) {
std::vector<cv::Point> points;
for (const auto& pose_stamped : path.poses) {
// 从geometry_msgs::Pose中提取x和y坐标
double x = pose_stamped.pose.position.x;
double y = pose_stamped.pose.position.y;
// 将浮点坐标转换为整数坐标,如果需要缩放或者平移,可以在这里进行操作
int ix = static_cast<int>(x);
int iy = static_cast<int>(y);
// 将转换后的点添加到点集中
points.emplace_back(cv::Point(ix, iy));
}
return points;
}在你的ROS节点或程序中使用此函数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16int main(int argc, char **argv) {
// 初始化ROS节点
ros::init(argc, argv, "path_to_points_converter");
ros::NodeHandle nh;
// 假设已经有一个nav_msgs::Path类型的变量名为"path"
nav_msgs::Path path;
// 转换并获取点集
std::vector<cv::Point> points = pathToPoints(path);
// 对转换后的点集进行处理,如绘制或其他操作
return 0;
}
实现nav_msgs::Path转换成std::vector<cv::Point>
https://qiangsun89.github.io/2023/04/20/实现nav-msgs-Path转换成std-vector-cv-Point/