带颜色的3D点云数据发布到ros1中(通过rviz显示)python、C++

warning: 这篇文章距离上次修改已过190天,其中的内容可能已经有所变动。

在ROS1中发布带颜色的3D点云数据,可以使用pcl_ros这个库来发布点云,并且使用rviz来可视化。以下是两种语言的实现方式:

Python:

  1. 安装pcl_rosrospy库(如果尚未安装):



sudo apt-install python-pcl python-rospkg python-rosdep python-roslaunch python-catkin-pkg python-empy python-nose python-numpy python-scipy python-std-msgs python-message-generation python-sphinx
  1. 创建ROS package:



catkin_create_pkg <your_package_name> pcl_ros rospy
  1. 编写Python脚本发布点云:



#!/usr/bin/env python
import rospy
from sensor_msgs.msg import PointCloud2
from pcl_msgs.msg import PointCloud
from std_msgs.msg import Header
from random import random
from math import sin, cos, pi
import numpy as np
import pcl
import struct
 
def create_point_cloud(height, width, view_points):
    # 创建一个PointCloud_PointXYZRGB对象
    cloud = pcl.PointCloud_PointXYZRGB()
    for v in range(height):
        for u in range(width):
            # 生成随机颜色
            color = np.random.randint(0, high=256, size=(3,)).astype(np.uint8)
            # 生成随机点
            x = 10 * sin(u / 10.0 * 2.0 * pi)
            y = 10 * cos(v / 10.0 * 2.0 * pi)
            z = 10 * sin(v / 10.0 * 2.0 * pi * view_points[0] + u / 10.0 * 2.0 * pi * view_points[1]) / view_points[2]
            # 添加点到点云
            cloud.push_back([x, y, z], color)
    return cloud
 
def publish_point_cloud(cloud, topic_name, frame_id, rate):
    pub = rospy.Publisher(topic_name, PointCloud2, queue_size=10)
    rospy.init_node('point_cloud_publisher', anonymous=True)
    rate = rospy.Rate(rate)
    while not rospy.is_shutdown():
        header = Header()
        header.stamp = rospy.Time.now()
        header.frame_id = frame_id
        # 转换PointCloud_PointXYZRGB为PointCloud2
        cloud_message = pcl.convert_to_ros_msg(cloud, header)
        pub.publish(cloud_message)
        rate.sleep()
 
if __name__ == '__main__':
    rospy.init_node('point_cloud_publisher', anonymous=True)
    # 设置点云发布频率
    rate = 100  # Hz
    # 设置点云分辨率
    height = 480
    width = 640
    # 设置视点参数,用于生成3D点云
    view_points = [0.5, 0.5, 1.0]
    # 创建点云
    cloud = create_point_cloud(height, width, view_points)
    # 设置ROS主题和帧ID
    topic_name = "/point_cloud"
    frame_id = "world"
    # 发布点云
    publish_point_cloud(cloud, topic_name, frame_id, rate)
  1. 配置\`CM
最后修改于:2024年08月16日 10:31

评论已关闭

推荐阅读

DDPG 模型解析,附Pytorch完整代码
2024年11月24日
DQN 模型解析,附Pytorch完整代码
2024年11月24日
AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日