cartographer算法初探_cartographer tf-程序员宅基地

技术标签: 雷达  cartographer  ROS  HOKUYO  

cartographer算法初探 Ubuntu 16.04 +ROS Kinetic + Cartographer+HOKUYO雷达具体实物测试


前面把所有的前期工作做好了,配置好Cartographer和Hokuyo激光雷达之后,现在我们在实物上具体测试一下cartographer,本次先只用雷达运行cartographer的2d版本。

配置

总的来说只需要改进行坐标转换的tf树和cartographer的配置文件.lua,如果话题不对就remap一下。下面说具体步骤。

建立launch启动文件

首先为雷达建立一个launch启动文件,用ros的方法安装,launch文件的定义在工作空间下的src/cartographer_ros/cartographer_ros/launch文件夹,被安装在工作空间下的install_isolated/share/cartographer_ros/launch/文件夹,我们只需要工作空间下的install_isolated/share/cartographer_ros/launch/安装文件夹下新建一个launch文件就可以了。
先建立HUKUYO雷达的launch文件

gedit ~/cartographer_ws/install_isolated/share/cartographer_ros/launch/hokuyo_2d.launch

然后把下面的内容粘贴进去过后保存后退出。

<launch>

  <node name="urg_node" pkg="urg_node" type="urg_node" respawn="true" output="screen">
    <param name="calibrate_time" value="true"/>
    <param name="serial_port" value="/dev/sensors/hokuyo_H1747925"/>
 </node>

  <param name="/use_sim_time" value="false" />

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

  <node name="cartographer_occupancy_grid_node"
    pkg="cartographer_ros"
    type="cartographer_occupancy_grid_node" />


 <node name="rviz" pkg="rviz" type="rviz" required="true"
      args="-d $(find cartographer_ros)/configuration_files/demo_2d.rviz" />

  <node pkg="tf" type="static_transform_publisher" name="base_to_laser" args="0 0 0 0 0 0 base_link laser 10" />

</launch>

简要讲一下各个节点。
里面第一个节点为雷达的启动节点,里面我们看到,我们启动就是用的前面讲到的符号链接,不需要再指定固定的ACM多少口。
第二个节点就是cartographer的节点,打开了一个hokuyo_2d.lua的文件,.lua文件就是cartographer的配置文件,配置了cartographer的具体怎么运行。
应为具体运行必须知道各个传感器之间的坐标转换,tf节点建立了tf树,这里可以用这种话题的方式,也可以用.urdf文件来描述,两种方法任选一种。话题类型,args的参数描述有下面两种格式

x y z yaw pitch roll frame_id child_frame_id period_in_ms
x y z qx qy qz qw frame_id child_frame_id  period_in_ms

以上两种格式,x、y、z三轴的单位是m,方向为ros同一方向,前为x,左为y,上为z。 yaw、pitch、roll是弧度(yaw是围绕x轴旋转的偏航角,pitch是围绕y轴旋转的俯仰角,roll是围绕z轴旋转的翻滚角),而第二种格式使用四元数表达旋转角度。 frame_id child_frame_id 指定父坐标系和子坐标系。period_in_ms发布间隔ms,一般100ms比较合适,即10hz。
这个其实是用来描述机器人的,我们这里就一个雷达所以就是原点了。
下面我来写cartographer的配置文件

建立.lua配置文件

配置文件全部在工作空间的install_isolated/share/cartographer_ros/configuration_files/文件夹下,同样的首先新建文件

gedit ~/cartographer_ws/install_isolated/share/cartographer_ros/configuration_files/hokuyo_2d.lua

然后把下面的内容粘贴进去保存退出。

include "map_builder.lua"
include "trajectory_builder.lua"

options = {
    

    map_builder = MAP_BUILDER,
    trajectory_builder = TRAJECTORY_BUILDER,
    map_frame = "map",
    tracking_frame = "base_link",
    published_frame = "base_link",
    odom_frame = "odom",
    provide_odom_frame = true,
    use_odometry = false,
    use_nav_sat = false,
    use_landmarks = false,
    publish_frame_projected_to_2d = false,
    num_laser_scans = 1,
    num_multi_echo_laser_scans = 0,
    num_subdivisions_per_laser_scan = 1,
    rangefinder_sampling_ratio = 1,
    odometry_sampling_ratio = 1,
    fixed_frame_pose_sampling_ratio = 1,
    imu_sampling_ratio = 1,
    landmarks_sampling_ratio = 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,
}

