(ROS_Melodic) 使用Rviz进行Boundingbox可视化

该博客介绍了如何在ROS Melodic环境下,利用Rviz进行点云数据的包围盒(Boundingbox)可视化。首先,安装必要的jsk插件,然后在Rviz中添加BoundingBoxArray显示。接着,编写发布BoundingBoxArray的Python程序,从点云数据和标注文件中读取信息。在实际运行中,遇到问题:当box尺寸的z轴值为负时,Rviz无法显示除第一个外的其他box。解决方法是确保尺寸值为正。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(ROS_Melodic) 使用Rviz进行Boundingbox可视化

先赞后看,养成好习惯。
有帮助的话,点波关注!
我会坚持更新,感谢您的支持!

1. 需求

通过Rviz可视化障碍物的包围盒,将点云与boundingbox绘制在一起,方便检查标注框是否准确。
最后列举一个可能碰到的在Rviz中boundingbox无法显示的问题。

2. 环境

Ubuntu18.04、ROS(melodic)

3. 参考

1. rviz显示矩形框BoundingBox
2. 无人驾驶汽车系统入门(二十五)——基于欧几里德聚类的激光雷达点云分割及ROS实现

4. 安装依赖和插件

sudo apt-get install ros-melodic-jsk-recognition-msgs & sudo apt-get install ros-melodic-jsk-rviz-plugins
sudo apt-get install ros-melodic-jsk-rqt-plugins
sudo apt-get install ros-melodic-jsk-visualization

5. Rviz添加topic

在Rviz左侧的DIsplay面板下,点击Add,在By_display_type选项卡中,选择BoundingBoxArray
在这里插入图片描述

6. BoundingBoxArray发布程序

参考样例,主要填写BoundingBox中的各类属性即可,主要包含header、dimensions、label、value等。

#!/usr/bin/env python
# coding=utf-8
 
import os
import numpy as np
from torch import float32
import rospy
 
 
from visualization_msgs.msg import *
from sensor_msgs.msg import PointCloud2
from sensor_msgs import point_cloud2 as pc2
from jsk_recognition_msgs.msg import BoundingBoxArray, BoundingBox
import signal

file_path = '/home/cui/data/motion_seg_ht/ht_data1/raw_data/'
label_path = '/home/cui/data/motion_seg_ht/ht_data1/box_label/'
flag_auto_play = 0  # 1为自动播放, 0为单帧播放

# 信号捕获
def term_sig_handler(signum, frame):
    print('catched singal: %d' % signum)
    sys.exit()
    
# 读取label文件,获取中心和长宽高
def readTxt(data_path, bboxes):
    # center: n*3 , n代表box数目
    # size: n*3 , n代表box数目
    bboxes.boxes = []
    instance_num = len(np.array(open(data_path,'rU').readlines()))
    if instance_num == 0:
        return bboxes
    with open(data_path,"r") as f:
        for line in f.readlines():
            line = line.strip("\n")
            line = line.split()
            # 中心,长宽属性
            center = (np.array(line))[18:21]
            size = (np.array(line))[9:12] #高宽长
            # 建立标注框
            box = BoundingBox()
            box.header.frame_id = 'rslidar'
            box.pose.position.x = float(center[0])
            box.pose.position.y = float(center[1])
            box.pose.position.z = float(center[2])
            box.pose.orientation.w = 1
            box.pose.orientation.x = 0
            box.pose.orientation.y = 0
            box.pose.orientation.z = 0
            box.dimensions.x = float(size[2])
            box.dimensions.y = float(size[1])
            box.dimensions.z = float(size[0])
            box.label = 1
            box.value = 0
            bboxes.boxes.append(box)
    return bboxes

# 获取文件中点云数据
def get_data(file_path, file_extension):
    file_name = []
    timestamp_list = []
    for filename in os.listdir(file_path):
        timestamp = filename.split(file_extension)[0]
        timestamp_list.append(timestamp)
    timestamp_list.sort()
        
    for filename in timestamp_list:
        file_name.append(str(filename) + file_extension)
    # print(file_name)
    return file_name
 
 
def main():
    signal.signal(signal.SIGINT, term_sig_handler)     #ctrl -c
    
    rospy.init_node("point_cloud", anonymous=True)
    rate = rospy.Rate(10)
 
    pub_cloud = rospy.Publisher("/point_cloud", PointCloud2, queue_size=100)
    pub_boxes = rospy.Publisher("/bounding_boxes", BoundingBoxArray, queue_size=100)
    
    point_cloud2 = PointCloud2()
    point_cloud2.header.frame_id = "rslidar"
    bboxes = BoundingBoxArray()
    bboxes.header.frame_id = "rslidar"
 
    file_name = get_data(file_path, '.bin')
    # 连续发布
    for file in file_name:
        # 加载点云并发布
        point_data = np.fromfile((file_path + str(file)), dtype=np.float32, count=-1).reshape([-1, 4])
        cloud = pc2.create_cloud_xyzi32(point_cloud2.header, point_data[:, :4])
        pub_cloud.publish(cloud)
        # 加载标注框,并发布
        label_file = file.split('.bin')[0] + '.txt'
        bboxes = readTxt(label_path + label_file, bboxes)
        pub_boxes.publish(bboxes)
        if flag_auto_play == 1:
            rate.sleep()
        else:
            n = input("please click enter, goto next frame!")
        
 
