Meshroom icon indicating copy to clipboard operation
Meshroom copied to clipboard

AvalancheRescue: Photogrammetry-Based Pseudo-Base Station (Avalanche Beacon)

Open lfonsocapone opened this issue 1 year ago • 2 comments

项目简介

AvalancheRescue 是一款利用摄影测量和伪基站技术开发的雪崩信标(Avalanche Beacon)系统。项目的目标是构建一个开源解决方案,利用移动设备、无人机和 LiDAR 技术快速定位雪崩中的受害者,为户外运动爱好者和搜救队伍提供低成本、高精度的工具。

核心功能 1. 位置信号模拟: • 利用伪基站技术,通过低功耗设备发出定位信号。 • 结合 GPS 数据为救援团队提供受害者的大致位置。 2. 摄影测量与 LiDAR 融合: • 使用无人机或移动设备拍摄的影像,通过摄影测量生成 3D 地形模型。 • 结合 LiDAR 提供高精度的雪层深度和障碍信息。 3. 受害者定位: • 结合伪基站信号和 3D 地形数据,精确计算受害者的埋藏位置。 • 生成可视化的搜救路径。 4. 实时通信与导航: • 基于移动设备与伪基站的通信协议,实时传输位置信息。 • 提供路径规划功能,优化救援路线。

项目目标 1. 提高搜救效率:结合 3D 建模与无线通信技术,快速锁定受害者位置。 2. 降低成本:采用现有的开源技术和廉价硬件,打造一套可普及的雪崩信标方案。 3. 兼容性:支持主流移动设备、无人机和摄影测量软件(如 Meshroom)。

硬件需求 1. 伪基站设备: • 核心:基于 SDR(软件定义无线电)的低功耗伪基站。 • 常用模块:如 HackRF One 或 LimeSDR Mini。 2. 摄影测量设备: • 标准无人机(如 DJI 系列)或智能手机(带 LiDAR 的 iPhone/iPad)。 • 支持多视图拍摄的相机。 3. 计算设备: • 高性能笔记本或服务器,用于 3D 重建和信号处理。

技术架构

  1. 信号模块 • 使用 SDR 模拟雪崩信标的信号。 • 采用频率为 457kHz 的国际标准雪崩信标协议。 • 使用 GPS 数据对信号进行时间同步。

  2. 摄影测量模块 • 数据输入: • 从无人机或设备获取多视图图像。 • 使用 LiDAR 获取深度数据。 • 数据处理: • 调用 Meshroom 或 AliceVision 提供的开源摄影测量算法生成 3D 地形模型。 • 输出: • 雪崩区域的 3D 点云模型。 • 可视化的受害者定位图。

  3. 定位模块 • 利用伪基站信号的强度和方向,初步估算受害者位置。 • 融合 3D 地形模型和 GPS 数据,计算受害者的埋藏深度和精确坐标。

  4. 导航模块 • 使用 A* 或 Dijkstra 算法进行路径规划。 • 输出救援路线,并通过移动设备提供实时导航。

技术实现

伪基站信号模拟

from gnuradio import analog, blocks, gr

class AvalancheBeacon(gr.top_block): def init(self, frequency=457e3): gr.top_block.init(self) self.src = analog.sig_source_c(1e6, analog.GR_COS_WAVE, frequency, 1) self.sink = blocks.file_sink(gr.sizeof_gr_complex, "beacon_signal.dat") self.connect(self.src, self.sink)

摄影测量数据处理

使用 AliceVision 和 OpenCV 分析影像并生成点云:

import meshroom from meshroom.core import Project

def process_photogrammetry(images_folder): project = Project() project.add_images(images_folder) project.start() return project.get_output()

定位算法

基于伪基站信号强度进行位置三角测量:

import numpy as np

def triangulate_position(signal_strengths, base_station_coords): """ 根据信号强度计算受害者位置 """ weights = np.array(signal_strengths) positions = np.array(base_station_coords) weighted_positions = np.sum(positions.T * weights, axis=1) / np.sum(weights) return weighted_positions

