【大一立项】如何亲手搭建ROS小车:硬件和软件介绍

2023-11-08

本次博客将详细介绍上篇博客中提到的ROS小车的硬件和软件部分。
由于十一实验室不开门,所以部分代码还没有上传到Github。

下位机

下位机使用Arduino(因为大一上刚学完用Arduino做循迹小车),其实Arduino作为ROS小车的下位机已经够用了,毕竟主要功能都是在上位机上跑的。

在这里推荐使用Arduino mega2560,具有6路中断,以后想做3轮小车也可以使用。淘宝50~300元左右:
在这里插入图片描述
在这里插入图片描述至于选择正版还是盗版那就仁者见仁智者见智了,我买的正版,因为感觉正版稳定一点,而且可以报销。

Arduino主要作用是读取编码器信息传给树莓派,并且接受树莓派的速度信息提供L298N驱动电机。我做的小车有点重,感觉快赶上小型AGV了,电机功率也相应很大,所以找到一款大概的L298N:
在这里插入图片描述
代码部分可参考Github上的项目ros_arduino_bridge自行修改,大概修改部分有端口和PID个数等,因为电机原因,如果对两个电机都用同一个PID可能会导致走不了直线。当然也可以参考我的Github:Magical-E(后期会把PC、树莓派、Nano的代码都放上去)。

代码主要架构为通过串口通讯树莓派和Arduino互相发送字符串来获取信息,大家可以自己看看,很简单的。

上位机

树莓派

最开始是单纯打算用树莓派+Arduino做的,但后来发现树莓派性能有点差,就用的PC跑SLAM和导航,又想用深度摄像头玩目标检测和VSLAM,就买了个Jetson Nano。三个设备通过ROS_IP进行主从机通信。相关教程以ROS主从机通讯为关键词百度就行。在主从机通讯过程中要记得同步时间,不然有些包会报错,推荐使用ntp来同步时间。

树莓派的主要功能就是通过和Arduino串口通讯获得编码器信息,然后将编码器积分并发布Odom(发布功能在ros_arduino_brdige中实现)。但是由于编码器积分会存在累计误差,所以我还加入了IMU来和Odom扩展卡尔曼滤波来优化位姿信息(在robot_pose_ekf中实现)。具体方法是在ros_arduino_bridge中把Odom的发布取消,并加入一组协方差及判断,然后将IMU信息的topic映射到robot_pose_ekf所需要的话题即可发布新的话题odom_combined。实现效果为机器人走直线的时候主要依赖编码器,转弯时主要依赖IMU。

我使用的IMU是GY951,是ROS小课堂群主推荐的,使用串口通讯协议,可以直接通过USB转TTL模块插在树莓派上,而不是还要加个Arduino之类的处理数据。
在这里插入图片描述
在这里插入图片描述而且碰巧的是它和某品牌出品的IMU芯片一样(手动滑稽),所以可以直接用某品牌的代码来处理数据。GitHub地址,具体操作参考ROS小课堂公众号。

树莓派端的其他功能还有:手柄控制、激光雷达驱动,这些功能百度能很快找到操作步骤,在此就不一一介绍了。只介绍一下我使用的激光雷达和手柄:
在这里插入图片描述
在这里插入图片描述激光雷达使用思岚的rplidar A1,是ROS小车中经常使用的廉价激光雷达。手柄使用罗技的F710,大佬们都用这款,说能用很多年。两个都在ROS中有相关的驱动包。

Jetson Nano

大概是三月份左右Jetson Nano发售了,大家都很激动,我也趁搞立项买了一个?

板子的功能还算强大,具体参数参考淘宝。

Jetson Nano端实现的功能有:驱动深度摄像头、KCF跟踪、YOLO检测。因为时间有限,还有太多想实现的地方没能实现?

使用的深度摄像头是乐视体感摄像头,因为它其实用的是奥比中光Astra Pro的模组,而且因为某些原因现在闲鱼上很便宜。
在这里插入图片描述
但这款摄像头不能直接使用,因为直接用奥比中光的ROS驱动不能同时输出彩色图和深度图,我就用UVC输出的彩色图,具体方法参考我的CSDN博客:【已解决】奥比中光摄像头不能同时显示深度图和彩色图

至于KCF跟踪我用的是大佬写好的项目:tracker_kcf_ros,但是做了一些修改,因为大佬用的是Kinect V1。具体怎么修改就不详细说明了,大家读读源码就知道了。

YOLO检测部分用的darknet_ros,darknet框架还是很方便啊,几乎不用怎么操作就能搭建好环境。首先要确保装好显卡驱动、CUDA和CUDNN,Nano中自带好了CUDA和CUDNN,只需要在bashrc中开启即可。

