SLAM从入门到精通(amcl定位使用)

news2024/12/23 0:16:02

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        学习slam,一般就是所谓的边定位、边制图的知识。然而在实际生产过程中,比如扫地机器人、agv、巡检机器人、农业机器人,很多情况下都是先绘制好地图。等地图ok了,再规划机器人特定的路径。路径这些都没问题了之后,机器人就会按照我们的设想,去指定的地方执行指定的任务就可以了。所以,制定完地图之后,后续的任务就不再需要制图了,主要就是定位。也就是机器人在行进的过程当中不要丢位置就可以了。

        在这过程中其实就衍生出一些问题,也就是学术和生产的问题。对于学术来说,slam的制图和定位常常是一起的。而工业生产中,对定位的要求可能更多一点。这中间,因为场景变化很大,我们绘制出来的地图够不够鲁棒、满足要求,这很重要。除此之外,定位标准也是有差别的。道路上精度可以差一点,但是对于具体的库位,则要求必须精准。这也是学术和工业生产不一样的地方。

        在ros上面,自带了一些定位算法,这中间就有amcl。虽然amcl比较经典,但是由于计算量比较大、反馈比较慢(常常是秒级别的),工业上用反光柱可能更多一点。但是这并不妨碍我们去学习amcl这个经典算法。

1、打开仿真场景

        在开始使用amcl之前,第一步,我们需要的还是打开仿真场景,即输入完source ./devel/setup.sh之后,立刻输入roslaunch wpr_simulation wpb_stage_slam.launch。

2、启动map_server

        amcl除了需要接收robot的odom、laser这些数据之外,另外一个很重要的输入就是map文件。所以这个时候需要输入rosrun map_server map_server ./map.yaml。

feixiaoxing@feixiaoxing-VirtualBox:~/Desktop/catkin_ws$ rosrun map_server map_server ./map.yaml
[ INFO] [1695982052.911529758]: Loading map from image "./map.pgm"
[ INFO] [1695982053.109551903, 334.643000000]: Read a 1024 X 1024 map @ 0.025 m/cell
[ INFO] [1695982275.007835915, 449.119000000]: Sending map

3、启动amcl

        amcl的启动就比较简单了,直接输入rosrun amcl amcl即可。关于amcl的参数设置,我们将来可以慢慢理解,这里全部使用默认的参数。

feixiaoxing@feixiaoxing-VirtualBox:~/Desktop/catkin_ws$ rosrun amcl amcl
[ INFO] [1695982274.997554194]: Requesting the map...
[ INFO] [1695982275.107380439]: Received a 1024 X 1024 map @ 0.025 m/pix

[ INFO] [1695982275.271526958, 449.297000000]: Initializing likelihood field model; this can take some time on large maps...
[ INFO] [1695982275.419726758, 449.388000000]: Done initializing likelihood field model.

4、启动rviz

        仿真环境、map_server和amcl都启动完毕之后,下面就是启动rviz了。直接输入rosrun rviz rviz即可。等rviz启动后,依次添加RobotModel、LaserScan、Map,最重要的就是还要添加PoseArray,也就是amcl生成的粒子数据。这些粒子决定了最终robot的位姿信息。

5、添加小车控制设备

        为了实现对小车的控制,我们输入rosrun rqt_robot_steering rqt_robot_steering,就可以直接操纵小车移动了。随着小车的前进,大家会看到小车周围的粒子越来越集中,这也是amcl算法的特点,本身也说明了小车的位姿也是越来越准确了。

6、发布pose

        前面我们通过amcl算法发现,车辆走的越远,位姿越来越稳定。这个时候,可以通过rostopic echo amcl_pose,查看小车的位姿信息,

feixiaoxing@feixiaoxing-VirtualBox:~/Desktop/catkin_ws$ rostopic echo amcl_pose
header: 
  seq: 5
  stamp: 
    secs: 367
    nsecs: 355000000
  frame_id: "map"
pose: 
  pose: 
    position: 
      x: 1.829333671192329
      y: -0.023028699572001186
      z: 0.0
    orientation: 
      x: 0.0
      y: 0.0
      z: -0.005907350114325032
      w: 0.9999825514550875
  covariance: [0.00653005930345163, 0.0013395990524377593, 0.0, 0.0, 0.0, 0.0, 0.0013395990524377593, 0.007374991974678432, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.002811733697012357]
---

        上面position中的打印x、y、z是坐标信息,orientation中的x、y、z、w是角度信息,表示方法是四元数,如果需要看角度的话,需要进一步通过矩阵转成roll、pitch和yaw。因为机器人是运行在平面上的,所以这里的yaw就是我们希望获得的数值。至此,我们通过ros、hector slam和amcl就可以实现最最基本的slam工作了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1051458.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Sentinel学习——sentinel的使用,引入依赖和配置 对消费者进行流控 对生产者进行熔断降级

前言 Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 本篇博客介绍sentinel的使用&#x…

Bug:elementUI样式不起作用

前端问题合集:VueElementUI 1. Vue引用Element-UI时,组件无效果解决方案 前提: 已经安装好elementUI依赖 //安装依赖 npm install element-ui //main.js中导入依赖并在全局中使用 import ElementUI from element-ui Vue.use(ElementUI)如果此…

电压提前/滞后电路 —— 电赛综测备赛

电容可以让交流波形提前或滞后,不过很多人不知道用法 电压滞后电路 我们从中间输出给示波器 波形(红色) 电容越大电阻越大,波形越滞后 电压提前电路 波形(红色)提前 电容越小电阻越小,波形…

【python】numpy库