if __name__ == "__main__":    
    main()    

7. 可视化效果

在这里插入图片描述

8. 实际运行过程中碰到一个bbox无法显示的bug

- 情况说明:总共200个box,但是可视化只显示一个box,其余199个均不显示。同时Rviz的命令行出现Invalid size of bounding box is included and skipped: [2.242119, 0.917433, -2.503252]

- 问题原因:从第2个box开始,box的size.z()中出现了负值,故从第2个开始,其余的199个box均不显示了。这里感觉插件做的不够鲁棒,应该只对出现问题的进行跳过,其余size正常的进行正常显示。

- 解决办法: 在size赋值时,变为正值。

  bbox.dimensions.x = fabs(size.x());
  bbox.dimensions.y = fabs(size.y());
  bbox.dimensions.z = fabs(size.z());
<think>我们正在处理用户关于如何运行特定ROS launch文件的问题。用户想要运行Livox ROS驱动并启动MID360的RVIZ可视化,具体是使用`roslaunch`运行`livox_ros_driver2`包中的`rviz_MID360.launch`文件。 根据用户提供的参考引用[^1],我们看到两个命令: 1. `roslaunch livox_ros_driver2 msg_MID360.launch` 2. `roslaunch fast_lio mapping_mid360.launch` 但是用户现在需要的是运行`rviz_MID360.launch`,而不是`msg_MID360.launch`。因此,我们需要指导用户如何运行正确的launch文件。 步骤: 1. 确保已经正确安装了`livox_ros_driver2`包。如果没有安装,需要先安装。 2. 使用`roslaunch`命令启动launch文件。 具体命令应该是: ```bash roslaunch livox_ros_driver2 rviz_MID360.launch ``` 注意:launch文件的名字是`rviz_MID360.launch`,所以直接运行上述命令即可。 但是,用户之前提到过`msg_MID360.launch`,所以我们需要说明这两个launch文件的区别: - `msg_MID360.launch`:用于启动驱动并发布点云数据(可能不包括RVIZ可视化)。 - `rviz_MID360.launch`:用于启动驱动并同时启动RVIZ进行可视化。 因此,用户要可视化,应该运行`rviz_MID360.launch`。 另外,用户可能还需要注意: - 确保MID360设备已正确连接。 - 确保有权限访问设备(可能需要设置udev规则)。 如果运行出现问题,可以检查: - 是否安装了livox_ros_driver2的依赖。 - 是否设置了环境变量(如`source devel/setup.bash`)。 如果用户之前已经按照引用[^1]中的步骤运行过,那么可能已经安装了驱动和fast_lio。但这里我们只需要运行驱动和RVIZ。 因此,回答如下:</think>要运行 Livox ROS 驱动并启动 MID360 的 RVIZ 可视化,请按以下步骤操作: ### 操作步骤 1. **打开终端**:按 `Ctrl+Alt+T` 打开新终端 2. **启动 ROS 核心服务**: ```bash roscore ``` 3. **新开终端运行驱动**: ```bash roslaunch livox_ros_driver2 rviz_MID360.launch ``` - 此命令会自动: - 加载 MID360 雷达驱动 - 启动 RVIZ 可视化界面 - 配置默认的点云显示参数 ### 注意事项 1. **设备连接**: - 确保 MID360 雷达通过 USB3.0 接口连接电脑 - 检查设备权限:`ls -l /dev/ttyUSB*`,必要时添加权限: ```bash sudo chmod 777 /dev/ttyUSB0 ``` 2. **依赖安装**: ```bash sudo apt-get install ros-<distro>-livox-ros-driver2 # 替换<distro>为ROS版本(如noetic) ``` 3. **常见问题**: - 若 RVIZ 无数据显示:检查话题 ` /livox/lidar` 是否正常发布 - 驱动崩溃:更新固件或检查电源稳定性[^1] ### 可视化调整 启动后可在 RVIZ 中: 1. 添加 `PointCloud2` 显示类型 2. 设置话题为 `/livox/lidar` 3. 调整点云尺寸/颜色通道(默认强度着色) [^1]: 引用来源:Livox 官方文档与 ROS Wiki 驱动配置指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Darchan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值