PC

电脑端开始是做仿真,后来发现树莓派性能不太行后也跑SLAM和导航等。

仿真用过Stdr和Gazebo,一个二维一个三维。其实如果只做导航方面的仿真Stdr已经够用了,而且可以添加多个机器人还有超声波等传感器。Gazebo大家应该很熟悉了,是一款很强大的仿真软件,但比较吃内存。至于需要哪一个就看需求了。

小结

硬件及软件部分大概就是上面这么多,看起来挺少的,但其实花在上面的时间并不少?因为从装虚拟机、装ROS(虚拟机崩)到装双系统、装显卡驱动、再次装ROS、apt-get包的依赖错误、ROS中各种编译错误、各种库的安装、cmake语法……算了不列举了。。。反正有太多太多的坑要爬了,除了软件,硬件也有很多坑要爬。所以其实我建议如果没这么多时间而且足够有钱,可以直接买一个小车,这样可以把更多精力花在更重要的知识上。当然如果刚入门,想要从机械、电控到软件全方位地了解制作一个机器人的步骤,做一台ROS小车也未尝不是一个合适的选择。

资源

整理好树莓派、Jetson Nano以及PC的源码后,我会放在我的Github上面,大家有需要可以自取。

另外在学习ROS的过程中,我搜集了一些资料,包括ROS、机械臂、激光SLAM、视觉SLAM的教学视频,可以免费提供给大家,如有需要私信我即可。

另外在学习ROS的过程中,我搜集了一些资料,包括ROS、机械臂、激光SLAM、视觉SLAM的教学视频,可以免费提供给大家,如有需要加百度网盘:无处灯火

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