MAP_BUILDER.use_trajectory_builder_2d = true

TRAJECTORY_BUILDER_2D.use_imu_data = false

TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true

POSE_GRAPH.optimization_problem.huber_scale = 1e2

return options

这里面涉及到cartographer的具体算法,在这里先不讨论,先讲怎么跑起来。
具体要改的就是下面三个参数,其余展示保持默认就行
num_laser_scans:你的雷达sensor_msgs/LaserScan 类型话题发布的数量.
num_multi_echo_laser_scans: 你的雷达 sensor_msgs/MultiEchoLaserScan 类型话题发布的数量.
num_point_clouds: 你的雷达sensor_msgs/PointCloud2 类型话题发布的数量.
这个可以在单独运行雷达节点时用rostopic list结合rostopic info命令查看。
如果只使用了一个 sensor_msgs/LaserScan 话题,这个话题应该被命名为 scan. 如果有多个应该被命名为scan_1, scan_2 etc…
如果只使用了一个 sensor_msgs/MultiEchoLaserScan 话题, 这个话题应该被命名为 echoes. 如果有多个应该被命名为echoes_1, echoes_2 etc…
如果只使用了一个sensor_msgs/PointCloud2 话题, 这个话题应该被命名为 points2. 如果有多个应该被命名为 points2_1, points2_2, etc…
如果你的雷达发布的话题名和标准的不太一样在前面的launch文件中的cartographer的节点 </node>标签之前用remap标签重命名一下话题名字即可。

运行命令

到现在就配置完成了,下面打开终端运行下面的命令

roslaunch cartographer_ros hokuyo_2d.launch

提示找不到文件,记得source一下环境变量

实验过程

实验场地为学校机器人基地,由于没有室内定位系统,只能利用地板砖来作为真值参考,下图为实验场地。
测试场地
本次测试中没有引入IMU信息,仅使用2D激光雷达运行算法。按照上图红色轨迹运行一圈之后,导出rosbag中位置信息(x,y)的记录,在Matlab中绘图
在这里插入图片描述
图中的拐点处,如(0.2,9.7)处出现圆弧,是因为雷达进行了旋转(rotation),并且和旋转速度有一定关系。

接下来准备测试引入IMU数据的算法运行结果,IMU来源为pixhawk飞控中的数据。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_38649880/article/details/87876143

智能推荐

React学习记录-程序员宅基地

文章浏览阅读936次,点赞22次,收藏26次。React核心基础

Linux查磁盘大小命令,linux系统查看磁盘空间的命令是什么-程序员宅基地

文章浏览阅读2k次。linux系统查看磁盘空间的命令是【df -hl】,该命令可以查看磁盘剩余空间大小。如果要查看每个根路径的分区大小,可以使用【df -h】命令。df命令以磁盘分区为单位查看文件系统。本文操作环境:red hat enterprise linux 6.1系统、thinkpad t480电脑。(学习视频分享:linux视频教程)Linux 查看磁盘空间可以使用 df 和 du 命令。df命令df 以磁..._df -hl

