【ROS2】MicroROS构建静态包用于Zynq7020开发

由于 MicroROS 的构建环境不适用于 Zynq7020 裸机应用开发:无法调试、无法烧写、构建环境复杂,经过一番搜索之后发现可以直接构建外部静态链接库用于外部环境开发调试。

  • 宿主机:Ubuntu 18.04

参考链接

尝试生成 M0 静态库

  1. 安装 Docker

  2. 使用 Docker 拉取用于生成 libmicroros 静态包的镜像

    1
    2
    docker pull microros/micro_ros_static_library_builder:galactic
    docker pull microros/base:galactic
  3. 拉取测试代码

    1
    2
    git clone https://github.com/micro-ROS/micro_ros_arduino.git
    cd micro_ros_arduino
  4. 尝试

    这里开启了代理服务器,网络较好的时候不需要

    1
    docker run -it --rm -v $(pwd):/project --env MICROROS_LIBRARY_FOLDER=extras --env HTTP_PROXY="http://192.168.2.30:7890" --env HTTPS_PROXY="http://192.168.2.30:7890" --env NO_PROXY="192.168.*.*,*.biteax.com,*.szc188.com"  microros/micro_ros_static_library_builder:galactic -p cortex_m0

    生成的静态库在 src/cortex-m0plus/libmicroros.a,编译器中加入 -l microros 链接他,当然还需要添加搜索路径

    到此大概了解了镜像的用法,就是生成 MicroROS 的库文件和相对应的头文件

生成 A9 静态库

因为arduino会生成cpp文件,而且头文件都是Arduino的,不太适合我们移植,所以这里用 stm32cubemx 的包进行修改

  1. 下载软件包

    1
    2
    git clone https://github.com/micro-ROS/micro_ros_stm32cubemx_utils.git
    cd micro_ros_stm32cubemx_utils
  2. 尝试生成

    1
    docker run -it --rm -v $(pwd):/project --env MICROROS_LIBRARY_FOLDER=microros_static_library --env HTTP_PROXY="http://192.168.2.30:7890" --env HTTPS_PROXY="http://192.168.2.30:7890" --env NO_PROXY="192.168.*.*,*.biteax.com,*.szc188.com"  microros/micro_ros_static_library_builder:galactic

    中间出来了个需要输入的,我选择了个 ‘y’

    生成的头文件和静态库文件在 microros_static_library/libmicroros 目录下

    再配合上 extra_sources 目录下的自定义 内存管理、时间、传输管理 源文件就可以实现传输了

    样例程序 sample_main.c

    具体参考此处

  3. 创建一个差不多的项目

    1
    2
    3
    mkdir micro_ros_zynq7_utils
    cd micro_ros_zynq7_utils
    cp -r ../micro_ros_stm32cubemx_utils/microros_static_library ./

    当前目录结构如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    .
    └── microros_static_library
    └── library_generation
    ├── colcon.meta
    ├── extra_packages
    │   └── extra_packages.repos
    ├── library_generation.sh
    └── toolchain.cmake

    3 directories, 4 files
  4. 使用 VSCode 打开当前目录

  5. 修改一下

    1. 因为Zynq相对于单片机来说最不缺的就是内存,那么就要打开一些限制,打开 microros_static_library/library_generation/colcon.meta,找到 rmw_microxrcedds

      1. 修改 RMW_UXRCE_MAX_NODES3

      2. 修改 RMW_UXRCE_MAX_PUBLISHERS100

      3. 修改 RMW_UXRCE_MAX_SUBSCRIPTIONS100

      4. 修改 RMW_UXRCE_MAX_SERVICES30

      5. 修改 RMW_UXRCE_MAX_CLIENTS30

      6. 修改 RMW_UXRCE_MAX_HISTORY10

      7. 修改 RMW_UXRCE_TRANSPORTcustom

    2. 打开 microros_static_library/library_generation/library_generation.sh ,找到 ######## Trying to retrieve CFLAGS ######## 将这部分代码(到 ######## Build ########)注释掉,然后添加以下代码

      1
      export RET_CFLAGS="-Wall -O0 -g3 -c -fmessage-length=0 -mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard -MMD -MP"

      这个可以自己创建一个工程,到 Vitis 的编译日志里找到

  6. 再次用上面的命令进行编译

    这次就得到了我们想要的静态库和头文件,放到工程中就可以使用了

    工程里需要设置头文件搜索路径,静态库搜索路径,静态库名称

代理的使用

这个仅限于Linux下使用,Windows下不支持串口

1
docker run -it --rm -v /dev:/dev --privileged --net=host microros/micro-ros-agent:galactic serial --dev /dev/ttyUSB0 -v6

【ROS2】MicroROS构建静态包用于Zynq7020开发

https://biteax.com/9f7dbab2.html

作者

石志超

发布于

2022-04-20

更新于

2023-09-27

许可协议