Layout do ORB-SLAM2 (5) Use Intel D435i para construir o mapa de nuvem de pontos SLAM

Intel RealSense SDK 2.0 é um pacote de desenvolvimento de plataforma cruzada, incluindo ferramentas básicas de câmera, como realsense-viewer, e também fornece interfaces ricas para desenvolvimento secundário, incluindo ROS, python, Matlab, node.js, LabVIEW, OpenCV, PCL, .NET etc.

A câmera usada desta vez é a D435i
, que pode fornecer profundidade e imagens RGB, e possui IMU.
Este processo consiste em usar a câmera D435i para construção de nuvem de pontos SLAM.

Instale o Intel RealSense SDK e visualize os dados da câmeraLinux
/Ubuntu - RealSense SDK 2.0 Construction Guide

Depois de instalada, visualize a profundidade da câmera e as imagens RGB

realsense-viewer

insira a descrição da imagem aqui

Em seguida, baixe o pacote de funções do driver da estrutura ROS que aciona cada câmera do intel
ROS wrapper para dispositivos Intel® RealSense™


Quando a instalação for concluída, você poderá começar a ver os dados da câmera

Continuamos a configurar o SMAL aqui.
Antes de iniciar a câmera, precisamos definir o arquivo rs_camera.launch no rospack realsense2_camera
insira a descrição da imagem aqui


O primeiro é conseguir a sincronização temporal de diferentes dados do sensor (profundidade, RGB, IMU), ou seja, ter o mesmo carimbo de data / hora; o último
adicionará uma série de rostopic, dos quais estamos mais preocupados que /camera/aligned_depth_to_color/image_rawa imagem de profundidade aqui esteja alinhada com a imagem RGB

  <arg name="enable_sync"               default="true"/>
  <arg name="align_depth"               default="true"/>

insira a descrição da imagem aqui


Depois de concluído, você pode iniciar a câmera com o seguinte comando

roslaunch realsense2_camera rs_camera.launch

A chave é que /camera/color/image_raw e /camera/aligned_depth_to_color/image_raw
correspondem à imagem RGB e à imagem de profundidade, respectivamente


Em seguida Examples/RGB-D, crie um novo RealSense.yamlarquivo de parâmetro chamado,
insira a descrição da imagem aqui


então edite

#--------------------------------------------------------------------------------------------
# Camera calibration and distortion parameters (OpenCV)
Camera.fx: 909.3504638671875
Camera.fy: 908.5739135742188
Camera.cx: 645.5443725585938
Camera.cy: 369.3554992675781

Camera.k1: 0.0
Camera.k2: 0.0
Camera.p1: 0.0
Camera.p2: 0.0
Camera.k3: 0.0

Camera.width: 1280
Camera.height: 720

#Camera frames per second
Camera.fps: 30.0

#IR projector baseline times fx (aprox.)
Camera.bf: 46.01

#Color order of the images (0: BGR, 1: RGB. It is ignored if images are grayscale)
Camera.RGB: 1

#Close/Far threshold. Baseline times.
ThDepth: 40.0

#Deptmap values factor,将深度像素值转化为实际距离,原来单位是 mm,转化成 m
DepthMapFactor: 1000.0


#ORB Parameters
#--------------------------------------------------------------------------------------------

#ORB Extractor: Number of features per image
ORBextractor.nFeatures: 1000

#ORB Extractor: Scale factor between levels in the scale pyramid
ORBextractor.scaleFactor: 1.2

#ORB Extractor: Number of levels in the scale pyramid
ORBextractor.nLevels: 8

#ORB Extractor: Fast threshold
#Image is divided in a grid. At each cell FAST are extracted imposing a minimum response.
#Firstly we impose iniThFAST. If no corners are detected we impose a lower value minThFAST
#You can lower these values if your images have low contrast
ORBextractor.iniThFAST: 20
ORBextractor.minThFAST: 7

#--------------------------------------------------------------------------------------------
#Viewer Parameters
#--------------------------------------------------------------------------------------------
Viewer.KeyFrameSize: 0.05
Viewer.KeyFrameLineWidth: 1
Viewer.GraphLineWidth: 0.9
Viewer.PointSize:2
Viewer.CameraSize: 0.08
Viewer.CameraLineWidth: 3
Viewer.ViewpointX: 0
Viewer.ViewpointY: -0.7
Viewer.ViewpointZ: -1.8
Viewer.ViewpointF: 500


