1. 测试环境

Ubuntu 16.04 x64、ROS Kinetic、Velodyne VLP-16、RoboWare Studio

2. 安装 ROS 功能包

sudo apt-get install ros-kinetic-velodyne
sudo apt-get install ros-kinetic-gmapping
sudo apt-get install ros-kinetic-laser-scan-matcher     

3. 连接激光雷达

网线直连本机与激光雷达,已知 Velodyne VLP-16 的 IP 地址为 192.168.1.201,配置本机地址为 192.168.1.77,打开浏览器输入 192.168.1.201 查看激光雷达的配置文件,确保其 Host (Destination) 的 IP 地址与本机相同。

4. 创建 ROS 工程

打开 RoboWare Studio,新建工作区 catkin_ws,然后在终端执行:

cd catkin_ws/src
git clone https://github.com/ros-drivers/velodyne.git

接下来采用 catkin_make 构建整个项目,最后在 .bashrc 文件末尾添加:

source /current_path/catkin_ws/devel/setup.bash

其中,current_path 根据自身工作目录而定

5. 把 Velodyne VLP-16.xml 转换成 VLP-16.yaml 文件

rosrun velodyne_pointcloud gen_calibration.py /current_path/VLP-16.xml  

6. 创建地图

(1) 在 Ubuntu 系统中打开一个终端,输入以下命令运行 ROS 节点管理器:

roscore

(2) 在 Ubuntu 系统中打开一个终端,运行 VLP16_points.launch:

roslaunch velodyne_pointcloud VLP16_points.launch calibration:=/current_path/VLP-16.yaml

(3) 在 Ubuntu 系统中打开一个终端,输入以下命令发布 tf 变换 base_link->velodyne:

rosrun tf static_transform_publisher 0 0 0 0 0 0 base_link velodyne 0

(4) 在 Ubuntu 系统中打开一个终端,启动 slam_gmapping:

rosrun gmapping slam_gmapping

(5) 在 Ubuntu 系统中打开一个终端,启动 laser_scan_matcher_node,并指定 fixed_frame 为 odom:

rosrun laser_scan_matcher laser_scan_matcher_node _fixed_frame:=odom

上述过程中,gmapping 提供 map->odom 之间的 tf 变换,laser_scan_matcher 提供 odom->base_link 之间的 tf 变换,static_transform_publisher 提供 base_link->velodyne 之间的 tf 变换。

7. 实时显示地图创建过程

在 Ubuntu 系统中打开一个终端,执行命令:

rosrun rviz rviz

然后在 rviz 中点击 Add -> By topic,添加 Map、LaserScan 或 PointCloud2 等,实时显示获取到的结果。

本文链接:https://www.cnblogs.com/lightweh/p/10076294.html,转载请注明出处。

