ROS环境下部分编译异常解决方案

1 异常报警:package ‘orocos-bfl’ not found:  

-- Found PkgConfig: /usr/bin/pkg-config (found version "0.26")
-- checking for module 'orocos-bfl'
--   package 'orocos-bfl' not found
CMake Error at /usr/share/cmake-2.8/Modules/FindPkgConfig.cmake:283 (message):
  A required package was not found
Call Stack (most recent call first):
  /usr/share/cmake-2.8/Modules/FindPkgConfig.cmake:337 (_pkg_check_modules_internal)
  CMakeLists.txt:5 (pkg_check_modules)

  解决方案: 参考链接:ROS 下navigation/robot_pose_ekf编译报错_Start_From_Scratch的博客-CSDN博客 安装bfl包:  

sudo apt-get install ros-indigo-bfl

  2 编译报警:not providing “FindCeres.cmake” in CMAKE_MODULE_PATH  

CMake Error at CMakeLists.txt:32 (find_package):
  By not providing "FindCeres.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Ceres", but
  CMake did not find one.


  Could not find a package configuration file provided by "Ceres" with any of
  the following names:


    CeresConfig.cmake
    ceres-config.cmake


  Add the installation prefix of "Ceres" to CMAKE_PREFIX_PATH or set
  "Ceres_DIR" to a directory containing one of the above files.  If "Ceres"
  provides a separate development package or SDK, be sure it has been
  installed.

  原因:上述报警可能是ceres-solver包没有安装成功,或没有编译ceres-solver包 解决方案:   (1)先将ceres-solver放到待编译工作空间下,与cartographer同目录进行编译,若编译成功,则继续;(我遇到的问题在这一步解决) (2)若还有该编译错误,则根据安装教程 从新安装ceres-solver库。   3 编译报警":This workspace contains non-catkin packages in it  

CMake Error at /opt/ros/indigo/share/catkin/cmake/catkin_workspace.cmake:95 (message):
  This workspace contains non-catkin packages in it, and catkin cannot build
  a non-homogeneous workspace without isolation.  Try the
  'catkin_make_isolated' command instead.
Call Stack (most recent call first):
  CMakeLists.txt:63 (catkin_workspace)

  根据报警提示:  

This workspace contains non-catkin packages in it, and catkin cannot build a non-homogeneous workspace without isolation.
该工作空间包含了非catkin类型的package,并且catkin不能编译一个“非同步的工作空间” without isolation

  解决方案:  

'catkin_make_isolated' command instead
使用‘catkin_make_isolated’代替‘catkin_make’进行编译

  4 编译报警:not providing “FindEigen3.cmake” in CMAKE_MODULE_PATH  

CMake Error at CMakeLists.txt:33 (find_package):
  By not providing "FindEigen3.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "Eigen3", but
  CMake did not find one.


  Could not find a package configuration file provided by "Eigen3" with any
  of the following names:


    Eigen3Config.cmake
    eigen3-config.cmake


  Add the installation prefix of "Eigen3" to CMAKE_PREFIX_PATH or set
  "Eigen3_DIR" to a directory containing one of the above files.  If "Eigen3"
  provides a separate development package or SDK, be sure it has been
  installed.

  方案一: (1)首先在主文件中搜索“FindEigen3.cmake”文件,搜索到后将其复制到/src/cartographer/cmake/modules/ 目录下(或 将FindEigen3.cmake拷贝到与CMakeLists.txt同目录下),再进行编译即可。   (2)若(1)中方法没有解决问题,则参考链接https://answers.ros.org/question/250727/error-findeigen3cmake-during-install-kinetic-on-rpi/,在(1)的基础上,在cartographer所在的CMakeLists.txt中find_package(Eigen3 REQUIRED)对应位置添加如下指令,在进行编译即可。  

set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR})
find_package(Eigen3 REQUIRED)
include_directories(${EIGEN3_INCLUDE_DIR})

  (3)若(1)中没有搜索到FindEigen3.cmake文件,则说明系统中没有Eigen3,则参考链接https://www.jianshu.com/p/20eb596b7eb5,下载并安装Eigen3,并再按(1)中将对应的文件进行拷贝处理。   下载网址: eigen官网   方案二: 参考链接:eigen3安装_hoppss-CSDN博客_eigen3 安装eigen3到系统中:  

#github 有个mirror,版本3.3.4 from 2017 
git clone https://github.com/eigenteam/eigen-git-mirror 
#安装 
cd eigen-git-mirror 
mkdir build 
cd build 
cmake .. 
sudo make install 
#安装后,头文件安装在/usr/local/include/eigen3/

  4 编译报警:Could NOT find Bullet  

CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:108 (message):
  Could NOT find Bullet (missing: BULLET_DYNAMICS_LIBRARY
  BULLET_COLLISION_LIBRARY BULLET_MATH_LIBRARY BULLET_SOFTBODY_LIBRARY
  BULLET_INCLUDE_DIR)
Call Stack (most recent call first):
  /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:315 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake-2.8/Modules/FindBullet.cmake:76 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  CMakeLists.txt:15 (find_package)

  分析:根据报警提示,缺少bullet库 解决方案,安装bullet库 。参考链接:ubuntu系统下ros系统问题的解决方法示例_grootLee-CSDN博客  

