Apollo 自动驾驶工程 x86迁移到ARM ORIN

概述 最近工作主要关于自动驾驶工程跨平台迁移,从原来的X86架构工控机形式迁移到英伟达Orin Soc,由于Orin是ARM以及这个嵌入式平台的内核是定制的,所以遇到了很多问题,这里分享出来

在容器里使用CUDA计算在ORIN平台

一开始使用的是ubuntu cuda作为基础镜像,并没有专门使用英伟达Jetson平台的L4T基础镜像,导致在容器里初始化CUDA一直失败,做了一些实验,同样的代码同样的可执行文件在容器外就可以初始化成功,使用L4T作为基础镜像就没有问题,英伟达L4T基础镜像Github上L4T镜像Dockerfile同时启动选项中要加上

 docker run --gpus all

或者

 docker run --runtime=nvidia

或者使用

nvidia-docker

作为启动项.原因推测的话使用官方的基础镜像CUDA 挂载才是正确的,有知道的大神可以补充。

ARM平台的适配问题

这里主要有两点问题

  • 一个是整个工程的依赖库都要切换到Arm平台的
  • apollo cyber中关于协程要更新到比较新的commit,支持了Arm相关指令集
cyber/croutine/detail/routine_context.cc

例如在上面这个文件里

#ifdef __aarch64__
  char *sp = ctx->stack + STACK_SIZE - sizeof(void *);
#else
  char *sp = ctx->stack + STACK_SIZE - 2 * sizeof(void *);
#endif

也可以在整个工程搜索

 #ifdef __aarch64__ 

关键字和百度apollo github代码工程作比较,看哪里需要补充,编译器会自动识别走aarch64分支。
关于arm平台的其他一些问题可以谷歌得到。如果有问题可以提出来进行补充。

一些其他问题

由于整个apollo cyber采取的是分布式节点通讯方式,所以建议一个一个模块的进行编译和适配。整个工程的迁移顺序应如下

  1. 整个工程Docker image的编译,后续所有编译和运行都在这个镜像里,所以应先把镜像编译出来。遇到问题可以谷歌。这个过程比较耗时,目前是我是在orin上直接进行编译,没有使用交叉编译。
  2. cyber的编译以及运行
  3. 各个模块,例如localization,perception等模块的编译运行。

有用的小工具

可视化查看cpu以及gpu使用情况工具jtop

git clone https://github.com/rbonghi/jetson_stats.git

注意在这里进入jtop crtl菜单可以把功耗选到最大,否则CPU和GPU频率会被限制。ORIN CPU最大频率在2.2GHZ,GPU最大频率在1.3GHZ。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 22
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值