小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
3.3.1 Package 'demo_cpp_topic' not found
-
问题描述:
跟着小鱼视频一步一步来,代码一个一个对,CMakeLists也添加了DESTINATION,在colcon build时都报错。具体细节和上下文:
cppcode_text #include "rclcpp/rclcpp.hpp" #include "geometry_msgs/msg/twist.hpp" #include <chrono> using namespace std::chrono_literals; class TurtleCircleNode: public rclcpp::Node { private: rclcpp::TimerBase::SharedPtr timer_; rclcpp::Publisher<geometry_msgs::msg::Twist>::SharedPtr publisher_; //发布者的只能指针 public: explicit TurtleCircleNode(const std::string& node_name) : Node(node_name) { publisher_=this->create_publisher<geometry_msgs::msg::Twist>("/turtle1/cmd_vel",10); timer_=this->create_wall_timer(1000ms,std::bind(&TurtleCircleNode::timer_callback,this)); } private: void timer_callback() { auto msg=geometry_msgs::msg::Twist(); msg.linear.x=1.0; msg.angular.z=0.5; publisher_->publish(msg); } }; int main(int argc,char *argv[]) { rclcpp::init(argc,argv); auto node=std::make_shared<TurtleCircleNode>("turtle_square"); rclcpp::spin(node); rclcpp::shutdown(); return 0; }
txt
code_text cmake_minimum_required(VERSION 3.5) project(demo_cpp_topic) # Default to C99 if(NOT CMAKE_C_STANDARD) set(CMAKE_C_STANDARD 99) endif() # Default to C++14 if(NOT CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 14) endif() if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Wall -Wextra -Wpedantic) endif() # find dependencies find_package(ament_cmake REQUIRED) find_package(rclcp REQUIRED) find_package(geomtery_msgs REQUIRED) find_package(turtlesim REQUIRED) add_executable(turtle_circle src/turtle_circle.cpp) ament_target_dependencies(turtle_circle rclcpp geometery_msgs) if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) # the following line skips the linter which checks for copyrights # uncomment the line when a copyright and license is not present in all source files #set(ament_cmake_copyright_FOUND TRUE) # the following line skips cpplint (only works in a git repo) # uncomment the line when this package is not in a git repo #set(ament_cmake_cpplint_FOUND TRUE) ament_lint_auto_find_test_dependencies() endif() install(TARGETS turtle_circle DESTINATION lib/${PROJECT_NAME} ) ament_package()
错文信息:
code_text $colcon build Starting >>> demo_cpp_topic Starting >>> demo_python_topic --- stderr: demo_cpp_topic Summary: 0 packages finished [0.75s] 1 package failed: demo_cpp_topic 1 package aborted: demo_python_topic 1 package had stderr output: demo_cpp_topic```
-
根据您提供的错误信息和代码内容,有几个潜在的问题可能导致
colcon build
失败,并显示 "Package 'demo_cpp_topic' not found" 错误。以下是一些可能的解决步骤和检查点:-
CMakeLists.txt 中的拼写错误:
在您的CMakeLists.txt
文件中,有一个明显的拼写错误。您写的是find_package(geomtery_msgs REQUIRED)
,但正确的应该是find_package(geometry_msgs REQUIRED)
。这个错误可能导致 CMake 无法找到geometry_msgs
包,进而在构建过程中引发问题。 -
确保依赖项已正确安装:
确保您的 ROS 2 环境中已经安装了rclcpp
,geometry_msgs
, 和turtlesim
。这些包是您的项目所依赖的。您可以使用以下命令安装它们(如果尚未安装):sudo apt install ros-<distro>-rclcpp ros-<distro>-geometry-msgs ros-<distro>-turtlesim
其中
<distro>
是您的 ROS 2 发行版,如foxy
,galactic
等。 -
检查工作空间设置:
确保您的 ROS 2 工作空间设置正确。这通常包括src
目录下的源代码和顶层目录中的setup.bash
文件。您的工作空间结构应该类似于:workspace/ ├── src/ │ └── demo_cpp_topic/ │ ├── CMakeLists.txt │ └── src/ │ └── turtle_circle.cpp └── setup.bash
确保在构建之前已经 source 了
setup.bash
文件:source workspace/install/setup.bash
-
清理并重新构建:
在修改CMakeLists.txt
或安装依赖项后,最好清理旧的构建文件并重新构建项目。您可以使用以下命令:colcon build --packages-up-to demo_cpp_topic --merge-install # 或者完全清理后重建 colcon clean --all-packages colcon build
-
检查 ROS 2 环境变量:
确保您的ROS_DISTRO
环境变量设置正确,与您安装的 ROS 2 发行版相匹配。您可以通过以下命令检查和设置它:echo $ROS_DISTRO export ROS_DISTRO=<distro> # 如需要设置
按照这些步骤检查和修改后,再次尝试构建您的项目。如果问题仍然存在,请检查构建输出的详细错误信息,可能会有更多线索。
以上为生成回答,仅供参考~
-
-
此回复已被删除! -
此回复已被删除! -
@3220898108 详细的报错信息嘞