赞
踩
留空
自用
具体例子
#include "rclcpp/rclcpp.hpp" class LearningNode : public rclcpp::Node { public: LearningNode(std::string name) : Node(name) { RCLCPP_INFO(this->get_logger(),"节点%s已启动",name.c_str()); } private: }; int main(int argc,char** argv) { rclcpp::init(argc,argv); auto node = std::make_shared<LearningNode>("wang2"); rclcpp::spin(node); rclcpp::shutdown(); return 0; }
1、编译节点
colcon build
2、source环境
source install/setup.sh
3、运行节点
ros2 run learning_node wang2_node
colcon build
是ROS 2中用来构建工作空间内所有软件包的命令。
为什么在vscode构建了软件包(例如例子中的"learning_node"),还要在ROS2中构建?
在VSCode
中构建learning_node
软件包,就像你在家里用烤箱烤蛋糕一样。你是为了尝试新的配方,或者为了调试蛋糕的味道和质地。在VSCode这样的代码编辑器中,你可以更容易地查看和修改源代码,然后立即重新构建软件包来查看更改的效果。这非常适合开发和测试阶段。
而在终端中运行colcon build --packages-select learning_node
,就像在工厂里大规模生产蛋糕一样。你已经有了确定的配方,并且想要批量制作蛋糕来供应给其他人。在ROS 2系统中使用colcon
构建,是为了准备软件包,使其能够在实际的ROS 2环境中运行。这通常是在你完成了开发和测试,并准备将你的软件包与其他ROS 2节点或系统一起使用时进行的。
简单来说,VSCode
中的构建是为了开发和调试,而终端中的colcon build
是为了在实际ROS 2环境中准备和运行你的软件包。
你在VSCode
这个编辑器里编写ROS2的C++
代码,这个扩展可以让VSCode
更好地支持ROS 2的开发,比如它能让你的代码有高亮的颜色,还可以在你打字时自动帮你补全代码。但这并不意味着你的C++
代码就变成了ROS2的语言。它们仍然是C++
代码,只是VSCode
帮你更方便地写这些代码而已。
当你写好代码后,你需要用colcon
这样的工具来编译这些代码,把它变成电脑可以运行的程序。colcon
就像是一个厨师,把你的C++代码这个“食材”烹饪成一道可以吃的“菜”(也就是可以运行的程序)。
所以,安装VSCode
的ROS 2扩展只是让你在编写代码时更方便,而真正的编译工作还是要靠colcon
这样的工具来完成。
大概理解之后
我们可以在终端中输入命令行colcon build --help
获取关于colcon
和其所有可用选项的完整文档。
colcon build --help
常用的构建指令:
(1)colcon build
这个命令会检查你的工作空间(通常是一个文件夹,里面包含了多个ROS2软件包)中的每一个软件包,并尝试构建它们。如果你的工作空间里有很多软件包,而你只需要构建其中的一两个,那么这个命令可能会花费很长时间,因为它会构建工作空间所有的软件包。
(2)colcon build--packages-select <package-name>
这个命令允许你告诉 colcon
只构建你指定的那个软件包,而不是整个工作空间中的所有软件包。
比如,如果你只想构建名为learning_node
的软件包,你可以运行colcon build --packages-select learning_node
。这样colcon
就不会去构建其他你不关心的软件包,从而节省时间。
(3)colcon build--packages-up-to <package-name>
这个命令会构建你指定的软件包以及它所有依赖的软件包。
比如,如果你的my_robot_app
软件包依赖于my_robot_driver
和 my_sensor_interface
这两个软件包,那么你运行colcon build --packages-up-to my_robot_app
时,colcon
会构建my_robot_app
、my_robot_driver
和 my_sensor_interface
这三个软件包,但不会构建其他不相关的软件包。
简单来说,第一个命令构建所有,第二个命令只构建你指定的,第三个命令构建你指定的以及它依赖的所有软件包。这样,你就可以根据自己的需要选择合适的命令来构建ROS 2软件包,从而节省时间和计算资源。
当你看到命令source install/setup.sh
,这在ROS中是很常见的一个命令,用于设置环境变量,使得你能够在当前终端会话中使用ROS的功能。
用更通俗的话来说,这个命令做了以下几件事情:
加载环境变量: 这个命令让终端知道ROS2软件包安装在哪里,以及它们提供的各种工具、脚本和库文件在哪里。
准备使用ROS: 一旦你运行了这个命令,你就可以在终端里使用ROS的各种命令和工具了。
对当前终端有效: 这个命令只影响你当前打开的终端窗口。如果你打开了一个新的终端窗口,你需要再次运行这个命令,除非你使用了其他方法(比如修改你的shell配置文件)来让这个设置永久生效。
为了使用ROS,你通常需要在每次打开新的终端窗口时都运行这个命令,或者在启动计算机时自动运行它。这样做是为了确保你的终端会话知道如何找到和使用ROS的功能。
简单来说,source install/setup.sh
这个命令就是在告诉你的终端:“嘿,我现在要使用ROS2了,帮我准备好环境吧!”
这个命令是ROS2中的一个命令,用于运行一个特定的节点。
ros2 run <package_name> <node_name>
ros2 run
:这是ROS 2的一个命令,用于运行一个ROS 2节点。
learning_node
:这是ROS 2软件包的名字。在ROS 2中,相关的代码和功能通常被组织成软件包。在这里,learning_node 可能是一个包含你想要运行的节点的软件包。
wang2_node
:这是你想要运行的节点的名字。节点是ROS2中的一个概念,它通常代表了一个可以执行特定任务的进程或程序。在这个例子中,wang2_node 是learning_node软件包中的一个节点。
所以,当你执行ros2 run learning_node wang2_node
这个命令时,你实际上是在告诉ROS2:“请在learning_node
软件包中找到wang2_node
节点,并运行它!”
自用
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。