开源自主导航小车MickX4(十)总结

2023-05-16

开源自主导航小车MickX4(十)总结

  • 1 博客回顾
  • 2 存在问题
  • 3 学习建议
  • 4 后续计划

开源自主导航小车MickX4 这个系列教程中,我们一共分为了十个博客部分进行了讲解差速小车的导航。由于一些的原因,这里有一部分我们没有仔细去深入研究其中每一个部分的算法内容,只是简单的调用和理解了这个算法模块的输入输出接口。比如说这里用到的激光SLAM(gmapping,cartographer LeGO-LOAM),还有后续的全局规划算法和局部规划算法也只是调了一下参数,没有对源码进行分析。

在这里插入图片描述

1 博客回顾

最早针对先锋机器人底盘上实现了自主导航,产生了如下的几篇博客。当时在先锋机器人的底盘上实现了自主导航。

  • 自主导航小车实践(一)

  • 自主导航小车实践(二)

  • 自主导航小车实践(三)

  • 自主导航小车实践(四)

后来由于项目需要,产生了自己制作ROS底盘的项目。因此制作了5辆麦卡纳姆轮的底盘,这个过程编写成为了以下两篇博文

  • ROS麦克纳姆轮底盘制作(上)

  • ROS麦克纳姆轮底盘制作(下)

后来想制作在室外运行的自主导航小车,因此确定了Mick 这个项目代号。开始使用四轮差速小车模型和16线的3D激光雷达作为传感器,导航框架是基于move_base进行修改的。

项目开源的代码中支持麦克纳姆轮和四轮差速底盘,该开源项目从搭建机械部分开始,分享底层的嵌入式控制,上层的建图和导航部分,最终实现A点到B的自主导航。 当前地址的代码为麦克纳姆轮和四轮差速ROS底盘的ROS导航节点包,与 mick_robot_chasiss 代码(底层控制代码)配合使用,更多的信息可以参考博客-熊猫飞天

  • 开源自主导航小车MickX4(一)ROS底盘硬件

  • 开源自主导航小车MickX4(二)ROS底盘运动控制

  • 开源自主导航小车MickX4(三)底盘ROS节点

  • 开源自主导航小车MickX4(四)底盘URDF模型

  • 开源自主导航小车MickX4(五)gmapping建图

  • 开源自主导航小车MickX4(六)cartography 2D 建图

  • 开源自主导航小车MickX4(七)cartography 3D 建图

  • 开源自主导航小车MickX4(八)LeGo-LOAM 室外3D建图

  • 开源自主导航小车MickX4(九)基于move_base 的自主导航框架

  • 开源自主导航小车MickX4(十)总结与展望

2 存在问题

  • 1)里程计不准
    室外的4轮小车或者是6轮的小车,转向是依靠轮子和地面打滑实现转向的。因此单独使用轮子转速换算得到的偏航角是不准的,需要使用外置的IMU来计算偏航角。在测试中我们还发现,低成本的IMU(MPU9250、MPU6050这类几十块钱的IMU)在使用前必须要校准磁力计,安装位置要远离电机、铁块(15cm以上),否则会影响偏航角的输出值。
  • 2)电机选型
    最好是选择无刷电机,带总线通讯协议的。在做车的过程中我们选出了大疆的M3508电机和安普斯的轮毂电机两种电机,M3508扭矩在3.5牛米左右,安普斯的电机最大有5牛米的。这两款电机都不错,值得推荐给大家。
  • 3)车辆布局
    我们的小车采用了四个电机,也就是每个轮子一个电机,暂时叫做方案A。对应的还有一种是理论同步带把一侧的轮子用同步带动,再利用一个或者多个电机带动同步带,把这种方案叫做方案B。 方案A的机械结构简单,安装方便,只需要一个联轴器就可以吧轮子相连。缺点是,四个轮子的速度会不一样,造成这种现象的原因是,在坑洼路面和上下坡的时候每个轮子的受力不同,如果我们四个电机都是用的同一个PID参数,那么此时轮子的速度会不同,导致轮子滑转,对里程计产生误差。 方案B在结构上会比方案A复杂一点,但是可以保证机器人左右两侧的轮子的速度是一样的。这种结构在先锋机器人上有应用。
  • 4)通讯接口
    这里的通讯接口主要是指单片机底板和工控机的通讯。通常我们使用232来连接单片机和工控机,考虑到数据量后期可能比较大,我们尝试过使用网口来连接,所有的数据汇聚到中心交换机上,然后工控机只需要一根网线连到交换机就可以实现和所有传感器通讯。这种方式接线起来比较简单,使用POE供电的交换机,连供电问题都解决了,实际使用中发现这个实时性不太好,也就是从工控机到单片机发送控制命令的时候,由于网络环境可能会产生阻塞的问题,不能保证通讯延时。

