You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将acados生成代码集成到C++项目并通过CMake构建?

如何将acados生成的C代码集成到C++控制器项目中?

目标

我想用acados开发一个控制单摆的C++控制器,以此学习acados在实际控制器开发中的应用。

已完成操作

  • 通过acados Python接口编写OCP求解代码,用CMakeBuilder生成了包含自动生成的CMakeLists.txt的c_generated_code文件夹
  • 进入c_generated_code目录执行make,成功生成并运行main_pendulum和main_sim_pendulum可执行文件,确认代码生成无问题
  • 启用生成的CMakeLists.txt相关选项,配置ACADOS_SOURCE_DIR和LD_LIBRARY_PATH环境变量后,生成的可执行文件能正常运行,但编译过程不需要依赖这些环境变量
  • 在自定义C++文件中引入c_generated_code/acados_solver_pendulum.h,修改c_generated_code下的CMakeLists.txt添加导出配置,根目录CMakeLists.txt添加子目录及链接库配置,但编译时出现错误:fatal error: 'acados/utils/types.h' file not found

核心问题

  1. 集成acados生成代码时,C++文件需要包含哪些头文件?
  2. 如何正确配置CMake来构建整个项目?

补充信息

  • Python生成的CMake编译输出显示所有目标构建成功
  • 项目目录结构已明确

解决方案

1. 头文件包含

  • 必须包含acados生成的求解器头文件:#include "acados_solver_pendulum.h"
  • 生成代码依赖的acados核心头文件(如acados/utils/types.h)无需手动在代码中直接包含,只要CMake配置正确,编译器会自动识别并引入这些依赖路径。

2. CMake配置步骤

方式一:复用生成代码的CMake配置

c_generated_code下自动生成的CMakeLists.txt已包含完整的依赖配置,直接在根目录CMakeLists.txt中引入子目录并链接库即可:

cmake_minimum_required(VERSION 3.10)
project(pendulum_controller)

# 添加acados生成代码的子目录
add_subdirectory(c_generated_code)

# 定义你的C++控制器目标
add_executable(your_controller your_controller.cpp)

# 链接acados生成的求解器库
target_link_libraries(your_controller PRIVATE acados_solver_pendulum)

# 指定acados安装路径(如果不是全局安装)
if(NOT DEFINED ACADOS_SOURCE_DIR)
    set(ACADOS_SOURCE_DIR "/path/to/your/acados")
endif()
include_directories(${ACADOS_SOURCE_DIR}/include)
link_directories(${ACADOS_SOURCE_DIR}/lib)

方式二:修复头文件路径错误

编译报错'acados/utils/types.h' file not found是因为CMake未将acados核心头文件目录加入包含路径。在根目录或c_generated_code的CMakeLists.txt中添加:

# 引入acados核心头文件目录
include_directories(${ACADOS_SOURCE_DIR}/include)

配置CMake时通过命令行传递acados路径:

cmake .. -DACADOS_SOURCE_DIR=/path/to/your/acados

注意事项

  • 无需修改c_generated_code中的CMakeLists.txt添加导出配置,原配置已满足需求
  • 若acados通过conda安装,ACADOS_SOURCE_DIR通常为${CONDA_PREFIX}/lib/pythonX.X/site-packages/acados(替换X.X为你的Python版本)
  • 编译阶段不需要LD_LIBRARY_PATH,但运行时需确保acados库文件可被找到,可通过target_link_libraries直接链接,或运行前设置环境变量

内容的提问来源于stack exchange,提问作者MIKE PAPADAKIS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 22:55:41