SLAMCraft:自主导航机器人DIY(一)如何设计一个SLAM机器人


前言

  本项目的主要目标是设计和开发一个具有SLAM功能的小型移动机器人。通过该项目,我们将深入探讨SLAM技术的核心概念,包括传感器融合、数据处理算法、运动学模型等方面的知识。同时,我们将以实践为主线,引导读者从零开始,逐步完成一个完整的SLAM机器人系统。

一、SLAM简介与项目初心

  SLAM(Simultaneous Localization and Mapping),即建图与导航。
  SLAM机器人是一类拥有自主定位和地图构建能力的智能移动机器人。它们能够在未知环境中实时确定自己的位置并同时构建周围环境的地图。这是一项复杂的任务,因为机器人需要处理来自各种传感器(如激光雷达、相机、惯性测量单元等)的数据,进行数据融合,推断自身位置,同时更新地图。SLAM机器人在许多领域都有广泛的应用,包括自动驾驶汽车、无人机、仓库机器人、服务机器人等。
  我们这里DIY一个SLAM机器人的出发点是,学习SLAM知识、在今后的DIY生涯中使用SLAM技术赋予它一定的智能属性,使其实现自主导航与建图,获得更多的趣味性,同时借助这个项目学习嵌入式与C++相关知识。

二、系统整体方案设计

1.机械结构设计

  出于经济成本与控制简易,这里决定使用普通的橡胶轮胎与步进电机,暂不考虑全向轮与麦克纳姆轮。机器人小车除自身外无其他载荷,因此也无需使用任何减速方案,仅仅使用步进电机通过联轴器直接连接橡胶轮胎即可。如下图所示:520电机即可。
520电机

1.1机器人底盘结构

  矩形底盘:矩形底盘通常比较容易制作,特别是如果你计划使用标准的金属或塑料材料来构建底盘。矩形底盘在稳定性和控制方面表现良好,适合在室内环境中进行导航。
  圆形底盘:圆形底盘具有较高的机动性,能够更容易地旋转和在狭小空间中操作。这种形状对于需要机动性和灵活性的应用可能更合适。
  出于加工经济与方便,这里使用的加工材料是使用亚克力材料。初步决定整个机器人机构为上下两层,下层用于放置电池与STM32控制电路板以及电源模块,上层主要是放置机器人的激光雷达与深度相机。这里使用SOLIDWORKS2021进行机器人的机械设计,下面是我设计的机器人底盘,上下两层之间使用铜柱进行连接。
在这里插入图片描述

1.2运动机构类型与优劣

  机器人采用差速轮结构,两个后面的主动轮和一个前面的从动轮。让我们分析这种机器人的运动机构、运动学模型以及其优势和劣势。
  两个后面的主动轮: 这两个轮子由电机驱动,可以独立控制,允许机器人进行前进、后退、旋转等运动。从动轮不由电机驱动,通常用于支撑机器人的重量和提供稳定性、通常可以旋转,以便机器人能够改变方向。
  这种机构的优劣也很明显。优势是:差速轮底盘通常具有简单的机械结构,后续的运动学建模也会较为简易。机器人可以实现多种运动,包括平移和旋转,因此适用于多种任务和环境。 由于只有三个轮子,机器人通常相对紧凑,适合用于狭窄空间。劣势则是: 差速轮底盘对于越障能力相对有限,特别是在不平坦的地形上,会遇到困难。由于只有一个前面的从动轮,机器人的承重能力可能受到限制。同时差速轮机器人的运动较为复杂,其精确定位可能会受到一定的误差影响。

2.下位机控制系统设计

  我们的目标是设计一个能够控制机器人运动的控制板,能够实现下面的功能:机器人运动控制、传感器数据采集和处理、电池供电和管理、用户界面显示、调试和通信接口。
  为满足以上需求,我提出了以下设计方案:
  使用STM32F103C8T6微控制器作为控制板的核心;配置引脚用于连接电机驱动、MPU6050、编码器、ADC、OLED显示器、LED和串口通信等外围设备;使用开关电源供电模块将12V电压降压到5V和3.3V,以满足不同元件的电源需求;使用电机驱动器模块来为电机提供适当的电压和电流,并添加电池保护电路以防止电池过充和过放;连接外围设备,包括电机、MPU6050、编码器、电池电压分压电路、OLED显示器、LED和串口通信;编写STM32的固件以实现控制、数据采集和通信等功能。