【大一立项】如何亲手搭建ROS小车:硬件和软件介绍 的相关文章

  • 二.全局定位--开源定位框架livox-relocalization实录数据集测试

    相关博客 二十五 SLAM中Mapping和Localization区别和思考 goldqiu的博客 CSDN博客 二十五 SLAM中Mapping和Localization区别和思考 goldqiu的博客 CSDN博客 基于固态雷达的全局
  • Ubuntu18.04安装pcl(过程/坑记录式教程)

    Ubuntu18 04安装pcl 1 下载pcl 2 安装依赖项 3 编译 4 安装 5 网上教程说要安装QT5和VTK 但按照本文的 本文记录了安装时出现的问题 出错的安装命令也记录了 建议浏览一遍再参考 不要错用了错误的指令 1 下载p
  • 树莓派下opencv3.4.0的安装与错误处理

    1 opencv3 4 0的下载 1 可以在树莓派的终端界面通过wegt命令下载 但下载速度可能很慢 终端输入下列代码进行下载 cd home pi Downloads wget https github com Itseez opencv
  • BLAM跑自己的数据包无法显示全局点云地图解决(速腾聚创RS-LiDAR-16 雷达 )-SLAM不学无术小问题

    BLAM算法跑自己的数据包无法显示全局点云地图解决 适配速腾聚创RS LiDAR 16 雷达 提示 本文笔者使用环境Ubuntu18 04 ROS melodic版本 首先放一个效果链接 由b站up VladimirDuan上传 非官方 官
  • openwrt用git https错误:fatal unable to find remote helper for ‘https‘

    opkg update opkg remove git opkg install git http opkg install ca bundle
  • 最快实现一个自己的扫地机

    作者 良知犹存 转载授权以及围观 欢迎关注微信公众号 羽林君 或者添加作者个人微信 become me 扫地机介绍 扫地机器人行业本质是技术驱动型行业 产品围绕导航系统的升级成为行业发展的主旋律 按功能划分 扫地机器人分为四大系统 即导航系
  • 服务数据的定义和使用

    1 自定义数据服务 在包下创建srv文件夹 在文件夹下创建Person srv 在Person srv下输入以下内容 代表数据类型 string name uint8 age uint8 sex uint8 unknown 0 uint8
  • 玩转树莓派 一、为你的树莓派烧录系统镜像

    准备工作 1 一台烧录镜像用的电脑 Windows Mac Linux 2 树莓派 3 显示器 高清连接线 根据不同型号需要不同的接口 4 键盘鼠标 5 Micro SD 读卡器 Micro SD 卡 16 128G 6 网线 不使用wif
  • 【ROS】usb_cam相机标定

    1 唠叨两句 当我们要用相机做测量用途时 就需要做相机标定了 不然得到的计算结果会有很大误差 标定的内容包括三部分 内参 外参还有畸变参数 所以标定的过程就是要求得上面这些参数 以前弄这个事估计挺麻烦 需要做实验和计算才能得到 现在通过ro
  • 怎么把树莓派连接到电脑上(基于window10)

    我相信对于刚玩树莓派的新手来说 尤其是没有带显示屏的同学来说 四处碰壁 可能出现的原因有很多种 ssh登录不上 wifi连接不上 内存不足 很多问题 而对于更多新手来说 如何给树莓派连接网络更是关键 今天我给大家讲一下如何用树莓派连接电脑
  • 《机器人操作系统入门》课程代码示例安装出错解决方法

    问题描述 学习 机器人操作系统入门 课程时 在Ubuntu 16 04 上安装了kinetic 安装ROS Academy for Beginners时依赖总是报错 如下所示 rosdep install from paths src ig
  • 【车联网原型系统|四】adhoc组网+frp内网穿透

    物联网原型系统导航 车联网原型系统 一 项目介绍 需求分析 概要设计 https blog csdn net weixin 46291251 article details 125807297 车联网原型系统 二 数据库 应用层协议设计 h
  • ROS1 ROS2学习

    ROS1 ROS2学习 安装 ROS ROS1 ROS2 命令行界面 ROS2 功能包相关指令 ROS 命令行工具 ROS1 CLI工具 ROS2 CLI工具 ROS 通信核心概念 节点 Node 节点相关的CLI 话题 Topic 编写发
  • 在 CLion 中设置 ROS 包

    我正在使用 CLion C IDE 来编辑 ROS 包 我可以通过打开CMakeLists txt文件 但是 我收到一个错误 FATAL ERROR find package catkin 失败 在工作区和 CMAKE PREFIX PAT
  • 将 CUDA 添加到 ROS 包

    我想在 ros 包中使用 cuda 有人给我一个简单的例子吗 我尝试使用 cuda 函数构建一个静态库并将该库添加到我的包中 但总是出现链接错误 未定义的引用 cuda 我已经构建了一个可执行文件而不是库并且它可以工作 请帮忙 我自己找到了
  • Caught exception in launch(see debug for traceback)

    Caught exception in launch see debug for traceback Caught exception when trying to load file of format xml Caught except
  • ROS安装错误(Ubuntu 16.04中的ROS Kinetic)

    中列出的步骤顺序http wiki ros org kinetic Installat 已被关注 尝试在Ubuntu 16 04中安装ROSkinetic 输入以下命令时出错 sudo apt get install ros kinetic
  • 在 ROS - Python 中使用来自多个主题的数据

    我能够显示来自两个主题的数据 但无法在 ROS 中实时使用和计算这两个主题的数据 用 Python 代码编写 您有想法存储这些数据并实时计算吗 谢谢 usr bin env python import rospy import string
  • ROS 从 python 节点发布数组

    我是 ros python 的新手 我正在尝试从 python ros 节点发布一个一维数组 我使用 Int32MultiArray 但我无法理解多数组中布局的概念 谁能给我解释一下吗 或者还有其他方式发布数组吗 Thanks usr bi
  • 无法在 Ubuntu 20.04 上安装 ROS Melodic

    我正在尝试使用这些命令在 Ubuntu 20 04 上安装 ROS Melodic sudo sh c echo deb http packages ros org ros ubuntu lsb release sc main gt etc

