小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
ros2 自定义 oled srv 服务,编译找不到 <fishbot_interfaces/srv/oled_control.h>
-
报错信息如下:
目录结构如下:
如图,按照鱼哥的ros2动手教程弄的 extra_packages下就是fishbot_interfaces,目录如下:
-
要解决你在ROS 2项目中遇到的找不到自定义服务文件(
<fishbot_interfaces/srv/oled_control.h>
)的问题,首先需要确保你的服务定义已经被正确包含在你的项目中,并且你的项目设置正确以包含这些文件。以下是一些步骤和建议,帮助你解决这个问题:1. 检查服务定义
首先,确保你已经在
fishbot_interfaces
包中正确定义了oled_control.srv
服务文件。通常,这个文件位于fishbot_interfaces/srv
目录下,并且文件扩展名为.srv
。例如,
fishbot_interfaces/srv/oled_control.srv
的内容可能看起来像这样:--- int32 message --- bool success
2. 检查CMakeLists.txt
在
fishbot_interfaces
包的CMakeLists.txt
文件中,确保你已经使用find_package
指令来查找依赖(如果有的话),并且已经通过rosidl_generate_interfaces
来生成ROS 2接口文件。例如:
cmake_minimum_required(VERSION 3.0.2) project(fishbot_interfaces) # Find dependencies find_package(ament_cmake REQUIRED) find_package(rosidl_default_generators REQUIRED) # Generate interfaces rosidl_generate_interfaces(${PROJECT_NAME} "srv/oled_control.srv" ) ament_package()
3. 检查setup.py
如果你的ROS 2包是一个Python包,
setup.py
也需要包含你的服务定义。通常,在纯C++项目中这一步可以跳过。4. 检查你的工作空间
确保你的ROS 2工作空间(workspace)已经被正确构建。你可以在包含
fishbot_interfaces
包的工作空间目录下运行以下命令来构建整个工作空间:colcon build --packages-select fishbot_interfaces
或者如果你想要构建整个工作空间:
colcon build
5. 包含路径
确保在你的使用
fishbot_interfaces
包的CMakeLists.txt中,已经包含了fishbot_interfaces
包,这样编译器就能找到服务头文件。你可以通过find_package
来实现这一点:find_package(fishbot_interfaces REQUIRED)
然后在你的源代码中包含头文件:
#include <fishbot_interfaces/srv/oled_control.hpp>
注意ROS 2中,自动生成的接口文件使用
.hpp
扩展名,而不是.h
。6. 清理和重建
如果更改了CMakeLists.txt或setup.py文件,有时需要清理旧的构建文件并重新构建。你可以通过以下命令来清理工作空间:
colcon build --packages-select fishbot_interfaces --symlink-install --packages-skip-dependencies --cmake-clean-first
或者如果你想要清理整个工作空间:
colcon build --symlink-install --packages-skip-dependencies --cmake-clean-first
7. 检查IDE设置
如果你在使用IDE(如VSCode、CLion等),确保IDE的项目设置包括了ROS 2工作空间的包含路径。
按照这些步骤操作后,你的ROS 2项目应该能够找到并正确包含
fishbot_interfaces/srv/oled_control.hpp
头文件。如果问题仍然存在,请检查每一步是否有遗漏或错误。
以上为生成回答,仅供参考~
-
@joe 需要重新构建microros,你展示的构建结果是x86主机上的,pio需要的是esp32-xtenor 交叉编译的头文件和库。请参考视频教程操作试试
-
@小鱼 删除 libmicroros 后 ,重新编译 一致 downloading
Requirement already satisfied: importlib-resources in /home/everbright/.platformio/penv/lib/python3.8/site-packages (6.4.4)
Requirement already satisfied: zipp>=3.1.0 in /home/everbright/.platformio/penv/lib/python3.8/site-packages (from importlib-resources) (3.20.1)
Installing pyyaml with pip at PlatformIO environment
/home/everbright/.platformio/penv/bin/python -m pip install pyyaml
Requirement already satisfied: pyyaml in /home/everbright/.platformio/penv/lib/python3.8/site-packages (6.0.2)
Installing markupsafe==2.0.1 with pip at PlatformIO environment
/home/everbright/.platformio/penv/bin/python -m pip install markupsafe==2.0.1
Requirement already satisfied: markupsafe==2.0.1 in /home/everbright/.platformio/penv/lib/python3.8/site-packages (2.0.1)
Configuring featheresp32 with transport serial
Downloading micro-ROS dev dependencies