3.上位机组成

  该系统将利用树莓派、激光雷达、深度相机和ROS进行SLAM(Simultaneous Localization and Mapping)建图。
  硬件组成部分:
  树莓派(Raspberry Pi): 作为上位机的核心,树莓派将运行ROS操作系统以及相关的SLAM算法和控制软件。它将负责数据采集、传感器数据融合、建图和路径规划等任务。
  激光雷达: 激光雷达用于获取环境的距离和轮廓信息,是SLAM的重要传感器之一。您需要选择一个ROS兼容的激光雷达,然后编写或使用相应的ROS驱动程序以获取和处理激光数据。
  深度相机: 深度相机用于捕捉环境中的三维深度信息,有助于提高建图的精度。同样,您需要选择一个ROS兼容的深度相机,并使用相关的ROS驱动程序来处理其数据。

4.机器人软件框架

  SLAMCraft整个程序框架采用上下位机分离与分布式设计,上位机负责导航与建图算法以及激光雷达、摄像头的驱动,下位机负责机器人运动控制、编码器与陀螺仪采集、并通过OLED进行显示,分布式的PC负责上位机ROS的程序开发与仿真以规避直接在树莓派开发程序时性能不足的问题。
在这里插入图片描述

4.1上位机设计

  上位机采用了Gmapping(Grid-based FastSLAM)算法进行地图构建,结合Move Base、AMCL以及其他导航算法实现机器人的自主导航。Gmapping是一种基于格子的SLAM算法,通过蒙特卡洛方法实时构建地图,并估计机器人的位置。这个地图由Move Base模块用于路径规划,同时AMCL算法确保机器人的准确定位。在上述的基础上结合多种算法进行机器人导航,并通过可视化工具进行可视化。
  整体方案的优势在于:
  地图构建: Gmapping负责实时构建机器人所处环境的地图,包括静态和动态障碍物。
  路径规划: Move Base利用Gmapping生成的地图,进行路径规划,使机器人能够避开障碍物并实现目标导航。
  实时定位: AMCL算法确保机器人在地图上的准确定位,通过融合传感器数据,使定位更具鲁棒性。
  适应性强: 整合了多种算法,使机器人能够在未知或动态环境中实现高效、鲁棒的导航。

4.2下位机设计

  下位机基于STM32微控制器,使用ucosii操作系统进行任务调度。主要外设包括MPU6050、OLED、BEEP、LED、PWM控制、编码器采集,同时预留两组SPI接口和三个ADC通道。任务调度分为底盘控制、串口通信、OLED显示和其他外设任务。
  在任务分配和外设职责方面,底盘控制任务负责底盘运动控制,包括PWM控制和编码器采集;串口通信任务处理上位机或其他设备的串口通信,实现数据传输和命令交互;OLED显示任务控制OLED显示屏,实时反馈机器人状态;其他外设任务管理BEEP、LED等外设,涉及状态指示与报警功能。
  外设接口及资源规划方面,MPU6050用于获取姿态信息,OLED用于实时显示状态,BEEP用于发出声音信号,LED提供状态指示,PWM控制与编码器采集用于底盘电机的速度控制与位置反馈,同时预留两组SPI接口和三个ADC通道。
  设计优势包括ucosii操作系统的实时性与并发处理,模块化设计降低系统复杂性,资源充分利用通过PWM、编码器、SPI等,用户交互友好通过OLED任务,以及预留接口提供扩展性。

