【ROS】详细讲解:800元打造一个SLAM小机器人(1)【硬件篇】

2023-05-16


首先声明本次Project Credit To   WordPress Sunjik, 在硬件选择上和部分代码基本参考了sungjik。

这里权当是对sungjik的项目的一个实践和转译,加上自己的一些心得。


首先来看需要的硬件清单:


1. Arduino Mega 2560 + Adafruit MotorShield V2.0


需求分析: 

我们首先需要一个能用电脑控制DC Motor的板子,这个板子能连接电脑也能连接Motor,并且最好能很方便的进行编程。Arduino无疑是个很好的选择。虽然不见得是便宜的方案,但考虑到要和ROS进行数据交互,而ROS有个很方便使用的rosserial库能直接做到和ROS和Arduino之间的通信,因此Arduino乃不二选择。另外为了驱动Motor我们需要装Aruidno上的驱动板,这里选用的型号是Adafruit MotorShield V2.0,用起来简单方便。


Note:

 只是在购买Arduino时发现网上大部分给的都是UNO这种型号。这里也是在sungjik的博客中没有说得太明白的一点,也是让我卡住了很久的一点。不得不说卡在硬件接口上的问解决起来真的比代码编程要烦许多,因为这些问题很多时候并没有好的调试方法。 博主一开始选用的Arduino UNO,看似一切工作正常,只是在烧到Arduino板子上时显示动态内存占用了95%,出现的问题是Motor只能以一个初始化的转速转动,实时调节PWM并不能改变转速。这里博主尝试了很多方法都没有解决这个问题,最后考虑到内存占用量也过大,就直接换了计算能力和内存量都更大的Arduino Mega 2560,Problem solved。





2.DC Motor

需求分析:

Motor的选择上需要注意的是,首先我们需要做闭环的PID控制,也意味着需要反馈,即实际转速。另一方面之后的里程计(Odometry)的发布也需要实际转速信息,所以我们需要一个有编码器的Motor。这里Motor直接的淘宝了平衡小车之家的带编码器的直流电机和轮胎。


Note:

值得注意的是最好是买一个自带编码器(encoder)的电机,不然买了一个裸电机再去装编码盘会比较麻烦。博主一开始就买了个没带编码器的,发现不能反馈转速。这里编码器的作用主要是利用AB两级的相位差来计算电机的实际转速。

                                    

                                                                                             (带编码器的Motor)


3.微软Kinect

需求分析:

作为SLAM的RangeFinder Sensor,激光雷达(LiDAR)精准,但是太贵(买个便宜的也得800),声纳(Sonar)便宜但噪音又太大。用图像来当测距传感器则是一个折中的好办法,另外有了图像摄入我们也能在SLAM之外后续添加一些基于图像与视觉的功能。在博主看来比较适合的摄像头有两个, 微软的Kinect和 因特尔的 RealSense。纠结了一阵,RealSense 在面部识别什么的功能上更强大点,但为了控制成本还是选择了Kinect(一代),在咸鱼买了个二手的价格500元。Note:Kinect 在使用中有一个小麻烦的地方,就是用其本身是需要差插座充电的,这很大的限制了小车的移动性。根据ROS 官网上提供的方案,需要把适配器的一段减掉,然后可用3S电供电。 具体见 点击打开链接。这个Tutorial里说由于Kinect是12V的参考电压供电所以要自己做一个regulator,(3S电池一般是11.1V),而sungjik也用了一个DC-DC converter,而博主想偷个懒直接用11.1v的3S电池黑Kinect供电,发现并没有问题。 剪线效果如下:(这里注意绝缘胶带分辨缠两极线,不要直接缠在一起了)




4.两台装有Ubuntu 14.04 和 ROS (包括Gmapping package)的笔记本。

这里是推荐两台,一台用于远程控制和查看实时图像和地图信息,另一台放在小车上跑用于连接和管理各个硬件单元。



