目录
1.1 首先从官网/Github/Ros-wiki 中找到自己雷达所对应的SRC
1、雷达ROS-SRC包使用(以思岚为例)
Tips:2D激光雷达的SRC大同小异,你需要确认和你雷达对应和Ubuntu上能够使用它
1.1 首先从官网/Github/Ros-wiki 中找到自己雷达所对应的SRC
思岚官网:思岚科技(SLAMTEC)资源下载中心及技术支持联系方式
Github:Slamtec/rplidar_ros (github.com)
ROS-wiki:Sensors - ROS Wiki (需要自己找对应的Sensors Src)
1.2 下载后
对应的雷达SRC 基本遵循 ROS Workspace 的目录结构:
1.3 编译与使用
在编译和使用前,建议你首先仔细阅读 README.md 文件,一般的 SRC 中都提供了 README.md 用来对此 ROS Workspace 进行了详细的介绍和使用说明
这里就很明显了,你需要读懂两个东西:
// 1-cd 到 当前的 workspace 运行以下命令完成编译
catkin_make
// 2-启动当前雷达所对应的 SRC
// 我所用的是 A2 即 (for RPLIDAR A1/A2) 的launch
roslaunch rplidar_ros rplidar.launch
如果catkin中出现了not found package什么什么的,请移步查看
编译完成后不能直接启动 launch,否则你会遇到一个 ERROR ,not found data 或者其他,这是因为雷达所接的USB口并没有串口权限,此时进行赋权才可以读取,即:
//ttyUSB几需要自行判断,直接TAB补全也会出来
//如果接入设备除了雷达还有IMU等其他设备的话就不太适用了
sudo chmod 777 /dev/ttyUSB*
赋权完成后直接启动既可以看到雷达 rviz 显示的数据了
2、cartographer结合lidar建图
2.1 lidar修改及需要确定的信息
打开 lidar-src 找到 launch文件夹,找到对应的启动 launch 打开
首先查看launch文件如下,需要明确的几个地方有,frame_id,topic:
<launch>
<node name="rplidarNode" pkg="rplidar_ros" type="rplidarNode" output="screen">
<param name="serial_port" type="string" value="/dev/ttyUSB0"/>
<param name="serial_baudrate" type="int" value="115200"/><!--A1/A2 -->
<!--param name="serial_baudrate" type="int" value="256000"--><!--A3 -->
<param name="frame_id" type="string" value="laser"/>
<param name="inverted" type="bool" value="false"/>
<param name="angle_compensate" type="bool" value="true"/>
</node>
</launch>
其中我们可以直接看出此雷达:
(1)frame_id 已经被配置为laser
(2)端口映射为 /dev/ttyUSB0 即 1.3 中赋权端口名就是这个
(3)查看雷达购买的型号,找到雷达的最小最大探测距离(此项自行寻找)
下一个需要确定的就是lidar 的 topic,打开终端,运行雷达launch,运行完成后新开终端,运行以下命令
rostopic list
此时列出来的是所有的正在运行的 topic 列表,在此列表中你可以找到自己的 lidar topic
即 /scan
总结一下:lidar_framed_id=laser lidar_topic:/scan lidar_min_range=0.2
lidar_max_range=12
2.2 cartographer需要修改的信息
打开 Carto_ws/cartographer_ros/launch/demo_revo_lds.launch 按以下内容修改
<launch>
<!--实际建图 time 不需要生成-->
<param name="/use_sim_time" value="flase" />
<node name="cartographer_node" pkg="cartographer_ros"
type="cartographer_node" args="
-configuration_directory $(find cartographer_ros)/configuration_files
-configuration_basename revo_lds.lua"
output="screen">
<!--映射lidar 中 topic 到 carto 中的 scan -->
<!--时间比较久不太记得了,如果出现error可以把后面的“/”去掉改为“scan”-->
<remap from="scan" to="/scan" />
</node>
<node name="cartographer_occupancy_grid_node" pkg="cartographer_ros"
type="cartographer_occupancy_grid_node" args="-resolution 0.05" />
<node name="rviz" pkg="rviz" type="rviz" required="true"
args="-d $(find cartographer_ros)/configuration_files/demo_2d.rviz" />
<!--删除rosbag,由于添加注释会收到里面的两个横行干扰 干脆直接删除-->
</launch>
修改完成后保存,看到这一段,打开revo_lds.lua文件,按以下内容修改
(Carto_ws/cartographer_ros/configuration_files/revo_lds.lua)
include "map_builder.lua"
include "trajectory_builder.lua"
options = {
map_builder = MAP_BUILDER,
trajectory_builder = TRAJECTORY_BUILDER,
map_frame = "map",
tracking_frame = "laser", --修改为 lidar_framde_id
published_frame = "laser", --修改为 lidar_framde_id
odom_frame = "odom",
provide_odom_frame = true,
publish_frame_projected_to_2d = false,
use_pose_extrapolator = true, --此项为姿态外推器,建议为true,flase也可以
use_odometry = false,
use_nav_sat = false,
use_landmarks = false,
num_laser_scans = 1,
num_multi_echo_laser_scans = 0,
num_subdivisions_per_laser_scan = 1,
num_point_clouds = 0,
lookup_transform_timeout_sec = 0.2,
submap_publish_period_sec = 0.3,
pose_publish_period_sec = 5e-3,
trajectory_publish_period_sec = 30e-3,
rangefinder_sampling_ratio = 1.,
odometry_sampling_ratio = 1.,
fixed_frame_pose_sampling_ratio = 1.,
imu_sampling_ratio = 1.,
landmarks_sampling_ratio = 1.,
}
MAP_BUILDER.use_trajectory_builder_2d = true
TRAJECTORY_BUILDER_2D.submaps.num_range_data = 35
TRAJECTORY_BUILDER_2D.min_range = 0.2 --修改为lidar_min_range
TRAJECTORY_BUILDER_2D.max_range = 12. --修改为lidar_max_range
TRAJECTORY_BUILDER_2D.missing_data_ray_length = 1.
TRAJECTORY_BUILDER_2D.use_imu_data = false
TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.linear_search_window = 0.1
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.translation_delta_cost_weight = 10.
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.rotation_delta_cost_weight = 1e-1
POSE_GRAPH.optimization_problem.huber_scale = 1e2
POSE_GRAPH.optimize_every_n_nodes = 35
POSE_GRAPH.constraint_builder.min_score = 0.65
return options
修改完成后,重新编译,再依次启动 lidar的launch carto 的 launch 就可以了,遇到ERROR看是不是我提到过的问题及对应关系没有写对。
==================编译工作空间=======================
catkin_make_isolated --install --use-ninja
==================开发串口权限=======================
sudo chmod 777 /dev/ttyUSB*
==================运行雷达节点=======================
roslaunch rplidar_ros rplidar.launch
==============运行cartographer建图===================
roslaunch cartographer_ros demo_revo_lds.launch
2.3 结果
懒得拿着到处跑了,移动起来即可完成建图
不积跬步无以至千里,不积小流无以成江河 -------------------------------1:59