4.3上下位机通信

  串口通信是一种常见的方式,用于实现可靠的数据传输。串口一用于系统调试,传输调试信息、系统状态和错误日志,支持调试命令,通信协议为ASCII文本或二进制格式。串口二专为ROS通信,传输传感器数据、机器人状态信息,接收任务指令和路径规划信息,通信协议采用ROS消息协议或ROS服务调用。在实施时需考虑通信稳定性、带宽和数据格式,确保有良好的错误处理机制,并遵循ROS标准以实现无缝集成。

5.控制板的硬件设计

  控制板的主要目的是将上述的硬件部分进行集成,这个部分我们放在最后,这个部分对于嵌入式软件的学习来说只是一个锦上添花的作用。

本章总结

  上述是SLAMCraft项目的总体设计方案部分,接下来的系列文章我会继续更新这个项目的进展并第一时间和粉丝们分享。关注十六师兄,了解更多嵌入式知识。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: 自己动手制作一台SLAM导航机器人是一项非常具有挑战性的项目,需要一定的机械、电子、计算机编程等综合技能。首先需要设计机器人的整体结构,包括底盘、轮子、控制电路等等,并进行适当的加工和组装。 其次,机器人需要配备激光雷达、相机等传感器,以获取周围环境的数据,并使用SLAM算法实现地图构建和自主导航。这涉及到深度学习、计算机视觉等技术的应用,需要有一定的专业知识和实践经验。 最后,机器人的控制和调试也是项目中非常关键的一步。需要对机器人的控制器编程,以实现自主导航、避障等功能,并不断对其进行调试,使其性能最优化。 自己动手制作一台SLAM导航机器人是一项极具挑战性的任务,但也会带来非常有趣和有意义的经历。能够通过自己的努力和创造力,实现一个自主导航机器人,不仅是一种技术上的成就,更体现了自己不懈追求的精神和自我超越的力量。 ### 回答2: 自己动手做一台SLAM导航机器人需要一定的相关知识和技能,并且需要进行步骤繁琐的操作。首先需要了解SLAM技术原理、机器人硬件结构、编程语言和相关软件等基础知识。其次需要购买所需的硬件器材,包括一个基于ROS系统的移动底盘、LIDAR传感器、IMU传感器、控制器、电源和其他所需材料。接着需要进行硬件组装和连接,把所有的硬件器材和传感器按照设计要求进行组装和连接。 接下来需要完成编程部分,对机器人进行代码编写和程序调试。编程需要涉及ROS系统、C++等多种编程语言,需要进行程序设计、实现、调试,以确保机器人顺利工作,并能实现SLAM导航功能。此外,还需要进行传感器校准,以确保机器人获取到的传感器数据准确无误。 最后,需要进行实地测试和调试,检验机器人导航、避障等功能是否正常运作。整个过程复杂繁琐,需要耗费大量时间和精力。自己动手做一台SLAM导航机器人可以锻炼自己的技能和动手能力,同时也可以满足个人的爱好和需求,但需要投入足够的精力和耐心。 ### 回答3: 建造一台 slam 导航机器人需要计划、材料和技能。首先,您需要确定您的机器人将运行的环境类型,并为其选择合适的传感器和控制器。一般来说,您需要使用激光雷达扫描环境,并安装摄像头和微控制器等设备以控制机器人的运动。其次,您需要设计、打印或制造机器人的外壳,并组装电气元件和机器人控制器。最后,您需要编写软件以使机器人能够感知其环境、规划路径并导航至目标。 然而,这并不是一项简单的任务。要建造高效的 slam 导航机器人需要一定的电子、机械和编程技能。因此,新手建议始于初级项目,例如制造追踪线的机器人或机械臂。这些项目将帮助您熟悉机器人技术,同时也提高了您的技能和信心,为进一步建造 slam 导航机器人做好准备。 如果您决定 DIY 一台 slam 导航机器人,提前做好计划和准备工作很重要。购买正确的材料、学习机器人编程和构建的技能,是这个过程中最关键的部分。当您完成了这个项目时,您将拥有一台能够感知、规划和导航机器人,并且这个项目还能提高您的技能并激发您的创造力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十六师兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值