地面端
- Android系统层集成
Docker
(前提)
Docker
用于部署本地ODM
服务 - 拉取远程图片
地面端通过图传方式拉取天空端图片(socket
) 并记录每一张图片的拍摄位置(经纬度) 以及无人机fpv
视角(fov
) 用于ODM
计算出每个像素点的坐标 - APP操作
ODM
完成拼图
var header = {"accept": "application/json"};
header["set-uuid"] = uuid;
var body = {
"dateCreated": DateTime.now().microsecondsSinceEpoch.toString(),
"name": name,
"options": withGeo ? (cnt>100?newOdmCommonOptionsBig:newOdmCommonOptions) : (cnt>100?odmCommonOptionsBig:odmCommonOptions),
"skipPostProcessing": "true"
};
List<http.MultipartFile> files = [];
var f = await http.MultipartFile.fromPath("images", taskImgZipPath,
filename: "seed.zip");
files.add(f);
String urlNoArgs = "${odmUrl}/task/new";
final finalPath = Uri.parse(urlNoArgs);
final httpClinet = HttpClient();
httpClinet.connectionTimeout = const Duration(seconds: 30);
var request = http.MultipartRequest('POST', finalPath);
request.headers.addAll(header);
request.fields.addAll(body);
if (files != null) {
request.files.addAll(files);
}
final iOClient = http.IOClient(httpClinet);
print("executeWithArgs--- ${finalPath}--${header}");
var response = await iOClient.send(request);
print("executeWithArgs response--- ${response.statusCode}");
iOClient.close();
httpClinet.close();
await File.fromUri(Uri.parse(taskImgZipPath)).delete();
-
Mapbox
加载图片
await _mapboxController.addSource(
layerName,
RasterSourceProperties(
tiles: [
(GeoServerHandler.instance.existLocalGeoLayer(layerName)
? 'http://***'
: 'https://***') +
'/geoserver/gwc/service/wmts?layer=' +
Uri.encodeComponent(layerInfo) +
'&style=&tilematrixset=EPSG:900913&Service=WMTS&Request=GetTile&Version=1.0.0&Format=image%2Fpng&TileMatrix=EPSG:900913:{z}&TileCol={x}&TileRow={y}'
],
tileSize: 256,
));
// var firstLine = await _mapboxController.lines.last;
_logger.info("mapcount MapboxController.mapCount" +
MapboxController.mapCount.toString());
await _mapboxController.addRasterLayer(
layerName,
layerId,
const RasterLayerProperties(),
belowLayerId: "${_mapboxController.fillManager?.id}_0",
);
天空端
- 拍照
大脑控制相机(fpv系统)拍照并取得图片 记录当前的坐标以及fov
- 下发图片
通过图传链路(2.4G/5.8G)下发给地面站
关于ODM
用于生成生成tif
文件
ODM
(OpenDroneMap
)是一个用于处理无人机航拍数据的开源软件工具集 可以用来生成数字地图、三维模型和其他地理信息产品 在使用 ODM
进行拼图时 通常是指将无人机拍摄的多个照片拼接成一幅完整的航拍图像或地图
以下是在 ODM
中进行拼图的一般步骤
-
准备航拍数据:
- 确保你有无人机拍摄的照片数据 包括足够的重叠度和适当的航拍参数
-
安装和配置 ODM:
- 下载并安装最新版本的
OpenDroneMap
- 按照官方文档提供的说明,进行安装和配置
ODM
- 下载并安装最新版本的
-
运行图像处理流程:
- 使用 ODM 提供的命令行工具或图形用户界面 启动图像处理流程
- 在处理流程中选择拼图(
Mosaicking
)功能 并配置相关参数 如图像匹配算法、拼接精度等
-
生成拼图结果:
-
ODM
会自动对输入的航拍照片进行拼图处理 生成一幅完整的航拍图像或地图 - 可以在处理过程中查看处理日志和结果预览 以确保拼图效果符合预期
-
-
后处理和导出:
- 对生成的拼图结果进行后处理 如裁剪、调整色彩、添加标注等
- 最终导出拼图结果 可以保存为常见的图片格式(如
JPEG
、PNG
)或地理信息数据格式(如GeoTIFF
)
通过以上步骤 可以利用 ODM
对无人机航拍数据进行拼图处理 生成完整的航拍图像或地图 这种方式可以帮助你更好地展示和分析航拍数据 以支持各种地理信息应用需求