3.在自己的bag上运行Cartographer ROS
1、验证自己的bag
cartographer ROS提供了一个工具cartographer_rosbag_validate来自动分析包中的数据。在尝试调试cartographer之前运行这个工具。
操作方式:
cartographer_rosbag_validate -bag_filename your_bag.bag
2.创建一个.lua配置文件
cartographer非常灵活且可以配置用于任何机器人上。机器人配置读取来自于一个options的数据结构,该数据结构必须定义在一个Lua脚本里面。配置例子定义在文件src/cartographer_ros/cartographer_ros/configuration_files,且安装在install_isolated/share/cartographer_ros/configuration_files/.
注意,理想情况下,一个.lua配置应该是具体机器人的而不是一个具体bag的。
可以通过复制例子中的一个,然后调整以适合自己的需求,
3D SLAM:
cp install_isolated/share/cartographer_ros/configuration_files/backpack_3d.lua install_isolated/share/cartographer_ros/configuration_files/my_robot.lua
2D SLAM:
cp install_isolated/share/cartographer_ros/configuration_files/backpack_3d.lua install_isolated/share/cartographer_ros/configuration_files/my_robot.lua
下面去编辑my_robot.lua来适合于自己的机器人。在options块中定义的值定义了cartographer ros前端应当如何与你的bag进行交互。定义在options段后的值用于调试cartographer的内部信息。
你可能需要调整的值,需要提供环境的TF frame IDs,robot in map_frame, tracking_frame, published_frame and odom_frame.
You can either distribute your robot’s TF tree from a /tf topic in your bag or define it in a .urdf robot definition.
警告:应该信任你的位姿!在机器人和IMU或者LIDAR之间的小的offset可能会导致不相关的地图重构。cartographer通过可以纠正小的位姿误差,但并不是万能的。
需要修改的其他的值有,传感器的数量和类型:
a、num_laser_scans:你使用话题sensor_msgs.LaserScan的数量
b、num_multi_echo_laser_scans:话题num_multi_echo_laser_scans的数量
c、num_point_clouds:话题sensor_msgs/PointCloud2的数量
可以使用use_landmarks和use_nav_sat,来使能路标和GPS作为附加的定位源.在options块中的其他的变量通常保持不变。
然而,有一个全局变量需要调整来适用于自己的bag:
TRAJECTORY_BUILDER_3D.num_accumulated_range_data or TRAJECTORY_BUILDER_2D.num_accumulated_range_data
这个变量定义了构建一个完整激光的信息的数量(通常,是一个完整的分辨率)。如果听从工具cartographer_rosbag_validate的建议,没一帧激光使用100个ROS messages,可以设置这个变量为100。If you have two range finding sensors (for instance, two LIDARs) providing their full scans all at once, you should set this variable to 2.
Create.launch 文件用于自己的SLAM场景
例子中的.launch文件在中src/cartographer_ros/cartographer_ros/launch定义,并安装在install_isolated/share/cartographer_ros/launch/。
可以复制下面的例子
cp install_isolated/share/cartographer_ros/launch/backpack_3d.launch install_isolated/share/cartographer_ros/launch/my_robot.launch
cp install_isolated/share/cartographer_ros/launch/demo_backpack_3d.launch install_isolated/share/cartographer_ros/launch/demo_my_robot.launch
cp install_isolated/share/cartographer_ros/launch/offline_backpack_3d.launch install_isolated/share/cartographer_ros/launch/offline_my_robot.launch
cp install_isolated/share/cartographer_ros/launch/demo_backpack_3d_localization.launch install_isolated/share/cartographer_ros/launch/demo_my_robot_localization.launch
cp install_isolated/share/cartographer_ros/launch/assets_writer_backpack_3d.launch install_isolated/share/cartographer_ros/launch/assets_writer_my_robot.launch
my_robot.launch用于在线的SLAM
demo_my_robot.launch应用于研发的机器人上,并期望一个bag_filename参数来重放记录的数据.这个launch文件也会启动一个rviz窗口用于可视化cartographer的状态。
offline_my_robot.launch非常类似于demo_my_robot.launch,但它尝试执行SLAM尽可能的快.这使得地图构建非常快,它也可以用于多个bag文件的地图构建。
demo_my_robot_localication.launch非常类似于demo_my_robot.launch但是它期望一个load_state_filename参数来指出一个.pbstream,它记录了先前cartographer的执行。先前的记录将作为一个预先计算的地图,然后cartographer只会在这个地图上执行定位。
assets_writer_my_robot.launch用于提取.pstream中的数据,.pstream中记录了先前cartographer的执行。
Again, a few adaptations need to be made to those files to suit your robot.
- Every parameter given to
-configuration_basenameshould be adapted to point tomy_robot.lua. - If you decided to use a
.urdfdescription of your robot, you should place your description ininstall_isolated/share/cartographer_ros/urdfand adapt therobot_descriptionparameter to point to your file name. - If you decided to use
/tfmessages, you can remove therobot_descriptionparameter, therobot_state_publishernode and the lines statring with-urdf. - If the topic names published by your bag or sensors don’t match the ones expected by Cartographer ROS, you can use
<remap>elements to redirect your topics. The expected topic names depend on the type of range finding devices you use.
注意:
- The IMU topic is expected to be named “imu”
- If you use only one
sensor_msgs/LaserScantopic, it is expected to be namedscan. If you have more, they should be namedscan_1,scan_2etc… - If you use only one
sensor_msgs/MultiEchoLaserScantopic, it is expected to be namedechoes. If you have more, they should be namedechoes_1,echoes_2etc… - If you use only one
sensor_msgs/PointCloud2topic, it is expected be namedpoints2. If you have more, they should be namedpoints2_1,points2_2, etc…
配置好之后,开始启动
roslaunch cartographer_ros my_robot.launch bag_filename:=/path/to/your_bag.bag
3.在自己的bag上运行Cartographer ROS的更多相关文章
- 2.在demo bag上运行cartographer ROS
注意在运行bag包,之前需要去执行source install_isolated/setup.bash 1.Deutsches Museum 下载并启动2D的backpack demo: wget - ...
- 在传统.NET Framework 上运行ASP.NET Core项目
新的项目我们想用ASP.NET Core来开发,但是苦于我们历史的遗产很多,比如<使用 JavaScriptService 在.NET Core 里实现DES加密算法>,我们要估计等到.N ...
- Hyper-V上运行的Linux虚拟机验证是否安装了集成服务
Hyper-V上运行的Linux虚拟机验证是否安装了集成服务 ps aux|grep "hv"root 311 0.0 0.0 0 0 ? ...
- 通过Mono 在 Heroku 上运行 .NET 应用
英文原文:Running .NET on Heroku 中文原文:在 Heroku 上运行 .NET 应用 自从加入了Heroku之后,我就想在这个平台上运行.NET程序.现在我很高兴向大家宣布,我们 ...
- Linux上运行NET
今天尝试了下Ubuntu上运行NET程序,按照 https://github.com/aspnet/Home 的指引,一步一步来: 1.安装DNVM(原名KVM) Linux控制台下输入 curl - ...
- Mono 4.0 Mac上运行asp.net mvc 5.2.3
Mono 4.0 已经发布,二进制包已经准备好,具体的发布说明参见:http://www.mono-project.com/docs/about-mono/releases/4.0.0/. 今天在Ma ...
- ASP.NET Core 中文文档 第二章 指南(5) 在 Nano Server 上运行ASP.NET Core
原文 ASP.NET Core on Nano Server 作者 Sourabh Shirhatti 翻译 娄宇(Lyrics) 校对 刘怡(AlexLEWIS).许登洋(Seay).谢炀(kile ...
- 【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目
目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 ASP.Net Core 给我们带来的最大的亮点就是跨平台,我在我电脑(win7)上用虚拟机建了个 CentOS7 ,来演示下 ...
- 玩儿转物联网IoT - 在Beagle Bone Black上运行node.js 程序
物联网(IoT)技术方兴未艾,智能手环,智能血压计,智能眼镜甚至智能鞋垫都开始进入我们的生活,各种智能设备层出不穷,世界已经到了一个"人有多大胆,地有多大产"的时代,不玩儿点物联网 ...
随机推荐
- STM32作为主设备,Arduino作为从设备进行IIC通讯的注意要点
近日公司的项目重心要往米思齐的Arduino图形化编程上转移了,需要我将STM32和Arduino的IIC通讯调通.之前Arduino并没怎么使用过,仅仅是将超声波的代码移植成TOF激光测距而已.网上 ...
- 读书笔记——《redis入门指南(第2版)》第三章 入门
3 .redis的5种数据类型及相应命令 redis不区分命令大小写. string 512m 一个散列类型键可包含至多232-1个字段 一个列表类型键最多能容纳232-1个元素 一个集合类型键最多能 ...
- 全面了解Ngnix的主要应用的场景
前言 本文只针对 Nginx 在不加载第三方模块的情况能处理哪些事情,由于第三方模块太多所以也介绍不完,当然本文本身也可能介绍的不完整,毕竟只是我个人使用过和了解到过得.所以还请见谅,同时欢迎留言交流 ...
- weex Mac创建项目
序言:本来在win 10 上创建项目真的很顺利!后来入手一个mac就从mac 上下载了最新的android studio开始搞起了weex,问题来了,weex-toolkit脚手架还是老的,我觉得是w ...
- Twisted网络库编程实例
于这一周看了python的第三方网络库Twisted,英文看的头比较大,想看英文的话点击这里.如果英文很烂,可以看中文,这里.总的来说我了解到的主要包括以下三个东东:Factory.protocol和 ...
- 一针见血tomcat
一针见血tomcat 一.Tomcat各组件认知 1 Tomcat架构说明 Tomcat是一个基于JAVA的WEB容器,其实现了JAVA EE中的 Servlet 与 jsp 规范,与Nginx ap ...
- 实战ELK(3) Kibana安装与简单实用
第一步:下载 https://artifacts.elastic.co/downloads/kibana/kibana-6.5.1-x86_64.rpm 第二步:安装 1.安装 yum install ...
- Ubuntu 14.03 安装mysql
Ubuntu下安装MySQL及开启远程访问 2017年02月07日 一.Ubuntu上安装MySQL非常简单只需要几条命令就可以完成. sudo apt-get install mysql-serve ...
- idea搭spring boot项目
Spring Boot是由Pivotal团队提供的全新框架,设计目的是用来简化新Spring应用的初始搭建以及开发过程.它主要推崇的是'消灭配置’,实现零配置. 那么,如何在idea中创建一个spri ...
- xml实现登录表单验证
定义: XML(eXtended Markup Language,可扩展标记语言)提供了一套跨平台.跨网络.跨程序的语言的数据描述方式,使用XML可以方便地实现数据交换.系统配置.内容管理等常见功能. ...