Jetson Nano集成探索大象机器人myAGV上的 SLAM 算法!

引言

大家好,最近新入手了一台myAGV JN这是elephant robotics在myAGV升级后的版本。最近有对SLAM相关知识感兴趣,想深入了解一些关于ROS中SLAM的一些算法和规划,跟据官方提供的gitbook,主要使用到了gmapping算法来建图导航实现功能的。

本篇得到文章主要探讨如何通过调整gmapping算法和其他软件层面的优化来提升myagv的精度,在不依靠硬件的条件情况下。

产品介绍

myAGV-Jetson Nano

这是第二代的myAGV,第一代的只有raspberry Pi 4B版本,算力方面有所欠缺,在二代的时候推出了一Jetson Nano为主控的版本,能够满足ROS 大部分的需求,Jetson Nano 能够满足大部分的嵌入式机器人的算力需求。

对比之前还多了很多的配件,可以搭载3D摄像头做一些视觉的建图,一块显示屏安装在车身上比较方便操作,还有额外的增加了一块储能电池,比之前更耐用了(之前的1h差不多就趴窝了),因为都是看过raspberry 第一版的测评和使用情况,对这个升级版本还是很大的期待的。

搭配了一个雷达,高性能的行星直流无刷电机,保留了竞赛级别的万向轮,在原有的基础上开放了python 的控制接口,适配了图形化编程等软件。最让我心动的是,主控板为此提供了强大的图形处理能力,并且还支持3D建图和导航。

Jetson Nano B01

NVIDIA Jetson Nano B01是一款小型但强大的嵌入式计算开发板,专为人工智能(AI)和机器学习(ML)应用设计。

主要性能:

  • NVIDIA Maxwell架构的GPU,包含128个CUDA核心。
  • 四核ARM Cortex-A57 CPU,主频为1.43 GHz。
  • 4GB LPDDR4内存,位宽为64位,频率为1600MHz。

基于这些性能Jetson Nano BO1 适用于各种AI和嵌入式应用场景,尤其是机器人方面的自动导航,运动控制,路径规划等等。

gmapping

gmapping是一种SLAM(Simultaneous Localization and Mapping)常用的算法,他使用粒子波率方法在机器人移动的过程中同事构建环境地图并且估计机器人的位置和姿态。

过程

使用的过程

进入的界面是Ubuntu系统,方便了使用ROS进行操作,具我所了解,主机里原本就已经配置好了一些相关的基础建图信息。

对于初次使用类似这种机器人来说非常的友好,提供了一个UI界面哪里不会点哪里。

一顿鼠标点下来,不用几分钟,就可以打开雷达运行gmapping来进行环境建图了。

这个UI界面非常友好,功能相对来说还是比较完善的,但是只基于最基础的建图和导航功能,如果说是要做其他的一些项目开发,就没有太大的用处了,只适用于初学者,想要快速上手。

之后就开始可以建图了。用VNC进行远程链接,通过键盘控制myAGV在所要导航的环境中进行建图。

目前为止,所有的环节都是顺利的,如果不想用UI也可以 自行输入命令行来执行环境建图的功能,以下内容都是大象机器人封装好的功能,以下命令都要在命令行当中运行。

# 启动雷达
roslaunch myagv_odometry myagv_active.launch
#运行gmapping建图文件
roslaunch myagv_navigation myagv_slam_laser.launch
# 开启键盘控制
roslaunch myagv_teleop myagv_teleop.launch

#完成建图步骤之后需要进行保存map
rosrun map_server map_saver

在导航的功能包中,更改刚建图的路径。

关闭建图的终端,运行导航的命令。

roslaunch myagv_navigation navigation_active.launch

这个时候,关键点来了,最好吧myagv放置在建图时候小车出发的为止,或者在RViz当中进行更改,确保Myagv在地图中的位置和实际环境中的位置相同才能够保证导航的时候能够正确的前往目的地。

点击顶部工具栏的“2D Pose Estimate” 进行调整,使得Rviz界面的小车和实现的小车可对应上,此时终端会返回小车相对于地图的坐标和航向角。

甚至还可以进行分布导航,记录下要前往的导航点的参数,xy坐标与航向角yaw,但是在导航的过程中发现了一些问题,很关键原因就是他不是特别的精准,导航10次,10次都会根据原来的路径有一定的偏差。

提出的问题并解决

为什么会出现偏差的问题?是什么原因导致出现偏差?