3 学习建议

  • 1)先使用成品底盘
    根据我自己学习的经验。大家如果是初学的话,最好还是先用一个成品的底盘(比如,turtlebot、autolabor、先锋机器人和kuboki之类的)。先用成品的底盘调通导航程序,这样如果你对自己搭建底盘感兴趣,你在调试的时候起码可以保证上层导航算法是没有问题的。

  • 2)底盘选型
    在学习的过程中,我们发现两轮差速底盘的里程计精度比起四轮差速要高很对(四轮是依靠轮子和底盘滑动实现转向的)。但是室外环境,两轮底盘不如四轮底盘平稳。而里程计误差问题通过额外的算法来补偿里程计,比如,IMU测量姿态角,把Yaw补偿轮子打滑,俯仰角用于计算高度。

  • 3)底盘控制方案
    现在的伺服电机都支持总线式的电机,一些工控机也有IO接口。因此也有方案直接把底盘的运动控制放在了工控机里面,也就是在ROS底盘节点里面计算速度闭环,直接通过总线下发,控制电机调速。与之对比的方案就是我们采用的利用STM32来实现底盘的运动控制。这两种方案我们都在不同的项目上使用过,单片机方案成熟度高,但是针对大功率电机需要对控制板做电磁屏蔽。工控机方案好调试,可视化数据比较方便,但是实时性差一点,此外类似于线程阻塞的坑(别问我咋知道的())。对于小车还是推荐单片机方案。

  • 4)学习方法
    遇到问题别自己一直想,多加群交流,加群,加群

  • 5)知识点
    从头制作一个ROS小车,然后实现自主导航。需要设计到ROS导航层嵌入式底层一些拧螺丝的知识。嵌入式的话可以去网上找一个配有视频教程的开发板进行学习,后期再自己制作PCB,美化一下。ROS导航的话可以网络上有很多的博客(入古月居大佬的教程)

4 后续计划

当前的小车教程,也只能算是走通了整个流程,算是一个入门教程吧。在实际的项目中还需要针对环境去微调参数和,但是基本上小车是可以动起来的。实际上小车的文档在此之前就已经写完了,中间由于一些项目上的事情去忙其他的了,最近把文档整理了一遍(也算是复习了),使得它展示的更加有逻辑性一点。

由于自己的研究方向是视觉SLAM,因此在后续的任务中将继续开源另外一个项目,计划是实现基于视觉的导航。针对在激光导航中遇到的问题,后期可能会调整一些使用4轮8电机的全驱动结构的底盘,提升里程计的精度问题。新的视觉导航框架也会合并到Mick这个项目代号中去。

最后感谢向我反馈BUG的网友们,感谢大家的支持。

欢迎大家点赞在评论区交流讨论(cenruping@vip.qq.com) O(∩_∩)O

或者加群水一波(1149897304)
在这里插入图片描述

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

