独家复现实录|全球首个「窗口级」VLN系统:实现空中无人机最后一公里配送

近期关注到全球首个突破无人机配送 “最后一公里” 技术瓶颈的窗口级 VLN 系统研究,基于对前沿技术的探索与思索,编者对该论文进行了简单的复现。

特此展开技术复现实践分享,诚邀各位同仁一同探讨与交流。

在展开复现之前,我们先来聊聊相关背景。

当前基于无人机的视觉语言导航(VLN)任务普遍聚焦于粗粒度长距离目标,难以满足终端配送的精准需求。具体表现为:

  • 现有无人机 VLN 任务的局限性:多数研究关注长距离导航与大规模目标,在短距离小目标场景(如终端配送)中缺乏针对性探索;

  • 最后一公里配送的精度瓶颈:传统地面机器人主导的最后一公里配送研究,仅能实现建筑级配送,无法覆盖更精细的窗口级交付场景。

为解决上述问题,中国科学院自动化研究所、澳门科技大学、中国科学院大学等团队提出了LogisticsVLN。

LogisticsVLN 是基于多模态大语言模型的无人机自主物流配送系统,仅使用简单传感器和轻量级大型模型,无需先验环境知识或微调,即可在未知环境中高度部署,进行楼层定位、目标检测以及行动决策,从而完成无人机自主物流配送任务。

基于以上问题点与创新技术,本文将结合模型流程图以及小编个人的复现进行详细解读。

我们开设此账号,想要向各位对【具身智能】感兴趣的人传递最前沿最权威的知识讯息外,也想和大家一起见证它到底是泡沫还是又一场热浪?

欢迎关注【深蓝具身智能】👇


图片

方法说明

首先,我们来主要了解一下LogisticsVLN系统,然后小编将结合LogisticsVLN系统概述图进行流程讲解。

  • 系统目标

当无人机到达目标建筑物附近位置时,在没有先验地图的情况下,可以基于用户指令到达特定窗口。

  • 硬件概述

图片

▲图1 | LogisticsVLN系统概述图©️【深蓝具身智能】编译

  • 软件流程

(1)请求理解(图中a部分)

利用DeepSeek-R1 Distill-Qwen-14B模型,结合思维链(CoT)提示模板解析用户指令请求,提取元素为:

(2) 楼层定位(图中b部分)

该模块主要引导无人机到达目标楼层,大致说明如下:

(3)目标探索(图中c部分)

那么,在完成楼层定位之后,如何去检测目标位置的边界框?流程如下:

视点选择:如果目标识别视觉语言模型(Object Recognition VLM)不能从5个视角的RGB图像中检测到目标窗口,那么说明目标窗口可能在该层其他位置,需要让无人机绕着建筑物外围对该楼层进行巡视,以便发现目标窗口。那如何进行最优的巡视呢?

选择合适的视角是关键!

图片

▲图2 | 理想与非理想视角下的决策效果

LogisticsVLN的方案是:

这样可以让无人机高效地朝下一个探索点航行,同时降低碰撞风险。

关于LogisticsVLN系统更详细的解析,可以查看深蓝AI此前的解读:首个窗口级无人机配送VLN系统!中科院LogisticsVLN:基于MLLM实现精准投递

图片

实现效果

小编对论文进行了简单复现,下面进行展示和说明。

  • 构建一个测试环境

Step1:先从网上随便下载一张大楼正面的图片(如图3左侧,是一面5楼的大楼,每楼有6扇窗户);

Step2:使用开源的深度估计模型(DepthAnything)对该图进行深度估计;

Step3:基于深度图生成点云模型(如下图右侧),这样就得到一个用于测试的3D大楼了;

当然也可以用仿真软件构建一个简单的测试环境。(小编先前的研究内容可以直接拿来用,所以采用了上面的方法构建了一个简单的测试环境)

图片

▲图3 | 测试示例

  • VLN实现(和论文里面有一定出入)

(1)智能体类: 提供楼层定位、目标检测等功能

class Agent:    ...    """        描述:使用LLM分析用户指令,得到目标楼层和窗口        输入:prompt用户指令        输出:目标楼层、目标窗户号    """    def analy_task(self, prompt):        res = self.llm(prompt)        res = json.loads(res)        return res["target_floor"], res["target_window"]
    """        描述:使用VLM估计图片中一层楼的高度        输入:rgb图像        输出:一层楼的高度    """    def floor_height_estimate(self, rgb):        prompt_name = 'floor_height_estimate'        data = multiFusion(rgb, prompt_name)        res = self.vlm(data)        res = json.loads(res)        return res["floor_height"]     """        描述:使用VLM估计当前所在楼层数        输入:rgb图像        输出:当前楼层数    """        def current_floor_number(self, rgb):        prompt_name = 'current_floor_number'        data = multiFusion(rgb, prompt_name)        res = self.vlm(data)        res = json.loads(res)        return res["current_floor_number"]     """        描述:使用VLM搜索目标窗口        输入:rgb图像        输出:目标串口边框    """     def find_target_window(self, rgb):        prompt_name = 'find_target_window'        data = multiFusion(rgb, prompt_name)        res = self.vlm(data)        res = json.loads(res)        return res["box_2d"]

