本文仅为在ubuntu20.04实现Azure Kinect DK 三维重建demo,此文记录实现过程仅供学习,同时为大家避坑,文中参考大量文章已列至末尾。
1 ros安装
2 安装微软 DK的sdk
3 ros之AzureKinect驱动
4 Azure Kinect DK 点云和RGBD图的获取
5 conda安装
6 Kinect DK 实现三维重建
1 ros安装
1.1 安装源,添加sources.list
$ sudo sh -c '. /etc/lsb-release && echo "d{2d3b390d-f615-41d0-a830-7bbdcedbd397}eb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
$ sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
1.2 添加KEY
$ sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
1.3 更新源`
$ sudo apt update
1.4 安装ROS
由于我是 Ubuntu 20.04选择ros版本ROS Noetic
$ sudo apt install ros-noetic-desktop-full
1.5 配置环境变量
$ echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
$ source ~/.bashrc
1.6 安装依赖
$ sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
1.7 初始化rosdep
$ sudo rosdep init
$ rosdep update #可以不更
1.8 验证
1.8.1 启动ROS服务(终端1)
$ roscore
1.8.2 运行turtlesim_node(终端2)
$ rosrun turtlesim turtlesim_node
1.8.3 通过键盘操作小乌龟(终端3)
$ rosrun turtlesim turtle_teleop_key
证明安装成功,同时可以使用roscpp,后面会用到。
2 安装微软 DK的sdk
2.1下载源码
https://github.com/luckyluckydadada/Lucky-docker/releases/download/1/Azure-Kinect-Sensor-SDK-1.4.1.tgz
2.2 编译和安装sdk
tar -xvf Azure-Kinect-Sensor-SDK-1.4.1.tgz
cd Azure-Kinect-Sensor-SDK-1.4.1
sudo bash scripts/docker/setup-ubuntu.sh
mkdir build
cd build
cmake .. -GNinja -DCMAKE_BUILD_TYPE=Debug
ninja
sudo ninja install
2.3运行k4aviewer验证
注意1:直接运行k4aviewer会找不到设备,需要执行以下命令;
sudo cp scripts/99-k4a.rules /etc/udev/rules.d/
k4aviewer
注意2:同时需要添加bin环境变量到用户
vim ~/.bashrc
export LD_LIBRARY_PATH=/home/guojq6/Azure-Kinect-Sensor-SDK-1.4.1/build/bin:$LD_LIBRARY_PATH
source ~/.bashrc
注意3:以上执行过后会出现界面,但是depth图像无法正常显示,此时需要添加’libdepthengine.so.2.0‘这个库到bin
https://packages.microsoft.com/ubuntu/18.04/prod/pool/main/libk/libk4a1.4/libk4a1.4_1.4.1_amd64.deb
解压deb文件,并将libdepthengine.so.2.0复制到编译出来的bin文件中:
dpkg -x libk4a1.4_1.4.1_amd64.deb aa
cp libdepthengine.so.2.0 /home/guojq6/Azure-Kinect-Sensor-SDK-1.4.1/build/bin
3 ros之AzureKinect驱动
3.1 建立ROS workspace
mkdir -p ~/ws_kinect_dk/src
cd ~/ws_kinect_dk/src
catkin_init_workspace
git clone https://github.com/microsoft/Azure_Kinect_ROS_Driver.git
3.2 复制SDK文件到ROS workspace
cd ~/ws_kinect_dk/src
mkdir -p ext/sdk
cd ext/sdk
mkdir -p bin include lib
直接将build中bin、include复制到ws_kinect_dk/src/ext/sdk/bin、ws_kinect_dk/src/ext/sdk/include中,同时将/usr/local/bin/、/usr/local/include/、/usr/local/lib/拷到ws_kinect_dk/src/ext/sdk/bin、include、lib中。
3.3 编译ROS Driver
cd ~/ws_kinect_dk
catkin_make
catkin_make install
3.4验证
cd ~/ws_kinect_dk
source ./devel/setup.bash
roslaunch azure_kinect_ros_driver driver.launch
4 Azure Kinect DK 点云和RGBD图的获取
在第一节安装ros之后默认一安装了PCL库,且需要保证已经安装opencv。(如果按照正常顺序操作,此条一般默认都装好了,可忽略)
4.1 图像与点云获取代码下载
git clone https://github.com/luckyluckydadada/Azure-Kinect-DK-3D-reconstruction.git
4.2代码编译
cd Acquiring
mkdir build
cd build
cmake .. -GNinja
ninja
编译时可能使用pcl功能包时,会出现以下的奇怪错误:/usr/include/pcl-1.10/pcl/point_types.h:550:1: error: ‘plus’ is not a member of ‘pcl::traits’
这是因为c++标准的问题,需要找到报错对应main的cmakelist.txt文档里加入下面语句就可以了:
set(CMAKE_CXX_STANDARD 14)
4.3 验证
采集rgbd图
mkdir rgb depth ir
./AcquiringImages
获取点云图
mkdir ply pcd
./AcquiringPointCloud
5 conda安装
由于接下来的open3d重建算法需要用到的环境不同因此我们需要提前安装conda分出两个独立的虚拟环境
5.1 下载并安装
使用国内镜像源下载
https://repo.anaconda.com/archive/
我下载了Anaconda3-2022.05-Linux-x86_64.sh
#进入安装程序所在目录
cd /Downloads
#运行安装程序,按照操作指示依次选择:回车、q、yes、回车、yes,这样程序安装在home/miniconda3(文件名可能不同,根据安装包变化)目录下,并在~/.bashrc中自动添加系统路径
bash Anaconda3-5.3.1-Linux-x86_64.sh
#为了能让系统找到conda程序
source ~/.bashrc
5.2 更换源(强烈建议)
#生成 ~/.condarc文件
conda config --set show_channel_urls yes
gedit ~/.condarc
#清空文件,并将以下内容复制到文件中
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
5.3 创建不同环境
建立数据采集环境和三维重建环境(建议选好python版本,这样进入conda环境后会使用conda的pip进行安装,否则可能会使用bash环境中的pip)
conda create --name cap python=3.8
conda create --name build python=3.7
6 Kinect DK 实现三维重建
利用开源框架open3d的Reconstruction system实现Azure Kinect DK相机的三维重建
6.1 获取代码,上一节已获取可忽略:
git clone https://github.com/luckyluckydadada/Azure-Kinect-DK-3D-reconstruction.git
cd Azure-Kinect-DK-3D-reconstruction/open3d_reconstruction
6.2 采集数据
注意:此处建议进入环境txt,一步一步安装相应库出问题的概率小一点即使出问题也比较明确容易解决。
conda activate cap
cd Azure-Kinect-DK-3D-reconstruction/open3d_reconstruction
pip install -r requirements-0.10.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # 此处安装 open3d版本为 0.10.0,使用清华源
#录制数据,空格开始录制,esc退出录制并保存:
python sensors/azure_kinect_recorder.py --output dataset/name.mkv
#提取rgb和depth图像,以及相机config和相机内参config:
python sensors/azure_kinect_mkv_reader.py --input dataset/name.mkv --output dataset/name
6.3 三维重建
conda activate build
cd Azure-Kinect-DK-3D-reconstruction/open3d_reconstruction
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple# 此处安装 open3d版本为 0.12.0
#如果发生目录移动,请修改dataset/name/config.json 中的"path_dataset" 和 "path_intrinsic"的值。
python run_system.py dataset/name/config.json --make --register --refine --integrate
在构建三维重建过程中可能会报以下错误:
ModuleNotFoundError: No module named ‘sklearn‘
我们根据错误安装sklean模块
依赖
pip install numpy
pip install scipy
pip install matplotlib
安装
pip install scikit-learn
但是还是会报以下错误:
这是因为sklean模块版本的问题造成的,安装以下即可:
pip install sklearn==0.0.post1 -i https://pypi.tuna.tsinghua.edu.cn/simple
https://blog.csdn.net/weixin_41836738/article/details/121348837?spm=1001.2014.3001.5502
https://blog.csdn.net/weixin_41965898/article/details/116458783
https://blog.csdn.net/lx_ros/article/details/123597208