ROS2 humble版本源码编译中间件FastDDS

        最近在学ros2,发现小鱼的教程里面的中间件FastDDS安装的各种包都是master版本,master版本默认是当前时间的最新版,因此对于我们后来学的人不是很友好,因为ros-humble版默认安装了fastcdr-1.0.24版本,后续学习源码编译cartographer的时候,编译会出现错误“fastcdr has no member 'deserializeArray'",经过几番资料查询,发现是fastcdr的版本不匹配,新版本将函数‘deserializeArray'修改成了‘deserialize_array’。因此,将版本调整后并实验成功编译中间件FastDDS。

1.创建文件fastrtps.repos

        由于动手学ros2教程里面的’wget http://fishros.com/tools/files/fastrtps.repos'这行命令失效了,出现‘404 Not Found',因此需要自己创建该文件。

cd fastdds_ws
touch fastrtps.repos

        用gedit或者vim打开,将以下内容输入进去

repositories:
    foonathan_memory_vendor:
        type: git
        url: https://github.com/eProsima/foonathan_memory_vendor.git
        version: v1.2.1<

<think>我们正在解决ROS 2 Humble中构建pnp_solver时出现的`rmw/init.h`头文件缺失问题。这个错误通常表明缺少必要的ROS 2中间件接口头文件,或者构建环境配置不正确。 ### 解决步骤 1. **确认ROS 2环境已正确配置** 在构建任何ROS 2包之前,必须确保ROS 2环境已正确设置。请检查是否已通过`source`命令加载了ROS 2的`setup.bash`文件。例如: ```bash source /opt/ros/humble/setup.bash ``` 如果您的ROS 2安装在非标准路径,请相应地调整路径。 2. **安装缺失的ROS 2包** `rmw/init.h`属于`rmw`接口包,该包通常包含在`rmw`实现中。请确保已安装`rmw`包: ```bash sudo apt install ros-humble-rmw ``` 3. **检查依赖包** `pnp_solver`可能依赖于其他ROS 2包。请确保所有依赖项都已安装。您可以使用`rosdep`工具安装缺失的依赖: ```bash rosdep install --from-paths src --ignore-src -y --rosdistro humble ``` 运行此命令前,请确保在ROS 2工作空间的根目录下(即包含`src`目录的层级)。 4. **确认包含路径** 在`pnp_solver`的`CMakeLists.txt`中,确保已通过`find_package`正确查找ROS 2组件,并使用`ament_target_dependencies`或`target_link_libraries`链接目标。例如: ```cmake find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) find_package(rmw REQUIRED) # 确保包含rmw包 # 在您的可执行文件或库目标中 ament_target_dependencies(your_target rclcpp rmw ) ``` 5. **重新构建工作空间** 完成上述步骤后,尝试重新构建工作空间: ```bash colcon build --symlink-install ``` 6. **检查ROS 2版本** 确保您使用的ROS 2版本Humble Hawksbill,并且所有包都针对该版本进行了更新。不同版本ROS 2头文件位置可能不同。 ### 常见问题 - 如果您的ROS 2是通过源码编译安装的,请确保已编译并安装了`rmw`包。 - 如果使用预编译版本(如Debian包),请确保所有包都来自同一个发行版(humble)。 ### 引用说明 以上步骤参考了ROS 2官方文档中关于环境配置和包依赖管理的相关内容[^1]。 §§相关问题§§ 1. 如何正确设置ROS 2工作空间? 2. ROS 2中如何管理多个中间件实现? 3. 如何诊断ROS 2构建过程中的依赖问题?</think>### ROS 2 Humble `pnp_solver` 构建错误:`rmw/init.h` 缺失解决方案 #### 问题分析 `rmw/init.h: No such file or directory` 错误表明构建系统找不到 ROS 2中间件接口头文件。这通常由以下原因导致: 1. **ROS 2 环境未正确加载** 2. **关键依赖包未安装** 3. **CMake 配置缺失** 4. **工作空间结构问题** --- ### 解决方案步骤 #### 1. 确认 ROS 2 环境加载 在构建前**必须**加载 ROS 2 环境: ```bash source /opt/ros/humble/setup.bash # 每次打开新终端都要执行 echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc # 永久生效 ``` #### 2. 安装缺失的核心依赖 `rmw/init.h` 属于 `rmw` 接口包,安装相关依赖: ```bash sudo apt update sudo apt install ros-humble-rmw* ros-humble-rcl* ros-humble-rosidl* ``` #### 3. 检查 CMakeLists.txt 配置 在 `pnp_solver` 的 `CMakeLists.txt` 中确保包含: ```cmake find_package(ament_cmake REQUIRED) find_package(rclcpp REQUIRED) # 关键依赖 find_package(rmw REQUIRED) # 明确声明依赖 # 添加头文件路径 include_directories( ${rclcpp_INCLUDE_DIRS} ${rmw_INCLUDE_DIRS} ) # 链接依赖 ament_target_dependencies(your_target rclcpp rmw ) ``` #### 4. 修复工作空间结构 确保工作空间按标准结构组织: ``` your_ws/ ├── src/ │ └── pnp_solver/ # 包含CMakeLists.txt和package.xml ├── build/ ├── install/ └── log/ ``` 重新构建: ```bash cd your_ws colcon build --symlink-install --packages-select pnp_solver ``` #### 5. 验证包含路径 手动检查头文件是否存在: ```bash ls /opt/ros/humble/include/rmw/init.h # 应存在此文件 ``` 若不存在,重装核心包: ```bash sudo apt reinstall ros-humble-rmw-implementation ``` #### 6. 清理重建 彻底清理后重建: ```bash cd your_ws rm -rf build install log # 删除构建目录 colcon build --symlink-install source install/setup.bash # 加载本地环境 ``` --- ### 补充说明 1. **DDS 实现兼容性** 如果使用特定 DDS(如 CycloneDDS/FastDDS),需安装对应适配包: ```bash sudo apt install ros-humble-rmw-cyclonedds-cpp ``` 2. **环境隔离问题** 避免同时加载多个 ROS 版本,使用 `printenv | grep ROS` 检查环境变量是否冲突。 3. **Docker 用户注意** 在容器中构建时,确保基础镜像包含完整的 ROS Humble 桌面版: ```dockerfile FROM osrf/ros:humble-desktop-full ``` > 以上解决方案参考 ROS 2 官方环境配置和构建系统文档[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值