robosense16线雷达使用cartographer在线构建二维导航地图

1.更改静态IP,把有线连接搞没了,解决:

https://junchu.blog.csdn.net/article/details/105169677

在ubantu18上修改IP还是有一点点麻烦的(相比在WIN10上),之后的 后遗症是,开机明明已经连接到畅通的无线网,但是还是有问号。
解决:

sudo netplan try
回车确认
稍等一会
应该就可以了

2.关于这个雷达的使用还有一个迷惑的文件。去官网可以下载一个rslidar_sdk;
然鹅,如果你手勤快(qian),还会在Robosense Lidar的GITHUB下面发现一个ros_rslidar,更有甚者(在占有欲的驱使下,直接GIT CLONE 下来)。
一度以为i自己下到了野路子驱动,人傻了。
——>rslidar_sdk :适用于18和20(ROS2),封装了几个基本功能,也包含了驱动,看可以直接用,但是深度开发的话要单独把驱动安装到工程中。一定要仔细阅读readme!
——>ros_rslidar适用于14和16!!!!并且只是一个驱动!!
——>还有一个槽点~官方提供的rsview点云记录和显示软件截至22/12-2020还只适用于16,所以18的用户想要记录点云 只能通过sdk~~泪目
3.rslidar三维建图

一个终端
roscore
另一个终端
录制
rostopic record -a #-a表示录制当前所有的话题
rostopic record /topic_name1/topic_name2/topic_name3
回放
rosbag play -r 2  <bagfile>  #2倍速播放
rosbag play <bagfile> --topic /topic1 #播放指定话题

4.官方rs驱动中点云存储顺序
默认点云是以列为主序存储,比如有一个点 指向(i){msg.point_cloud_ptr->at[i]},下一个在same ring 上的点应该是{msg.point_cloud_ptr->at(i+msg.height)}
#将 saved_by_rows 改为ture 则以行的方式存储

5.用rs雷达使用cartographer建图,要将三维点云信息转化为二维的,需要一个pointcloud_to_laserscan的包,但是这个链接里的包在melodic下不能用,他是ROS2版本的 ||melodic版本的在这
在launch文件夹下创建一个新的launch文件

<?xml version="1.0"?>
<launch>
    <!-- run pointcloud_to_laserscan node -->
    <node pkg="pointcloud_to_laserscan" type="pointcloud_to_laserscan_node" name="pointcloud_to_laserscan">
        <remap from="cloud_in" to="/rslidar_points"/>       
        <rosparam>
            # target_frame: rslidar # Leave disabled to output scan in pointcloud frame
            transform_tolerance: 0.01
            min_height: -0.4
            max_height: 1.0
            angle_min: -3.1415926 # -M_PI
            angle_max: 3.1415926 # M_PI
            angle_increment: 0.003 # 0.17degree
            scan_time: 0.1
            range_min: 0.2
            range_max: 100
            use_inf: true
            inf_epsilon: 1.0

            # Concurrency level, affects number of pointclouds queued for processing and number of threads used
            # 0 : Detect number of cores
            # 1 : Single threaded
            # 2->inf : Parallelism level
            concurrency_level: 1
        </rosparam>
    </node>
</launch>

6.cartographer建图比较常见的问题就是不出地图,如果是使用bag离线建图首先考虑bag的路径对不对,如果是在线建图,那就要看TF树对不对,主要修改来两个文件,revo_lds.lua和demo_revo_lds.launch,这个还是要根据自己的实际情况。我的是一个rplidar,IMU和编码器
rplidar的话题一般都是laser 首先看

revo_lds.lua:
  map_frame = "map",
  tracking_frame = "laser",
  published_frame = "laser",
  odom_frame = "odom_combined",
  provide_odom_frame = false,
  publish_frame_projected_to_2d = false,
  use_odometry = false,
  use_nav_sat = false,
  use_landmarks = false,

有的博主会加上

use_pose_extrapolator = on,
TRAJECTORY_BUILDER.collate_landmarks = on,
但是我加上后会报错,这个坑先留着。之后细细深扒代码再康康
demo_revo_lds.launch:
<launch>
<param name="/use_sim_time" value="true" />

<node name="cartographer_node" pkg="cartographer_ros"
    type="cartographer_node" args="
        -configuration_directory $(find cartographer_ros)/configuration_files
        -configuration_basename orrevo_lds.lua"
    output="screen">
  <remap from="scan" to="scan" />
</node>

<node name="cartographer_occupancy_grid_node" pkg="cartographer_ros"
    type="cartographer_occupancy_grid_node" args="-resolution 0.05" />
</launch>		

在这里插入图片描述

7.cartographer 使用rslidar建图

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 = "rslidar",
  published_frame = "rslidar",
  odom_frame = "odom_combined",
  provide_odom_frame = false,
  publish_frame_projected_to_2d = false,
  use_odometry = false,
  use_nav_sat = false,
  use_landmarks = false,
demo_revo_lds.launch:
<launch>
  <param name="/use_sim_time" value="true" />

  <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">
    <remap from="scan" to="rslidar/scan" />
  </node>

  <node name="cartographer_occupancy_grid_node" pkg="cartographer_ros"
      type="cartographer_occupancy_grid_node" args="-resolution 0.05" />
