python写的ROS激光雷达扇形滤波

python写的ROS激光雷达扇形滤波

项目中想要实现针对机器人正前方N°的区域有障碍时,对机器人进行速度限制,于是自己做了一个激光雷达的扇形滤波。

思路就是获取/scan话题,将话题数据中的最大和最小角度设置为自己想要的扇区,需要注意的是,LaserScan一般默认的坐标系与机器人方向相反,A1雷达的背面是laser坐标系的正方向——0°角位置
在这里插入图片描述
在使用python时,发现LaserScan的ranges使用元组来储存,无法直接修改或删除,但是可以使用赋值的方式修改,修改数据时还需要注意角度和距离数组的对应关系。

程序可以通过参数设置扇区的大小。

附上代码

class Fliter:
    def __init__(self):
        rospy.init_node('LaserScanFliter',anonymous=True)

        self.receive_scan = rospy.Subscriber('/scan', LaserScan , self.callback)
        self.publish_scan = rospy.Publisher('/scan_range_filter',LaserScan,queue_size=1)
        self.scan_degree = rospy.get_param('~degree',6)



    def callback(self,data):
        new_scan = data
        new_scan.angle_min=3.1415926-3.1415926/self.scan_degree*2
        #print(new_scan)
        ranges=()
        range_size = len(data.ranges)
        range_size_pair = int(range_size/self.scan_degree)
        print(range_size_pair)
        for i in range(range_size_pair*(self.scan_degree-1),range_size-1):
            ranges += (data.ranges[i],)
        for i in range(0,range_size_pair):
            ranges += (data.ranges[i],)


        new_scan.ranges=ranges
        new_scan.angle_max=new_scan.angle_min+new_scan.angle_increment*(len(ranges)-1)
        self.publish_scan.publish(new_scan)
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值