Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
lfonsocapone opened this issue Dec 31, 2024 · 1 comment

Comments

@lfonsocapone
Copy link

项目简介

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 雷达)。
• 提高伪基站信号处理的鲁棒性。

@natowi natowi changed the title 项目名称:AvalancheRescue — 基于摄影测量的伪基站雪崩信标 AvalancheRescue: Photogrammetry-Based Pseudo-Base Station (Avalanche Beacon) Jan 1, 2025
@natowi
Copy link
Member

natowi commented Jan 1, 2025

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants