rospy订阅激光雷达数据并可视化处理

本文介绍如何使用Python在ROS环境中订阅激光雷达数据,并通过OpenCV进行数据的可视化处理。主要内容包括设置画布、转换极坐标数据为直角坐标数据、绘制雷达扫描结果等步骤。

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

python在ros中订阅雷达数据并可视化处理

接着上一次的博客,我可视化激光雷达的数据还是整好了,记录一下吧,国内现成的python文件处理这个数据的demo,好像不容易搜到,我就贴出来吧。

参考教程:

这次也参考了很多其他的教程,因为时间久了,可能贴不全,见谅。

预设条件:

  • 启动你的雷达,至少rostopic list的时候,有雷达的话题
  • 然后你把下面的程序写好,直接python name.py就行了,python文件还是很方便的,根本不需要编译什么的。

图片:

在这里插入图片描述

程序:

import rospy
import cv2
import numpy as np
import math

from sensor_msgs.msg import LaserScan

def callback(data):
    # 设置画布为600*600像素
    frame = np.zeros((600, 600,3), np.uint8)
    angle = data.angle_min
    for r in data.ranges:
        #change infinite values to 0
        #如果r的值是正负无穷大,归零
        if math.isinf(r) == True:
            r = 0
        #convert angle and radius to cartesian coordinates
        #这里就是将极坐标的信息转为直角坐标信息,只是像素的转化,不对应具体值
        #如果x中的90是正的,则顺时针显示,如果是负的,则逆时针显示。
        x = math.trunc((r * 50.0)*math.cos(angle + (-90.0*3.1416/180.0)))
        y = math.trunc((r * 50.0)*math.sin(angle + (-90.0*3.1416/180.0)))

        #set the borders (all values outside the defined area should be 0)
        #设置限度,基本上不设置也没关系了
        if y > 600 or y < -600 or x<-600 or x>600:
            x=0
            y=0
       # print "xy:",x,y
		# 用CV2画线,位置在(300,300),和目标点,颜色是(255,0,0),线宽2
        cv2.line(frame,(300, 300),(x+300,y+300),(255,0,0),2)
		# 角度得增加
        angle= angle + data.angle_increment 
        # 画个中心圆 
        cv2.circle(frame, (300, 300), 2, (255, 255, 0))
        cv2.imshow('frame',frame)
        cv2.waitKey(1)

# 话题监听函数,其实主要是一个初始化过程
# 初始化节点,'laser_listener' 挺重要的,是节点(node)名称,一个py文件只能有一个。
# 代表开启一个进程!匿名参数也默认是这个
# 订阅的语句。先是你需要订阅的话题要对,然后是数据类型,然后是回调函数名字
# 最后的队列很重要,不管发布还是订阅,都有queue_size参数;
# 如果默认的话,发布的频率远高于你处理图片的速度,因此根本无法实时的显示
# 所以需要换为1,只接收最新的一个消息,其他的都丢了不管~
def laser_listener():
    rospy.init_node('laser_listener', anonymous=True)
    rospy.Subscriber("lidar/scan", LaserScan,callback,queue_size = 1)
    rospy.spin()

if __name__ == '__main__':
    laser_listener()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hehedadaq

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

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

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

打赏作者

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

抵扣说明:

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

余额充值