Mapeo SLAM basado en fusión de mapa de profundidad e información LiDAR 2D

prefacio

Este es mi proyecto de graduación relacionado
hmm. . . No hay proyectos de código abierto en Internet, solo conocimientos teóricos y documentos, así que registre el proceso de hacerlo usted mismo.
Demasiado perezoso, la cámara zed2 que usé al principio, la fusión ha sido exitosa, pero luego descubrí que la cámara zed2 genera imágenes profundas basadas en el principio binocular, que no se puede usar en un ambiente oscuro, así que la reemplacé con urgencia con un d435i. Solo se ha cambiado el tema de la cámara, y el resto del proceso es el mismo, por lo que me da pereza cambiar el registro del proceso.

Fusión de cámara y lidar 2D

El paquete depthimage_to_laserscan de ROS es bastante bueno
Descargar depthimage_to_laserscan

mkdir -p ~/depth2laser_ws/src
cd ~/depth2laser_ws/src
git clone https://github.com/ros-perception/depthimage_to_laserscan.git
cd ..
catkin_make

Conversión de mapa de profundidad de prueba

#运行相机 (需要相机驱动)
roslaunch zed_wrapper zed2.launch

#运行深度图转换
rosrun depthimage_to_laserscan depthimage_to_laserscan image:=/zed2/zed_node/depth/depth_registered

#打开rviz观察
rosrun rviz rviz

Aún no se puede mostrar el escaneo láser, rviz informa que no se puede encontrar [camera_depth_frame], luego dale a rviz un tf

rosrun tf static_transform_publisher 0 0 0 0 0 0 1 map camera_depth_frame 10

se puede mostrar normalmente

Luego agregué un archivo de inicio y lo coloqué en la carpeta deptn2laser_ws/src/ depthimage_to_laserscan/launch

zed2_depthimage_to_laserscan.launch contenido del archivo

<launch>
    <node pkg="depthimage_to_laserscan" type="depthimage_to_laserscan" name="depthimage_to_laserscan" output="screen">
    <remap from="image" to="/camera/depth/image_rect_raw" />

    <!--激光扫描的帧id。对于来自具有Z向前的“光学”帧的点云,该值应该被设置为具有X向前和Z向上的相应帧。-->
    <param name="output_frame_id" value="/laser"/>
    <!--用于生成激光扫描的像素行数。对于每一列,扫描将返回在图像中垂直居中的那些像素的最小值。-->
    <param name="scan_height" value="220" />
    <!--返回的最小范围(以米为单位)。小于该范围的输出将作为-Inf输出。-->
    <param name="range_min" value="0.45" />
    <!--返回的最大范围(以米为单位)。大于此范围将输出为+ Inf。-->
    <param name="range_max" value="2.00" />
    </node>

</launch>

se puede ejecutar directamente después

roslaunch depthimage_to_laserscan zed2_depthimage_to_laserscan.launch

Cámara + Radar

cámara zed2 ver ubuntu18.04 Calibración de cámara ZED2

#打开相机
source ~/zed_ws/devel/setup.bash
roslaunch zed_wrapper zed2.launch
#打开d435i
source ~/realsense_ws/devel/setup.bash
roslaunch realsense2_camera rs_camera.launch

Para el cartógrafo que corre detrás del radar y detrás vea a Silan A2 corriendo el cartógrafo

#打开雷达
source ~/rplidar/devel/setup.bash
roslaunch rplidar_ros rplidar_lidar.launch

todavia no pongo el codigo soy un estudiante novato de pregrado aunque la fusion la escribi yo mismo es una fusion simple y no hay una operacion fina como el filtrado.

#运行修改后的depthimage_to_laserscan
	source ~/fusion_camera_lidar/devel/setup.bash
	roslaunch depthimage_to_laserscan zed2_depthimage_to_laserscan.launch
#运行cartographer
source ~/carto_ws/install_isolated/setup.bash
roslaunch cartographer_ros demo_revo_lds.launch

Hay una última pregunta que debe tenerse en cuenta. Para facilitar la depuración posterior del código, los dos temas de /tf /tf_static deben registrarse al mismo tiempo cuando se registra el conjunto de datos, de lo contrario, el resultado final de la asignación puede verse compensado.

Supongo que te gusta

Origin blog.csdn.net/qq_41746268/article/details/116355176
Recomendado
Clasificación