文章目录 简单介绍功能示例代码 简单介绍 NumPy(Numerical Python的简称)是Python数值计算最重要的基础包。大多数提供科学计算的包都是用NumPy的数组作为构建基础。 NumPy是在一个连续的内存块中存储数据,独立于其他Python内置对象。NumPy…

uniapp iOS离线打包——如何创建App并提交版本审核?

uniapp 如何创建App,并提交版本审核? 文章目录 uniapp 如何创建App,并提交版本审核?登录 appstoreconnect创建AppiOS 预览和截屏应用功能描述技术支持App 审核信息 App 信息内容版权年龄分级 价格与销售范围App 隐私提交审核 登录…

VS Code使用clang-format自定义C++代码默认格式化样式

解决的问题 让 VS Code 在不使用.clang-format或_clang-format文件时,默认使用自定义的 C 代码格式化样式。以下假定规则文件为D:\ClangFormat\rules.txt。 格式规则 具体设置参照 Clang-Format官方文档,也可以使用 Clang-Format交互式构建器。 贴上…

Spring Boot 中使用 Micrometer 进行度量和监控

Spring Boot 中使用 Micrometer 进行度量和监控 Micrometer 是一个开源的度量库,用于在应用程序中收集、存储和展示度量数据。它提供了一种统一的方式来度量应用程序的各种指标,如响应时间、请求次数、内存使用等。在Spring Boot中,Micromet…

kuaishou sig、sig3参数记录分析

**免责任声明: 任何可操作性的内容与本文无关,文章内容仅供参考学习 如有侵权, 损害贵公司利益, 请联系作者,会立刻马上进行删除** 经常研究快手的小伙伴都知道,快手有几个比较重要的参数,像sig,token-sig和sig3字段…

linux-定时任务

目录 一、crond命令 1、什么是计划任务 2、crond服务的概念 3、crontab 二、at命令 1、at任务的概念 三、邮件服务 1、概念 2、启动postfix 四、mailx命令 1、三个概念: 2、交互式发邮件 3、非交互式发邮件 四、cron定时任务实践 1、系统定时任务配置…

What is a UDP Flood Attack?

用户数据报协议 (UDP) 是计算机网络中使用的无连接、不可靠的协议。它在互联网协议 (IP) 的传输层上运行,并提供跨网络的快速、高效的数据传输。与TCP(其更可靠的对应物)不同,UDP不提…

ChatGPT,AIGC 助力人力资源管理对身份证号处理

HR,行政,文员办公对于员工信息管理中有一项目非常重要的操作,便是从身份证号中提取相关信息如下: 可以用ChatGPT完成三个字段的提取与计算。 我们先让ChatGPT描述一下身份证号每一位都代表什么意思。 接下来从身份证号中提取出生…

leetCode 139.单词拆分 + 完全背包 + 排列数

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。 示例 1: 输入: s "leetcode", wordDict […

BUUCTF reverse wp 31 - 40

[HDCTF2019]Maze 脱壳, IDA打开, 发现无法F5, 而且反汇编失败 这种情况一般是花指令, 误导了IDA的递归反汇编, 这里E8是call指令, nop掉按p设置main函数入口再F5即可 int __cdecl main(int argc, const char **argv, const char **envp) {int v4; // [esp0h] [ebp-24h]int v5…

Python语言简介和版本选择

博主:命运之光 专栏:Python程序设计 目录 Python语言简介 Python发展历史 Python语言概述 Python版本选择 Python语言简介 解释型 解释执行可移植好 3种编程模式 函数式编程;对象编程;命令式编程 丰富的库 内置强大标准…

【软件评测】Apowersoft 傲软抠图AI智能换背景工具软件

现如今的数字图像处理已经成为人们生活中不可或缺的一部分,而图像抠图作为其中的重要环节,更是被广泛应用于设计、摄影、广告等领域。为了满足用户的需求,Apowersoft推出了一款傲软抠图AI智能换背景工具,宣称能够自动抠图并智能替…

提升 Windows 生产力的实用工具集:Microsoft PowerToys | 开源日报 No.42

microsoft/PowerToys Stars: 95.2k License: MIT Microsoft PowerToys 是一套用于调整和优化 Windows 体验以提高生产力的实用工具集。该项目包含多个功能模块,其中主要功能有:Always on Top、FancyZones、File Explorer Add-ons 等。其核心优势和关键特…

opencv实现目标跟踪及视频转存

创建跟踪器 def createTypeTracker(trackerType): 读取视频第一帧,选择跟踪的目标 读第一帧。 ok, frame video.read() 选择边界框 bbox cv2.selectROI(frame, False) 初始化跟踪器 tracker_type ‘MIL’ tracker createTypeTracker(tracker_type) 用第一…

AD20软件学习

一.建立文件夹以及汉化操作 1.创建工程 菜单栏- > File -> New -> Project 2.创建原理图 菜单栏- > File -> New -> Schematic 记得保存!!! 3.创建PCB 菜单栏- > File -> New -> PCB 依次为综合库,原…

APP的收费模式及特点

移动应用(APP)的收费模式多种多样,可以根据开发者的需求、目标受众和应用的性质来选择。以下是一些常见的APP收费模式及其特点,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎…

Java编码技巧:验证码

目录 1.1、EasyCaptcha(优选,支持种类多,样式多,使用简单)1.1.1、作用1.1.2、官方信息1.1.3、使用案例1.1.4、依赖1.1.5、代码1.1.6、效果1.1.7、拓展 1.2、kaptcha1.2.1、作用1.2.2、官方信息1.2.3、使用案例1.2.4、依…