6.ROS&PX4--Pixhawk无人机+A1激光雷达SLAM部署

2023-05-16

6.ROS&PX4–无人机A1激光雷达SLAM部署

一、常见2D SLAM算法

Gmapping
Hector_SLAM
Cartographer

Gmapping

基于粒子滤波的2D激光雷达SLAM,构建二维栅格地图。融合里程计信息,没有回环检测。优点是在小场景中,计算量小,速度较快。缺点是每个粒子都携带一幅地图,无法应对大场景(内存和计算量巨大);如果里程不准或标定参数不准,在长回廊等环境中容易把图建歪。

Hector_Slam

基于优化的算法(解最小二乘问题),优缺点:不需要里程计,但对于雷达帧率要求很高40Hz,估计6自由度位姿,可以适应空中或者地面不平坦的情况。初值的选择对结果影响很大,所以要求雷达帧率较高。

Cartographer

cartographerr是google推出的一套基于图优化的SLAM算法,累计误差较前两种算法低,能天然的输出协方差矩阵,后端优化的输入项。成本较低的雷达也能跑出不错的效果。

二、测试A1:

cd catkin_ws/src
git clone https://github.com/slamtec/rplidar_ros.git
cd ..
catkin_make
roslaunch rplidar_ros view_rplidar.launch

出现Rviz激光雷达点云界面,产品正常

三、部署Hector_Slam

创建hector_slam环境:

#安装hector-slam算法库
sudo apt-get install ros-noetic-hector-slam	
#部署算法到ROS工作目录	
cd ~/catkin_ws/src
git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam
cd ~/catkin_ws
#编译程序
catkin_make

实现SLAM:

1.创建Slam启动运行文件
#创建Hector_Slam_Demo.launch的Slam启动运行文件
touch  ~/catkin_ws/src/rplidar_ros/launch/Hector_Slam_Demo.launch

Hector_Slam_Demo.launch代码:

<launch>
	<node pkg="hector_mapping" type="hector_mapping" name="hector_mapping" output="screen">
		<!-- Frame names -->
		<!--第一句使得我们能获得map与odom的坐标系变换,这样才能根据地图获得激光雷达目前在地图中的位姿;-->
		<!--然后由于没有里程计,因此odom_frame也设置为base_link就可以了-->
		<param name="pub_map_odom_transform" value="true"/>
		<param name="map_frame" value="map" />
		<param name="base_frame" value="base_link" />
		<param name="odom_frame" value="base_link" />

		<!-- Tf use -->
		<param name="use_tf_scan_transformation" value="true"/>
		<param name="use_tf_pose_start_estimate" value="false"/>

		<!-- Map size / start point -->
		<!-- 第一句设置地图图片分辨率,0.05m/pix; -->
		<!-- 第二句为图片大小; -->
		<!-- 三四句为初始点在图片中的位置,这里为中间 -->
		<param name="map_resolution" value="0.05"/>
		<param name="map_size" value="2048"/>
		<param name="map_start_x" value="0.5"/>
		<param name="map_start_y" value="0.5" />
		<param name="laser_z_min_value" value = "-1.0" />
		<param name="laser_z_max_value" value = "1.0" />
		<param name="map_multi_res_levels" value="2" />

		<param name="map_pub_period" value="2" />
		<param name="laser_min_dist" value="0.4" />
		<param name="laser_max_dist" value="5.5" />
		<param name="output_timing" value="false" />
		<param name="pub_map_scanmatch_transform" value="true" />
		<!--<param name="tf_map_scanmatch_transform_frame_name" value="scanmatcher_frame" />-->

		<!-- Map update parameters -->
		<param name="update_factor_free" value="0.4"/>
		<param name="update_factor_occupied" value="0.7" />    
		<param name="map_update_distance_thresh" value="0.2"/>
		<param name="map_update_angle_thresh" value="0.06" />

		<!-- Advertising config --> 
		<!-- 第一句设置发布地图的服务,第二句设置读取激光雷达数据的队列长度,第三句设置从哪个topic读取激光雷达是数据 --> 		
		<param name="advertise_map_service" value="true"/>
		<param name="scan_subscriber_queue_size" value="5"/>
		<param name="scan_topic" value="scan"/>
	</node>

	<!-- Advertising config --> 
	<!-- 这里直接启动了一个tf中的static_transform_publisher,用来发布base_link与激光雷达的位姿关系 --> 
	<!-- args前三个0代表相对位移,后三个0代表转动的欧拉角,然后写出两个相对的坐标系名称,最后一个100是100ms发布一次 --> 
	<node pkg="tf" type="static_transform_publisher" name="base_to_laser_broadcaster" args="0 0 0 0 0 0 /base_link /laser 100"/>
	<!-- static_transform_publisher具体写法格式如下(两种形式)--> 
	<!-- 欧拉角形式:static_transform_publisher x y z yaw pitch roll frame_id child_frame_id period_in_ms --> 
	<!-- 四元数形式:static_transform_publisher x y z qx qy qz qw frame_id child_frame_id period_in_ms --> 
	
	<node pkg="rviz" type="rviz" name="rviz" args="-d $(find hector_slam_launch)/rviz_cfg/mapping_demo.rviz"/>