路径规划

使用 A* 搜索算法生成救援路径:

import heapq

def a_star_search(start, goal, grid): """ A* 路径规划算法 """ frontier = [] heapq.heappush(frontier, (0, start)) came_from = {} cost_so_far = {} came_from[start] = None cost_so_far[start] = 0

while frontier:
    _, current = heapq.heappop(frontier)
    if current == goal:
        break
    for next in get_neighbors(current, grid):
        new_cost = cost_so_far[current] + 1
        if next not in cost_so_far or new_cost < cost_so_far[next]:
            cost_so_far[next] = new_cost
            priority = new_cost + heuristic(next, goal)
            heapq.heappush(frontier, (priority, next))
            came_from[next] = current
return came_from

项目架构

AvalancheRescue/ │ ├── signal/ │ ├── beacon_simulator.py # 信标信号模拟 │ ├── photogrammetry/ │ ├── terrain_model.py # 3D 地形重建模块 │ ├── localization/ │ ├── triangulation.py # 受害者定位算法 │ ├── navigation/ │ ├── path_planner.py # 路径规划算法 │ ├── data/ # 示例数据集 ├── README.md # 项目说明文档 └── requirements.txt # 依赖列表

项目投稿与传播 1. 完善文档: • 描述项目的功能、用途和安装步骤。 • 提供示例数据集和测试说明。 2. 开源发布: • 上传到 GitHub,选择适当的开源许可证(如 MIT 或 GPL)。 • 在相关社区(如摄影测量、无人机技术论坛)宣传。 3. 后续改进: • 引入更多数据源(如 SAR 雷达)。 • 提高伪基站信号处理的鲁棒性。

lfonsocapone avatar Dec 31 '24 08:12 lfonsocapone

English translation:

Project Overview

AvalancheRescue is an avalanche beacon system developed using photogrammetry and pseudo-base station technology. The goal of the project is to create an open-source solution that utilizes mobile devices, drones, and LiDAR technology to quickly locate victims in avalanches, providing outdoor enthusiasts and rescue teams with a low-cost, high-precision tool.

Core Features

Position Signal Simulation:
    Utilize pseudo-base station technology to emit positioning signals through low-power devices.
    Combine GPS data to provide rescue teams with the approximate location of victims.

Photogrammetry and LiDAR Integration:
    Generate 3D terrain models from images captured by drones or mobile devices using photogrammetry.
    Combine with LiDAR to provide high-precision snow layer depth and obstacle information.

Victim Location:
    Accurately calculate the burial location of victims by combining pseudo-base station signals and 3D terrain data.
    Generate a visualized rescue path.

Real-time Communication and Navigation:
    Real-time transmission of location information based on communication protocols between mobile devices and pseudo-base stations.
    Provide path planning functionality to optimize rescue routes.

Project Goals

Improve Rescue Efficiency: Quickly pinpoint victim locations by combining 3D modeling and wireless communication technology.
Reduce Costs: Utilize existing open-source technologies and inexpensive hardware to create a widely accessible avalanche beacon solution.
Compatibility: Support mainstream mobile devices, drones, and photogrammetry software (such as Meshroom).

Hardware Requirements

Pseudo-Base Station Equipment:
    Core: Low-power pseudo-base station based on SDR (Software Defined Radio).
    Common modules: Such as HackRF One or LimeSDR Mini.

Photogrammetry Equipment:
    Standard drones (e.g., DJI series) or smartphones (iPhone/iPad with LiDAR).
    Cameras that support multi-view capture.

Computing Equipment:
    High-performance laptops or servers for 3D reconstruction and signal processing.

Technical Architecture

Signal Module:
    Use SDR to simulate the signal of the avalanche beacon.
    Adopt the international standard avalanche beacon protocol with a frequency of 457 kHz.
    Use GPS data for time synchronization of the signal.

