0%

指定ip走指定的网卡

本文实验适用于,vpn走wifi的网卡,其余走网线,这样vpn不会影响其余端口的实用

查询本地网卡与网关

1
route print

网卡与网关信息

其中:10.104.255.254是网线的网关、192.168.1.1是wifi的网关

添加条件:指定的ip走指定的网关

1
route add 219.139.228.228 mask 255.255.255.255 192.168.1.1 metric 10 if 6

其中219.139.228.228是指定的ip 192.168.1.1是这个ip走的网关,其中6是指wifi对于的接口

wifi接口信息

即可实现219.139.228.228走wifi,其余走网线

常见命令

拉取容器

1
sudo docker pull image_name

创建镜像

1
docker run -i -d --gpus all --shm-size=24g -v F:/ubuntu/docker_data/fast-livo2:/data --name fast-livo2 cuda_11_8
  • -d: 容器在后台运行,并返回容器的id
  • —gpus all: 该镜像可以访问到的gpu设置为全部
  • —shm-size=24g: 设置容器的共享内存,默认为64MB,对于深度学习等应用来说,不够
  • -v local_path:image_path : 将容器路径映射到本地路径,用于存放代码和数据等等
  • —name: 容器名称
  • cuda_11_8: 镜像名称

进入已有容器的命令行进行操作

1
2
docker ps -a
docker exec -it <容器id或名称> /bin/bash

删除容器和镜像

1

常见问题

vscode连接远程docker权限问题

Failed to connect. Is Docker runing?

1
sudo chmod 777 /var/run/docker.sock

pyinstaller常用参数

  • -F: 打包为一整个exe

  • -D: 打包为一个文件夹

  • -w: 运行时不显示命令行窗口(仅对windows有效)

  • -i: 图标路径

基础命令

本文代码:https://github.com/ouwenwu/UAV2GroundMapper.git

一、数据准备

无人机数据

无人机数据图片

手持扫码仪数据

手持扫描仪数据

二、无人机数据处理

Photoscan无人机处理流程

Align Photos->Build Point Cloud

无人机数据处理结果

导出camera.xml和点云备用,需要设置导出格式为blockexchange同时不需要导出tiepoints

photoscan导出camera

导出参数设置

点云导出参数设置

手持激光扫描仪处理流程

RayStudio打开工程文件—-Basic Data解算图片和点云数据

Raystudio解算数据

点云赋色

点云赋色

slam处理结果

RayStudio导出图片使用Photoscan空三

将RayStudio的文件导出图像初始位置

1
python main.py getImageXYZ --colmap_dir J:/jyg/chibi/zhihuilou/outdoor/shading/Colmap/sparse/0/images.txt --output_path J:/jyg/chibi/zhihuilou/outdoor/shading/Colmap/image_xyz.txt

图片路径位于:./image_undistorted/camera_front

Photoscan添加图片后,在Reference(参考页)添加图像位置作为参考,并选择之前输出的图像位置

phtotscan导入参考

可以适量的删除影像(只保留研究区域)以及稀疏影像,当前影像采集频率高于需求,适当减少加快效率,删除后align photos(对齐图片)->Build Point Cloud

手持密集点云

导出camera.xml和点云备用,需要设置导出格式为blockexchange同时不需要导出tiepoints

手持与无人机融合

手持到无人机坐标系统转换

cloudcampare计算变换矩阵

包含粗配准和精配准两个步骤:其中粗配准为手动调整点云使得两个点云具有初步配齐,再使用icp进行精配准.

记录下每一步点云的变换矩阵

旋转平移方法

粗配准结果

裁剪两个点云至相同范围,并做精配准

精配准

记录下每一步的变换矩阵如下:

变换矩阵

将手持坐标系按照变换关系旋转

将无人机的photoscan的xml格式转为colmap格式

1
python main.py from_photoscan_xml_2_colmap_txt --xml_path J:/jyg/test/camera_shouchi.xml --output_path J:/jyg/test/colmap

根据colmap结果计算图像位置

1
python main.py getImageXYZ --colmap_dir J:/jyg/test/colmap --output_path J:/jyg/test/image_xyz.txt

图像位姿

旋转图像位置到无人机的坐标系下:

1
python main.py rotate_image_xyz --image_xyz J:/jyg/test/image_xyz.txt --output_path J:/jyg/test/image_xyz_out.txt --matrix_path J:/jyg/test/matrix.txt

根据旋转后的图像位置去纠正colmap文件到指定坐标系

1
colmap model_aligner --input_path J:/jyg/test/colmap --output_path J:/jyg/test/colmap_rotate --ref_images_path J:/jyg/test/image_xyz_out.txt --alignment_type enu --ref_is_gps 0  --robust_alignment_max_error 3

将旋转后的bin文件转为txt格式

colmap->import model->export model as text

将旋转后的colmap的txt文件,写为photoscan的xml文件

1
python main.py write_colmap_txt_2_photoscan_xml --colmap_txt_path J:/jyg/test/colmap_rotate --output_xml_path J:/jyg/test/camera_shouchi_rotate.xml --image_path J:/jyg/test/20250726162036/image_undistorted/camera_front

融合无人机和手持影像

合并无人机的xml和手持影像的xml

1
python main.py merge_photoscan_xml --xml_lists J:/jyg/test/camera_wrj.xml J:/jyg/test/camera_shouchi_rotate.xml --output_xml_path J:/jyg/test/merged_camera.xml

