实现nav_msgs::Path转换成std::vector<cv::Point>

实现nav_msgs::Path转换成std::vector

要将nav_msgs::Path转换为std::vector,首先需要理解这两个类型的结构。nav_msgs::Path是ROS(Robot Operating System)中表示路径的消息类型,而cv::Point是OpenCV库中表示2D点的类型。以下是一个示例,说明如何将nav_msgs::Path转换为std::vector

  1. 首先,确保已经安装了ROS和OpenCV库,并将它们包含在项目中。

  2. 在代码中包含必要的头文件:

    1
    2
    3
    4
    5
    #include <ros/ros.h>
    #include <nav_msgs/Path.h>
    #include <opencv2/opencv.hpp>
    #include <vector>

  3. 实现转换函数:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    std::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;
    }

  4. 在你的ROS节点或程序中使用此函数:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    int 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/
作者
Qiang Sun
发布于
2023年4月20日
许可协议