</launch>	

如下图,白色就是laser scan
pointcloud to laser scan 8.rslidar在cartographer下的TF转换

rosrun rqt_tf_tree rqt_tf_tree

rs的点云数据发布在: /rslidar_points
转化后的laserscan发布在: /scan
TF树定义的时候,rslidar前面不要加/,否则会报错
****记得把rslidar和父级的关系定义!!!@.@ 我是写在他的启动节点
下面是我的 TF树,还要更正一点是 base_footprint是base_link的地面投影,不一样!
记录两点,A.TF树查看命令。B.机器人模型的配置。
在这里插入图片描述

A.TF树查看命令汇总
rosrun rqt_tf_tree rqt_tf_tree    //画出当前TF树,动态的,树有变化会显示出来
rosrun tf view_frames  //生成当前TF树的PDF文件
rosrun tf tf_echo[source_frame][target_frame]     //查看两个树枝间的关系
附加
rosrun rqt_graph rqt_graph  //看节点的关系
A.机器人模型的配置

如果你是移植别人的包,那么TF树的发布要关注并整理三个地方(血和泪)
(1).在launch中发布
比如我是这么定义base_footprint 和rslidar的关系的 100是100ms

 <node pkg="tf" type="static_transform_publisher" name="base_to_rslidar" args="0.10 0.00 1.30 3.1415 0 0  base_footprint rslidar 100" />

(2).已经启动的launch调用的urdf 配置文件
(3).!!!cartographer也会调用配置文件

9.记录一个运行cartographer时候的报错

[ WARN] [1609129900.225147873]: W1228 12:31:40.000000 25486 ordered_multi_queue.cc:155] Queue waiting for data: (0, scan)

下面的链接是对这段代码的解释

https://www.cnblogs.com/heimazaifei/p/12439009.html

anyway,也就是说现在的问题是队列阻塞了。。
最后这个问题归根结底 还是TF树的问题。没办法,就书从头捋。
10.喜大普奔,还好没放弃在这里插入图片描述11.上面的图 很让人震惊的是没有使用IMU信息!!!真的太秀了!
这个问题在官网是有说明的
想看官网说明点我
照例,翻译,备忘,理解
为什么3DSLAM的时候使用IMU,而2D的时候不用?
答:2D的时候,carto会运行correlative scan matcher,这是个通常用于寻找 局部SLAM过程的loop closure constraints的东西。虽然这么做耗费计算资源,但是这样就不必使用里程计或者IMU了。2D还有一个好处就是,假定平坦,???(还没有理解)
3D的时候需要使用IMU检测重力,(重力的好处:因为他没有飘移,并且信号很强,并且主要由测量的加速度构成。)为什么要重力?(1)3D中没有假设条件,需要重力来定义Z轴.(2)确定重力方向后能够直接通过IMU能够读取roll 和pitch,节约计算资源。

cartographer_ros的官方问题汇总
cartographer的官方问题汇总

标题收关图

在这里插入图片描述
2020.12.31更新
在这里插入图片描述

  • 2
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是在Ubuntu 18.04系统下安装Cartographer的详细步骤: 1. 安装依赖项 在终端中运行以下命令安装Cartographer所需的依赖项: ``` sudo apt-get update sudo apt-get install -y python-wstool python-rosdep ninja-build ``` 2. 创建工作空间 在终端中运行以下命令创建一个名为“cartographer_ws”的工作空间: ``` mkdir cartographer_ws cd cartographer_ws wstool init src ``` 3. 下载Cartographer源代码 在终端中运行以下命令来下载Cartographer源代码: ``` cd src git clone https://github.com/googlecartographer/cartographer.git git clone https://github.com/googlecartographer/cartographer_ros.git cd .. ``` 4. 安装依赖项 在终端中运行以下命令来安装Cartographer所需的其他依赖项: ``` sudo rosdep init rosdep update rosdep install --from-paths src --ignore-src --rosdistro=melodic -y ``` 5. 编译Cartographer 在终端中运行以下命令来编译Cartographer: ``` catkin_make_isolated --install --use-ninja ``` 6. 配置LIVOX MID-40雷达 将LIVOX MID-40雷达通过USB接口连接到计算机,然后在终端中运行以下命令: ``` sudo usermod -a -G dialout $USER ``` 这将允许您访问串行端口。 7. 运行Cartographer 在终端中输入以下命令启动Cartographer节点: ``` roslaunch cartographer_ros demo_livox_2d.launch bag_filename:=${HOME}/Downloads/lidar.bag ``` 其中`${HOME}/Downloads/lidar.bag`应替换为您要使用的包文件的路径。 在启动Cartographer节点后,它将开始读取您的雷达数据并创建地图。您可以使用RViz来查看生成的地图: ``` roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/lidar.bag ``` 这将启动RViz并显示Cartographer创建的地图。 希望这些步骤能帮助您安装Cartographer使用LIVOX MID360雷达创建二维地图

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值