Dentre eles, contém os parâmetros internos da câmera, que podem ser obtidos através do seguinte, e os parâmetros de cada câmera podem ser diferentes

rostopic echo /camera/color/camera_info

insira a descrição da imagem aqui

A principal coisa a se prestar atenção no yaml aqui é

# 相机标定和畸变参数(OpenCV)

Para modificar os dados de acordo com o tópico [/camera/color/camera_info],
os parâmetros podem ser verificados em relação ao URL para visualizar as informações específicas do parâmetro
http://docs.ros.org/en/melodic/api/sensor_msgs/html /msg/CameraInfo.html

Esses são os seguintes parâmetros

Camera.fx: 909.3504638671875
Camera.fy: 908.5739135742188
Camera.cx: 645.5443725585938
Camera.cy: 369.3554992675781

Camera.k1: 0.0
Camera.k2: 0.0
Camera.p1: 0.0
Camera.p2: 0.0
Camera.k3: 0.0

Camera.width: 1280
Camera.height: 720

insira a descrição da imagem aqui


Salve e saia quando terminar

então modifique src/pointcloudmapping.cco arquivo

1. Perto da linha 128

	voxel.setLeafSize (0.02f, 0.02f, 0.02f); 		//Modified place 1 调节点云密度

insira a descrição da imagem aqui

2, próximo à linha 75

            p.y = ( m - kf->cy) * p.z / kf->fy;
           // p.y = - ( m - kf->cy) * p.z / kf->fy;   //Modified place2 与原先添加了负号,将原本颠倒的点云地图上下翻转,方便观察 
           //【后续测试显示的pcd完全无法使用。不进行上下翻转】
            
	    	p.r = color.ptr<uchar>(m)[n*3];         //Modified place3 修改颜色显示
            p.g = color.ptr<uchar>(m)[n*3+1];
            p.b = color.ptr<uchar>(m)[n*3+2];

#########2023年04月17日08:54:17 UTC+8:00#########
##########Devido à ambiguidade do original captura de tela, Substitua a nova imagem #########
insira a descrição da imagem aqui


Em seguida, compile ORB_SLAM2_modified

./build.sh
./build_ros.sh

insira a descrição da imagem aqui

Teste após compilar

Inicie o nó mestre

roscore

iniciar câmera

roslaunch realsense2_camera rs_camera.launch

insira a descrição da imagem aqui


Construa um mapa e encontre um erro

rosrun ORB_SLAM2 RGBD Vocabulary/ORBvoc.bin Examples/RGB-D/RealSense.yaml /camera/rgb/image_raw:=/camera/color/image_raw /camera/depth_registered/image_raw:=/camera/aligned_depth_to_color/image_raw

insira a descrição da imagem aqui


Após a pesquisa, pode ser o arquivo yaml . Opencv4.0 precisa ser modificado para ler o erro do arquivo yaml erro: (-49: Código de erro desconhecido -49) O arquivo de entrada está vazio na função 'abrir'

Precisa adicionar no topo do arquivo yaml

%YAML:1.0

insira a descrição da imagem aqui

repetir

rosrun ORB_SLAM2 RGBD Vocabulary/ORBvoc.bin Examples/RGB-D/RealSense.yaml /camera/rgb/image_raw:=/camera/color/image_raw /camera/depth_registered/image_raw:=/camera/aligned_depth_to_color/image_raw

insira a descrição da imagem aqui
insira a descrição da imagem aqui
insira a descrição da imagem aqui
insira a descrição da imagem aqui
Após CTRL+C, você pode ver o arquivo pcd de saída

Ver arquivos pcd salvos

pcl_viewer vslam.pcd

insira a descrição da imagem aqui
insira a descrição da imagem aqui

Até o momento, o processo de implementação do ORB SLAM 2 baseado na câmera de profundidade Intel RealSense D435i foi bem-sucedido

No entanto, como as instruções para iniciar o SLAM são um pouco complicadas, use roslauch para otimizar
o primeiro é iniciar o pacote offline

Quando o comando iniciado não for inserido por completo, o terminal exibirá o uso usado