主要有两方面的原因,1是硬件方面传感器的误差,2是软件方面算法的局限性。

以下是我解决的方法,都是根据ROS官方给出的参数进行调整。

gmapping - ROS Wiki

  1. 通过修改雷达的参数,主要有一下几个参数
  • maxRange和maxUrange

maxRange:设置激光雷达的最大探测距离。确保此值与激光雷达的实际测量范围相匹配。

maxUrange:用于构建地图的最大有效距离。一般比maxRange稍小,设置成实际测量距离的一个合理值。

  • sigma

表示激光雷达测量的标准差。数值越小,表示测量越精确。

根据激光雷达的实际性能调整该值,以减少测量噪声的影响。

  • kernelSize

表示扫描匹配的窗口大小。较大的值可以增加匹配的鲁棒性,但也会增加计算量。

调整该参数以平衡计算时间和匹配精度。

  • lstep和astep

lstep:线性步长,表示在扫描匹配过程中,平移步长的大小。

astep:角度步长,表示在扫描匹配过程中,旋转步长的大小。

减小这些步长可以提高扫描匹配的精度,但也会增加计算负担。

  • particles

粒子的数量。更多的粒子可以提高定位的准确性和稳定性,但也会增加计算开销。

在计算资源允许的情况下,适当增加粒子数量。

  • xmin、ymin、xmax、ymax

设置地图的边界,确保这些值能够涵盖机器人运行的整个区域。

适当调整地图边界,可以减少无效区域的计算,提高整体效率。

<launch>
    <arg name="scan_topic" default="scan" />

    <node pkg="gmapping" type="slam_gmapping" name="gmapping" output="screen" clear_params="true">
		<param name="base_frame" value="base_footprint"/>
        <param name="odom_frame" value="odom"/>
        <!--param name="odom_frame" value="odom_combined"/-->
        <param name="map_update_interval" value="0.1"/>
        <!-- Set maxUrange < actual maximum range of the Laser -->
        <param name="maxRange" value="5.0"/>
        <param name="maxUrange" value="4.5"/>
        <param name="sigma" value="0.05"/>
        <param name="kernelSize" value="1"/>
        <param name="lstep" value="0.05"/>
        <param name="astep" value="0.05"/>
        <param name="iterations" value="5"/>
        <param name="lsigma" value="0.075"/>
        <param name="ogain" value="3.0"/>
        <param name="lskip" value="0"/>
        <param name="srr" value="0.01"/>
        <param name="srt" value="0.02"/>
        <param name="str" value="0.01"/>
        <param name="stt" value="0.02"/>
        <param name="linearUpdate" value="0.5"/>
        <param name="angularUpdate" value="0.436"/>
        <param name="temporalUpdate" value="-1.0"/>
        <param name="resampleThreshold" value="0.5"/>
        <param name="particles" value="80"/>
        <param name="xmin" value="-1.0"/>
        <param name="ymin" value="-1.0"/>
        <param name="xmax" value="1.0"/>
        <param name="ymax" value="1.0"/>
        <param name="delta" value="0.05"/>
        <param name="llsamplerange" value="0.01"/>
        <param name="llsamplestep" value="0.01"/>
        <param name="lasamplerange" value="0.005"/>
        <param name="lasamplestep" value="0.005"/>
        <remap from="scan" to="$(arg scan_topic)"/>
    </node>
</launch>
  1. 调整里程计的参数

里成计模型:

  • 校准里程计模型参数,确保其准确反映机器人的运动特性。
  • 检查并调整轮子的半径、轴距等参数,减少模型误差。

传感器结合:

  • 结合IMU数据,通过扩展卡尔曼滤波器(EKF)等方法进行传感器数据融合,提高定位精度。
  • 确保里程计和IMU数据的时间同步,减少时序误差。

3gmapping算法调整:

  • 粒子滤波误差:Gmapping使用粒子滤波算法,粒子的数目和分布会影响精度。如果粒子数量不足或分布不合理,可能导致误差。
  • Gmapping算法中的参数(如粒子数、步长、噪声模型等)设置不当,会影响定位和建图的精度。

调节这些参数来提高SLAM算法的精度,在实践当中就可以确保myAGV运行的时候误差不会太大。

需要根据周围的环境,进行大量的调节参数,然后进行测试,才能够确保建图的精准只有在建图精准了,导航也才能够保证精准。