随机推荐

  • 京东首页实战(带商品栏)

    效果展示 在这里插入图片描述 https img blog csdnimg cn cdb0bf89b2b9415f814 项目结构 需要联系 224 855 7717
  • MySQL进阶面试题完全攻略

    除了基础题部分 本文还收集整理的MySQL面试题还包括如下知识点或题型 MySQL高性能索引 SQL语句 MySQL查询优化 MySQL高扩展高可用 MySQL安全性 问题1 char varchar的区别是什么 varchar是变长而ch
  • 雪过天晴:OTA熬过旅游业寒冬

    旅游业新年开门红的热闹余音犹在 OTA平台走入三年来最具总结意义的一个财报季 继携程 途牛后 同程旅行于3月21日公布了2022年全年财报 数据显示 2022年 同程旅行实现收入65 8亿元 经调整净利润6 5亿元 其中每个季度都保持了盈利
  • 再造STM32---第十九部分:I2C—读写 EEPROM

    本章参考资料 STM32F4xx 参考手册 STM32F4xx 规格书 库帮助文档 stm32f4xx dsp stdperiph lib um chm 及 I2C 总线协议 若对 I2C 通讯协议不了解 可先阅读 I2C 总线协议 文档的
  • stm32学习笔记-esp8266wifi模块连接云平台测试

    文章目录 一 ATK ESP8266模块简介 二 测试AT指令连接新大陆物联网云平台 一 ATK ESP8266模块简介 官方使用手册截图如下 我们知道这个wifi模块有三种模式 其串口通信波特率为115200 数据位为8 停止位为1 测试
  • 史上最全圣杯布局(转自前端神三元)

    圣杯布局如图 而且要做到左右宽度固定 中间宽度自适应 1 利用flex布局
  • 使用SSIS创建同步数据库数据任务

    SSIS SQL Server Integration Services 是用于生成企业级数据集成和数据转换解决方案的平台 使用 Integration Services 可解决复杂的业务问题 具体表现为 复制或下载文件 发送电子邮件以响应
  • 利用keil编写stm32循环点亮一LED灯

    利用keil编写stm32循环点亮一LED灯 在调试循环点亮一LED灯程序时 发现单步执行 能循环点亮 但连续执行时 不能循环点亮 后来发现 是我写的程序出了问题 应该在管脚置高和置低后均进行延时 程序如下 void LED Display
  • esp8266 eeprom_ESP8266内嵌网页配置WIFI及指令调试

    准备 1 智能网络模块 WIFI模块ESP8266 12S 12F 见底图2 Arduino IDE 最新版 1 8 13 目的 1 通过固件访问内置网页可以进行重置WIFI密码 见底图 2 通过固件内嵌网页可以进行指令测试 通过网页模拟串
  • Excel VBA 变量,数据类型&常量

    几乎所有计算机程序中都使用变量 VBA 也不例外 在过程开始时声明变量是一个好习惯 这不是必需的 但有助于识别内容的性质 文本 数据 数字等 在本教程中 您将学习 一 VBA变量 变量是存储在计算机内存或存储系统中的特定值 以后 您可以在代
  • 树的遍历(先序、中序、后序详解)

    树的遍历主要有三种 1 先序遍历 先遍历根节点 再遍历左节点 最后遍历右节点 2 中序遍历 先遍历左节点 再遍历根节点 最后遍历右节点 3 后序遍历 先遍历左节点 再遍历右节点 最后遍历根节点 总结 先 中 后就表示根节点的遍历处于哪个位置
  • Java开发环境搭建(进阶配置五 ——版本控制工具之GIT)

    与CVS SVN等集中式版本控制工具不同 Git是分布式版本控制工具 开发人员通过Checkout从中心版本库Copy一个完整的版本库到本地 就算不联网也可以进行commit update等操作 而且每次操作都是在本地进行 因而速度非常快
  • error C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型

    用VS2015编译从GitHub上下载的一段代码 出现如下的错误提示 error C4146 一元负运算符应用于无符号类型 结果仍为无符号类型 warning C4244 从 double 转换到 float 可能丢失数据 error C4
  • Numpy中花式索引和shape用法

    原文转载自我的博客benym cn 总结一下最近学习中容易出现问题的地方 代码 from numpy import randMat random randint 0 10 4 3 print 原矩阵 n randMat 索引从0开始计数 p
  • jenkins+python自动化测试持续集成

    一 首先我们安装Jenkins 我这里采用的是 msi应用程序 根据提示进行安装 傻瓜式 最后会打开默认的网页地址 http localhost 8080 如果端口有冲突 可以去Jenkins的安装目录下的这个文件去改端口 二 进入Jenk
  • C/C++编程笔记:详解三种指针(悬空指针、空指针和野指针)

    悬空指针 指向已删除 或释放 的内存位置的指针称为悬空指针 指针用作悬空指针有三种不同的方式 内存分配 函数调用 如果x是静态变量 则不会出现问题 或p不会悬空 输出 5 变量超出范围 无效指针 无效指针是一种特定的指针类型 void 指向
  • Mycat实现读写分离,主备热切换

    实验环境 ubutu server 14 Master IP 172 16 34 212 Slave IP 172 16 34 34 156 Mycat server IP 172 16 34 219 不涉及过多理论 只有实现的过程 mys
  • COM三大接口:IUnknown、IClassFactory、IDispatch

    转载自 http blog sina com cn s blog 86d10dc701014m2v html 1 COM组件有三个最基本的接口类 分别是IUnknown IClassFactory IDispatch 1 1 COM规范规定
  • vuejs+element UI 点击编辑表格某一行时获取内容填入表单

    如果是已经有点经验的同学 可以直接看下面这个函数 应该就能明白怎么回事 新手可以看下面的详细教程 函数 handleEdit function index row this editFormVisible true this editFor
  • 【大一立项】如何亲手搭建ROS小车:硬件和软件介绍

    本次博客将详细介绍上篇博客中提到的ROS小车的硬件和软件部分 由于十一实验室不开门 所以部分代码还没有上传到Github 下位机 下位机使用Arduino 因为大一上刚学完用Arduino做循迹小车 其实Arduino作为ROS小车的下位机