用以学习、展示 ROS 系统应用的树莓派小车模型 。
开始这个项目的目的有三:
-
一是:学习 ROS 系统框架并进行实践
ROS 是目前比较热门的系统,它的顶层框架简单,通过官方文档 https://www.ros.org 两三天就可建立起相关框架概念。在了解 ROS 基础架构之后需要在实际场景中进行实践,这就是此项目的目的之所在。
-
二是:学习 Python虽之前零零星星看过 Python,也用之实现过小项目,但终因没有进行系统地学习与实践,以至于心中一直不认为自己已掌握此编程语言。所以想借此项目继续 Python 项目的学习。通过几次测试发现,ROS kinetic 版本与 python3 并不能很好的兼容。又因需配合朋友一起学习 ROS,所以暂不能在此项目中使用 ROS 后续版本。 因此决定,将 python 学习计划取消,改为用 C++ 来实现此项目。
-
三是:学习通过 github 进行代码管理与使用
虽多年前就已经在 github 上观摩、学习各位大神的作品,但自己一直没在上面建过开源项目。所以也借此机会丰富自己的 github 技能。
此项目以概念学习为主,所以在架构设计、系统性能等方面必然有所欠缺。如大家在此方面有所要求,还请参阅其它相关项目,在此不再详述。
-
PC 开发环境
略
-
树莓派及相关配件
- 树莓派 2B 及以上版本均可。如需实现无线操作,可在 Raspberry Pi 2B 上接入 USB 转 蓝牙 或 wifi 模块。为方便,也可使用自带 wifi 的树莓派版本(如:Raspberry Pi 3B 及以上)。
- 步进电机及控制电路板。
- 其它零配件,如 车架、摄像头固定架、设备电源、车轮等。
-
OS
推荐使用 Linux 系统(可使用虚拟机环境)。具体安装、配置操作略。
-
ROS
Ubuntu 环境的安装、配置可参考:
从最上层看, RosCar 系统如下图所示:
-
外部系统
外部系统包括操作、管理人员以及其它系统、程序等。这部分不在本系统管理范围内。外部系统可利用本系统提供的 UI 、API 以及监控系统与本系统进行交互操作。
-
控制器:
此部分为 ROS Car 的管理服务器。对外,通过 CLI 及 API 与外部系统/人员进行交互。对内,通过 ROS 系统实现对终端设备的操作与管理。
-
终端设备:
此为 ROS Car 终端。在此项目中明确为:基于树莓派的带摄像头的可远程控制的小车。
项目中各模块间的接口如下图所示:
- 控制器与终端的接口链路将使用 ROS 系统内部通讯机制。
- 控制器对外将提供 CLI 及 API 接口, 外部系统可通过接口与本系统进行交互。
- 某些特殊类型数据流接口,如:视频流传输接口,将在特定章节中加以说明。
从终端用户的角度预测,本系统对外的接口需要提供的功能如下用例图所示:
ROS Car 项目基础架构如下图所示:
TBD
TBD
-
Info
--- string id string type string name
-
Move
float32 angle float32 power float32 duration --- int32 err_code string err_msg
TBD
-
VideoStream
int8[] buffer
-
StreamDeregister
string node_id string video_id --- int32 err_code string err_msg
-
StreamForward
string node_id string video_id --- int32 err_code string err_msg string topic
-
StreamList
--- string video_list
-
StreamRegister
string node_id string video_id string addr int32 port --- int32 err_code string err_msg
TBD
为在外部系统与 ROS Car 服务器 以及 ROS Car 服务器 与 ROS Car 终端之间进行数据交互, 在项目中设计了一套简易通讯协议。 关于此通讯协议的详细内容,请参见:
TBD.
ROS Car 框架如下图所示
TBD.
- 用 ROS 当然需要访问 ROS 官网:https://www.ros.org
- 此项目中配图多为通过 yEd (https://www.yworks.com) 绘制。此工具小巧灵活,方便好用,推荐之。
- 虽然对 M$ 一直不怎么感冒,但他家可在 Linux 下使用的 VSCode 真不错:https://code.visualstudio.com