每个ubuntu都有对应的ROS版本,为避免不同版本的问题,每一步骤我尽量用官方教程,不同版本找对应教程做。

一、ros版本

ros版本用的是melodic,官方安装教程地址:melodic/Installation/Ubuntu - ROS Wiki

安装时在Initialize rosdep遇到了无法下载的问题,可以参考这个:本文之后,世上再无rosdep更新失败问题!如果有....小鱼就... - 知乎

# 使用pip或pip3安装rosdepc
sudo pip install rosdepc
# 使用rosdepc初始化更新
sudo rosdepc init
rosdepc update

接下来配置worspace和环境变量并测试:

ROS/Tutorials/InstallingandConfiguringROSEnvironment - ROS Wiki

二、读取ply并显示

首先,需要建立ROS的工程,这里直接使用ROS的pcl例程:pcl/Tutorials - ROS Wiki

然后,为了读取ply修改example.cpp的代码:

#include <ros/ros.h>
#include <pcl/point_cloud.h>
#include <pcl_conversions/pcl_conversions.h>
#include <sensor_msgs/PointCloud2.h>
#include <pcl/io/ply_io.h>


main (int argc, char **argv)
{
    ros::init (argc, argv, "pcl_example");
    ros::NodeHandle nh;
    ros::Publisher pcl_pub = nh.advertise<sensor_msgs::PointCloud2> ("pcl_output", 1);
    pcl::PointCloud<pcl::PointXYZ> cloud;
    if (pcl::io::loadPLYFile<pcl::PointXYZ>("/home/xxx/catkin_ws/src/my_pcl_tutorial/example0.ply", cloud) == -1)
	{
		PCL_ERROR("Couldn't read file1 \n");
		return (-1);
	}
    sensor_msgs::PointCloud2 output;
    
    // Fill in the cloud data
    // cloud.width  = 100;
    // cloud.height = 1;
    // cloud.points.resize(cloud.width * cloud.height);

    // for (size_t i = 0; i < cloud.points.size (); ++i)
    // {
    //     cloud.points[i].x = 1024 * rand () / (RAND_MAX + 1.0f);
    //     cloud.points[i].y = 1024 * rand () / (RAND_MAX + 1.0f);
    //     cloud.points[i].z = 1024 * rand () / (RAND_MAX + 1.0f);
    // }

    //Convert the cloud to ROS message
    pcl::toROSMsg(cloud, output);
    output.header.frame_id = "odom";

    ros::Rate loop_rate(1);
    while (ros::ok())
    {
        pcl_pub.publish(output);
        ros::spinOnce();
        loop_rate.sleep();
    }

    return 0;
}

/home/xxx/catkin_ws是我的workspace。

写完example后,在workspace里面开terminal执行:

catkin_make

编译过后,执行:

roscore

再开第二个terminal运行:

rosrun my_pcl_tutorial example

如果报错“ package 'my_pcl_tutorial' not found”,运行:

source devel/setup.bash

这一步后,按照教程直接运行报错,提示在my_pcl_tutorial目录下找不到可执行的example,发现生成的example在build里,于是把example拷贝到了my_pcl_tutorial目录下,运行就没报错了。

最后,开第三个terminal,运行:

rosrun rviz rviz

打开rviz,显示彩色点云,如图,参数“odom”和“pcl_output”是在代码中指定的。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