之后,我们可以使用ifconfig查询连接的设备。运行ifconfig命令需要安装一个功能包,按照他的提醒信息进行安装即可。如下图所示,他会显示很多的设备,其中有一个设备的inet和netmask后面的数值正好是前面我们设置的192.168.1.102和255.255.255.0。每个人电脑上面的网口名称都不一样whatsapp网页版登录,下图中我的名称即为enx00e04c28105e,后面将会用的这个名称。
镭神C16激光雷达默认的ip地址为 192.168.1.200,我们使用 ping ip可以查看电脑与其是否成功连接。我们前面设置的192.168.1.102是电脑的静态IP,激光雷达他将会数据发送至192.168.1.102这个目标IP地址。
ping 192.168.1.200
# 如果成功连接,应该如下图所示
然后whatsapp官网,我们可以进一步测试,看看我们的电脑是否能够正确收到雷达发送的数据。也就是从雷达IP 192.168.1.200发送到目标IP 192.168.1.102。如下图显示就说明连接成功啦。
# sudo tcpdump -n -i [name]
# 我的设备名为 enx00e04c28105e
sudo tcpdump -n -i enx00e04c28105e
下面这种情况说明没有连接成功,这个情况是我之前使用坏的网口进行测试遇到的输出。
如果测试结果不对,可以试试下面的命令。如果都不行,可以考虑买一个USB转网口。
# sudo ifconfig [name] down && sudo ifconfig [name] up
# 重启网络设备 enp3s0f1
sudo ifconfig enp3s0f1 down && sudo ifconfig enp3s0f1 up
2 Ros&Rviz测试
如果上面的两个测试都通过了,那就可以下载功能包进行一个简单的测试。创建新的工作空间,并将TB客服提供的功能包lslidar_ros和pointcloud_to_laserscan拷贝进src目录。当然也可以直接拷贝到现成的工作空间下的src目录。功能包下载:
镭神C16 Ros功能包.zip - 蓝奏云
mkdir -p ~/lslidar_ws/src
cd ~/lslidar_ws/
catkin_make
编译过程中很可能会因为缺少相关的依赖而报错。我在我的电脑和同学的电脑上进行测试,主要会遇到两种报错,分别需要安装下面的两个功能包。具体的报错见下面的图片。
# pcap.h 报错
sudo apt-get install libpcap-dev
# tf2_sensor_msgs 报错
sudo apt-get install ros-melodic-tf2-sensor-msgs
如果还遇到了其他的报错,可以根据报错信息搜索一下缺少什么功能包。
之后,便可以运行对应的launch文件,获取点云数据,并将其显示到RVIZ中。
# cd 到工作空间
cd ~/lslidar
#
source ./devel/setup.bash
roslaunch lslidar_driver start.launch
#
source ./devel/setup.bash
roslaunch pointcloud_to_laserscan pointcloud_scan.launch
# 可视化点云数据
rviz
如果电脑没能成功连接激光雷达,运行roslaunch lslidar_driver start.launch时,终端有黄色的"time out"提示。打开rviz之后,我们需要简单设置一下。需要在rviz中,添加PointCloud2组件,并选择话题/point_cloud_raw。同时,点击上方的Fixed Frame处的map,直接输入laser并回车。此时就可以在rviz中看见激光雷达的点云数据了。
3 Ubuntu 没有wire
我的电脑一度出现这种情况,如下图,Network界面没有wire(有线连接)。
正常情况是有wire的,如下
没有wire这个问题的最终解决,我的电脑行之有效的方法为:
ubuntu18.04没有网络,网络中或者右上角没有有线设置_lylg_ban的博客-CSDN博客_ubuntu18.04没有网络
从中提取主要内容如下:
1)查看interfaces文件是否正常
sudo gedit /etc/network/interfaces
img
2)修改NetworkManager.conf配置文件,将managed=false更改为managed=true,保存退出
sudo gedit /etc/NetworkManager/NetworkManager.conf
img
3)修改10-globally-managed-devices.conf配置文件,添加有线设备,添加内容如下
sudo gedit /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf
img
img
4)重启电脑
reboot
img4 Summary
一个快速进行连接测试的步骤如下,这里省略了前文不少内容。
ifconfig
# enx00e04c28105e 连接测试
sudo tcpdump -n -i enx00e04c28105e
# 测试
ping 192.168.1.200
# 感觉链接不对劲可以试试重启
sudo ifconfig enp3s0f1 down && sudo ifconfig enp3s0f1 up
# cd
source ./devel/setup.bash
roslaunch lslidar_driver start.launch
#
source ./devel/setup.bash
roslaunch pointcloud_to_laserscan pointcloud_scan.launch
#
rviz
打开rviz之后,我们需要简单设置一下。需要在rviz中,添加PointCloud2组件,并选择话题/point_cloud_raw。同时,点击上方的Fixed Frame处的mapwhatsapp网页版,直接输入laser并回车。此时就可以在rviz中看见激光雷达的点云数据了。
P2 Cartograper 2D实时建图
关于cartographer的环境搭建,我后面会专门搞一篇文章,包括使用bag包进行建图的测试。要将镭神C16的数据发送给cartographer进行建图,我们需要在cartographer_ros功能包下编写对应的.lua配置文件和.launch启动文件。这里是针对镭神C16这一款激光雷达的,但是其方法思路是完全适用于其他型号的雷达的。因为我自身也是基于别的雷达的手持建图教程,摸索出来了镭神C16的手持建图方法的。
2023/2/10 最新更新:最近写了篇带有视频讲解的付费文章(WX平台),涵盖Cartographer 2D、3D建图、地图保存等内容,视频讲解总时长约48min。视频讲解相比较于文字叙述更利于学习,且提供了相应的bagfile用于模拟实物建图。感兴趣的小伙伴可以自行查看。2 Cartographer 实物建图教程 2D + 3D (IMU)
cartographer的极速环境配置教程如下(十几分钟轻轻松松):
Poao:Cartographer 环境极速配置 + 2D 3D建图测试
1 2D-Hand test 1
reference: https://blog.csdn.net/shsh0810/article/details/122360539
这里的建图demo是使用了雷达的原始数据scan_raw。其他型号的雷达可能是scan,但是镭神C16的lslidar_driver功能包只发布了话题"/scan_raw",cartographer不能获取到“scan”的数据。镭神C16的pointcloud_to_laserscan功能包将scan数据转换成了点云数据,这里介绍使用scan数据建图,下面的test2介绍使用点云数据建图。
# 在rviz中显示 laserscan
# 运行雷达节点
roslaunch lslidar_driver start.launch
# 打开rviz
rviz
需要在rviz中添加laserscan,通过按照下图箭头所示修改,Fixed Frame直接输入laser。由此我们也可以知道"/scan_raw"提供了雷达数据,可用于建图。
以上,我们便确定了两个内容: 1)雷达的坐标系为laser 2)雷达发布的数据话题为/scan_raw。前者不同的雷达一般都是一样,后者不一定,可能是scan也可能是其他的,需要运行雷达的功能包之后打开rviz确认。我们后面需要在launch文件和lua文件中对应修改这两个内容。
1.1 lua配置文件
hand_test_2d.lua
include "map_builder.lua"
include "trajectory_builder.lua"
options = {
map_builder = MAP_BUILDER,
trajectory_builder = TRAJECTORY_BUILDER,
map_frame = "map",
-- 下面两个frame需要修改为雷达的 坐标系,通常为laser
tracking_frame = "laser",
published_frame = "laser",
-- 只需要修改上面的坐标系即可
odom_frame = "base_link",
provide_odom_frame = true,
publish_frame_projected_to_2d = false,
use_pose_extrapolator = true,
use_odometry = false,
use_nav_sat = false,
use_landmarks = false,
-- 我们暂时使用laserscan 而非 pointcloud
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.3
TRAJECTORY_BUILDER_2D.max_range = 8.
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
1.2 launch启动文件
hand_test_2d.launch
name="/use_sim_time" value="false" />
name="cartographer_node" pkg="cartographer_ros"
type="cartographer_node" args="
-configuration_directory $(find cartographer_ros)/configuration_files
-configuration_basename pzz_hand_test.lua"
output="screen">
from="scan" to="/scan_raw" />
name="cartographer_occupancy_grid_node" pkg="cartographer_ros"
type="cartographer_occupancy_grid_node" args="-resolution 0.05" />
name="rviz" pkg="rviz" type="rviz" required="true"
args="-d $(find cartographer_ros)/configuration_files/demo_2d.rviz" />
以上对应修改之后,编译一下即可进行测试。
1.3 测试
# 启动雷达数据发布节点
# 这里只需要启动 start即可
cd ~/lslidar_ws/
source ./devel/setup.bash
roslaunch lslidar_driver start.launch
# 启动cartographer
cd ~/carto_ws/cartographer_detailed_comments_ws/
source ./devel_isolated/setup.bash
# 需要对应修改launch文件名
roslaunch cartographer_ros hand_test_2d.launch
然后,将会自动打开rviz。我们需要放大rviz界面,可以然后用手移动雷达,就可以实现二维的建图,如下图。
2 2D-Hand test 2
前面使用的是lslidar_driver功能包下的/scan_raw话题的雷达数据,而这个例程中使用的则是pointcloud_to_laserscan功能包发布的/point_cloud_raw话题的点云数据。为此,我们需要在前一个例程的基础上,分别修改lua文件和launch文件。
cartographer_ros的2d建图直接支持三维点云输入,因此可以不需要转换。本文建图将使用里程计和三维点云数据。
2.1 lua文件
新建一个hand_test_2d_cloud.lua文件,然后将前面的hand_test_2d.lua文件内容复制粘贴过去。此外需要修改下面的内容:
-- num_laser_scans 修改为0
num_laser_scans = 0,
num_multi_echo_laser_scans = 0,
num_subdivisions_per_laser_scan = 1,
-- num_point_clouds 修改为1
num_point_clouds = 1,
2.2 launch文件
新建一个hand_test_2d_cloud.launch文件,然后将前面的hand_test_2d.launch文件内容复制粘贴过去。此外需要修改下面的内容:
name="cartographer_node" pkg="cartographer_ros"
type="cartographer_node" args="
-configuration_directory $(find cartographer_ros)/configuration_files
-configuration_basename hand_test_2d_cloud.lua"
output="screen">
from="points2" to="/point_cloud_raw" />
2.3 测试
然后编译一下,便可以运行launch文件进行测试:
# 启动雷达数据发布节点
cd ~/lslidar_ws/
source ./devel/setup.bash
roslaunch lslidar_driver start.launch
#
source ./devel/setup.bash
roslaunch pointcloud_to_laserscan pointcloud_scan.launch
# 启动cartographer
cd ~/carto_ws/cartographer_detailed_comments_ws/
source ./devel_isolated/setup.bash
# 需要对应修改launch文件名
roslaunch cartographer_ros hand_test_2d_cloud.launch
过程中cartographer运行终端可能会有黄色提示,但是影响不大。
一个粗略的简图如下。相比较与前面使用的/scan_raw,这里使用的/point_cloud_raw建图速度更快,但是同时比较飘,没有前面那个准。
3D 建图?
cartographer的3d建图需要使用到imu数据。目前仅使用雷法数据,暂时不能进行3D建图,会疯狂报黄色的错误。后续有IMU数据了我再继续更新。
cartographer只有3d雷达和里程计,没有imu数据可以建图吗?
3D建图配置内容如下:
Poao:Cartographer 3D实时建图教程(超详细) - 镭神C16 + IMU (一)
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。