</launch>

2.运行Hector_Slam
#开启A1雷达扫描
roslaunch rplidar_ros rplidar.launch 
#开始Hector_SLAM工作,自动开启Rviz建图
roslaunch rplidar_ros Hector_Slam_Demo.launch  
3.保存Map:
#安装map-server库
sudo apt-get install ros-noetic-map-server  
#保存模型命令
rosrun map_server map_saver -f ~/my_map     

此时,我们可以在根目录下获得两个文件,分别是my_map.pgm和my_map.yaml;点击my_map.pgm即可查看刚刚建成的地图,my_map.yaml里存放的是地图相关的信息

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

6.ROS&PX4--Pixhawk无人机+A1激光雷达SLAM部署 的相关文章

  • ROS2踩坑记录

    Vscode 显示 找不到module 以此选择 设置 Python 在setting json中编辑 在 python autoComplete extraPaths 中添加额外的第三方库路径 如 opt ros foxy lib pyt
  • ROS turtlebot_follower :让机器人跟随我们移动

    ROS turtlebot follower 学习 首先在catkin ws src目录下载源码 地址 https github com turtlebot turtlebot apps git 了解代码见注释 其中有些地方我也不是很明白
  • ROS noetic tf demo错误处理及python版本切换

    文章目录 报错描述及解决 ubuntu20 04下python版本切换 报错描述及解决 ubuntu版本 20 04 ROS版本 noetic roslaunch turtle tf turtle tf demo launch 报错信息 t
  • Ubuntu18.04配置Seetaface6

    目录 一 下载安装Qt软件 1 安装包下载 2 安装Qt 3 配置 二 下载源码 三 编译工具 四 编译 1 编译OpenRoleZoo 2 编译SeetaAuthorize 3 编译TenniS 五 运行 1 修改lib路径 2 buil
  • 【Pytorch论文相关代码】使用SOLD2预训练好的模型检测与匹配线段(自己的数据集)

    文章目录 前言 使用流程 检测与匹配结果 前言 论文链接 SOLD2 Self supervised Occlusion aware Line Description and Detection 论文源码 https github com
  • 解决ros安装 使用roscore命令测试问题

    本人安装教程完成ROS的安装后 在进行测试如图1命令 出现 解决办法输入完命令1后要输入命令2才行 即可测试成功 测试成功的界面如下
  • LOAM算法详解

    激光SLAM 帧间匹配方法 Point to Plane ICP NDT Feature based Method 回环检测方法 Scan to Scan Scan to Map LOAM创新点 定位和建图的分离 里程计模块 高频低质量的帧
  • ORB-SLAM2:基于可识别特征的自主导航与地图构建

    ORB SLAM2 基于可识别特征的自主导航与地图构建 ORB SLAM Tracking and Mapping Recognizable Features 转自 http blog csdn net cicibabe article d
  • 树莓派配置wifi做热点方法

    http wiki jikexueyuan com project raspberry pi wifi html
  • 局域网下ROS多机通信的网络连接配置

    1 在路由器设置中固定各机器IP地址 在浏览器中输入路由器的IP地址 例如TP LINK路由器的IP为 192 168 1 1 进入登录页面后 输入用户名和密码登录 用户名一般为admin 密码为自定义 在 基本设置 gt LAN设置 gt
  • 视觉SLAM漫谈

    视觉SLAM漫谈 1 前言 开始做SLAM 机器人同时定位与建图 研究已经近一年了 从一年级开始对这个方向产生兴趣 到现在为止 也算是对这个领域有了大致的了解 然而越了解 越觉得这个方向难度很大 总体来讲有以下几个原因 入门资料很少 虽然国
  • SLAM练习题(十一)—— G2O实战

    SLAM 学习笔记 写在前面的话 算是一点小小的感悟吧 估计位姿的方法有线性方法和非线性方法 线性方法就是特征点法中的2D 2D的对极约束 3D 2D的PnP问题 非线性方法有BA优化 它将位姿的估计问题转换成了一个误差关于优化量的最小二乘
  • (ros/qt报错) FATAL: ROS_MASTER_URI is not defined in the environment

    安装qt之后 明明打开roscore但是qt运行跟ros有关的节点时报错 FATAL 1450943695 306401842 ROS MASTER URI is not defined in the environment Either
  • 如何将视频或图像序列转换为包文件?

    我是 ROS 新手 我需要转换预先存在的视频文件 或者large可以连接到视频流中的图像数量 bagROS 中的文件 我在网上找到了这段代码 http answers ros org question 11537 creating a ba
  • 在 CLion 中设置 ROS 包

    我正在使用 CLion C IDE 来编辑 ROS 包 我可以通过打开CMakeLists txt文件 但是 我收到一个错误 FATAL ERROR find package catkin 失败 在工作区和 CMAKE PREFIX PAT
  • Kinect / Primesense (Xtion) ROS Ubuntu 通过虚拟机 (VMware)

    由于我花了相当长的时间才弄清楚如何让 Xtion Primesense 在 VMware 上工作 所以我想在这里与大家分享 使用 Kinect 时 即使 VMware 已成功连接该设备 我也无法让 ROS 查看该设备 roslaunch o
  • 在 ROS - Python 中使用来自多个主题的数据

    我能够显示来自两个主题的数据 但无法在 ROS 中实时使用和计算这两个主题的数据 用 Python 代码编写 您有想法存储这些数据并实时计算吗 谢谢 usr bin env python import rospy import string
  • ROS 从 python 节点发布数组

    我是 ros python 的新手 我正在尝试从 python ros 节点发布一个一维数组 我使用 Int32MultiArray 但我无法理解多数组中布局的概念 谁能给我解释一下吗 或者还有其他方式发布数组吗 Thanks usr bi
  • 如何使用 PyQT5 连接和分离外部应用程序或对接外部应用程序?

    我正在使用 ROS 为多机器人系统开发 GUI 但我对界面中最不想做的事情感到困惑 在我的应用程序中嵌入 RVIZ GMAPPING 或其他屏幕 我已经在界面中放置了一个终端 但我无法解决如何向我的应用程序添加外部应用程序窗口的问题 我知道
  • 如何使用一个凉亭同时创建两个地图?

    如下图所示 现在我的gazebo正在运行2个slam gmapping包 首先是 turtlebot slam gmapping 发布到 map 主题 第二个是 slam gmapping 发布到与第一个相同的 map 主题 我想创建一个新