Photogrammetry Module:
    Data Input:
        Acquire multi-view images from drones or devices.
        Use LiDAR to obtain depth data.
    Data Processing:
        Call open-source photogrammetry algorithms provided by Meshroom or AliceVision to generate 3D terrain models.
    Output:
        3D point cloud model of the avalanche area.
        Visualized victim location map.

Location Module:
    Use the strength and direction of pseudo-base station signals to initially estimate the victim's location.
    Integrate 3D terrain models and GPS data to calculate the burial depth and precise coordinates of the victim.

Navigation Module:
    Use A* or Dijkstra algorithms for path planning.
    Output rescue routes and provide real-time navigation through mobile devices.

Technical Implementation

Pseudo-Base Station Signal Simulation

from gnuradio import analog, blocks, gr

class AvalancheBeacon(gr.top_block):
    def __init__(self, frequency=457e3):
        gr.top_block.__init__(self)
        self.src = analog.sig_source_c(1e6, analog.GR_COS_WAVE, frequency, 1)
        self.sink = blocks.file_sink(gr.sizeof_gr_complex, "beacon_signal.dat")
        self.connect(self.src, self.sink)

Photogrammetry Data Processing

Using AliceVision and OpenCV to analyze images and generate point clouds:

import meshroom
from meshroom.core import Project

def process_photogrammetry(images_folder):
    project = Project()
    project.add_images(images_folder)
    project.start()
    return project.get_output()

Localization Algorithm

Position triangulation based on pseudo-base station signal strength:

import numpy as np

def triangulate_position(signal_strengths, base_station_coords):
    """
    Calculate the victim's position based on signal strength.
    """
    weights = np.array(signal_strengths)
    positions = np.array(base_station_coords)
    weighted_positions = np.sum(positions.T * weights, axis=1) / np.sum(weights)
    return weighted_positions

Path Planning

Using the A* search algorithm to generate rescue paths:

import heapq

def a_star_search(start, goal, grid):
    """
    A* path planning algorithm.
    """
    frontier = []
    heapq.heappush(frontier, (0, start))
    came_from = {}
    cost_so_far = {}
    came_from[start] = None
    cost_so_far[start] = 0

    while frontier:
        _, current = heapq.heappop(frontier)
        if current == goal:
            break
        for next in get_neighbors(current, grid):
            new_cost = cost_so_far[current] + 1
            if next not in cost_so_far or new_cost < cost_so_far[next]:
                cost_so_far[next] = new_cost
                priority = new_cost + heuristic(next, goal)
                heapq.heappush(frontier, (priority, next))
                came_from[next] = current
    return came_from

Project Structure

AvalancheRescue/ │ ├── signal/ │ ├── beacon_simulator.py # Beacon signal simulation │ ├── photogrammetry/ │ ├── terrain_model.py # 3D terrain reconstruction module │ ├── localization/ │ ├── triangulation.py # Victim localization algorithm │ ├── navigation/ │ ├── path_planner.py # Path planning algorithm │ ├── data/ # Sample dataset ├── README.md # Project documentation └── requirements.txt # Dependency list

Project Submission and Promotion

Improve Documentation:
    Describe the project's features, uses, and installation steps.
    Provide sample datasets and testing instructions.
Open Source Release:
    Upload to GitHub and choose an appropriate open-source license (e.g., MIT or GPL).
    Promote in relevant communities (e.g., photogrammetry, drone technology forums).
Future Improvements:
    Introduce more data sources (e.g., SAR radar).
    Enhance the robustness of pseudo-base station signal processing.

natowi avatar Jan 01 '25 13:01 natowi

Ты пришёл на англоязычный сайт, на англоязычный репозиторий, но пишешь на китайском? Зачем? Имей уважение переводи свои сообщения сразу на английский, как это делают буквально все (кроме китайцев и арабов)

lynrayy avatar Mar 04 '25 04:03 lynrayy