小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
服务接口报错
-
CMake Error at /opt/ros/humble/share/ament_cmake_target_dependencies/cmake/ament_target_dependencies.cmake:77 (message):
ament_target_dependencies() the passed package name 'test_serivce_rclcpp'
was not found before
Call Stack (most recent call first):
CMakeLists.txt:22 (ament_target_dependencies)
CMakeLists.txt文件如下配置:
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(rosidl_default_generators REQUIRED)
find_package(test_serivce_rclcpp REQUIRED)
rosidl_generate_interfaces(${PROJECT_NAME}
"srv/CheckFloat.srv"
)add_executable(check_float_client src/check_float_client.cpp)
target_include_directories(check_float_client PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>)
target_compile_features(check_float_client PUBLIC c_std_99 cxx_std_17) # Require C99 and C++17
ament_target_dependencies(
check_float_client
"rclcpp"
"test_serivce_rclcpp"
)install(TARGETS check_float_client
DESTINATION lib/${PROJECT_NAME})add_executable(check_float_server src/check_float_server.cpp)
target_include_directories(check_float_server PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>)
target_compile_features(check_float_server PUBLIC c_std_99 cxx_std_17) # Require C99 and C++17ament_target_dependencies(
check_float_server
"rclcpp"
"test_serivce_rclcpp"
)install(TARGETS check_float_server
DESTINATION lib/${PROJECT_NAME})
package.xml如下:<buildtool_depend>ament_cmake</buildtool_depend>
<depend>rclcpp</depend>
<depend>example_ros2_interfaces</depend><test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend><export>
<build_type>ament_cmake</build_type>
</export>
报错
-
这个错误表明CMake在尝试解析依赖关系时找不到名为
test_serivce_rclcpp
的包。从错误信息和你提供的CMakeLists.txt
和package.xml
文件来看,有几个潜在的问题需要解决:-
拼写错误:在
CMakeLists.txt
中,find_package(test_serivce_rclcpp REQUIRED)
的test_serivce_rclcpp
可能是拼写错误。你可能想写的是test_service_rclcpp
或者另一个包名。请检查你的工作空间或ROS 2包索引中是否确实存在test_serivce_rclcpp
这个包。 -
未安装的依赖:如果
test_service_rclcpp
(或正确的包名)是一个外部包,你需要确保它已经被安装在你的ROS 2工作空间中。你可以使用colcon build --packages-select your_package_name
来构建你的工作空间(替换your_package_name
为你的工作空间中的包名),并确保所有依赖都已满足。 -
包名不一致:在
CMakeLists.txt
中引用的包名和在package.xml
中列出的依赖可能不一致。你需要确保两者都使用了正确的包名。 -
错误的依赖:如果
test_service_rclcpp
是你自己的包,并且它是作为服务接口的一部分,那么你可能不需要将它作为一个依赖项添加到find_package
中。相反,你应该确保在CMakeLists.txt
中正确生成了服务接口,并在你的客户端和服务器可执行文件中包含了必要的头文件。 -
package.xml
文件:在package.xml
中,你应该列出所有你的包所依赖的外部包。如果test_service_rclcpp
是一个你正在开发的包,并且它位于同一个工作空间中,那么你可能不需要在package.xml
中列出它作为一个依赖项,除非它是一个元包(meta-package)。但是,如果你的包依赖于另一个工作空间中的包,你需要确保那个工作空间已经被构建并安装,或者你已经将那个包的源代码包含在你的工作空间中。 -
重新同步工作空间:如果你添加了新的包或更改了
package.xml
文件,确保你已经重新同步了你的工作空间。你可以使用colcon build --symlink-install
来构建和安装你的工作空间,并使用source install/setup.bash
(或setup.zsh
,取决于你的shell)来设置环境变量。
解决以上问题后,你应该能够成功编译你的ROS 2包。
以上为生成回答,仅供参考~
-
-
@3279725327 这个我遇到过好像是你的接口驱动的问题
-
@3279725327 尝试更新下电脑上板子的驱动程序
-
@867975819 怎么更新呢
-
@867975819 解决好久一直没找到解决方法
-
@3279725327 在 服务接口报错 中说:
CMake Error at /opt/ros/humble/share/ament_cmake_target_dependencies/cmake/ament_target_dependencies.cmake:77 (message):
ament_target_dependencies() the passed package name 'test_serivce_rclcpp'
was not found before
Call Stack (most recent call first):
CMakeLists.txt:22 (ament_target_dependencies)
CMakeLists.txt文件如下配置:
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(rosidl_default_generators REQUIRED)
find_package(test_serivce_rclcpp REQUIRED)
rosidl_generate_interfaces(${PROJECT_NAME}
"srv/CheckFloat.srv"
)add_executable(check_float_client src/check_float_client.cpp)
target_include_directories(check_float_client PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>)
target_compile_features(check_float_client PUBLIC c_std_99 cxx_std_17) # Require C99 and C++17
ament_target_dependencies(
check_float_client
"rclcpp"
"test_serivce_rclcpp"
)install(TARGETS check_float_client
DESTINATION lib/${PROJECT_NAME})add_executable(check_float_server src/check_float_server.cpp)
target_include_directories(check_float_server PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>)
target_compile_features(check_float_server PUBLIC c_std_99 cxx_std_17) # Require C99 and C++17ament_target_dependencies(
check_float_server
"rclcpp"
"test_serivce_rclcpp"
)install(TARGETS check_float_server
DESTINATION lib/${PROJECT_NAME})
package.xml如下:<buildtool_depend>ament_cmake</buildtool_depend>
<depend>rclcpp</depend>
<depend>example_ros2_interfaces</depend><test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend><export>
<build_type>ament_cmake</build_type>
</export>
报错
@小伊 怎么解决这个问题
-
这个错误表明CMake在尝试解析依赖关系时找不到名为
test_serivce_rclcpp
的包。从错误信息和你提供的CMakeLists.txt
和package.xml
文件来看,有几个潜在的问题需要解决:-
拼写错误:在
CMakeLists.txt
中,find_package(test_serivce_rclcpp REQUIRED)
的test_serivce_rclcpp
可能是拼写错误。你可能想写的是test_service_rclcpp
或者另一个包名。请检查你的工作空间或ROS 2包索引中是否确实存在test_serivce_rclcpp
这个包。 -
未安装的依赖:如果
test_service_rclcpp
(或正确的包名)是一个外部包,你需要确保它已经被安装在你的ROS 2工作空间中。你可以使用colcon build --packages-select your_package_name
来构建你的工作空间(替换your_package_name
为你的工作空间中的包名),并确保所有依赖都已满足。 -
包名不一致:在
CMakeLists.txt
中引用的包名和在package.xml
中列出的依赖可能不一致。你需要确保两者都使用了正确的包名。 -
错误的依赖:如果
test_service_rclcpp
是你自己的包,并且它是作为服务接口的一部分,那么你可能不需要将它作为一个依赖项添加到find_package
中。相反,你应该确保在CMakeLists.txt
中正确生成了服务接口,并在你的客户端和服务器可执行文件中包含了必要的头文件。 -
package.xml
文件:在package.xml
中,你应该列出所有你的包所依赖的外部包。如果test_service_rclcpp
是一个你正在开发的包,并且它位于同一个工作空间中,那么你可能不需要在package.xml
中列出它作为一个依赖项,除非它是一个元包(meta-package)。但是,如果你的包依赖于另一个工作空间中的包,你需要确保那个工作空间已经被构建并安装,或者你已经将那个包的源代码包含在你的工作空间中。 -
重新同步工作空间:如果你添加了新的包或更改了
package.xml
文件,确保你已经重新同步了你的工作空间。你可以使用colcon build --symlink-install
来构建和安装你的工作空间,并使用source install/setup.bash
(或setup.zsh
,取决于你的shell)来设置环境变量。
解决以上问题后,你应该能够成功编译你的ROS 2包。
以上为生成回答,仅供参考~
-
-