如何低成本搭建ARM+ROS的硬件载体?上文为大家介绍了实现的思路及原理,本文将为读者实际操作,展示ROS部署前的筹备工作及步骤分解。
1.方案概述
本文重点介绍低成本搭建ARM+ROS的硬件及底层实现。开发板选用HDG2L-IoT评估套件,默认配置为2G内存、8G存储,搭载可玩性极高的Ubuntu系统。
![搭建ARM+ROS](https://file.elecfans.com/web2/M00/6D/81/pYYBAGMzvcWAYo8aAACgBX6IRhc141.jpg)
开发套件默认的Ubuntu系统大概占用3.1G空间,剩余3.2G空间,在构建docker+ROS环境时可能会报eMMC空间不足的错误,所以需要调整HDG2L-IoT的启动参数,将启动参数改为引导到TF空间中。市面上常见的树莓派部署ROS方案也是如此操作。
2.方案准备
首先,需要用到的硬件如下所示。
![搭建ARM+ROS硬件准备](https://file.elecfans.com/web2/M00/6C/EB/poYBAGMzvcaAQj0XAAKY3MYMb38167.jpg)
![硬件参数](https://file.elecfans.com/web2/M00/6D/81/pYYBAGMzvcWAewxYAABsBW8wHkA849.jpg)
3.TF卡挂载Ubuntu固件修改
本小节将介绍如何实现HDG2L-IoT挂载TF卡内的文件系统,步骤如下:
1)制作启动卡;
2)解压目标文件系统到TF卡内;
3)修改uboot启动参数;
3.1制作启动卡
首先制作启动卡,格式化TF卡的操作可通过瑞萨提供的shell脚本实现,在PC端的Ubuntu开发环境下,执行以下命令来下载操作脚本。
![Ubuntu开发环境](https://file.elecfans.com/web2/M00/6C/EB/poYBAGMzvcWAWCfzAAAhq0k27a4575.jpg)
将需要被用作启动卡的TF卡插入到PC机内,用虚拟机来操作,调整步骤如下。首先打开虚拟机的USB3.1功能,以免TF卡读取失败。
![Ubuntu开发环境](https://file.elecfans.com/web2/M00/6C/EB/poYBAGMzvcaAC5AHAAFPE-kAwDg576.jpg)
然后将TF卡导入Ubuntu虚拟机中,如下所示。
![TF卡导入Ubuntu虚拟机](https://file.elecfans.com/web2/M00/6D/82/pYYBAGMzvcaAHAr1AAESTiP1td8905.jpg)
系统能识别后,执行刚才下载的usb_sd_partition.sh脚本,如下所示。
![7.jpg](https://file.elecfans.com/web2/M00/6C/EB/poYBAGMzvcaAQVL3AAAca_eO8vs417.jpg)
脚本执行成功后,TF卡将分为两个分区,分区1为fat32,分区2为ext4。
![8.jpg](https://file.elecfans.com/web2/M00/6C/EB/poYBAGMzvcaAIlJtAAApOBahly8978.jpg)
(注:当前新版本的Windows系统比较少支持ext4格式的TF卡,所以在Windows环境下一般只看到分区1,分区2会提示需要格式才能识别,请忽略。)
3.2拷贝目标文件到TF中
将HDG2L-IoT配套的Ubuntu压缩包解压到ext4分区中,虚拟机内自动挂载到/media/${USER}/sdb2内。本机的解压命令如下所示。
![9.jpg](https://file.elecfans.com/web2/M00/6D/82/pYYBAGMzvcaASOCtAAAQhWbM2Yo200.jpg)
将HDG2L-IoT配套的内核镜像拷贝到Windows下识别的TF分区中(FAT32系统允许被Windows系统识别,ext4系统不被识别),拷贝后如下所示。
![10.jpg](https://file.elecfans.com/web2/M00/6C/EB/poYBAGMzvcaAcgLRAAB6GknQlfw315.jpg)
3.3修改uboot启动参数
最后需要调整HDG2L-IoT的uboot启动启动参数,引导其使用TF卡内的内核与文件系统,首先上电,在倒计时前进入uboot菜单,如下所示。
![11 (2).jpg](https://file.elecfans.com/web2/M00/6D/82/pYYBAGMzvcaAF1AuAABmCozRG6k977.jpg)
将上一步中制作好的TF卡插入HDG2L-IoT板卡的TF卡槽中,在U-Boot提示符下设定以下变量,bootargs变量用于指定文件系统的载体,在系统内,TF卡槽占用的设备名为/dev/mmcblk1p2。
![12.jpg](https://file.elecfans.com/web2/M00/6C/EB/poYBAGMzvceAQownAAAT4QMmxgk678.jpg)
然后设置从TF的分区1内获取内核镜像和内核设备树,命令如下所示。
![13.jpg](https://file.elecfans.com/web2/M00/6D/82/pYYBAGMzvceAETPsAAAvVsyPyQ8631.jpg)
设置完成后,通过以下命令保存uboot的环境变量,命令如下所示。
![14.jpg](https://file.elecfans.com/web2/M00/6C/EB/poYBAGMzvceAV0GeAAAJd_5fHd8289.jpg)
重新启动后,若TF卡正常,整体存储空间情况如下所示。
![15.jpg](https://file.elecfans.com/web2/M00/6D/82/pYYBAGMzvceALXh7AADyq58lZIE443.jpg)
若TF卡没插入,uboot的启动会报错误信息,错误信息如下所示。
![16.jpg](https://file.elecfans.com/web2/M00/6C/EB/poYBAGMzvceAQfmEAAEKFf7OkgU373.jpg)
4.安装docker环境
正常启动之后,开始搭建docker环境。
4.1安装docker软件
首先,烧录后的第一次上电的板卡需要更新内部的软件版本,命令如下所示。update更新失败注意检测网络状态和date日期。部分软件可能体积过大,需要耐心等待。
![17.jpg](https://file.elecfans.com/web2/M00/6D/82/pYYBAGMzvceAIlA4AAAJF5HqwJM267.jpg)
然后清除旧版本的docker软件,再重新安装docker.io。
![18.jpg](https://file.elecfans.com/web2/M00/6C/EB/poYBAGMzvceATrx7AAAYYp7mQVw064.jpg)
启动docker。
![19.jpg](https://file.elecfans.com/web2/M00/6D/82/pYYBAGMzvceAO_eAAAALXPB3e8g641.jpg)
使能docker开机自启动。
![20.jpg](https://file.elecfans.com/web2/M00/6C/EB/poYBAGMzvciAQxDhAAAMsLAM8TA753.jpg)
检查docker运行状态。
![21.jpg](https://file.elecfans.com/web2/M00/6C/EB/poYBAGMzvciAS-8AAAAKfvo4D2s908.jpg)
![22.jpg](https://file.elecfans.com/web2/M00/6D/82/pYYBAGMzvciAPeQxAAJKUq0ZlNQ657.jpg)
4.2获取镜像
运行此命令可以从DockerHub上下载现成镜像。
![23.jpg](https://file.elecfans.com/web2/M00/6D/82/pYYBAGMzvciADlc0AAANaNjr6LM644.jpg)
查看本地的镜像文件命令如下所示。
![24.jpg](https://file.elecfans.com/web2/M00/6C/EB/poYBAGMzvciAKOCDAAAI_RmpX8s141.jpg)
![25.jpg](https://file.elecfans.com/web2/M00/6C/EB/poYBAGMzvciARi-XAABAtyjDrWA195.jpg)
4.3创建容器
容器就是加载模板后运行的沙盒环境,具有运行时所需的可写文件层、应用程序也处于运行状态。概念上可能会与PC端常用的虚拟机混淆,虚拟机是包括内核、应用运行环境和其他系统环境的,而Docker容器就是独立运行的一个或一组应用以及他们必须的运行环境。
创建容器时,需要指定使用的镜像文件,这里使用上面用pull指令下载下来的镜像文件,创建命令如下所示。
![26.jpg](https://file.elecfans.com/web2/M00/6D/82/pYYBAGMzvciAJdkYAAAMv7bF6vg334.jpg)
查看容器状态,命令如下所示,每个容器都有自己的CONTAINER_ID与NAMES,供后面的命令操作使用(可使用dockerrename命令修改容器名,便于简便使用)。
![27.jpg](https://file.elecfans.com/web2/M00/6D/82/pYYBAGMzvciATfxQAAAKhrabUaU405.jpg)
![28.jpg](https://file.elecfans.com/web2/M00/6C/EB/poYBAGMzvciAOjhFAABEXc0tIwQ825.jpg)
4.4启动容器
容器创建后,通过CONTAINER_ID与NAMES来操作容器,启动命令如下所示。
![29.jpg](https://file.elecfans.com/web2/M00/6C/EB/poYBAGMzvcmAJC0FAAAXEt5JuM0960.jpg)
上文所说,容器是运行一个或一组进程,dockerps命令里的COMMAND即为容器运行的进程,当前显示bash,即进入命令交互进程。通过以下命令进入容器内部。
![30.jpg](https://file.elecfans.com/web2/M00/6D/82/pYYBAGMzvcmAKl9JAAALNPbXmZs184.jpg)
进入后,可以操作容器内的命令,如下所示。
![31.jpg](https://file.elecfans.com/web2/M00/6C/EB/poYBAGMzvcmADkEYAAC_Y_6ct48218.jpg)
通过exit命令,可退出容器,退出后容器就处于停止状态,如下所示。
![32.jpg](https://file.elecfans.com/web2/M00/6D/82/pYYBAGMzvcmAMLOCAAB1s-WyxZ4297.jpg)
通过以上操作,我们就完成了硬件与底层的搭建,为ROS运行在这套开发板上做好了准备,下一章节将为大家带来ROS的部署方法。
-
ARM
+关注
关注
134文章
9184浏览量
369734 -
开发板
+关注
关注
25文章
5144浏览量
98436 -
ROS
+关注
关注
1文章
281浏览量
17140
发布评论请先 登录
相关推荐
【「具身智能机器人系统」阅读体验】2.具身智能机器人的基础模块
《具身智能机器人系统》第10-13章阅读心得之具身智能机器人计算挑战
【「具身智能机器人系统」阅读体验】+两本互为支持的书
【「具身智能机器人系统」阅读体验】2.具身智能机器人大模型
【「具身智能机器人系统」阅读体验】1.初步理解具身智能
【「具身智能机器人系统」阅读体验】+初品的体验
《具身智能机器人系统》第1-6章阅读心得之具身智能机器人系统背景知识与基础模块
ROSCon China 2024 | RDK第一本教材来了!地瓜机器人与古月居发布新书《ROS 2智能机器人开发实践》
![ROSCon China 2024 | RDK第一本教材来了!地瓜<b class='flag-5'>机器人</b>与古月居发布新书《<b class='flag-5'>ROS</b> 2智能<b class='flag-5'>机器人</b>开发实践》](https://file1.elecfans.com/web3/M00/01/CC/wKgZO2dYG-KAHW2XAAC8Z6fkJnk561.png)
ROS让机器人开发更便捷,基于RK3568J+Debian系统发布!
国产Cortex-A55人工智能教学实验箱_基于Python机械臂跳舞实验案例分享
基于飞凌嵌入式RK3568J核心板的工业机器人控制器应用方案
基于鸿道(Intewell®)操作系统研发的农业机器人操作系统
技术融合与创新大象机器人水星Mercury X1人形机器人案例研究!
![技术融合与创新大象<b class='flag-5'>机器人</b>水星Mercury X1<b class='flag-5'>人</b>形<b class='flag-5'>机器人</b>案例研究!](https://file1.elecfans.com/web2/M00/DF/0D/wKgaomYt55mAOKkVAAgINhZXgIs297.png)
实现机器人操作系统——ADI Trinamic电机控制器ROS1驱动程序简介
工业控制:鸿道(Intewell)操作系统工业机器人控制解决方案
![工业控制:鸿道(Intewell)<b class='flag-5'>操作系统</b>工业<b class='flag-5'>机器人</b>控制解决方案](https://file1.elecfans.com/web2/M00/C5/2E/wKgaomXyXfSAZwFaAACOVl_Ez0E827.png)
评论