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

如何在ROS中引入Aruco库并解决catkin_make编译错误

ROS Aruco依赖包编译错误修复方案

问题背景

手动编译安装Aruco库(cmake/make/sudo make install均无报错),但ROS工作空间执行catkin_make时出现编译错误,推测原因是Aruco库的头文件与cpp文件同存于src目录,导致CMake无法正确识别头文件路径。当前使用的CMakeLists.txt代码如下:

cmake_minimum_required(VERSION 2.8.3)
project(aruco_mapping)

find_package(OpenCV REQUIRED)
find_package(aruco REQUIRED)

find_package(catkin REQUIRED COMPONENTS 
             roscpp
             message_generation
             image_transport
             cv_bridge
             tf
             aruco
             visualization_msgs
             camera_calibration_parsers)

include_directories(${catkin_INCLUDE_DIRS} }
                    ${PROJECT_SOURCE_DIR}/include/)
                    

include_directories(${PROJECT_SOURCE_DIR}/src/)


SET(SOURCES ${PROJECT_SOURCE_DIR}/src/main.cpp
            ${PROJECT_SOURCE_DIR}/src/aruco_mapping.cpp)
   
SET(HEADERS ${PROJECT_SOURCE_DIR}/include/aruco_mapping.h)

add_message_files(FILES ArucoMarker.msg)

generate_messages(DEPENDENCIES
                  std_msgs
                  geometry_msgs)
   
catkin_package(
  INCLUDE_DIRS include
  LIBRARIES
)

add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS})
add_dependencies(${PROJECT_NAME} ${catkin_EXPORTED_TARGETS} aruco_mapping_gencpp )
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS} ${aruco_LIBS} ${ROS_LIBRARIES} ${catkin_LIBRARIES})

修复步骤

1. 修正语法错误

原代码中include_directories行多了一个冗余的闭合大括号,直接导致CMake解析失败,修正后:

include_directories(${catkin_INCLUDE_DIRS}
                    ${PROJECT_SOURCE_DIR}/include/)

2. 添加Aruco头文件路径

由于手动安装的Aruco库头文件存放在src目录,需将该路径添加到include_directories中:

  • 若已知Aruco库的src路径(比如/usr/local/src/aruco),直接添加:
    include_directories(/path/to/your/aruco/src)
    
  • 若不确定路径,用find_path自动查找:
    find_path(ARUCO_INCLUDE_DIR aruco.h PATHS /usr/local/src/aruco /usr/src/aruco)
    include_directories(${ARUCO_INCLUDE_DIR})
    

3. 移除catkin依赖中的冗余项

原代码在catkin REQUIRED COMPONENTS中重复添加了aruco,但手动安装的Aruco并非ROS组件,catkin无法识别,需删除该条目:

find_package(catkin REQUIRED COMPONENTS 
             roscpp
             message_generation
             image_transport
             cv_bridge
             tf
             visualization_msgs
             camera_calibration_parsers)

4. 优化catkin_package配置

在catkin_package中明确声明依赖的头文件、库和外部依赖,确保其他包能正确引用:

catkin_package(
  INCLUDE_DIRS include ${ARUCO_INCLUDE_DIR}
  LIBRARIES ${PROJECT_NAME}
  CATKIN_DEPENDS roscpp message_generation image_transport cv_bridge tf visualization_msgs camera_calibration_parsers
  DEPENDS OpenCV aruco
)

5. 简化源文件路径引用

用相对路径替代绝对路径,提升配置文件可读性:

SET(SOURCES src/main.cpp
            src/aruco_mapping.cpp)
   
SET(HEADERS include/aruco_mapping.h)

6. 清理冗余链接库

${ROS_LIBRARIES}已包含在${catkin_LIBRARIES}中,删除重复项:

target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS} ${aruco_LIBS} ${catkin_LIBRARIES})

修改后的完整CMakeLists.txt

cmake_minimum_required(VERSION 2.8.3)
project(aruco_mapping)

find_package(OpenCV REQUIRED)
find_package(aruco REQUIRED)
# 自动查找Aruco头文件路径
find_path(ARUCO_INCLUDE_DIR aruco.h PATHS /usr/local/src/aruco /usr/src/aruco)

find_package(catkin REQUIRED COMPONENTS 
             roscpp
             message_generation
             image_transport
             cv_bridge
             tf
             visualization_msgs
             camera_calibration_parsers)

include_directories(${catkin_INCLUDE_DIRS}
                    ${PROJECT_SOURCE_DIR}/include/
                    ${ARUCO_INCLUDE_DIR})

SET(SOURCES src/main.cpp
            src/aruco_mapping.cpp)
   
SET(HEADERS include/aruco_mapping.h)

add_message_files(FILES ArucoMarker.msg)

generate_messages(DEPENDENCIES
                  std_msgs
                  geometry_msgs)
   
catkin_package(
  INCLUDE_DIRS include ${ARUCO_INCLUDE_DIR}
  LIBRARIES ${PROJECT_NAME}
  CATKIN_DEPENDS roscpp message_generation image_transport cv_bridge tf visualization_msgs camera_calibration_parsers
  DEPENDS OpenCV aruco
)

add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS})
add_dependencies(${PROJECT_NAME} ${catkin_EXPORTED_TARGETS} aruco_mapping_gencpp )
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS} ${aruco_LIBS} ${catkin_LIBRARIES})

内容的提问来源于stack exchange,提问作者George Parlitsis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:25:20