【智路】智路OS 组件开发基础

https://airos-edge.readthedocs.io/zh/latest/dev_guide/dev_guide.html

智路OS组件开发的整体设计理念是:

  • 框架提供基类及接口,开发者实现派生类
  • 派生类将数据通过回调或者参数的方式传递给框架
  • 框架加载组件进行运行

所有使用包管理工具创建的文件目录基本相同,以下分别是设备、应用、服务的默认包目录

1 开发

智路OS所有组件都是以继承基类的形式开发,以应用为例,其中example_app.h的内容如下所示

自定义实现的ExampleApp需要继承智路OS规定的基类AirOSApplication,并且实现Init和Start接口

框架在启动时会加载该文件编译的动态库并且调用自定义的Init和Start方法,以此实现应用在智路OS上的运行

在源文件中,需要进行模块的注册,框架会根据名称进行加载,每种组件的注册方式有区别,后续小节会详细介绍

AIROS_APPLICATION_REG_FACTORY(ExampleApp, "example_app")

配置

使用上述方式注册后,需要在conf文件夹的默认文件app_lib_cfg.pb修改注册的名称和最终编译的so的名称,使得框架能够加载

so_name: "libexample_app.so"
app_name: "example_app"

2 编译

Bazel

新创建的包中.bazelrc、.bazelversion、WORKSPACE、BUILD为Bazel构建相关配置,如工程使用CMake则不需要使用,构建脚本模板仅提供基础的依赖,如需修改请参考bazel官方文档

  • .bazelrc:Bazel默认的构建配置,包含默认SDK的链接路径、默认链接的系统库等,相机和感知部分会增加cuda的依赖,如果实现中也使用到了cuda或者其他依赖,可以在此增加。

  • .bazelversion: 配置bazel的版本,默认5.0.0
  • BUILD:Bazel的构建脚本,需要注意以下规则:
    • 智路OS派生类的动态依赖库必须以cc_binary标签编译,否则在编译时依赖库并不寻找所有符号,导致在运行时会因符号找不到而出现问题。
    • 模板默认依赖了智路OS的SDK,其他第三方库依赖需要使用智路OS的版本,具体可以查看WORKSPACE里指定的第三方库路径
    • linkshared=True代表本规则生成动态库,linkstatic=True代表deps依赖的规则中优先以静态的方式依赖,具体使用方式参考官方文档

  • WORKSPACE:Bazel工作空间标识,一个包为一个工作空间,标识了包的依赖路径,方便在BUILD中以@的格式进行引用

CMake

新创建的包中CMakeLists.txt为默认的cmake构建脚本,默认依赖了智路OS的SDK和部分第三方库供参考

新增依赖库

如果开发者需要新增SDK镜像内不存在的依赖库,需要将相应的库放置到包内的lib目录,最终才能打包发布。

如果仅安装在系统路径,即使在本机打包安装运行成功,当发布安装到其他机器会出现库缺失的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值