EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如何低成本搭建 ARM+ROS的硬件载体?上文为大家介绍了实现的思路及原理,本文将为读者实际操作,展示ROS部署前的筹备工作及步骤分解。
- X, F$ D3 T \: D d& D3 d1. 方案概述
; F* m, u: B' N本文重点介绍低成本搭建ARM+ROS的硬件及底层实现。开发板选用HDG2L- IoT评估套件,默认配置为2G内存、8G存储,搭载可玩性极高的Ubuntu系统。
, ?7 S/ p) B+ r+ C8 Z6 o2 E. H& F8 D- v
开发套件默认的Ubuntu系统大概占用3.1G空间,剩余3.2G空间,在构建docker+ROS环境时可能会报eMMC空间不足的错误,所以需要调整HDG2L-IoT的启动参数,将启动参数改为引导到TF空间中。市面上常见的树莓派部署ROS方案也是如此操作。 4 t5 c: A# h5 B4 `6 |- c5 @
2. 方案准备, E3 Q- d) B, O7 d3 Z
首先,需要用到的硬件如下所示。
: c4 P8 X _6 t% T
: L* r( T% y' I- O# m, |' A- B1 A+ d, |; n8 D1 s2 |8 I
3. TF卡挂载Ubuntu固件修改
7 b) l) c2 e) ~本小节将介绍如何实现HDG2L-IoT挂载TF卡内的文件系统,步骤如下: 1)制作启动卡; 2)解压目标文件系统到TF卡内; 3)修改uboot启动参数; ^" {6 j1 W' x% V
3.1制作启动卡
3 }' y4 }+ F+ V+ e" A& v i. F首先制作启动卡,格式化TF卡的操作可通过瑞萨提供的shell脚本实现,在PC端的Ubuntu开发环境下,执行以下命令来下载操作脚本。
0 n) n7 c' d+ [7 Z, W
/ l! P- V% k8 {4 j0 z3 \将需要被用作启动卡的TF卡插入到PC机内,用虚拟机来操作,调整步骤如下。首先打开虚拟机的USB 3.1功能,以免TF卡读取失败。 9 w% m2 p- Q" u' o4 d& j' i
' Y! f/ B/ Q' ]6 E+ [4 j
然后将TF卡导入Ubuntu虚拟机中,如下所示。 ! B/ _% y5 K- F4 d, ]5 Y% C
# F6 G- e2 W7 ^6 V系统能识别后,执行刚才下载的usb_sd_partition.sh脚本,如下所示。 ( \( j6 ^5 d: _0 D
# ^; c0 W! s# Q" g% b! s) C9 Q脚本执行成功后,TF卡将分为两个分区,分区1为fat32,分区2为ext4。 + K! G3 V$ V+ W8 m$ b" R8 x& f0 i
2 D/ Y4 k# B7 l+ K- M3 T* K
(注:当前新版本的Windows系统比较少支持ext4格式的TF卡,所以在Windows环境下一般只看到分区1,分区2会提示需要格式才能识别,请忽略。) @0 _. o1 g6 y3 e' q; f) |
3.2拷贝目标文件到TF中
+ m, P/ ~; {+ z0 A4 w将HDG2L-IoT配套的Ubuntu压缩包解压到ext4分区中,虚拟机内自动挂载到/media/${USER}/sdb2内。本机的解压命令如下所示。
3 ]% l) N; H# s% y9 u! k' B) n5 \6 ]! O. r: [$ H" m
将HDG2L-IoT配套的内核镜像拷贝到Windows下识别的TF分区中(FAT32系统允许被Windows系统识别,ext4系统不被识别),拷贝后如下所示。
, f Y) o1 _8 h
! v) H9 ^" |8 }$ s* k
6 T, ^' C/ _2 {% C* y: b" k3.3修改uboot启动参数
/ b* W/ m K* c. }/ y6 g' c! p! f最后需要调整HDG2L-IoT的uboot启动启动参数,引导其使用TF卡内的内核与文件系统,首先上电,在倒计时前进入uboot菜单,如下所示。
8 w/ @8 m6 [. [' V& _& Q0 Y1 n- V" w& x& E; l* c8 [6 s) t, Z
将上一步中制作好的TF卡插入HDG2L-IoT板卡的TF卡槽中,在U-Boot提示符下设定以下变量,bootargs变量用于指定文件系统的载体,在系统内,TF卡槽占用的设备名为/dev/mmcblk1p2。
7 A1 v9 j+ j' E/ L8 f5 s8 x! B4 T, O$ v
* E4 j, u$ S9 z3 J7 y然后设置从TF的分区1内获取内核镜像和内核设备树,命令如下所示。 " l' [6 B" v! k6 X0 P
; F4 T/ k6 U& c' C, x+ _
设置完成后,通过以下命令保存uboot的环境变量,命令如下所示。 重新启动后,若TF卡正常,整体存储空间情况如下所示。 ' l2 I, _( |+ p) G& Q1 Q
9 l* k, f# J/ t: J若TF卡没插入,uboot的启动会报错误信息,错误信息如下所示。
8 o/ X, U% D* D
5 D8 m5 h! p; P* `
7 \( d8 L, y0 K$ ?4. 安装docker环境
; |- ~- H' n0 P8 T正常启动之后,开始搭建docker环境。
. c: E6 s2 _) g! S2 Y' `( [5 T4.1安装docker软件
6 w9 m3 K4 ^5 t* t9 D, r5 q首先,烧录后的第一次上电的板卡需要更新内部的软件版本,命令如下所示。update更新失败注意检测网络状态和date日期。部分软件可能体积过大,需要耐心等待。
8 p. n# y5 @& F5 T7 C3 L, M/ Y% u& {
然后清除旧版本的docker软件,再重新安装docker.io。 1 P; K9 r* V( D8 P, y
" y$ J% Y7 c! r; \ x9 u; s/ v启动docker。 , x0 w; I1 P- Y, e% V, x! \
( h9 S' ]/ h0 B* }0 Y$ t g" |* f
使能docker开机自启动。 ; v+ B' z+ ]9 n" b6 t
. B; [* e% o8 y1 d# I检查docker运行状态。
% H% |! M0 q: E4 k7 s, I+ P% k! X7 p9 Y5 \$ n# K
# ~* W! b1 q1 B3 }1 F
+ W7 P9 e% L% ?6 C) x/ K E( c4.2获取镜像2 _9 M$ X5 X9 y9 f' G' q8 U9 A
运行此命令可以从Docker Hub上下载现成镜像。 + [& z0 D; Z9 V
4 p0 ~( @$ C& Y) b6 d
查看本地的镜像文件命令如下所示。
; q h$ _% o# x$ |5 F, B2 x* e+ y/ m3 K5 X& G F$ |$ |
) B( K, F& w# W( ~
4.3创建容器0 q$ y$ ?3 ~9 D z1 g
容器就是加载模板后运行的沙盒环境,具有运行时所需的可写文件层、应用程序也处于运行状态。概念上可能会与PC端常用的虚拟机混淆,虚拟机是包括内核、应用运行环境和其他系统环境的,而Docker容器就是独立运行的一个或一组应用以及他们必须的运行环境。 创建容器时,需要指定使用的镜像文件,这里使用上面用pull指令下载下来的镜像文件,创建命令如下所示。 5 K- D D- a" \* b# A) ^' q5 i0 }
: {2 \' B5 s. p& V) R: k% P查看容器状态,命令如下所示,每个容器都有自己的CONTAINER_ID与NAMES,供后面的命令操作使用(可使用docker rename命令修改容器名,便于简便使用)。
" O" M6 {5 H$ F" T/ Z7 \% W
+ m4 V* g0 d2 C& `
3 u& [# [% {' c. M* v: s4.4启动容器$ @1 A2 O8 z) I
容器创建后,通过CONTAINER_ID与NAMES来操作容器,启动命令如下所示。
) E+ H' Q3 N% j/ J2 O6 @, Y, E# W# C3 ~6 ]' \
上文所说,容器是运行一个或一组进程,docker ps命令里的COMMAND即为容器运行的进程,当前显示bash,即进入命令交互进程。通过以下命令进入容器内部。
& @0 \$ F" S! m4 ]( d5 D2 s
& y+ p5 |$ l3 {+ i' X; }5 a+ M# `3 `进入后,可以操作容器内的命令,如下所示。
# {6 g4 B- ?4 C8 B. E' \7 K; x" x" G1 g+ @+ L$ w
通过exit命令,可退出容器,退出后容器就处于停止状态,如下所示。
- t& T4 N- f3 C8 {' X
/ F( M2 h! z5 H" H% k. x$ M4 ~通过以上操作,我们就完成了硬件与底层的搭建,为ROS运行在这套开发板上做好了准备,下一章节将为大家带来ROS的部署方法。 0 A1 x8 x2 S0 n4 J
Y: q6 X7 e& ]% u& R+ K
|