NXP iMX8基于Ycoto Project编译ROS2

By

Toradex秦海

1). 简介

基于类似NXP iMX8这样性能强劲的ARM平台处理器,越来越多的工业智能/机器人应用比如AGV/AMR产品控制器在ARM平台上面实现,在这个过程中不可避免的就涉及到将机器人应用开发框架移植到ARM平台来运行,因此本文就着重示例基于Ycoto Project/Openembedded环境,将ROS(Robot Operating System)编译集成到嵌入式Linux中运行。

ROS是一种为机器人应用设计的分布式处理框架,集成了大量相关库和工具,目的是为了提高机器人应用开发时代码复用率, 目前ROS已经发展到ROS2,这里就演示将ROS2最新版本Foxy集成到iMX8 Linux BSP中。


本文的演示的平台来自于Toradex Apalis iMX8 ARM嵌入式平台,这是一个基于NXP iMX8QM ARM处理器,支持Cortex-A72+A53和Coretex-M4架构的计算机模块平台。



2). 准备

a).Apalis

iMX8QM 4GB WB ITARM核心版配合Ioxra载板,连接调试串口UART1(载板X22)到开发主机方便调试。



3). Apalis iMX8 Ycoto Linux 集成ROS2编译环境配置和部署

a). Apalis iMX8

Ycoto Linux 通过Ycoto/Openembedded 框架编译,具体的配置方法请参考这里,首先下载好针对Apalis iMX8适用的基于Ycoto Dunfeil版本的BSP 5.x.y编译环境。

----------------------------------

$ repo init -uhttps://git.toradex.com/toradex-manifest.git -b dunfell-5.x.y -mtdxref/default.xml

$ repo sync

----------------------------------


b). 下载meta-ros 和meta-python2 layer到上面下载好的ycoto环境

----------------------------------

$ cd …/oe-core/layers/

### fetchmeta-ros layer

$ git clone -bdunfellhttps://github.com/ros/meta-ros.git

### fetchmeta-phthon2 layer

$ git clone -bdunfell https://github.com/YoeDistro/meta-python2.git

----------------------------------


c). 配置编译环境,添加编译ROS2 Foxy版本需要的相关layer,由于目前ycoto 编译ROS还无法支持图形界面相关,因此也要在编译环境中将相关的package排除出去。

./ 添加环境变量

----------------------------------

### generateinit env

$ cd …/oe-core/

$ sourceexport

### add newenv

$ export ROS_OE_RELEASE_SERIES="dunfell"

### make newenv valid with bitbake

$ exportBB_ENV_EXTRAWHITE="$BB_ENV_EXTRAWHITE ROS_OE_RELEASE_SERIES"

----------------------------------


./ 修改build/conf/bblayers.conf 文件

----------------------------------

   ${TOPDIR}/../layers/meta-freescale-distro \

   ${TOPDIR}/../layers/meta-toradex-demos \

   ${TOPDIR}/../layers/meta-qt5 \

+  ${TOPDIR}/../layers/meta-python2 \

+  ${TOPDIR}/../layers/meta-ros/meta-ros2-foxy \

+  ${TOPDIR}/../layers/meta-ros/meta-ros2 \

+  ${TOPDIR}/../layers/meta-ros/meta-ros-common\

+  ${TOPDIR}/../layers/meta-ros/meta-ros-backports-gatesgarth\

   \

   \

   ${TOPDIR}/../layers/meta-toradex-distro \

----------------------------------


./ 修改build/conf/local.conf 文件

----------------------------------

### modify machinesetting to apalis imx8

MACHINE ?="apalis-imx8"


### addros-core only or ros-world packagegroup for all ros2-foxy packages

IMAGE_INSTALL_append= " packagegroup-ros-world"


### blacklistbelow packages which currently not supported in ycoto compilation

