EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
如何低成本搭建 ARM+ROS的硬件载体?上文为大家介绍了实现的思路及原理,本文将为读者实际操作,展示ROS部署前的筹备工作及步骤分解。
! N! R, r3 V- L/ F4 m1. 方案概述
6 i+ S+ l8 @, M1 M9 E6 j% ]2 g, k+ P本文重点介绍低成本搭建ARM+ROS的硬件及底层实现。开发板选用HDG2L- IoT评估套件,默认配置为2G内存、8G存储,搭载可玩性极高的Ubuntu系统。 # S8 e* \9 D# |4 J& W' n
" O1 l+ E& [+ d% X+ J3 E- U3 W
开发套件默认的Ubuntu系统大概占用3.1G空间,剩余3.2G空间,在构建docker+ROS环境时可能会报eMMC空间不足的错误,所以需要调整HDG2L-IoT的启动参数,将启动参数改为引导到TF空间中。市面上常见的树莓派部署ROS方案也是如此操作。
1 j, C- H- Y+ Z, g8 s: j5 ?2. 方案准备
" O2 p/ t0 M x l! c7 z首先,需要用到的硬件如下所示。
: R$ }% R$ M5 v1 A% |, g4 H1 A
6 L( y; D* m9 P" K8 L# j
; S5 R! o( Z0 X0 e# A3. TF卡挂载Ubuntu固件修改
2 w7 J# m9 \/ V/ D5 n9 o) Z本小节将介绍如何实现HDG2L-IoT挂载TF卡内的文件系统,步骤如下: 1)制作启动卡; 2)解压目标文件系统到TF卡内; 3)修改uboot启动参数;
1 p6 f5 q* X- u2 }+ c5 F v& B& v3.1制作启动卡
( q; |0 }% {. F! o' V首先制作启动卡,格式化TF卡的操作可通过瑞萨提供的shell脚本实现,在PC端的Ubuntu开发环境下,执行以下命令来下载操作脚本。 8 h p9 Q; b0 j
$ _+ m/ I/ t I将需要被用作启动卡的TF卡插入到PC机内,用虚拟机来操作,调整步骤如下。首先打开虚拟机的USB 3.1功能,以免TF卡读取失败。 # Q) F; Z0 U6 s" w3 V, A W! ^
3 b& P' R8 @7 R
然后将TF卡导入Ubuntu虚拟机中,如下所示。 2 ]; l9 v- k: Q) M0 I( `* d
8 w- }5 x, G8 M/ P9 S
系统能识别后,执行刚才下载的usb_sd_partition.sh脚本,如下所示。
; a4 j3 g j1 j7 p! I6 b- Z+ U# z7 h
脚本执行成功后,TF卡将分为两个分区,分区1为fat32,分区2为ext4。
% Z# G4 ^2 S$ `8 t8 Z
1 w9 w$ N# Q, h) X% j8 Y Q(注:当前新版本的Windows系统比较少支持ext4格式的TF卡,所以在Windows环境下一般只看到分区1,分区2会提示需要格式才能识别,请忽略。)
' {# M) z4 `5 Z; J. i1 P3.2拷贝目标文件到TF中 {! w Z4 d3 C: y/ m
将HDG2L-IoT配套的Ubuntu压缩包解压到ext4分区中,虚拟机内自动挂载到/media/${USER}/sdb2内。本机的解压命令如下所示。 / ^& c! L& m4 i
+ s! M9 j8 L0 j# _
将HDG2L-IoT配套的内核镜像拷贝到Windows下识别的TF分区中(FAT32系统允许被Windows系统识别,ext4系统不被识别),拷贝后如下所示。
' ]! P5 ?9 d! u& k4 i* x/ g3 m; p/ e9 x- \7 D! L/ x
% T# }) {2 \! c: w$ @
3.3修改uboot启动参数
- g1 G* i: Q$ w) l$ n/ F: c最后需要调整HDG2L-IoT的uboot启动启动参数,引导其使用TF卡内的内核与文件系统,首先上电,在倒计时前进入uboot菜单,如下所示。 " F( F% a) {7 g# u N
6 C8 y$ f" y3 }将上一步中制作好的TF卡插入HDG2L-IoT板卡的TF卡槽中,在U-Boot提示符下设定以下变量,bootargs变量用于指定文件系统的载体,在系统内,TF卡槽占用的设备名为/dev/mmcblk1p2。
. D/ t, X; @, K- o/ ^, S4 U
" a; @5 p- k( I' E. b* P然后设置从TF的分区1内获取内核镜像和内核设备树,命令如下所示。
. [. |( G Y5 Z- S
# F `$ ^2 g6 r: \, h% q3 I7 T/ g设置完成后,通过以下命令保存uboot的环境变量,命令如下所示。 重新启动后,若TF卡正常,整体存储空间情况如下所示。 " l4 l$ F" q# S
' J- H5 [3 T7 j" W, X若TF卡没插入,uboot的启动会报错误信息,错误信息如下所示。
; p2 Z2 s. g6 z8 K$ Z' T+ W, Y; m; L# p3 S, k$ q0 W
8 f e" ]9 V' d5 p4 H7 q4. 安装docker环境- p5 Q7 g6 w: ~$ j$ c. W+ b) s
正常启动之后,开始搭建docker环境。 9 K; A$ w$ s L% v
4.1安装docker软件3 l% @; g% w4 e9 o' E5 h) s
首先,烧录后的第一次上电的板卡需要更新内部的软件版本,命令如下所示。update更新失败注意检测网络状态和date日期。部分软件可能体积过大,需要耐心等待。
" ]7 a( m9 f0 X8 j$ S' U9 f
: [$ J1 r) w3 C2 r- E4 \$ B然后清除旧版本的docker软件,再重新安装docker.io。
; T$ T5 p5 s+ o2 b5 E7 |* h/ F) Y; y, X) e4 V+ J* T! E" T; e: G
启动docker。 " t3 B( b6 C* f, p% E4 m# D3 e
" _. b+ e* ?4 L9 ~# C0 L使能docker开机自启动。 - J( U G- W# {4 k
5 {$ q5 \0 W: M& r& P: \
检查docker运行状态。 + o& Y+ V& S: t7 j5 p, }& s
" h. e1 M2 p& `: ]. ]# S
, O" J5 L' _" S0 t( ^) d/ q) Q( z
4.2获取镜像( Z# S$ F) Q' r
运行此命令可以从Docker Hub上下载现成镜像。 " ^" ~* {- v& R u5 n+ b: p
$ F2 l8 ?$ U' Y
查看本地的镜像文件命令如下所示。
/ }- E0 L" _9 X
( N) R m5 h# {. u; ^8 c) v# h* A& o7 G
4.3创建容器
+ T$ i3 F8 k) G1 R3 h: ~容器就是加载模板后运行的沙盒环境,具有运行时所需的可写文件层、应用程序也处于运行状态。概念上可能会与PC端常用的虚拟机混淆,虚拟机是包括内核、应用运行环境和其他系统环境的,而Docker容器就是独立运行的一个或一组应用以及他们必须的运行环境。 创建容器时,需要指定使用的镜像文件,这里使用上面用pull指令下载下来的镜像文件,创建命令如下所示。 * f# p# R- H- W4 n+ N3 ?( `- t9 d0 j
) Q- l, c$ u5 [9 o. Z2 w B查看容器状态,命令如下所示,每个容器都有自己的CONTAINER_ID与NAMES,供后面的命令操作使用(可使用docker rename命令修改容器名,便于简便使用)。
1 S1 [) [& a" g, G7 m# T9 r
0 H/ ?- Y4 e$ l! S% d2 T6 i9 ~3 w) `, v. M$ K
4.4启动容器
% d3 C* G) p! a2 ^容器创建后,通过CONTAINER_ID与NAMES来操作容器,启动命令如下所示。 , R# ~- F4 D2 C: Q7 C K; e
" r, C; i: p4 j& M上文所说,容器是运行一个或一组进程,docker ps命令里的COMMAND即为容器运行的进程,当前显示bash,即进入命令交互进程。通过以下命令进入容器内部。 8 F& m. S- j: c$ d0 I
3 ?2 z* e+ ]6 R3 S8 m! k8 u# K P
进入后,可以操作容器内的命令,如下所示。
: a% s6 d# e4 L4 \6 S; {9 m& E' Z2 L! B
通过exit命令,可退出容器,退出后容器就处于停止状态,如下所示。
9 C: w' N6 k0 U, \) w/ J
& j0 l) G7 M: h通过以上操作,我们就完成了硬件与底层的搭建,为ROS运行在这套开发板上做好了准备,下一章节将为大家带来ROS的部署方法。 * x/ i3 w5 U6 j( m e; v+ p" s
P! C! G5 H- w4 l2 z |