将xml文件导出为colmap的txt格式

1
2
python main.py from_photoscan_xml_2_colmap_txt --xml_path J:/jyg/test/merged_camera.xml --output_path J:/jyg/test/colmap_m
erge

  1. Equations: conclude with comma or dot depending on what follows.

    公式后要根据后续的内容添加逗号或句号

一、创建文档

1.创建到_post默认的文件夹中

1
hexo new name

2.创建到_post下的指定子文件夹中

1
hexo new post "title" --path=latex/name.md

二、部署到github

1
hexo clean && hexo generate && hexo deploy

当你不想在新文件夹里再跑一次 BibTeX,只想把已经“编译好”的参考文献带过去(适用于保持回复信中的参考文献顺序和文章中的一致),你至少要拷以下几个文件:

  1. .bbl 这是 BibTeX 运行后生成的含所有条目的正文文件,LaTeX 在第二轮编译时会直接把它当作 .tex 插入。
  2. .bst 这是你用来格式化参考文献的样式文件,如果目标工程里还没有,就要一并拷过去。
  3. .bib 如果目标工程以后还要对条目做增删改,或者要重新跑 BibTeX,就也把原始的 .bib 带上。
  4. .aux 只有当你要完全复刻交叉引用编号或者要保证引用顺序完全一致时才需要,一般不必。

仪器安装

无人机安装+RTK安装

航线规划

按照公司给的文件计算飞速等设置(要求其中一条航线包含灰布)

参数设置

自动曝光+白帧+黑帧

自动曝光:将飞机抬起来对着灰布,要求迎着太阳,摄像头拍的灰布区域不会被影子挡住,点击自动曝光

白帧:将飞机抬起来对着灰布,要求迎着太阳,摄像头拍的灰布区域不会被影子挡住,点击白帧

黑帧:将飞机放在地面上,盖着镜头盖,点击黑帧

飞行

起飞+绕8字+按航线飞行+(过灰布)

如果航线不过灰布的话需要手动飞一条航线过灰布

ar-app使用教程

ar_app文件夹:

image-20230911090458858

数据与输出文件夹:建议按以下路径放置,可以更改

image-20230911090809952

ar_app使用

image-20230911095706333

其中:

—input_path:输入路径

路径下有两个文件夹:

  • mapping:构建库的图片(不可动)
  • query:存储定位图片的临时文件夹(需要定期删除里面的图片)

image-20230911103431355

—output_path:输出路径

里面有若干定位所需要的文件,不可更改

image-20230911103637786

—host:本机IP

本机电脑IP地址,服务发布的位置

—port:服务运行的IP

—number_retrieval:定位前图片检索的张数

数量可以设置为100,可以根据定位效果调整,这个对定位效率影响较小

—init_match_num:初始化图片用于定位需要的图片数目

这个对初始化定位速率影响较大,数量越多,定位精度越高,但定位效率越低

—navigation_match_num:导航过程中用于定位的图片数目

这个对导航定位数量影响较大,如上所述,可以根据精度和定位效率要求进行更改,默认为10

发起请求与返回

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 wx.uploadFile({
filePath: res.tempFilePath,
name: 'image',
url: 'http://10.104.31.14:5001/upLoadImg_api',
success:(res)=>{
let x_y_data = JSON.parse(res.data)
if(x_y_data.status === "floor"){
wx.showLoading({
title: '行走楼梯中',
mask: True
})
}else{
this.addPointToMap(x_y_data.x, x_y_data.y,"image")
wx.hideLoading()
}

if(this.is_end === false){
this.upLoadImage()
}
},
fail:(res)=>{
console.log(res)
}
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import json
import os
import time
import requests
url = "http://192.168.20.146:5001/upLoadImg_api"
src_dir = "cz_1"
images = os.listdir(src_dir)
images = sorted(images, key=lambda x: int(x.split(".")[0]))
for image in images:
file = os.path.join(src_dir, image)
files = {'image': open(file, 'rb')}
start_time = time.time()
r = requests.post(url=url, files=files)
end_time = time.time()
print(end_time-start_time, r.content)

返回值:

1
2
3
4
5
6
7
8
9
{

x:x坐标,

y:坐标,

status:"floor"时表示定位失误

}

一、本地使用

1.一般使用

新建项目:

image-20230907161016140

引擎设置:确保项目的jobs路径和引擎监听的jobs路径相同

image-20230907162128310

image-20230907162234601

导入图片:

image-20230907161046985

空三:block名上右键

image-20230907162010342

image-20230907164531702

重建:空三后的block上右键

image-20230907164632789

image-20230907164809754

image-20230907164831639

image-20230907164924132

2.导入其他软件的空三结果

注意导入的xml文件中图片的路径要和导入图片的路径一样,也就是需要更改一下这个路径,在3D view里去看一下是否图片可以找到

image-20230907170005855

二、集群使用

集群三个部分:Master机器+文件存储机器+工作机器(引擎)

1.集群项目的建立

项目路径要为网络路径

image-20230907171142785

引擎设置:

image-20230907171421385

image-20230907171459799

其余和非集群类似

image-20230907171558691

2.特殊处理方法(特殊问题)

2.1.带宽限制

集群所有的机器都会在文件存储机器上面读写,因此有一定的带宽限制,开的集群机器数目不能太多,可以适当超过带宽限制一点点

image-20230907172028754

2.2.项目太大,导致提交项目后有一定的问题

分tiles提交,一次只提交一部分tiles