5.安卓手机

 调用手机的Gyroscope传感器,在安卓手机里装一款叫HyperIMU的软件,可以很方便的将手机中的Gyroscope的数据信息I以UDP的格式发布到WIFI网络, 然后将笔记本设置到同一子网接收到数据后就能用ROS来Publish和Subscribe了。这里因为博主自己参考的sungjik的方案,并且自己也是安卓手机,对于苹果手机的发布方案暂时不详。Note:HyperIMU 这个软件似乎在国内手机市场上下不到,博主是翻墙用GooglePlay下的。


6.3S 电池两个

一个用来给Arduino驱动马达供电,一个给Kinect供电。



7.关于小车的Frame

和在装修市场买了两大块双层实木板,到朋友在湖南大学实验室的小工坊里规划了下尺寸裁锯了木板,然后朋友灵性想到用长螺钉加上螺帽打孔后支撑第二层,结构如下图。一起制作的过程其实挺有趣的, so much fun.





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

【ROS】详细讲解:800元打造一个SLAM小机器人(1)【硬件篇】 的相关文章

  • 跟涛哥一起学嵌入式 第03集:嵌入式要从u-boot移植学起?

    大家好 xff0c 我是涛哥 xff0c 欢迎阅读 跟涛哥一起学嵌入式 第3集 俄罗斯仲夏夜 xff0c 世界杯依旧如火如萘 球场上 xff0c 夕阳下 xff0c 梅西没落的身影 C罗的黯淡离场 xff0c 并没有打击大家太多的热情 战火
  • 跟涛哥一起学嵌入式 第08集:ARM跳转指令深度剖析

    跳转指令 顺序 选择 循环是构建程序的基本结构 xff0c 任何一个逻辑复杂的程序基本上都可以由这三种程序结构组合而成 而跳转指令 xff0c 则在子程序调用 选择 循环程序结构中被大量使用 程序的跳转是如何实现的呢 xff1f 在了解这个
  • 跟涛哥一起学嵌入式 13:嵌入式学习三剑式

    前言 学习一门技术犹如修炼一门武功 在成为高手的路上 xff0c 无数英雄豪杰不尽相同 xff0c 按照武侠小说的套路 xff0c 大侠之所以成为大侠 xff0c 绝对不可能平平淡淡 xff0c 肯定有一段开挂的传奇人生 xff1a 要么被
  • 【C/C++】- STL(ing)

    目录 一 概述 二 模板 三 迭代器 1 什么是迭代器 例 1 为数组容器 链表容器编制共同显示函数 2 进一步理解迭代器 3 STL迭代器 xff08 1 xff09 输入迭代器 xff1a xff08 2 xff09 输出迭代器 xff
  • OpenStack 运维异常问题处理小结

    在OpenStack云平台运维过程中会遇到创建虚机 创建磁盘 删除磁盘和虚机过程中出现相关问题 xff0c 本篇针对运维过程中的一些问题做一些小结 xff0c 希望可以给云运维的你们提供一些帮助 问题1 创建磁盘提示error报错 root
  • 续集来了!我让 GPT-4 用 Laf 三分钟写了个完整的待办事项 App

    书接前文 xff0c 上篇文章我们教大家如何三分钟时间用 Laf 实现一个自己的 ChatGPT 一觉醒来 xff0c GPT 4 已经发布了 xff01 GPT 4 实现了真正的多模态 xff0c 可以把纸笔画的原型直接写出网页代码 读论
  • 【EtherCAT理论篇】二、EtherCAT工作原理

    1 EtherCAT系统组成 EtherCAT是一种实时以太网技术 xff0c 由一个主站设备和多个从站设备组成 主站设备使用标准的以太网控制器 xff0c 具有良好的兼容性 xff0c 任何具有网络接口卡的计算机和具有以太网控制的嵌入式设
  • 【EtherCAT分析】一、EtherCAT从站硬件分析

    1 EtherCAT从站控制芯片 EtherCAT从站控制芯片ESC是实现EtherCAT数据链路层协议的核心 xff0c 它处理EtherCAT数据帧 xff0c 并提供数据接口 从站控制器通常都有一个内部的DPRAM xff0c 并提供
  • 【EtherCAT实践篇】六、更改XML,增加输入输出变量

    目的 xff1a 在EtherCAT开发板上IO程序 xff08 基于SSC的IO通讯 xff09 基础上进行修改 xff0c 实现16路拨码开关输入 xff0c 以及16路LED输出 EtherCAT从站增加变量的操作包括两个部分 xff
  • 【SOEM主站】一、SOEM主站环境搭建及连接板子测试

    目的 xff1a 在windows环境下搭建SOEM主站 xff0c 并利用SOEM自带例程测试EtherCAT板子从站板通讯效果 1 SOEM主站环境搭建 xff08 1 xff09 安装VS xff1a 我这里安装的是VS2017 xf
  • 【EtherCAT实践篇】七、更改XML示例2,增加16位模拟输入

    目的 xff1a 在EtherCAT开发板上IO程序基础上增加一个16位的变量mytest xff0c 用于传输模拟量发送给主站 1 EtherCAT增加变量说明 在实际使用中 xff0c 可现有程序的输入输出变量可能不能直接满足实际需求
  • 【EtherCAT实践篇】八、更改XML示例3,增加16位模拟DAC输出

    目的 xff1a 在EtherCAT开发板上IO程序 xff08 基本IO通讯 基于SSC xff09 基础上进行修改 xff0c 增加一路模拟量输出 xff0c 并输出给DAC管脚 由于STM32F405底板具有DAC输出功能 xff0c
  • Pixhawk固件PX4之串口通讯

    1 目的 为进一步扩展pixhawk的接口及功能 xff0c 通过pixhawk现有接口 xff08 串口 I2C等 xff09 连接外部设备来实现 xff0c 本节内容主要介绍串口通讯方式 2 测试平台 硬件 xff1a pixhawk
  • 手机充电原理分析及问题总结

    xff08 1 xff09 充电流程介绍 xff1a 当充电器插入时 xff0c 亦即为PMIC充电模块提供了Vcharge电压 xff0c 这时会产生一个充电中断信号到CPU xff0c 通知CPU现在已经进入充电状态 CPU开始启动如下
  • 串口接收不定长数据的几种方法

    串口作为单片机开发的一个常用的外设 xff0c 应用范围非常广 大部分时候 xff0c 串口需要接收处理的数据长度是不定的 那么怎么才能判断一帧数据是否结束呢 xff0c 今天就以STM32单片机为例 xff0c 介绍几种接收不定长数据的方
  • 删除分节符的技巧

    WORD中删除分节符有这样的规定 xff1a 如果要删除分节符 xff0c 只要把光标移动到该分节符上 xff0c 按Delete键即可 但是要注意该分节符前面的文字将合并到后面的节中 xff0c 并且采用后者的格式设置 我就不知道天杀的微
  • 虚机创建异常报错No valid host was found,There are not enough hosts available

    虚机创建异常 xff0c 使用nova show 虚机ID提示fault报错信息 xff1a No valid host was found xff0c There are not enough hosts available 检查所在宿主
  • vuzzer 具体原理解析

    目录 1 安装 vmware 15 01环境下安装 xff1a 2 vuzzer使用说明 3 vuzzer原理 3 1权重文件以及有着cmp信息的文件生成 3 2 vuzzer种子生成 xff0c 变异原理 3 2 1 runfuzz py
  • C++ unordered_set

    目录 1 定义 2 基本的函数 2 1 unordered set构造 2 2 添加新的元素 注意无法插入相同元素 2 3 查找元素 2 4 查找桶接口 2 5 观察器 2 6 清除元素 2 7 其他函数 1 定义 unordered se
  • clang 10 介绍——sanitizerCoverage

    1 Introduction llvm内置了一个简单的代码覆盖率检测 xff08 sanitizercoverage xff09 它在函数级 基本块级和边缘级插入对用户定义函数的调用 提供了这些回调的默认实现 xff0c 并实现了简单的覆盖

随机推荐