Velodyne VLP-16 gmapping 建图的更多相关文章

  1. TurtleBot3 Waffle (tx2版华夫)(9)建图-gmapping建图(A2雷达)

    9.1. 说明 这一节我们来讲 Turtlebot3 的 SLAMSLAM(The Simultaneous Localization and Mapping) 同步定位与地图构建: 希望机器人从未知 ...

  2. 通过gmapping和伪造的odom,完成Kinect建图

    传感器信息: 环境深度信息:sensor_msgs/laserScan -----> RGBD三维点云数据:通过ros功能包depthimage to laserscan完成深度相机数据转换成激 ...

  3. 【BZOJ-2879】美食节 最小费用最大流 + 动态建图

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1366  Solved: 737[Submit][Status] ...

  4. poj 3281 Dining 网络流-最大流-建图的题

    题意很简单:JOHN是一个农场主养了一些奶牛,神奇的是这些个奶牛有不同的品味,只喜欢吃某些食物,喝某些饮料,傻傻的John做了很多食物和饮料,但她不知道可以最多喂饱多少牛,(喂饱当然是有吃有喝才会饱) ...

  5. SLAM+语音机器人DIY系列:(六)SLAM建图与自主避障导航——2.google-cartographer机器人SLAM建图

    摘要 通过前面的基础学习,本章进入最为激动的机器人自主导航的学习.在前面的学习铺垫后,终于迎来了最大乐趣的时刻,就是赋予我们的miiboo机器人能自由行走的生命.本章将围绕机器人SLAM建图.导航避障 ...

  6. 牛客多校第四场 J.Hash Function(线段树优化建图+拓扑排序)

    题目传送门:https://www.nowcoder.com/acm/contest/142/J 题意:给一个hash table,求出字典序最小的插入序列,或者判断不合法. 分析: eg.对于序列{ ...

  7. 【ARC069F】Flags 2-sat+线段树优化建图+二分

    Description ​ 数轴上有 n 个旗子,第 ii 个可以插在坐标 xi或者 yi,最大化两两旗子之间的最小距离. Input ​ 第一行一个整数 N. ​ 接下来 N 行每行两个整数 xi, ...

  8. 【转】Codeforces Round #406 (Div. 1) B. Legacy 线段树建图&&最短路

    B. Legacy 题目连接: http://codeforces.com/contest/786/problem/B Description Rick and his co-workers have ...

  9. Nowcoder Hash Function ( 拓扑排序 && 线段树优化建图 )

    题目链接 题意 : 给出一个哈希表.其避免冲突的方法是线性探测再散列.现在问你给出的哈希表是否合法.如果合法则输出所有元素插入的顺序.如果有多解则输出字典序最小的那一个.如果不合法则输出 -1 分析 ...

随机推荐

  1. 动态dp初探

    动态dp初探 动态区间最大子段和问题 给出长度为\(n\)的序列和\(m\)次操作,每次修改一个元素的值或查询区间的最大字段和(SP1714 GSS3). 设\(f[i]\)为以下标\(i\)结尾的最 ...

  2. 可以落地的DDD到底长什么样?

    领域驱动设计的概念 ​ 大家都知道软件开发不是一蹴而就的事情,我们不可能在不了解产品(或行业领域)的前提下进行软件开发,在开发前通常需要进行大量的业务知识梳理,然后才能到软件设计的层面,最后才是开发. ...

  3. Java 容器 & 泛型:一、认识容器

    Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 容器是Java语言学习中重要的一部分.泥瓦匠我的感觉是刚开始挺难学的,但等你熟悉它,接触多了,也就“顺 ...

  4. Unity3D热更新之LuaFramework篇[01]--从零开始

    前言 因工作关系,需要对手头的项目进行热更新支持.了解后发现,Lua的几个变种:XLua.ToLua(原uLua)和Slua都可以做Unity热更,而ToLua更是提供了一个简易的热更框架--LuaF ...

  5. leetcode — sort-colors

    import java.util.Arrays; /** * Source : https://oj.leetcode.com/problems/sort-colors/ * * * Given an ...

  6. linux 命令 — download

    wget 下载工具 一般 wget url 下载url指定的资源,日志输出到stdout,文件名称和url中指定的资源名称一致 wget url -o log -O file -o:指定日志输出到的文 ...

  7. SQL语句方法语法总结(一)

    1.distinct:返回不重复.唯一的值. select distinct col_name from tbl_name --表中的col_name 列的值 如果有10条一样的,仅返回一条. 2.w ...

  8. zookeeper服务发现实战及原理--spring-cloud-zookeeper源码分析

    1.为什么要服务发现? 服务实例的网络位置都是动态分配的.由于扩展.失败和升级,服务实例会经常动态改变,因此,客户端代码需要使用更加复杂的服务发现机制. 2.常见的服务发现开源组件 etcd—用于共享 ...

  9. 浅析JavaScript之数组

    一  概述 JavaScript数组同后端语言一样,具有它自己的数据结构,归根结底,这种数据结构,本质就是一种集合. 在后端语言中(如java,.net等),数组是这样定义的:数组是用来存储相同数据类 ...

  10. pytorch模型部署在MacOS或者IOS

    pytorch训练出.pth模型如何在MacOS上或者IOS部署,这是个问题. 然而我们有了onnx,同样我们也有了coreML. ONNX: onnx是一种针对机器学习设计的开放式文件格式,用来存储 ...