总结

总的来说,我觉得myAGV表现还是挺不错的,无论是性能、使用体验,还是配套资料,都让人觉得友好,对初学者来说很容易上手。目前,我还在不断地使用和熟悉这个产品,之后打算做一些有趣的项目,希望能充分利用Jetson Nano BO1的潜力,把AI和大模型结合起来。如果你有任何好的建议,随时分享!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机类专业应该怎么选学校和方向?优先选这些!

&#x1f446;点击关注 获取更多编程干货&#x1f446; 高考季临近&#xff0c;不少有意向报考计算机专业的同学在为院校和细分专业的选择而苦恼&#xff0c;以下是一些建议&#xff0c;希望能帮到大家&#xff01; 01 选校建议 在选择计算机科学&#xff08;CS&#xff09…

第二证券炒股知识:股票内盘外盘代表什么意思?

股票内盘是主动性卖盘&#xff0c;表明以买入价成交的股数&#xff0c;持股的投资者主动以等于或是低于买一、买二、买三、买四、买五的价格卖出手中持有的股份&#xff0c;买入成交数量核算参加内盘。 股票外盘是主动性买盘&#xff0c;表明以卖出价成交的股数&#xff0c;场…

Vuex 的安装与配置

聚沙成塔每天进步一点点 本文内容 ⭐ 专栏简介Vuex 的安装与配置1. 安装 Vuex使用 npm 安装使用 yarn 安装 2. 配置 Vuex创建和配置 store将 store 注入到 Vue 实例中 3. 在组件中使用 Vuex访问 State提交 Mutation分发 Action使用 Getter 原理解析小结 ⭐ 写在最后 ⭐ 专栏简介…

2. MySQL 数据类型和存储引擎

文章目录 【 1. 数据类型 】1.1 数值类型1.1.1 整型1.1.2 小数1.1.3 数值类型的选择 1.2 日期和时间YEAR 年TIME 时间DATE 日期DATETIME 日期时间TIMESTAMP 时间戳日期和时间的选择 1.3 文本字符串CHAR 固定字符串、VARCHAR 可变字符串TEXT 文本ENUM 枚举SET 集合字符串类型的选…

k8s-部署对象存储minio

环境信息 minio版本 :最新 k8s 版本1.22 使用nfs作为共享存储 一.单节点安装包部署 脚本部署&#xff0c;一键部署&#xff0c;单节点应用于数据量小&#xff0c;一些缓存存储&#xff0c;比如gitlab-runner的产物数据&#xff0c;maven的打包依赖数据 #!/bin/bash# 步骤…

如何高效管理自己的时间,可以从这几个方向着手

如果你是上班族&#xff0c;天选打工人&#xff0c;你的绝大多数时间都属于老板&#xff0c;能够自己支配的时间其实并不多&#xff0c;所以你可能察觉不到时间管理的重要性。 但如果你是自由职业者或者创业者&#xff0c;想要做出点成绩&#xff0c;那你就需要做好时间管理&am…

jadx-gui-1.5 反编译工具使用教程 反混淆 Java android 查看签名

JADX&#xff1a;JADX是一个强大的反编译工具&#xff0c;它支持命令行和图形界面操作。除了基本的反编译功能外&#xff0c;JADX还提供了反混淆功能&#xff0c;有助于提高反编译后代码的可读性。 在Android开发和安全分析领域&#xff0c;反编译工具扮演着至关重要的角色。这…

VSCode插件Sort Lines

Sort Lines是一款VSCode中的扩展&#xff0c;可以帮助你对所选文本或整个文件中的行进行排序。可以给你按字母大小排序&#xff08;升序、降序&#xff09;&#xff0c;也可以进行排序去重。而且还能将所有文本打乱顺序。做短文本分类的训练&#xff0c;清洗数据集的时候&#…

Linux系统安全及其应用

文章目录 一、用户账号安全管理1.1 系统账号的清理1.2 对用户账号的操作1.2.1 锁定和解锁用户1.2.2 删除无用账号 1.3 对重要文件进行锁定1.4 密码安全控制1.4.1 新建用户1.4.2 已有用户 二、历史命令管理2.1 历史命令限制2.2 自动清空历史命令 三、设置终端登录的安全管理3.1 …

[Vulfocus解题系列]spring 命令执行(CVE-2022-22947)