### detailedimpact package refer to \ /layers/meta-ros/meta-ros2-foxy/conf/ros-distro/include/foxy/ros-distro-recipe-blacklist.incand \ layers/meta-ros/meta-ros2-foxy/recipes-core/packagegroups/packagegroup-ros-world-foxy.bbfiles

ROS_WORLD_SKIP_GROUPS= " opengl qt5 qt5-widgets pyqt5 qt-gui-cpp x11 ffmpegwebots-python-modules java libomp connext gazebo coinor-libipopt gurumddsignition doosan-robot2 clang launch pugixml lanelet2-traffic-rules mongodbkobuki-ftdi ros1"


### define packagegraphviz version

PREFERRED_VERSION_graphviz= "2.40.1%"


### acceptfreescale EULA license

ACCEPT_FSL_EULA= "1"

----------------------------------


./ 修改layers/meta-ros/meta-ros2-foxy/recipes-bbappends/osqp-vendor/osqp-vendor_0.0.2-1.bbappend文件修复当前版本中的bug

----------------------------------

-SRCREV_osqp ="c536acf012d071eed3529e0147afdd419348362a"

+SRCREV_osqp ="36ad83aed022e714c2fda1f13138443150435994"

 SRCREV_qdldl ="12d56ee6b9494efee1da1e1dc6e7ac9c226f9ccf"

----------------------------------


d). 编译image和SDK

-------------------------------

# compileReference-Minimal image

$bitbake bitbake tdx-reference-minimal-image

#compile Reference-Multimedia image

$bitbake bitbake tdx-reference-multimedia-image


#compile SDK

bitbaketdx-reference-multimedia-image -c populate_sdk

-------------------------------


e). Ycoto Linux image部署

参考这里通过Toradex Easy installer将上面编译好的image更新部署到模块,目前最新季度发布版本为Ycoto Linux V5.2,这里使用Reference-Minimal BSP image进行测试



4). ROS2 Foxy测试

a). 修改ROS初始化相关脚本权限,增加执行权限

-------------------------------

root@apalis-imx8:~# chmod +x/etc/profile.d/ros/*

root@apalis-imx8:~# ls -al/etc/profile.d/ros/setup.sh                                       

-rwxr-xr-x    1 root    root          4372 Mar  9  2018/etc/profile.d/ros/setup.sh

-------------------------------


b). 通过下面命令进行ROS2 Foxy简单测试

-------------------------------

### check network connection

root@apalis-imx8:~# ping lge.com


### source setup script to export env

root@apalis-imx8:~# source/usr/bin/ros_setup.sh


### ros topic print

root@apalis-imx8:~# ros2 topic list

/parameter_events

/rosout


### ros interface print

root@apalis-imx8:~# ros2 interface list -m

……


### test

root@apalis-imx8:~# (sleep 5; ros2 topicpub /chatter std_msgs/String "data: Hello world") &

[1] 826

root@apalis-imx8:~# ros2 topic echo/chatter

publisher: beginning loop

publishing #1: std_msgs.msg.String(data='Helloworld')

publishing #2:std_msgs.msg.String(data='Hello world')

publishing #3:std_msgs.msg.String(data='Hello world')

publishing #4:std_msgs.msg.String(data='Hello world')

data: Hello world

---

publishing #5: std_msgs.msg.String(data='Helloworld')

data: Hello world

……

-------------------------------



5). 总结

本文基于NXP iMX8嵌入式平台演示了通过Ycoto Project/Openembedded框架将ROS2 Foxy集成到嵌入式Linux BSP中,目前meta-ros layer除了Foxy,还支持ROS1 melodic,ROS1 noetic,ROS2 dashing,ROS2 eloquent,其他ROS版本可以自行根据所需要的layer不同而适应修改后编译。


参考文献

https://github.com/ros/meta-ros/wiki/OpenEmbedded-Build-Instructions

https://developer.toradex.cn/knowledge-base/board-support-package/openembedded-core

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容