ROS 读取csv文件,Rviz显示路径path


#include <ros/ros.h>
#include <nav_msgs/Path.h>
#include <geometry_msgs/PoseArray.h>
#include <fstream>
#include <string>
#include <cstdlib>
#include <ros/package.h>
#include "tf/tf.h"
#include <iostream>
#include <nav_msgs/Path.h>

void getPose(std::string s, double *v)
{
    int p = 0;
    int q = 0;
    for (int i = 0; i < s.size(); i++)
    {
        if (s[i] == ',' || i == s.size() - 1)
        {
            char tab2[16];
            strcpy(tab2, s.substr(p, i - p).c_str());
            v[q] = std::strtod(tab2, NULL);
            p = i + 1;
            q++;
        }
    }
}
int main(int argc, char **argv)
{
    ros::init(argc, argv, "moveit_cartesian_demo");
    ros::NodeHandle n;
    ros::Publisher path_pub = n.advertise<geometry_msgs::PoseArray>("trajectory", 10, true);
      ros::Publisher state_pub_ = n.advertise<nav_msgs::Path>("gps_path", 10);
    ros::AsyncSpinner spinner(1);
    spinner.start();
    sleep(1);
    std::ifstream f(ros::package::getPath("probot_demo") + "/paths/" + "cubeOri.csv");
    //f.open(ros::package::find(plan_pkg)+"/paths/path.csv"); //ros::package::find(plan_pkg)
    if (!f.is_open())
    {
        ROS_ERROR("failed to open file");
        return 0;
    }
    std::string line;
    std::vector<geometry_msgs::Pose> waypoints;
    double scale = 100;
    int count = -1;
    nav_msgs::Path ros_path_;

    geometry_msgs::PoseArray track;
    track.header.stamp = ros::Time::now();
    track.header.frame_id = "/ebot_base";
    while (std::getline(f, line))
    {
        std::cout << "Hello w000orld!!!" << std::endl;

        count++;
        double pose[6];
        getPose(line, pose);
        tf::Quaternion q = tf::createQuaternionFromRPY(pose[3], pose[4], pose[5]);
        geometry_msgs::Pose pose1;

        geometry_msgs::PoseStamped pose2;
        ros_path_.header.frame_id = "/ebot_base";
        ros_path_.header.stamp = ros::Time::now();  
        pose2.header = ros_path_.header;

        pose2.pose.position.x = pose[0];
        pose2.pose.position.y = pose[1];
        pose2.pose.position.z = pose[2];
        pose1.orientation.x =0;
        pose1.orientation.y = 0;
        pose1.orientation.z = 0;
        pose1.orientation.w = 1;
        pose1.position.x = pose[0];
        pose1.position.y = pose[1];
        pose1.position.z =pose[2];
        std::cout << "path_pose1.position.x" << pose1.position.x <<std::endl;

        ROS_INFO("Adding waypoint x,y,z =  [%.2f, %0.2f, %0.2f]", pose1.position.x, pose1.position.y, pose1.position.z);
    
            waypoints.push_back(pose1);
            track.poses.push_back(pose1);
            ros_path_.poses.push_back(pose2);

    }

    sleep(1);
    ros::Rate loop_rate(1);
    while (ros::ok())
    {
        path_pub.publish(track);
        state_pub_.publish(ros_path_);
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值