EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如何低成本搭建 ARM+ROS的硬件载体?上文为大家介绍了实现的思路及原理,本文将为读者实际操作,展示ROS部署前的筹备工作及步骤分解。
$ b& m7 R7 P9 J1 l4 H1. 方案概述( ?; m# s2 i" a" ~
本文重点介绍低成本搭建ARM+ROS的硬件及底层实现。开发板选用HDG2L- IoT评估套件,默认配置为2G内存、8G存储,搭载可玩性极高的Ubuntu系统。 * R9 |- U% b( o* O4 ~
/ a9 W, ]* W7 K1 w5 S- X. w
开发套件默认的Ubuntu系统大概占用3.1G空间,剩余3.2G空间,在构建docker+ROS环境时可能会报eMMC空间不足的错误,所以需要调整HDG2L-IoT的启动参数,将启动参数改为引导到TF空间中。市面上常见的树莓派部署ROS方案也是如此操作。
. E4 x0 R" R- s; @( ]* W2. 方案准备- u$ a3 x! P( C1 g2 W3 a6 z- j
首先,需要用到的硬件如下所示。 # _4 K9 J5 X4 \
, L# k, G/ F9 M+ Q: d2 U! g# @# U4 e" g2 B
3. TF卡挂载Ubuntu固件修改- F7 p3 N6 f8 U" E
本小节将介绍如何实现HDG2L-IoT挂载TF卡内的文件系统,步骤如下: 1)制作启动卡; 2)解压目标文件系统到TF卡内; 3)修改uboot启动参数;
/ `+ [5 M; _2 } c3.1制作启动卡
( C( z, }/ Y$ ]9 ]; M, r6 q, w首先制作启动卡,格式化TF卡的操作可通过瑞萨提供的shell脚本实现,在PC端的Ubuntu开发环境下,执行以下命令来下载操作脚本。
5 r% j8 P6 M% A$ f3 p$ ^) L) M9 u# ]/ A. f& v- R
将需要被用作启动卡的TF卡插入到PC机内,用虚拟机来操作,调整步骤如下。首先打开虚拟机的USB 3.1功能,以免TF卡读取失败。
( M7 i1 D. G3 ] \) J; j" j2 `
: J" ~, Z4 g3 p. m然后将TF卡导入Ubuntu虚拟机中,如下所示。
; v* X+ {- a2 u: ]& U
# c# `: k$ Z' o3 B/ J4 l" h系统能识别后,执行刚才下载的usb_sd_partition.sh脚本,如下所示。
) E2 O, B6 k8 T# _. W+ n% R; L; c5 o5 C) D9 y
脚本执行成功后,TF卡将分为两个分区,分区1为fat32,分区2为ext4。 0 K8 r# V2 N% C [) J
' b. W/ D+ `. [) y$ N6 x
(注:当前新版本的Windows系统比较少支持ext4格式的TF卡,所以在Windows环境下一般只看到分区1,分区2会提示需要格式才能识别,请忽略。)
2 T3 K0 m+ v& F$ ?; g3.2拷贝目标文件到TF中
+ {- H v- O: @3 z; B将HDG2L-IoT配套的Ubuntu压缩包解压到ext4分区中,虚拟机内自动挂载到/media/${USER}/sdb2内。本机的解压命令如下所示。
" a& I8 c7 [* _% u }4 G* J3 X
& B6 \5 J5 r2 y9 T4 N将HDG2L-IoT配套的内核镜像拷贝到Windows下识别的TF分区中(FAT32系统允许被Windows系统识别,ext4系统不被识别),拷贝后如下所示。
( O( d% s4 F2 \/ Z- i5 w! c- [7 {1 L) q
0 |% Q- O: N3 c
3.3修改uboot启动参数
, X0 R4 d* d3 k8 Y/ V/ R最后需要调整HDG2L-IoT的uboot启动启动参数,引导其使用TF卡内的内核与文件系统,首先上电,在倒计时前进入uboot菜单,如下所示。
/ S3 U' o% ]# k1 t" z5 A% u- q+ d2 |5 J* y& p& b# T8 R, c7 o% k3 v* L2 P
将上一步中制作好的TF卡插入HDG2L-IoT板卡的TF卡槽中,在U-Boot提示符下设定以下变量,bootargs变量用于指定文件系统的载体,在系统内,TF卡槽占用的设备名为/dev/mmcblk1p2。 / o/ E8 G5 `; E: u) }( m, H
1 z+ i* x- B6 h* S' x
然后设置从TF的分区1内获取内核镜像和内核设备树,命令如下所示。
5 W- k1 V! O8 @" u
) V+ b0 r% \+ m: D! X- p设置完成后,通过以下命令保存uboot的环境变量,命令如下所示。 重新启动后,若TF卡正常,整体存储空间情况如下所示。 8 v& S2 V3 i- b8 L- }' @
$ w- b$ d3 s9 G" C" D: x& _若TF卡没插入,uboot的启动会报错误信息,错误信息如下所示。
; W b. H3 P# e+ e8 \# E
' D7 w. X8 b1 P5 t8 S& T. T1 v" \; d* V+ l, w: C
4. 安装docker环境
0 h& d! [ h; S# ~6 G正常启动之后,开始搭建docker环境。 6 o! i5 x3 n6 L8 E6 @* k2 O
4.1安装docker软件! i. K7 ]; W) i$ n/ n
首先,烧录后的第一次上电的板卡需要更新内部的软件版本,命令如下所示。update更新失败注意检测网络状态和date日期。部分软件可能体积过大,需要耐心等待。
2 _1 r! m) J2 @6 Y3 m2 @0 c/ B, O2 ~% r. ?, a& |
然后清除旧版本的docker软件,再重新安装docker.io。 1 k) v9 m" Z% Y! Z+ p. a
# O! q+ Q. @7 k7 S t9 }! f6 d! {启动docker。
# b$ {3 E5 a7 y; M$ Z! ], d2 h& u2 E( G/ Z, {' j0 t( J7 Z
使能docker开机自启动。 % n5 M5 ]6 l3 D) N. k
+ g: L1 P; s8 h, m: l检查docker运行状态。 ; w8 h* e: N$ R% a
+ Z2 z' [. }. x2 R" V
% i4 g- c! v: L+ f' v4 Q
' N, }2 L6 Y" `4.2获取镜像' q4 p: E4 G1 ?; u) w
运行此命令可以从Docker Hub上下载现成镜像。 8 T0 ]- B: _. z: `7 f
. c$ p+ o! ?. R, }- [
查看本地的镜像文件命令如下所示。
( I" |% X1 v5 J
0 S7 B8 V* W+ `1 q: K
* A3 c- o' K+ |& X4.3创建容器
[4 R7 f ~) o# F" K容器就是加载模板后运行的沙盒环境,具有运行时所需的可写文件层、应用程序也处于运行状态。概念上可能会与PC端常用的虚拟机混淆,虚拟机是包括内核、应用运行环境和其他系统环境的,而Docker容器就是独立运行的一个或一组应用以及他们必须的运行环境。 创建容器时,需要指定使用的镜像文件,这里使用上面用pull指令下载下来的镜像文件,创建命令如下所示。
# J1 b& F- @6 W2 @ {# g/ e9 T
' Z4 r1 L. ~# \: l0 r$ e7 y& o查看容器状态,命令如下所示,每个容器都有自己的CONTAINER_ID与NAMES,供后面的命令操作使用(可使用docker rename命令修改容器名,便于简便使用)。
# \% q1 Q& s/ G; b/ {! T
j9 Z0 _! s6 [/ h( Y* M
3 P& y4 M: Z7 _% x4.4启动容器! s0 G3 p7 A4 Q2 c- p Z. t
容器创建后,通过CONTAINER_ID与NAMES来操作容器,启动命令如下所示。 5 \- Y- P3 ]8 G% s |
; [" m+ p8 @! ^ Q- [ G# P/ f, B上文所说,容器是运行一个或一组进程,docker ps命令里的COMMAND即为容器运行的进程,当前显示bash,即进入命令交互进程。通过以下命令进入容器内部。 ! a0 i1 c, A# S6 T; H! m/ v
8 I0 t9 Y% d3 M- M进入后,可以操作容器内的命令,如下所示。
& |/ H# l7 d; n: N$ C0 _) k8 P! d: ?4 O1 u) A8 f" I
通过exit命令,可退出容器,退出后容器就处于停止状态,如下所示。 1 C5 u- `! z& R$ Y% @& d
! \# y" r! Q% P- O) a通过以上操作,我们就完成了硬件与底层的搭建,为ROS运行在这套开发板上做好了准备,下一章节将为大家带来ROS的部署方法。 ! P s( B" K8 C6 ?% s
0 k! F. I0 G1 H* {% ^- s
|