sudo apt-get install libbullet-dev

  5 编译报警 :Could NOT find SDL  

CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:108 (message):
  Could NOT find SDL (missing: SDL_LIBRARY SDL_INCLUDE_DIR)
Call Stack (most recent call first):
  /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:315 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake-2.8/Modules/FindSDL.cmake:176 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  CMakeLists.txt:16 (find_package)

  分析:根据报警提示,缺少SDL库 解决方案,安装SDL库 。参考链接:ubuntu系统下ros系统问题的解决方法示例_grootLee-CSDN博客  

sudo apt-get install libsdl1.2-dev

  7 编译报警:Could NOT find SDL_image  

CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:108 (message):
  Could NOT find SDL_image (missing: SDL_IMAGE_LIBRARIES
  SDL_IMAGE_INCLUDE_DIRS)
Call Stack (most recent call first):
  /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:315 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake-2.8/Modules/FindSDL_image.cmake:79 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
  CMakeLists.txt:17 (find_package)

  分析:根据报警提示,缺少SDL_image库 解决方案,安装SDL_image库 。参考链接:ubuntu系统下ros系统问题的解决方法示例_grootLee-CSDN博客  

sudo apt-get install libsdl-image1.2-dev 
### 在 Ubuntu 中通过 ROS 编译 Node 的方法及相关问题解决方案 #### 1. 创建 ROS 工作空间 为了编译一个 ROS 节点,首先需要创建一个工作区(Workspace)。以下是具体的操作步骤: ```bash mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_init_workspace ``` 上述命令会在 `~/catkin_ws` 下创建一个名为 `src` 的目录作为源码存储位置,并初始化该目录为 Catkin 工作区[^5]。 --- #### 2. 添加节点到工作空间 将要编译ROS 节点放入 `src` 文件夹中。如果是一个新的包,则可以通过以下命令创建一个新的 ROS 包: ```bash cd ~/catkin_ws/src catkin_create_pkg my_package rospy std_msgs ``` 此命令会创建一个名为 `my_package` 的新包,依赖项包括 `rospy` 和 `std_msgs`。 --- #### 3. 配置 CMakeLists.txt 和 package.xml 在编译前,确保 `CMakeLists.txt` 和 `package.xml` 文件已正确配置。这些文件定义了项目的构建规则和依赖关系。常见的错误可能来源于未声明所需的依赖库或缺少必要的宏调用。 对于 C++ 节点,在 `CMakeLists.txt` 中需添加以下内容来指定可执行文件及其对应的源文件: ```cmake add_executable(my_node src/my_node.cpp) target_link_libraries(my_node ${catkin_LIBRARIES}) ``` 而对于 Python 节点,则无需修改 `CMakeLists.txt`,只需确保脚本被标记为可执行即可: ```bash chmod +x scripts/my_python_node.py ``` 同时更新 `package.xml` 来反映新增加的功能模块以及其外部依赖项。 --- #### 4. 构建工作空间 完成以上准备工作之后,切换至根目录并运行以下命令以触发编译过程: ```bash cd ~/catkin_ws/ catkin_make source devel/setup.bash ``` 这里需要注意的是,某些情况下可能会因为环境变量设置不当或者工具链缺失而导致失败。例如,在使用 ROS Noetic 进行 `catkin_make` 时可能出现类似于 “找不到 cmake 模块路径” 的提示信息。此时可以根据实际情况采取措施修复,比如重新安装丢失组件或是调整全局 PATH 参数等[^2]。 另外,也可以利用更现代化的方式来进行构建管理,即采用 colcon 命令代替传统的 catkin_tools 方法特别适合处理多平台交叉开发场景下的复杂工程项目结构设计需求[^1]: ```bash colcon build --symlink-install source install/local_setup.bash ``` --- #### 5. 解决常见编译错误 即使遵循标准流程操作仍有可能碰到各种类型的异常状况发生。下面列举几个典型例子供参考学习之用: - **Missing Dependencies**: 如果系统报告缺乏特定软件包支持的话,请先确认目标机器上确实已经预装好对应版本号以上的所有必需品;然后借助 rosdep 自动化解决机制快速补齐差额部分[^3]: ```bash sudo apt update && rosdep update rosdep install --from-paths src --ignore-src -r -y ``` - **Path Configuration Issues**: 当发现加载资源过程中定位不到预期地址的时候,记得每次更改完配置后都要及时刷新当前 shell session 所关联的状态数据以便生效最新改动成果: ```bash source ~/.bashrc ``` - **Version Mismatch Problems**: 不同发行版之间可能存在 API 接口差异从而引发兼容性冲突现象。针对这种情况建议查阅官方文档获取权威指导说明材料辅助排查定位根本原因所在之处[^4]. --- ### 总结 综上所述,从零开始搭建基于 ROS 平台的应用程序涉及多个环节紧密配合才能顺利完成整个生命周期管理工作流。无论是传统意义上的 catkin_make 方式还是新兴趋势代表性的 colcon 技术路线都各有千秋值得深入探索研究下去不断积累实践经验提升技术水平层次高度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值