EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如何低成本搭建 ARM+ROS的硬件载体?上文为大家介绍了实现的思路及原理,本文将为读者实际操作,展示ROS部署前的筹备工作及步骤分解。
8 Y0 Z: ]* x) J1 c" m7 X5 B. x" H- R1. 方案概述, p ~9 h/ E7 @) S4 j. g
本文重点介绍低成本搭建ARM+ROS的硬件及底层实现。开发板选用HDG2L- IoT评估套件,默认配置为2G内存、8G存储,搭载可玩性极高的Ubuntu系统。 9 E* b [- O4 U6 F4 r% C
0 v( i# M* }% J( B$ a开发套件默认的Ubuntu系统大概占用3.1G空间,剩余3.2G空间,在构建docker+ROS环境时可能会报eMMC空间不足的错误,所以需要调整HDG2L-IoT的启动参数,将启动参数改为引导到TF空间中。市面上常见的树莓派部署ROS方案也是如此操作。
9 I) O* S1 u" S, ]7 F6 C; }2. 方案准备& }6 |$ _+ m7 v1 E: m8 e
首先,需要用到的硬件如下所示。 ' I# t |' [" U0 O$ ~
0 A F( O( H# K; u, N
$ ~7 l* g( ~( h
3. TF卡挂载Ubuntu固件修改
+ a0 M; Q! I1 }$ U7 D# O* d+ k5 ?本小节将介绍如何实现HDG2L-IoT挂载TF卡内的文件系统,步骤如下: 1)制作启动卡; 2)解压目标文件系统到TF卡内; 3)修改uboot启动参数;
9 t% F+ L' ~( N+ X/ T3.1制作启动卡. z7 q) ?0 T& F: o
首先制作启动卡,格式化TF卡的操作可通过瑞萨提供的shell脚本实现,在PC端的Ubuntu开发环境下,执行以下命令来下载操作脚本。
; n$ e. O- p- e' | @+ F
0 l7 ^7 n* m0 V% G! h将需要被用作启动卡的TF卡插入到PC机内,用虚拟机来操作,调整步骤如下。首先打开虚拟机的USB 3.1功能,以免TF卡读取失败。
3 I L$ u) R7 O. _& O4 S0 ~# h+ t0 y. p
然后将TF卡导入Ubuntu虚拟机中,如下所示。 ! U/ p, C9 g, m. }
9 g8 Z0 t7 {2 G% Z( k6 d5 Y系统能识别后,执行刚才下载的usb_sd_partition.sh脚本,如下所示。 0 j( B1 d8 e. a( g+ e
* R1 ?* A6 I2 K) Z- \脚本执行成功后,TF卡将分为两个分区,分区1为fat32,分区2为ext4。 & n) ~, H- ^5 W/ ^! Z: Y7 W
% |; O& e9 ~. f' \" r; D3 G(注:当前新版本的Windows系统比较少支持ext4格式的TF卡,所以在Windows环境下一般只看到分区1,分区2会提示需要格式才能识别,请忽略。) : F" u# y+ o9 Q, u% T
3.2拷贝目标文件到TF中
; O. X# ~8 w- E/ W5 Y& f* ~( U5 R将HDG2L-IoT配套的Ubuntu压缩包解压到ext4分区中,虚拟机内自动挂载到/media/${USER}/sdb2内。本机的解压命令如下所示。
- v# R6 Q# O' X$ I& P: B. Y# m) w: b# T8 K b5 A
将HDG2L-IoT配套的内核镜像拷贝到Windows下识别的TF分区中(FAT32系统允许被Windows系统识别,ext4系统不被识别),拷贝后如下所示。 / k. k7 e6 D+ m9 [4 F# l6 ^
" Z1 P, ?* ^! `1 x9 ]! T4 e; J
5 n- j, Q6 h( h3 J5 Q; p" V6 o3.3修改uboot启动参数
A, m* n6 i" F7 Y: g6 m1 ?5 y最后需要调整HDG2L-IoT的uboot启动启动参数,引导其使用TF卡内的内核与文件系统,首先上电,在倒计时前进入uboot菜单,如下所示。
. `$ i+ E2 g" y4 v2 i2 `! r5 S
将上一步中制作好的TF卡插入HDG2L-IoT板卡的TF卡槽中,在U-Boot提示符下设定以下变量,bootargs变量用于指定文件系统的载体,在系统内,TF卡槽占用的设备名为/dev/mmcblk1p2。
9 x% x. A2 ` o1 x4 f
7 {% A! [( ?" K7 F然后设置从TF的分区1内获取内核镜像和内核设备树,命令如下所示。 7 J9 @; q3 C; t2 b
6 w0 |. y1 T5 }, y* o
设置完成后,通过以下命令保存uboot的环境变量,命令如下所示。 重新启动后,若TF卡正常,整体存储空间情况如下所示。 8 J/ B' S+ ]! a6 c5 |% J
, Q& a8 f; p8 T) J: t5 x
若TF卡没插入,uboot的启动会报错误信息,错误信息如下所示。
3 [3 N$ v0 {1 x/ w7 I' @3 H, h; j: q
: c5 P% Z& C5 |+ W4. 安装docker环境- i( _1 `% t/ W5 j; s
正常启动之后,开始搭建docker环境。 ' i8 a% p! q* ^- B2 Z3 N) m
4.1安装docker软件
+ I. ]- S8 [. v& v: d, }. S首先,烧录后的第一次上电的板卡需要更新内部的软件版本,命令如下所示。update更新失败注意检测网络状态和date日期。部分软件可能体积过大,需要耐心等待。 / m' I, Y! `/ z& K" ]7 \" j1 u
; @( i+ y% R6 D9 w然后清除旧版本的docker软件,再重新安装docker.io。 / a, g( t4 P) ^: @" c
m0 @3 Z, y8 `% l9 `" D6 B
启动docker。
8 o: h& T T w3 b7 R1 O
6 ~% i. A- z- d5 t1 ]. S- A使能docker开机自启动。
0 n. Y/ L' H, O; k! @% o
" d' l) o! E9 L5 e: p7 ]2 X- m检查docker运行状态。
6 n# b5 ^0 E* A# y- Z/ Q$ o
" Y7 ]8 ?, I! z1 Y! {
]5 g" R, U& c& E% X0 J+ x
: A7 {/ z U9 R1 a4.2获取镜像0 W7 r# u1 U1 s8 b
运行此命令可以从Docker Hub上下载现成镜像。 ; }0 v6 `& u1 r7 J" `* L
- C6 i+ T6 T, [) w$ p
查看本地的镜像文件命令如下所示。
: M' P R# @: M$ U( c7 \* z3 \* `! f* ~$ q) c8 m+ T6 H" y& Q) D
0 A7 b* [% j6 q4 i4.3创建容器
, \: o, w& x; U. u2 G2 [容器就是加载模板后运行的沙盒环境,具有运行时所需的可写文件层、应用程序也处于运行状态。概念上可能会与PC端常用的虚拟机混淆,虚拟机是包括内核、应用运行环境和其他系统环境的,而Docker容器就是独立运行的一个或一组应用以及他们必须的运行环境。 创建容器时,需要指定使用的镜像文件,这里使用上面用pull指令下载下来的镜像文件,创建命令如下所示。
! g4 k' s- n$ ^0 E5 Y5 w
! q0 R7 | s; q6 O* X查看容器状态,命令如下所示,每个容器都有自己的CONTAINER_ID与NAMES,供后面的命令操作使用(可使用docker rename命令修改容器名,便于简便使用)。
! Z _7 t2 r9 l5 H6 A& W" @( u6 H3 f8 u$ O4 k9 v
5 ~; P% D" m5 F% ?" i4.4启动容器. z# U6 l2 d& a& c' I+ U
容器创建后,通过CONTAINER_ID与NAMES来操作容器,启动命令如下所示。
' n/ B/ r2 J: |* P# B8 |
8 l# C. X% Y* T- \ B+ s上文所说,容器是运行一个或一组进程,docker ps命令里的COMMAND即为容器运行的进程,当前显示bash,即进入命令交互进程。通过以下命令进入容器内部。 % V% i' t; w; I! y# u) R( V" U3 f
J; ^) ~1 l1 ^9 t进入后,可以操作容器内的命令,如下所示。
6 z3 w N+ J% r O7 U' x1 e* m' U* o7 y% _
通过exit命令,可退出容器,退出后容器就处于停止状态,如下所示。 0 P! X( \- O" `6 ], V2 P
- W" @5 z2 E2 c( k- N) h
通过以上操作,我们就完成了硬件与底层的搭建,为ROS运行在这套开发板上做好了准备,下一章节将为大家带来ROS的部署方法。 # I: e( q' X% H9 \2 U
* f6 C' I5 h- A* F
|