【ROS2】ROS2环境下用RVIZ2进行点云的可视化

Ubuntu20.04环境下,ROS2结合RVIZ2实现点云的可视化 C++版

简介

RVIZ是一款配合ROS2进行点云可视化的工具,可以通过ROS2的消息机制和节点进行通信,从而显示节点传递的点云信息。

节点文件的编写

首先建立功能包

ros2 pkg create point_cloud_show --build-type ament_cmake --dependencies rclcpp pcl_ros pcl_conversions sensor_msgs

随后编写节点文件

#include <iostream>
#include <memory>
#include <string>

#include "rclcpp/rclcpp.hpp"
#include "sensor_msgs/msg/point_cloud.hpp"
#include "pcl_conversions/pcl_conversions.h"

#include <pcl/point_types.h>
#include <pcl/io/pcd_io.h>

class PointCloudShow: public rclcpp::Node
{
public:
    PointCloudShow(const std::string & file_name): Node("point_cloud_show")
    {
        publisher_ = this->create_publisher<sensor_msgs::msg::PointCloud2>("point_cloud_topic", 10);
        pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>);
        if(pcl::io::loadPCDFile<pcl::PointXYZ>(file_name, *cloud) == -1)
        {
            PCL_ERROR("无法读取文件 %s\n", file_name.c_str());
        }

        sensor_msgs::msg::PointCloud2 cloud_msg;
        pcl::toROSMsg(*cloud, cloud_msg);
        cloud_msg.header.frame_id = "point_cloud_frame";
        publisher_->publish(cloud_msg);
    }

private:
    rclcpp::Publisher<sensor_msgs::msg::PointCloud2>::SharedPtr publisher_;
};

int main(int argc, char * argv[])
{
    if(argc<2)
    {
        std::cerr << "请在节点后输入要显示的pcd文件地址!" << std::endl;
        return 1;
    }

    rclcpp::init(argc, argv);
    auto node = std::make_shared<PointCloudShow>(argv[1]);
    rclcpp::spin(node);
    rclcpp::shutdown();

    return 0;
}

在CMakeList.txt文件中添加如下内容

# 生成可执行文件
add_executable (point_cloud_show src/point_cloud_show.cpp)

# 配置可执行文件的依赖项
ament_target_dependencies(point_cloud_show 
  rclcpp 
  pcl_ros 
  pcl_conversions 
  sensor_msgs)  

# 将可执行文件写入路径
install(TARGETS
  point_cloud_show
  DESTINATION lib/${PROJECT_NAME})  

回到工作空间下,编译功能包

colcon build --packages-select point_cloud_show

RVIZ2配置

打开rviz2

ros2 run rviz2 rviz2

在发布消息的节点中,需要留意三个数据
1 话题名称
2 坐标系名称(frame_id)
会在节点中进行设置,其在点云的 header 数据单元中
Cloud->header->frame_id
3 点数的数据格式
ROS2中的点云有三种格式
PointCloud2
PointField
PointCloud
每种格式对应的转换代码都不同,进行点云格式转换时需要留意

在这里插入图片描述

关注左边栏,Fixed_Frame中填写坐标系名称
之后点击左下角的Add,添加需要现实的点云数据类型

在这里插入图片描述

添加之后,写入自己的话题名称

在这里插入图片描述

注意话题必须以 / 开头,不知道自己话题的话,可以通过 ros2 topic list 查询

之后运行节点,发布消息即可看到点云模型

在这里插入图片描述

  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
RVizROS(机器人操作系统)中的一个可视化工具,它可以用于显示机器人的状态信息,包括传感器数据、运动状态、地图等。其中,点云(PointCloud)是一种常见的传感器数据类型,用于表示三维空间中的离散点云。下面介绍如何在RViz可视化点云: 1. 启动ROS系统 首先需要启动ROS系统,可以使用以下命令: ``` roscore ``` 2. 启动点云生成器 使用ROS中的点云生成器(PointCloud Generator)生成点云数据。例如,使用深度相机可以得到点云数据。启动点云生成器的命令可以根据具体的硬件设备和软件实现而不同。 3. 启动RViz 启动RViz,输入以下命令: ``` rosrun rviz rviz ``` 4. 添加点云显示器 在RViz中,可以添加不同类型的显示器来显示不同的信息。要显示点云数据,需要添加点云显示器。 在RViz左侧的“Displays”面板中,选择“Add”按钮,然后选择“By topic”选项卡。在“Topic”下拉列表中选择点云数据的话题(Topic),例如“/camera/depth/points”,然后选择“PointCloud2”作为消息类型(Message Type)。单击“Ok”按钮,将会在RViz场景中添加一个新的点云显示器。 5. 调整点云显示器参数 可以通过“Displays”面板中的“Properties”选项卡来调整点云显示器的参数。例如,可以调整点云的颜色、透明度、大小等。 6. 可视化点云数据 现在,可以在RViz可视化点云数据了。如果点云数据已经在话题(Topic)中发布了,将会在RViz中看到点云的三维模型。可以通过鼠标操作来旋转、平移和缩放点云模型。 总之,使用RViz可视化点云是一个相对简单的过程,只需要几个简单的步骤即可。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值