随机推荐

  • 封装axios请求

    1 引入所需模块 引入axios模块 import axios from 39 axios 39 使用qs模块 xff0c 进行文件序列号化操作 import qs from 39 qs 39 2 判断当前环境 环境变量 let baseU
  • Matlab的Gpu加速(CUDA cudnn)

    多CUDA版本的切换 xff0c 及Matlab版本对应的CUDA版本 学习笔记 Matlab的Gpu加速 安装CUDA和cudnn时 xff0c 踩了不少坑 xff0c 总结如下几个经验 xff1a 1 显卡驱动的版本与CUDA是一对多的
  • win10添加新硬盘

    win10添加新硬盘 前言 前言 小白指导 xff0c 白到不能再白了 xff01 xff01 xff01 直接上图 关于文件系统介绍 文件系统是系统对文件的存放排列方式 xff0c 不同格式的文件系统关系到数据是如何在磁盘进行存储 xff
  • idea2020创建maven javaweb项目并运行 示例

    idea2020创建maven javaweb项目并运行 一 项目的创建二 pom xml简单介绍三 添加tomcat插件以方便运行项目1 在pom xml文件里加入以下配置 四 创建servlet并 运行项目1 创建Java文件夹并在文件
  • C++实现算法服务的一些经验总结

    文章目录 一 算法模型调用的几种方式二 python算法服务的优缺点三 C 43 43 算法服务的优缺点四 C 43 43 算法服务的几种实现方式五 C 43 43 基于http的算法服务实现思路六 记录调用 xff1a 日志 数据库七 性
  • Java中使用jedis操作redis(使用maven)

    jedis的使用 前言一 简单使用示例1 快速入门2 操作五种数据格式 二 jedis连接池 xff1a jedisPool1 示例2 jedies详细配置 三 创建连接池工具类1 jedis properties2 JediesPoolU
  • maven中使用jdbc

    用到的有数据库连接池 JDBCTemplate 一 首先导入jar包 lt mysql驱动 xff0c 使用对应版本jar包依赖 gt lt dependency gt lt groupId gt mysql lt groupId gt l
  • 解决风扇狂转不止的好方法

    这两天风扇狂转不止 xff0c 真让我头疼 xff0c 现在弄好了 安装一个软件 软件官网 我的是thinkpade580 xff0c 对其他电脑生不生效我不清楚 xff08 但可以一试 xff09 下载后直接安装即可 有个地方实时显示着温
  • 安装hadoop3.x版本踩坑

    报错 xff1a ERROR Attempting to operate on hdfs namenode as root ERROR but there is no HDFS NAMENODE USER defined Aborting
  • 报错:Description: No bean of type ‘org.apache.shiro.realm.Realm‘ found

    springboot整合shiro的时候出现了报错 报错信息 xff1a Description No bean of type 39 org apache shiro realm Realm 39 found Action Please
  • 计算机网络课后习题概略

    计算机网络 课后习题 第一章 概述 1 01 计算机网络可以向用户提供哪些服务 xff1f 服务功能或作用数据传输网络间个计算机之间互相进行信息的传递 资源共享进入网络的用户可以对网络中的数据 软件和硬件实现共享 分布处理功能通过网络可以把
  • Kittle案例(Excel输入,生成记录,生成随机数,获取系统信息,排序记录,去除重复记录,替换NULL值)

    一 Excel输入 1 创建转换 将要处理的文件保存到Excel表中 xff0c 然后打开kettle创建一个转换并命名 xff0c 拖入 Excel输入 控件 2 配置Excel输入控件 浏览导入Excel文件 单击 浏览 B 按钮 xf
  • 第七章 数据加载

    一 全量加载 从技术角度来说 xff0c 全量加载比增量加载的操作要简单很多 xff0c 即只需要在数据加载之前 xff0c 将目标数据表进行清空 xff0c 再将源数据表中的数据全部加载到目标表中 案例实现 xff1a 数据装备 xff1
  • 第八章 综合案例——构建DVD租赁商店数据仓库(1)

    一 加载日期数据至日期维度表 操作介绍 xff1a 下面通过Kettle工具加载日期数据至dim date日期维度表 1 打开Kettle工具 xff0c 创建转换 使用Kettle工具 xff0c 创建一个转换load dim date
  • 第八章 综合案例——构建DVD租赁商店数据仓库(2)

    一 加载用户数据至用户维度表 操作介绍 xff1a 通过Kettle工具加载用户数据至用户维度表dim customer 1 打开Kettle工具 xff0c 创建转换load dim customer 使用Kettle工具 xff0c 创
  • C++与python交互库-pybind11的返回值策略 return_value_policy

    pybind11的返回值策略 return value policy 一 返回值策略的必要性二 一个导致crash的例子三 所有的返回值策略的探讨四 补充说明 一 返回值策略的必要性 C 43 43 和python使用根本上就不一样的内存管
  • 第八章 综合案例——构建DVD租赁商店数据仓库(3)

    一 加载演员数据至演员维度表 操作介绍 xff1a 通过Kettle工具加载演员数据至演员维度表dim actor 1 打开Kettle工具 xff0c 创建转换 使用Kettle工具 xff0c 创建一个转换load dim actor
  • 树莓派4b安装python库

    树莓派4b安装python库 树莓派安装好系统后自带的有python2和python3 xff0c 默认是使用python2 xff0c 可以打开树莓派查看 xff1a 输入python 查看默认的python版本 xff1a 我原来默认是
  • SONIC+P4

    SONIC简介 背景 微软于2015年先后发表了SAI和SONIC SONIC产业日益繁荣 xff0c 已超过六十家 创新 SONiC使用了大量现有的开源技术 xff1a Docker Redis Quagga和LLDPD以及自动化配置工具
  • 6.ROS&PX4--Pixhawk无人机+A1激光雷达SLAM部署

    6 ROS amp PX4 无人机A1激光雷达SLAM部署 一 常见2D SLAM算法 Gmapping Hector SLAM Cartographer Gmapping 基于粒子滤波的2D激光雷达SLAM xff0c 构建二维栅格地图