elevation mapping学习笔记1已经成功编译安装elevation mapping
高程图工程,并运行示例turtlesim3_waffle_demo
,在仿真环境下,控制带有传感器的机器人生成高程图,简单熟悉了高程图的实际应用。elevation mapping学习笔记2主要熟悉了该工程一些节点和参数的定义和说明,在此基础上,使用D435i相机
发出的点云作为高程图的点云输入,本文主要学习如何离线输入点云生成高程图,进一步学习如何在线订阅点云生成高程图。
elevation mapping github:https://github.com/ANYbotics/elevation_mapping
本文系统环境:
elevation mapping
高程图工程主要的输入数据有三部分,topic
类型分别是:点云(相机,雷达等)、协方差位姿(机器人,里程计等)和tf
关系,其中点云和tf
关系是必需的,协方差位姿是非必需的。
/points
( sensor_msgs/PointCloud2 )/pose
( geometry_msgs/PoseWithCovarianceStamped )/tf
(tf/tf消息)默认已在Ubuntu18.04
系统上安装ROS
版的D435i
相机驱动,比如本文驱动安装目录~/catkin_rs/src/realsense-ros
安装后,默认是没有打开点云的配置,所以需要自行修改配置:
# 激活环境
source /catkin_rs/devel/setup.bash
# roscd 进入到配置文件目录下
roscd realsense2_camera/launch/
# 打开 rs_camera.launch 配置文件进行修改
vim rs_camera.launch
打开后,主要是如下的字段需要修改成 true
,这样就能发出点云topic
:
<arg name="enable_pointcloud" default="true"/>
<arg name="pointcloud_texture_stream" default="RS2_STREAM_COLOR"/>
<arg name="pointcloud_texture_index" default="0"/>
<arg name="allow_no_texture_points" default="false"/>
<arg name="ordered_pc" default="true"/>
修改保存后,执行D435i相机
的启动命令:
# source后执行
roslaunch realsense2_camera rs_camera.launch input:=/camera/depth_registered/points
启动后,rostopic list
查看可知,/camera/depth/color/points
即是D435i相机
的点云topic
.
点云topic
发布频率查看命令:rostopic hz /camera/depth/color/points
subscribed to [/camera/depth/color/points]
average rate: 15.737
min: 0.022s max: 0.092s std dev: 0.01879s window: 14
average rate: 15.158
min: 0.022s max: 0.092s std dev: 0.01637s window: 29
average rate: 15.226
min: 0.022s max: 0.095s std dev: 0.01710s window: 44
...
点云topic
具体信息查看命令:rostopic echo /camera/depth/color/points
,其中camera_color_optical_frame
是点云的frame_id
是后文需要的一个配置参数。
header:
seq: 115
stamp:
secs: 1691134687
nsecs: 843372107
frame_id: "camera_color_optical_frame"
height: 540
width: 960
...
协方差位姿是非必需的输入数据,本文暂不使用该数据…
本文使用D435i
相机传感器生成点云,有一个点云坐标系pc_link
,高程图主要应用在机器人,也有一个机器人坐标系base_link
,输出的高程图也有一个地图坐标系map_link
。
ROS
中描述tf
关系时,一般和数据topic
的frame_id
对应,所以三个坐标系中的点云坐标系定义为camera_color_optical_frame
,其他两个暂定义为 base_link
和map
。
以本文为例,三者在机器人的图示如下:
确定了三者坐标系的关系,本文已知D435i
和base
的外参,base
和map
的外参,外参表示形式是四元数(w,x,y,z
)+
平移矩阵(x,y,z
),直接写入到下述的tf
关系参考代码中,python
代码命名为tf_map_base_cam_publisher.py
,其中发布频率设为300hz