环境部署 使用docker部署环境 漏洞等级&#xff1a;高危 3 月 1 日&#xff0c;VMware 官方发布安全公告&#xff0c;声明对 Spring Cloud Gateway 中的一处命令注入漏洞进行了修复&#xff0c;漏洞编号为CVE-2022-22947 Spring官方发布 漏洞描述 使用 Spring Cloud Gate…

InvokeAI学习教程三:换脸

启动InvokeAI&#xff0c;我们先生成一张图&#xff1a; 在正向提示词里输入&#xff1a;Avant-garde couture, tactile textures, vogue aesthetics, vibrant color palette, intricate embroidery details, dramatic silhouettes 生成一张高贵夫人的图像&#xff0c; 或者你从…

android高效读图方式——Hardwarebuffer读图

安卓上有许许多多使用OpenGL来渲染的原因&#xff0c;比方说做特效/动画/硬解/人脸识别等等。渲染完成后如何从gpu中把数据快速读取出来也是高效图像处理中的重要的一环。 相对于glReadPixel的同步读取方式&#xff0c;安卓GLES3.0提供了更高效快速的Hardwarebuffer读图方式&a…

Jenkins的jdk和maven配置

目录 传送门前言一、概念二、JDK的配置三、Maven配置四、环境变量配置五、坑 传送门 SpringMVC的源码解析&#xff08;精品&#xff09; Spring6的源码解析&#xff08;精品&#xff09; SpringBoot3框架&#xff08;精品&#xff09; MyBatis框架&#xff08;精品&#xff09…

隐藏饼图的legend,重写legend列表。

因为要实现的饼图效果较复杂,所以,需要重新写列表。 点击右侧列表的圆点,实现隐藏左侧饼图相应环状。 // 饼图,点击自定义列表,显示和隐藏饼图对应的环状数据<template> <div class="index_div"> <a-spin :spinning="aLoading">&l…

数据保护技巧揭秘:为导出文件添加防护密码的实用指南

一、前言 当涉及到敏感数据的导出和共享时&#xff0c;数据安全是至关重要的。在现代数字化时代&#xff0c;保护个人和机密信息免受未经授权的访问和窃取是每个组织和个人的首要任务之一。在这种背景下&#xff0c;葡萄城的纯前端表格控件 SpreadJS 提供的加密功能为用户提供…

【Java面试】九、微服务篇SpringCloud(上)

文章目录 1、SpringCloud五大组件2、服务注册和发现2.1 Eurake2.2 Eurake和Nacos的区别 3、Ribbon负载均衡3.1 策略3.2 自定义负载均衡策略 4、服务雪崩与熔断降级4.1 服务雪崩4.2 服务降级4.3 服务熔断 5、服务限流5.1 Nginx限流5.2 网关限流 6、微服务监控7、面试 1、SpringC…

电力系统上线测试工具介绍

上线测试 电力系统上线测试工具主要用于在电力系统建设完成后&#xff0c;对系统进行全面的功能和性能测试。这些工具可以模拟各种运行环境和负载情况&#xff0c;以检测电力系统的性能和稳定性。 以下是几种常见的电力系统上线测试工具&#xff1a; 1. 负载测试工具&#x…

高低温光照综合试验整车综合性能步入式环境实验舱

高低温光照综合试验整车综合性能步入式环境实验舱 整车综合性能试验舱主要用于整车高低温存放试验、整车除霜、除雾性能试验、整车冷起动性能试验、整车采暖及制冷性能试验、组合全光谱阳光模拟检测成套零部件或整车在阳光照射下的实验室加速老化性能。高低温光照综合试验整车…

[ICPC2024 Xi‘an I] ICPC2024 邀请赛西安站(7/8/13)

心得 [ICPC2024 Xian I] ICPC2024 邀请赛西安站重现赛 - 比赛详情 - 洛谷 7表示赛时ac了7个&#xff0c;8表示含补题总共ac数&#xff0c;13表示题目总数 题目 M. Chained Lights 打表&#xff0c;发现只有k1是YES //#include <bits/stdc.h> #include<iostream&…

idea解决“源根之外的java文件“的问题

一&#xff0c;问题 idea编辑器打开一些老Spring项目&#xff0c;会出现项目结构解析不正确&#xff0c;最后整个项目的java文件都无法正常运行&#xff0c;显示“源根之外的java文件”。 二&#xff0c;解决 打开File->项目结构 选中模块&#xff0c;然后在右边选中对应的…