(2)配送主进程

"""    配送主进程    prompt:用户指令"""def mainloop(prompt):    # 实现了一个简单的无人机系统    uav_controller = UAVController()    # 三维重建    recon3d = Recon3D()    # 实现了一个简单RGB传感器    sensors = Sensors()    # 智能体    agent = Agent()    # 解析目标楼层和窗口    target_floor, target_window = agent.analy_task(prompt)    agent.target_floor = target_floor    agent.target_window = target_window    get_next_waypoint = False    find_target_window = False    touch_target_floor = False    br = tf.TransformBroadcaster()    while not rospy.is_shutdown():        try:            # 获取无人机的定位            cur_x, cur_y = uav_controller.getCurrentPose()            # TF变换,转化到世界坐标系下            br.sendTransform(                (cur_x, cur_y, 30),  # 位置 (x, y, z)                tf.transformations.quaternion_from_euler(0, 0, 0),  # 四元数表示的旋转                rospy.Time.now(),  # 时间戳                "uav",  # 无人机坐标系                "world"  # 世界坐标系            )            # 获取一帧RGB            rgb = sensors.getRGB()            # 对单帧图片进行三维重建,得到大楼的3D点云,并实时发布            # 在小编的实现中,和论文存在差异,后续并没有使用深度图,而是用VLM去估计无人机和大楼的定位            recon3d.reconstruction(rgb)
            # 爬升过程            if touch_target_floor == False:                if get_next_waypoint == False:                    # 获取当前楼层数                    current_floor = agent.current_floor(rgb)                    print("VLM解析结果: 当前楼层=", current_floor)                    # 判断当前楼层是不是目标楼层                    if current_floor != target_floor:                        # 获取1层楼高度                        floor_height = agent.floor_height_estimate(rgb)                        print("VLM解析结果: 楼层高度=", floor_height)                        print("移动到下一个航点")                        # 计算到下一个航点(目标楼层)的飞行距离                        fly_height = (target_floor - current_floor) * floor_height                        # 设置移动距离                        uav_controller.setDistance(fly_height)                        # 开始移动                        uav_controller.move()                        get_next_waypoint = True                    else:                        # 进入目标检测过程                        touch_target_floor = True                else:                    # 判断无人机是否到达航点高度                    if uav_controller.isReached() == True:                        # 重新判断航点                        get_next_waypoint = False                    else:                        uav_controller.move()            else:                # 目标检测阶段                if find_target_window == False:                    # 获取目标窗口boundingbox                    box_2d = agent.find_target_window(rgb)                    if box_2d is not None:                        y1, x1, y2, x2 = box_2d                        print("VLM解析结果: 识别到目标窗口")                        uav_controller.setGoal((x1 + x2) * 0.5, (y1+ y2) * 0.5)                        find_target_window = True                # 判断是否到达窗口附近                if uav_controller.reachGoal() == False:                    uav_controller.move()                else:                    print("抵达目标地")                    exit()           except KeyboardInterrupt:            break        finally:            time.sleep(0.01)
  • 测试效果

视频见:

独家复现实录|全球首个「窗口级」VLN系统:实现空中无人机最后一公里配送

说明:

第1步:用户给出指令"送到302房间来"

第2步:使用LLM解析指令得到具体楼层和房间

第3步:使用VLM估计当前楼层

第4步:使用VLM估计楼层高度

第5步:根据3、4计算出下一个航点

第6步:重复3-5步骤,直到到达目标楼层

第7步:使用VLM估计目标窗口,最后移动到目标窗口

实现局限:

1. 目前使用VLM在楼层高度上的估计效果不好,这就导致航点的计算经常容易出错,但比较幸运的是,在多次上上下下往复的调整过程中,最终基本都能找到正确的目标楼层。所以后续的目标是提高VLM在楼层高度上的估计精度;

2. 目前使用传统的规划算法实现的导航,后续的目标将结合VLM进行action的预测输出。

图片

总结

本文聚焦智能物流终端配送难题,针对当前无人机的视觉语言导航任务多关注长距离目标,地面机器人配送精度不足等问题,LogisticsVLN借助VLM模型的强大感知能力,无需进行特定任务训练,也不用预先构建地图,便可以完成无人机自主物流配送任务。

未来可进一步优化模型轻量化程度,提升复杂动态环境下的鲁棒性,加强多模态信息融合的精准度,探索更多应用场景以提升系统通用性,同时研究如何降低能耗、延长无人机续航时间,更好地满足实际物流配送需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值