开源自主导航小车MickX4(十)总结 的相关文章

  • 自动化运维为什么是必须的?

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 运维团队负责最大限度提高效率 降低成本 xff0c 这也意味着他们往往承受着巨大的压力 xff0c 需要解决在不增加员工的情况下 xff0c 最大限度产出价值的问题 达成这
  • 如何理解事件溯源

    在近期举行的PHPDublin见面会上 xff0c 来自DynamicRes的架构师Barry Sullivan被问到 什么是事件溯源 xff0c 作为对这个问题的回答 xff0c 他在博客上写下了这篇文章 xff0c 详细解释了什么是事件
  • C语言 · 删除数组中的0元素

    算法提高 6 9删除数组中的0元素 时间限制 xff1a 1 0s 内存限制 xff1a 512 0MB 编写函数CompactIntegers xff0c 删除数组中所有值为0的元素 xff0c 其后元素向数组首端移动 注意 xff0c
  • 解决com.intellij.openapi.project.IndexNotReadyException: Please change caller according to com.intelli...

    File gt Invalidate Cache and Restart
  • PyShark入门(2):FileCapture和LiveCapture模块

    原文地址 xff1a http zodiacg net 2016 07 in 本系列文章译自thePacketGeek的系列文章 原创翻译 xff0c 转载请注明出处 PyShark中进行数据包分析的两个典型方法是使用 FileCaptur
  • 使用ctdb+samba+glusterfs搭建NAS集群系统

    1概述 本文介绍使用开源软件ctdb 43 samba 43 gluster搭建NAS集群系统 1 1 使用的开源软件介绍 1 glusterfs glusterfs是一个开源的分布式文件系统 xff0c 只适用于大文件存储 xff0c 存
  • react中优雅使用svg矢量图

    icon图标可以有很多形式 比如说CSS Sprite 引用字体图标 纯css 简单的icon 等等 优缺点这里不在赘述 xff0c 自行google之 下面就进入正题说说今天的主角svg 1 svg的发展历史 2001年9月4日 xff0
  • 使用自制相机运行 VINS-Mono

    使用自制相机运行VINS Mono 1 相机与IMU标定2 自制相机测试3 运行效果参考资料 1 相机与IMU标定 VINSmono的安装这里就省略了 xff0c 可以参考作者的github网页 2 我所使用的是ZED相机和Xsens IM
  • 标准正态分布变量的累积概率分布函数

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 最近有个期权项目 xff0c 计算理论价时需要使用标准正态分布变量的累积概率分布函数 xff0c excel中可以通过normsdist函数得到该结果 xff0c 但是项目
  • spring boot 中 @ConditionalOnMissingBean和@ConditionalOnBean注解注意事项

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 关于使用 64 Bean注解注入bean导致ConditionOnMissBean和 ConditionOnBean 注解有时候会失效的问题 文档上提示 xff0c 需要注
  • vscode左侧文件不同颜色标识含义

    代码里的左侧颜色标识 红色 xff0c 未加入版本控制 刚clone到本地 绿色 xff0c 已经加入版本控制暂未提交 新增部分 蓝色 xff0c 加入版本控制 xff0c 已提交 xff0c 有改动 xff1b 修改部分 白色 xff0c
  • 读取本地文件转化成MultipartFile

    介绍 现在有个上传文件功能 xff0c 需要将文件上传到oss上 xff0c 但是文件有点多 xff0c 于是使用接口进行上传 但是需要上传文件转换为MultipartFile类型文件进行上传 主要代码 添加pom文件 lt depende
  • 桌面上嵌入窗口(桌面日历)原理探索

    摘要 今天在QQ群里有人问怎样实现将自己的窗口嵌入桌面 xff0c 让它和桌面融为一体 xff0c 就像很多桌面日历软件那样 阅读全文 Richard Wei 2012 05 03 22 07 发表评论 转载于 https www cnbl
  • Git中分支merge和rebase的适用场景及区别

    几乎所有的版本控制工具都有branch功能 xff0c branch主要用于以下几个场景 xff1a 1 xff0c 控制产品OEM 基本上做产品 xff0c 不同的客户都会提出多种不同特性需求 xff0c 最简单的例子就是LOGO和标题完
  • sass安装与教程

    首先下载ruby http dlsw baidu com sw search sp soft ff 22711 rubyinstaller V2 2 2 95 setup 1439890355 exe 安装时注意勾选一下选项 安装完ruby
  • 集成学习原理小结

    集成学习 ensemble learning 可以说是现在非常火爆的机器学习方法了 它本身不是一个单独的机器学习算法 xff0c 而是通过构建并结合多个机器学习器来完成学习任务 也就是我们常说的 博采众长 集成学习可以用于分类问题集成 xf
  • 这款APP明确告诉你,无人机在什么地方可以飞

    美国联邦航空管理局 xff08 FAA xff09 为无人机管制推出了一个新的应用 B4UFLY xff0c 用来向用户显示无人机飞行的合法范围 关于如何有效的对无人机飞行进行管制 xff0c 已经是老生常谈的问题了 xff0c 除了制定相
  • 什么是委托?为什么要使用委托?什么是事件?

    1 什么是委托 xff1f 首先声明一个委托 xff1a public delegate string IsLengthFive string s 下面写几个方法 xff1a public string DoWork string a pu
  • 读取多超声波传感器

    读取多超声波传感器 1 背景2 使用教程2 1 接线说明2 2 上传协议 3 ROS节点使用3 1 下载与配置3 3 常见问题 无串口权限 4 更新程序参考资料 该模块是一个开源模块 xff0c 并提供了配套的ROS节点 xff0c 接收串
  • 系统级性能分析工具perf的介绍与使用

    测试环境 xff1a Ubuntu16 04 43 Kernel xff1a 4 4 0 31 系统级性能优化通常包括两个阶段 xff1a 性能剖析 xff08 performance profiling xff09 和代码优化 性能剖析的

随机推荐