鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    [教程]自动化编译microROS的github仓库

    已定时 已固定 已锁定 已移动
    ROS 2相关问题
    ros2 microros stm32
    2
    11
    1.1k
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • ganyuanzhenG
      Elysia 技术大佬
      最后由 ganyuanzhen 编辑

      接前文:https://fishros.org.cn/forum/topic/2085/自动化编译microros的github仓库?_=1705806395279

      仓库链接:https://github.com/ganyuanzhen/microROSF407BinrayBuilder

      更新: 2025/5/21 上传脚本已更换为Github Artifacts,无需为仓库设置Write权限了!

      4afa797d-ef01-4a28-bd1a-d8d68697fca4-image.png

      以下为正文:

      STM32 系列芯片 microROS 自动化编译库

      这个repo可以帮助大家使用Github Actions来自动化编译microROS库。不再需要在本地搭建Docker编译环境!

      目录结构

      repo
      ├── Core
      ├── Drivers
      ├── micro_ros_stm32cubemx_utils
      └── Middlewares
      

      其中,Core, Drivers, 和 Middlewares 都是由 CubeMX 自动化生成的。而 micro_ros_stm32cubemx_utils 则是microROS的核心库,我们之后编译的静态库就是基于这个的。

      使用方法

      0. fork 并 克隆本仓库

      但是,克隆下来的仓库是根据我的需求配置的,不符合你的需求,需要按照下面的步骤修改哦~

      1. 获取 microROS 代码

      由于 microROS 代码是区分 ROS2 的版本的,因此需要根据你的需求选择不同的版本。

      仓库地址为:https://github.com/micro-ROS/micro_ros_stm32cubemx_utils

      eca1e923-522f-43b9-a148-4140c2d39e89-image.png

      注意不要直接克隆,下载压缩包就可以了!

      用你下载下来的版本替换本仓库中的 micro_ros_stm32cubemx_utils 文件夹。注意要保持文件夹名字相同!

      2. 修改 .ioc 文件并生成代码

      这里需要根据你的芯片型号来修改 .ioc 文件。在修改和重新生成代码的过程中,需要注意一下几点:

      1. 使用 FreeRTOS 中间件,

      microROS 需要使用 FreeRTOS 作为中间件,因此需要修改 .ioc 文件,将 FreeRTOS 中间件添加到 项目中。

      2. 修改 FreeRTOS 中的 Stack Size

      microROS 需要大于 10kb 的Stack Size,因此需要修改 FreeRTOS 中的 Stack Size。

      具体配置选项在 FreeRTOS -> Tasks and Queues 中,双击 defaultTask 进行修改。

      adcea8fb-4ed0-485b-9220-c15fdd88aee2-image.png

      3. 按需要设置通信协议,比如使用 USART + DMA

      1. 初始化USART并启用其DMA请求功能。
      2. 创建并配置两个DMA通道,一个用于Tx(传输),一个用于Rx(接收)。
      3. 对于每个DMA通道,将优先级设置为非常高(DMA_PRIORITY_VERY_HIGH)。
      4. 对于Rx通道,将其配置为循环模式(DMA_CIRCULAR)。
      5. 开启串口的UARTx global interrupt

      1aa98224-2b8d-4f6a-9772-1ce63eb91690-image.png

      e7d88112-a7b8-48db-b838-a17904e3019c-image.png

      4. 在 Project Manager 选项卡中,配置 Toolchain 为 Makefile

      71614bfa-9e0b-4054-ad5c-44c38b74e136-image.png

      5. 生成代码,注意 .ioc 的保存位置是否正确。

      6. 如果第一步复制好的文件夹不见了,请再复制一遍。

      3. 修改 microROS 生成脚本

      1. 修改 Makefile

      在 Makefile 中找到 build the application 部分,在上方插入以下内容:

      #######################################
      # micro-ROS addons
      #######################################
      LDFLAGS += micro_ros_stm32cubemx_utils/microros_static_library/libmicroros/libmicroros.a
      C_INCLUDES += -Imicro_ros_stm32cubemx_utils/microros_static_library/libmicroros/microros_include
      
      # Add micro-ROS utils
      C_SOURCES += micro_ros_stm32cubemx_utils/extra_sources/custom_memory_manager.c
      C_SOURCES += micro_ros_stm32cubemx_utils/extra_sources/microros_allocators.c
      C_SOURCES += micro_ros_stm32cubemx_utils/extra_sources/microros_time.c
      
      # Set here the custom transport implementation
      C_SOURCES += micro_ros_stm32cubemx_utils/extra_sources/microros_transports/dma_transport.c
      
      print_cflags:
      	@echo $(CFLAGS)
      

      注意,@echo $(CFLAGS) 前面的是tab而不是空格,如果复制下来是空格,请手动修改为tab。

      2. 修改 library_generation.sh

      默认的编译脚本是需要人机交互的,我们将其去掉以实现自动编译。

      打开 micro_ros_stm32cubemx_utils\microros_static_library\library_generation\library_generation.sh 文件,按照如下方式修改:

      将:

      if [ $RET_CODE = "0" ]; then
          echo "Found CFLAGS:"
          echo "-------------"
          echo $RET_CFLAGS
          echo "-------------"
          read -p "Do you want to continue with them? (y/n)" -n 1 -r
          echo
          if [[ $REPLY =~ ^[Yy]$ ]]
          then
              echo "Continuing..."
          else
              echo "Aborting"
              exit 0;
          fi
      else
          echo "Please read README.md to update your Makefile"
          exit 1;
      fi
      

      修改为:

      if [ $RET_CODE = "0" ]; then
          echo "Found CFLAGS:"
          echo "-------------"
          echo $RET_CFLAGS
          echo "-------------"
          # read -p "Do you want to continue with them? (y/n)" -n 1 -r
          echo
          if [[ $REPLY =~ ^[Yy]$ ]]
          then
              echo "Continuing..."
          else
              echo "Aborting";
              # exit 0;
          fi
      else
          echo "Please read README.md to update your Makefile"
          exit 1;
      fi
      

      修改前后差异如下:

      1094c040-6d3a-4e82-bb4d-9611e2c97568-image.png

      3. 将代码推送到 GitHub

      4. 开始编译

      1. 配置权限 (现在已经不需要了)

      Github 默认是不允许在Actions中读写仓库的,我们需要先配置一下权限,让它可以上传Release。

      1. 首先前往 Settings 界面

        d05264e0-5b99-4cf8-b7b4-ecbcb6e5e86c-image.png

      2. 然后,前往 Actions -> General
        1549eddf-41c9-4734-8b68-53e626b1fdaf-image.png

      3. 在页面下方,选择 Read and write permissions 选项
        c146305b-ef91-44f1-90e7-e618c2447ca5-image.png

      2. 开始编译

      1. 前往你的仓库的 Actions 页面,点击 左边的 CI 按钮,再点击右边的 Run worlflow 就可以开始编译了!。

      a4140b90-ab97-4ef8-97d2-aaa34d82a1a2-image.png

      1. 编译完成后的结果,可以在仓库的 Release 页面直接下载。

      fc8b0a6d-463f-4254-ad38-de1a451f7f0a-image.png

      我难道就没有一段英勇,美好而又虚幻的过去……幸运地写在金叶片上?

      4727958324 1 条回复 最后回复 回复 引用 1
      • 4727958324
        何念
        最后由 编辑

        大佬,问一下 你这个用在repo之后 是不是就不用执行 docker run -it --rm -v $(pwd):/project --env MICROROS_LIBRARY_FOLDER=micro_ros_stm32cubemx_utils/microros_static_library microros/micro_ros_static_library_builder:foxy 这一条命令了 最近我也在研究这个,我主要是foxy的版本 在执行这个命令的时候没有编译 ,和docker有关导致无法搞下去了, 你那边有没有foxy的版本 能不能留个联系方式,我想请教几个问题 很简单的问题 很多我基本都已经跑通了,只有一些小问题不知道怎么去做,麻烦大佬了

        ganyuanzhenG 2 条回复 最后回复 回复 引用 0
        • ganyuanzhenG
          Elysia 技术大佬 @472795832
          最后由 编辑

          @472795832 这个仓库就是为了替代docker用的

          至于foxy版本,按照上面的教程编辑就好了。

          大家选的芯片不同,在Makefile中的CFLAGS(编译器的参数)不太一样,可能不通用。

          我难道就没有一段英勇,美好而又虚幻的过去……幸运地写在金叶片上?

          1 条回复 最后回复 回复 引用 0
          • ganyuanzhenG
            Elysia 技术大佬 @472795832
            最后由 编辑

            @472795832 我也是最近才在用STM32版本哈哈(^_^)

            我难道就没有一段英勇,美好而又虚幻的过去……幸运地写在金叶片上?

            4727958324 1 条回复 最后回复 回复 引用 0
            • 4727958324
              何念 @ganyuanzhen
              最后由 编辑

              @ganyuanzhen 关注你很久了 ,我的芯片也是STM32F407VET6的,我现在就是卡在docker编译这里,搞得很难受,我看你的提示似乎没有配置RCC

              ganyuanzhenG 1 条回复 最后回复 回复 引用 0
              • 4727958324
                何念 @ganyuanzhen
                最后由 编辑

                @ganyuanzhen c6babf48-86f3-43ef-92b7-49d77cb90b12-image.png 这是为啥?因为我把我下的micro_ros_stm32cubemx_utils_build.tar这个文件解包了导致的吗,我需要原压缩文件直接上传吗?

                1 条回复 最后回复 回复 引用 0
                • 4727958324
                  何念
                  最后由 编辑

                  我的抬头就是我的QQ号,可以私下交流一下吗?

                  1 条回复 最后回复 回复 引用 0
                  • 4727958324
                    何念
                    最后由 编辑

                    e02bccda-180b-4710-9f7c-ac86162bf397-图片.png 用你的代码git clone下来 然后重新建一个库 也没编译过

                    ganyuanzhenG 1 条回复 最后回复 回复 引用 0
                    • ganyuanzhenG
                      Elysia 技术大佬 @472795832
                      最后由 编辑

                      @472795832 哈哈,我的问题,教程里少了一个配置Git仓库权限的步骤。少了这个步骤,就没法上传到Release

                      我这就去补上

                      我难道就没有一段英勇,美好而又虚幻的过去……幸运地写在金叶片上?

                      ganyuanzhenG 1 条回复 最后回复 回复 引用 0
                      • ganyuanzhenG
                        Elysia 技术大佬 @472795832
                        最后由 ganyuanzhen 编辑

                        @472795832 编译这个库,似乎不需要配置外部晶振也可以编译。不过最好还是都配置好再进行编译,避免不确定性嘛。

                        我难道就没有一段英勇,美好而又虚幻的过去……幸运地写在金叶片上?

                        1 条回复 最后回复 回复 引用 0
                        • ganyuanzhenG
                          Elysia 技术大佬 @ganyuanzhen
                          最后由 编辑

                          现在已经无需release 权限了

                          我难道就没有一段英勇,美好而又虚幻的过去……幸运地写在金叶片上?

                          1 条回复 最后回复 回复 引用 0
                          • 第一个帖子
                            最后一个帖子
                          皖ICP备16016415号-7
                          Powered by NodeBB | 鱼香ROS