本次博客将详细介绍上篇博客中提到的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的教学视频,可以免费提供给大家,如有需要加百度网盘:无处灯火

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

  1. 基于Jetson Tx1搭建ROS小车的过程①(20221116)

    SunnyG按:准备做课程项目了,ROS系统做智能小车,这里记录一下步骤,方便查阅. 基于Jetson Tx1搭建ROS小车的过程①(20221116) 达成:完成安装ROS ============ ...

  2. 智能音箱硬件和软件介绍[上] 硬件结构解析[Soomal]

    科大讯飞 VBOX 智能音箱 - 电路板 Google 谷歌 Google Home 智能音箱 从2014年起,我们先后通过自购和合作厂商获得多个智能语音识别"流派"的品牌音箱产品 ...

  3. ros怎么跑小车_如何搭建ROS小车底盘(一)

    搭建前准备 需要的硬件清单: 树梅派2或3代 带编码器测速JGA25-371减速电机一对 小车轮子一对 万向轮一个 小车亚克力板底板一套 Arduino MEGA2560 R3开发板一块:用于控制电机 ...

  4. 从零开始搭建ROS小车(上位机部分)(一)

    硬件:树莓派4B 4G 开发环境:Ubuntu20.4 ROS版本:ros-noetic 一.安装Ubuntu mate 20.04 我们可以通过游览器搜索Ubuntu mate去官网安装Ubuntu ...

  5. 微型计算机的硬件和软件,微型计算机的硬件及软件介绍

    计算机是人类科学技术上一项伟大的成就,如今计算机的应用范围已经从科学计算扩展到人类社会的各个领域.计算机之所以如此普及,是由其自身特点所决定的.接下来小编为大家整理了.希望对你有帮助哦! Comput ...

  6. 【大一立项】ROS服务机器人-结题报告

    知乎:Magical-E Github:Magical-E 项目展示:[大一立项]亲手搭建ROS机器人小车 1.课题背景 近年来,机器人领域飞速发展,各种技术层出不穷.从四足机器狗的运动,到阿尔法狗战 ...

  7. 开源!手把手教你搭建Arduino+英伟达Jetson的ROS小车(上)

    1 引言 今年6月,我们应小伙伴儿的需求,写了两篇如何通过购买零件从零搭建一台ROS实体车的推文<开源!手把手教你搭建Arduino+树莓派的ROS小车(上)>.<开源!手把手教你搭 ...

  8. 从零搭建ROS机器人平台

    0.声明 本系列文章,仅介绍如何搭建ROS机器人平台,即机器人和ROS打通关系,通过ROS与机器人硬件STM32通信,并且在ROS层发布机器人tf和odom,并且做了简单的建图和导航测试. 之后的内容 ...

  9. 基础ROS小车软件结构到底是什么样子的?

    ROS小车的软件结构 0.前言 想必大多数读者,在刚开始搭建ROS小车的时候,都会遇到下面这样的问题.单片机底层PWM.测速.速度PID.MPU6050数据获取等等,而且还要与ROS层通信,ROS层还 ...

最新文章

  1. PyTorch 笔记(03)— Tensor 数据类型分类(默认数据类型、CPU tensor、GPU tensor、CPU 和 GPU 之间的转换、数据类型之间转换)
  2. MySQL太细碎了,我硬生生捋出了一条核心大主线!
  3. 2018年4月26日笔记
  4. 厉害了,我的Python,竟然可以这么玩儿......(内含福利)
  5. java之 Timer 类的使用以及深入理解
  6. 中石油训练赛 - Gone Fishing(固定大小的圆可以覆盖最多的点)
  7. Oracle 循环相关
  8. WPF下递归生成树形数据绑定到TreeView上
  9. apt-get常见错误
  10. 设置phpMyAdmin连接本机已存在数据库
  11. 创新方法(TRIZ)理论及应用(一)
  12. ubantu下清除项目缓存的方法
  13. C语言sql参数化查询,使用LIKE的sql参数化查询
  14. nyoj 买水果(组合数求法与分析)
  15. 2018年世界计算机超算大赛,在世界大学生超级计算机竞赛(ASC18)总决赛中 青海大学超算团队成功获得ASC竞赛全球一等奖...
  16. 分享几款C/C++在线编译器
  17. Linux meld安装
  18. 网页数据获取小技巧(小白)
  19. Attention 机制是什么?
  20. 嵌入式 IIC(I2C)协议

热门文章

  1. i.MX平台Qt交叉编译环境搭建
  2. UAF42滤波器/低通/高通/带通 滤波器 原理图/PCB设计 调试注意事项
  3. 副族元素从上到下原子半径_元素周期表中原子半径跟元素序数的关系
  4. Vue.js使用pdfMake时出现字体找不到错误
  5. 基于java物业管理信息系统设计(含源文件)
  6. 百度百科怎么创建个人词条?
  7. 添加/删除Windows组件,点击没反应,DBC2000安装不了
  8. Python:一个闹钟
  9. Flash动画制作视频教程
  10. Oracle EBS User Guide - URL