Usage: rosrun ORB_SLAM2 RGBD path_to_vocabulary path_to_settings

insira a descrição da imagem aqui

Primeiro crie um pacote de funções chamado slam

cd ~/catkin_ws/src
catkin_create_pkg slam std_msgs rospy roscpp

insira a descrição da imagem aqui

Em seguida, crie um arquivo de inicialização neste pacote de recursos, nomeei-o para rgbd.launch
edição

<launch>
    <!--定义全局参数-->
    <arg name="rgb_image" default="/camera/rgb/image_raw"/>
    <arg name="path_to_vacabulary" default="/home/heying/ORB_SLAM2_modified/Vocabulary/ORBvoc.bin"/>
    <arg name="path_to_settings" default="/home/heying/ORB_SLAM2_modified/Examples/RGB-D/TUM1_ROS.yaml"/>


    <!--播放离线包-->
    <!-- 注意这里bag文件的路径必须为绝对路径-->
    <node pkg="rosbag" type="play" name="player" output="screen"
         args=" /home/heying/ORB_SLAM2_modified/Examples/datasets/rgbd_dataset_freiburg1_xyz.bag">
         <remap from="/camera/rgb/image_color" to="/camera/rgb/image_raw" />
	 <remap from="/camera/depth/image" to="/camera/depth_registered/image_raw" />

    </node>

    <!--启动ORB-SLAM2 RGBD-->
    <node name ="RGBD" pkg="ORB_SLAM2" type="RGBD"
        args="$(arg path_to_vacabulary) $(arg path_to_settings)" respawn="true" output="screen">
        <!--remap from="/camera/image_raw" to="$(arg rgb_image)"/-->
    </node>
</launch>

insira a descrição da imagem aqui


teste após a conclusão

roslaunch slam rgbd.launch

insira a descrição da imagem aqui


Início normal
insira a descrição da imagem aqui


câmera ao vivo

Crie um novo arquivo de lançamento para iniciar a câmera e construir um mapa

touch  camera.launch
gedit camera.launch

insira a descrição da imagem aqui

então escreva

O primeiro é o parâmetro global, não digite o comando completo primeiro, você pode ver que o método de uso é gerado path_to_vocabularye a soma que sai path_to_settingsé o parâmetro global que precisa ser definido

rosrun ORB_SLAM2 RGBD

insira a descrição da imagem aqui

<launch>

<!--定义全局参数-->
  <arg name = "path_to_vocabulary" default = "/home/heying/ORB_SLAM2_modified/Vocabulary/ORBvoc.bin"/>
  <arg name = "path_to_settings" default = "/home/heying/ORB_SLAM2_modified/Examples/RGB-D/RealSense.yaml"/>


  <!--include file="$(find realsense2_camera)/launch/rs_camera.launch"/-->


<!--启动ORB-SLAM2 RGBD-->
  <node pkg = "ORB_SLAM2" type ="RGBD" name = "RGBD_camera" args="$(arg path_to_vocabulary) $(arg path_to_settings)" respawn="true" output="screen">
        <remap from="/camera/rgb/image_raw" to="/camera/color/image_raw" />
	 	<remap from="/camera/depth_registered/image_raw" to="/camera/aligned_depth_to_color/image_raw" />
  </node>

</launch>

insira a descrição da imagem aqui


Teste
o início do nó mestre

roscore

Em seguida, verifique a conexão de hardware da câmera

iniciar câmera

roslaunch realsense2_camera rs_camera.launch

insira a descrição da imagem aqui


Iniciar mapeamento

roslaunch slam camera.launch

insira a descrição da imagem aqui
A inicialização é normal e o efeito é perfeito.
insira a descrição da imagem aqui
O arquivo pcd será gerado após o programa CTRL+C
insira a descrição da imagem aqui

Veja o efeito

pcl_viewer vslam.pcd

insira a descrição da imagem aqui

O efeito é bom.
insira a descrição da imagem aqui

Até agora, o processo de otimização do comando de inicialização do uso do Intel D435i para construir o mapa de nuvem de pontos SLAM e o mapa de câmera slam terminou.

Acho que você gosta

Origin blog.csdn.net/Xiong2840/article/details/128470582
Recomendado
Clasificación