PCL生成圆柱形状点云(ROS

本文介绍了如何在C++中通过ROS(机器人操作系统)和PCL(点云库)生成并发布圆柱形点云,包括初始化ROS节点、使用PCL库创建和修改点云数据,最后通过ROSMsg将点云转换为传感器消息并发布到rviz中进行可视化。
摘要由CSDN通过智能技术生成

头文件包含一些常用的点云处理文件,以及ROS 的传感器类文件

#include"ros/ros.h"
#include<pcl/point_types.h>
#include<pcl/common/transforms.h>
#include<pcl/ModelCoefficients.h>
#include<sensor_msgs/PointCloud2.h>
#include<eigen3/Eigen/Core>
#include<pcl/io/pcd_io.h>
#include<pcl/point_cloud.h>
#include<pcl_conversions/pcl_conversions.h>

#include<iostream>

 初始化ros系统,命名节点名称为“cylinder_node",实例化ros节点管理类Nodehandle,创建发布者向ros系统发布传感器消息,消息类型是PointCloud2点云信息,创建的output对象用于接收生成的圆柱点云并作为载体发布出去。

ros::init(argc,argv,"cylinder_node");
    ros::NodeHandle nh;
    ros::Publisher cylinder_pub=nh.advertise<sensor_msgs::PointCloud2>("cylinder_output",1);
    sensor_msgs::PointCloud2 output;

下面开始利用pcl库生成圆柱点云。

    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);

创建cloud对象用于储存生成的点云(PS:不用new创建的画会导致核心转储,能编译成功但是运行不起来)

下面就是通过圆柱的几何特征生成点云,通过控制x、y、z的表达式可以改变圆柱轴线方向,改变radius可以更改圆柱半径等等。

 int Num=1200;
    float inter=2.0*M_PI/Num;

    double radius=2.0;
    double length=4.0;
    double len=length/Num;

    for(int j= 0;j<Num;j++)
    {
        for(int i=0;i<Num;i++)
        {
        double z=radius*sin(i*inter);
        double x=radius*cos(i*inter);
        double y=j*len;

        pcl::PointXYZ point;
        point.x=x;
        point.y=y;
        point.z=z;
        cloud->push_back(point);
        }
    }

最后通过pcl::toROSMsg函数将pcl的PointXYZ点云信息转变为ros的cloud2点云信息,设置frame_id为“odom2”

 pcl::toROSMsg(*cloud,output);
    output.header.frame_id="odom2";
    
    
    ros::Rate loop_rate(1);
    while(ros::ok())
    {
        cylinder_pub.publish(output);
        ros::spinOnce();
        loop_rate.sleep();
    }

打开rviz查看生成的点云(PS:将fixed frame改为odom2)

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值