Office & delphi_range[char(96 + acolumn) + inttostr(65536)].end[xl-程序员宅基地

文章浏览阅读923次。uses ComObj;var ExcelApp: OleVariant;implementationprocedure TForm1.Button1Click(Sender: TObject);const // SheetType xlChart = -4109; xlWorksheet = -4167; // WBATemplate xlWBATWorksheet = -4167_range[char(96 + acolumn) + inttostr(65536)].end[xlup]

若依 quartz 定时任务中 service mapper无法注入解决办法_ruoyi-quartz无法引入ruoyi-admin的service-程序员宅基地

文章浏览阅读2.3k次。上图为任务代码,在任务具体执行的方法中使用,一定要写在方法内使用SpringContextUtil.getBean()方法实例化Spring service类下边是ruoyi-quartz模块中util/SpringContextUtil.java(已改写)import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.s..._ruoyi-quartz无法引入ruoyi-admin的service

CentOS7配置yum源-程序员宅基地

文章浏览阅读2w次,点赞10次,收藏77次。yum,全称“Yellow dog Updater, Modified”,是一个专门为了解决包的依赖关系而存在的软件包管理器。可以这么说,yum 是改进型的 RPM 软件管理器,它很好的解决了 RPM 所面临的软件包依赖问题。yum 在服务器端存有所有的 RPM 包,并将各个包之间的依赖关系记录在文件中,当管理员使用 yum 安装 RPM 包时,yum 会先从服务器端下载包的依赖性文件,通过分析此文件从服务器端一次性下载所有相关的 RPM 包并进行安装。_centos7配置yum源

智能科学毕设分享(算法) 基于深度学习的抽烟行为检测算法实现(源码分享)-程序员宅基地

文章浏览阅读828次,点赞21次,收藏8次。今天学长向大家分享一个毕业设计项目毕业设计 基于深度学习的抽烟行为检测算法实现(源码分享)毕业设计 深度学习的抽烟行为检测算法实现通过目前应用比较广泛的 Web 开发平台,将模型训练完成的算法模型部署,部署于 Web 平台。并且利用目前流行的前后端技术在该平台进行整合实现运营车辆驾驶员吸烟行为检测系统,方便用户使用。本系统是一种运营车辆驾驶员吸烟行为检测系统,为了降低误检率,对驾驶员视频中的吸烟烟雾和香烟目标分别进行检测,若同时检测到则判定该驾驶员存在吸烟行为。进行流程化处理,以满足用户的需要。

随便推点

STM32单片机示例:多个定时器同步触发启动_stm32 定时器同步-程序员宅基地

文章浏览阅读3.7k次,点赞3次,收藏14次。多个定时器同步触发启动是一种比较实用的功能,这里将对此做个示例说明。_stm32 定时器同步

android launcher分析和修改10,Android Launcher分析和修改9——Launcher启动APP流程(转载)...-程序员宅基地

文章浏览阅读348次。出处 : http://www.cnblogs.com/mythou/p/3187881.html本来想分析AppsCustomizePagedView类,不过今天突然接到一个临时任务。客户反馈说机器界面的图标很难点击启动程序,经常点击了没有反应,Boss说要优先解决这问题。没办法,只能看看是怎么回事。今天分析一下Launcher启动APP的过程。从用户点击到程序启动的流程,下面针对WorkSpa..._回调bubbletextview

Ubuntu 12 最快的两个源 个人感觉 163与cn99最快 ubuntu安装源下包过慢_un.12.cc-程序员宅基地

文章浏览阅读6.2k次。Ubuntu 12 最快的两个源 个人感觉 163与cn99最快 ubuntu下包过慢 1、首先备份Ubuntu 12.04源列表 sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup (备份下当前的源列表,有备无患嘛) 2、修改更新源 sudo gedit /etc/apt/sources.list (打开Ubuntu 12_un.12.cc

vue动态路由(权限设置)_vue动态路由权限-程序员宅基地

文章浏览阅读5.8k次,点赞6次,收藏86次。1.思路(1)动态添加路由肯定用的是addRouter,在哪用?(2)vuex当中获取到菜单,怎样展示到界面2.不管其他先试一下addRouter找到router/index.js文件,内容如下,这是我自己先配置的登录路由现在先不管请求到的菜单是什么样,先写一个固定的菜单通过addRouter添加添加以前注意:addRoutes()添加的是数组在export defult router的上一行图中17行写下以下代码var addRoute=[ { path:"/", name:"_vue动态路由权限

JSTL 之变量赋值标签-程序员宅基地

文章浏览阅读8.9k次。 关键词: JSTL 之变量赋值标签 /* * Author Yachun Miao * Created 11-Dec-06 */关于JSP核心库的set标签赋值变量,有两种方式: 1.日期" />2. 有种需求要把ApplicationResources_zh_CN.prope

VGA带音频转HDMI转换芯片|VGA转HDMI 转换器方案|VGA转HDMI1.4转换器芯片介绍_vga转hdmi带音频转换器,转接头拆解-程序员宅基地

文章浏览阅读3.1k次,点赞3次,收藏2次。1.1ZY5621概述ZY5621是VGA音频到HDMI转换器芯片,它符合HDMI1.4 DV1.0规范。ZY5621也是一款先进的高速转换器,集成了MCU和VGA EDID芯片。它还包含VGA输入指示和仅音频到HDMI功能。进一步降低系统制造成本,简化系统板上的布线。ZY5621方案设计简单,且可以完美还原输入端口的信号,此方案设计广泛应用于投影仪、教育多媒体、视频会议、视频展台、工业级主板显示、手持便携设备、转换盒、转换线材等产品设计上面。1.2 ZY5621 特性内置MCU嵌入式VGA_vga转hdmi带音频转换器,转接头拆解

推荐文章

热门文章

相关标签