- 💂 个人主页:风间琉璃
- 🤟 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主
- 💬 如果文章对你有
帮助
、欢迎关注
、点赞
、收藏(一键三连)
和订阅专栏
哦
待定…
ROS(Robot Operating System)是一个开源的机器人操作系统框架,最初由Willow Garage公司于2007年发起。ROS提供了一套工具和库,用于构建和开发机器人应用程序。其特点包括基于消息传递的中间件、通信模型、工具集以及开源的性质。ROS的通信机制采用发布-订阅模型和服务调用,使得不同组件(节点)能够实现信息交流。ROS在学术界和工业界都得到广泛应用,但在大规模系统中可能存在通信效率和实时性方面的挑战。
ROS 2是ROS的下一代版本,旨在解决ROS的一些限制和缺点。ROS 2保留了ROS的核心思想,但进行了一些重大改进。ROS 2的特点包括更灵活的通信机制、更好的实时性能、支持多种中间件、更好的安全性和可扩展性等。ROS 2的发展旨在满足更广泛的应用需求,包括工业自动化、军事应用等。它是一个更为先进、适用范围更广泛的机器人操作系统框架。 ROS 2被设计为兼容ROS,并提供了平滑的过渡路径,使得用户可以逐步迁移到ROS 2,同时保留现有的ROS代码。
节点需要存在于功能包当中,功能包需要存在于工作空间当中,因此,想要想创建一个节点,就必须先创建一个工作空间,然后再创建功能包。本质上工作空间就是我们所熟知的文件夹。
mkdir -p node_test/src
进入src目录下,创建example_cpp功能包,使用ament-cmake作为编译类型,并为其添加rclcpp依赖。
ros2 pkg create example_cpp --build-type ament_cmake --dependencies rclcpp
使用tree查看目录结构:
ros2 pkg create 是用于在ROS 2中创建新包的命令。下面是该命令的主要参数以及它们的作用:
ros2 pkg create <package_name> --build-type <build_type> --dependencies <dependencies>
ament_cmake: 使用CMake作为构建系统。
ament_python: 使用Python作为构建系统。
ament_cmake_python: 使用CMake和Python混合作为构建系统。
这些参数一起允许你根据你的项目需求创建具有适当构建系统和依赖项的ROS 2包。创建包后,你可以在其中添加节点、服务、话题等ROS 2的组件,从而构建你的机器人应用程序。
接着在example_cpp/src下创建一个node1.cpp文件,创建完成后的目录结构如下:
编写ROS2节点的一般步骤
1.导入库文件
2. 初始化客户端库
3. 新建节点对象
4. spin循环节点
5. 关闭客户端库
node.cpp文件源程序
#include "rclcpp/rclcpp.hpp" // 1.导入库文件
/**
* @brief 创建一个类节点,名字叫做Node1, 继承自Node。
*
*/
class Node1 : public rclcpp::Node
{
private:
/* data */
public:
Node1(std::string name) : Node(name)
{
// 打印一句
RCLCPP_INFO(this->get_logger(), "大家好,我是%s.",name.c_str());
}
};
int main (int argc , char **argv)
{
// 2. 初始化客户端库
rclcpp::init(argc, argv);
// 3.新建节点对象
auto node = std::make_shared<Node1>("node5");
RCLCPP_INFO(node->get_logger(), "node5节点已经启动.");
// 4.spin循环节点:运行节点,并检测退出信号 Ctrl+C
rclcpp::spin(node);
// 5.关闭客户端库: 停止运行
rclcpp::shutdown();
return 0;
}
设置添加为可执行文件,并使用install指令将其安装到install目录。
# 生产可执行程序
add_executable(nodes src/node.cpp)
ament_target_dependencies(nodes rclcpp)
# 使用install指令将其安装到install目录
install(TARGETS
nodes
DESTINATION lib/${PROJECT_NAME}
)
注意以下都是在node_test的工作空间下执行的。
colcon build 是一个用于构建ROS 2工作区中所有包的命令。它是Colcon(CMake-based construction)构建工具的一部分,用于构建ROS 2项目。
colcon build
这个命令会在当前工作区中构建所有的ROS 2包。Colcon会检测工作区中的所有包,解决它们之间的依赖关系,并使用适当的构建系统(比如CMake或者ament_cmake)构建这些包。
在构建过程中,Colcon会生成构建系统所需的构建文件,编译源代码,并生成可执行文件、库和其他构建产物。构建成功后,就可以运行你的ROS 2节点或者其他组件。
当构建ROS 2软件包时,构建工具(Colcon)会将构建输出(编译生成的可执行文件、库等)安装到一个目录中,通常是 install 目录。然后,通过运行 source install/setup.bash 命令,可以将这些已经安装的软件包的路径添加到当前终端的环境变量中,使得 ROS 2 系统能够找到这些软件包。
source install/setup.bash
在运行 source install/setup.bash 后,可以直接运行ROS 2软件包中的节点、服务等。注意这里的节点是在CMakeLists.txt中添加的可执行程序的名字的,即可执行节点。
ros2 run example_cpp nodes
在程序中设置的节点名称是终端打印输出的。
ros2 run 是用于在ROS 2中运行可执行节点的命令。下面是该命令的结构和作用:
ros2 run <package_name> <executable_name>
<package_name>: 这是包含你要运行的节点的ROS 2功能包的名称。
<executable_name>: 这是要运行的节点的可执行文件的名称。
命令功能:创建功能包,指定包名、编译方式、依赖项、节点名等
命令格式:ros2 pkg create <package_name> --build-type <build_type> --dependencies
具体参数作用参照前文。
命令功能:查看系统中功能包列表
命令格式:ros2 pkg list
命令功能:查看包内可执行文件列表
命令格式: ros2 pkg executables <package_name>
命令功能:运行包内节点功能
命令格式:ros2 run <package_name> <node_name>
命令功能: 查看当前域内(ROS_DOMAIN_ID相同的节点组)活动的节点列表
命令格式: ros2 node list
命令功能: 查看节点详细信息,包括订阅、发布的消息,开启的服务和动作等
命令格式:ros2 node info <node_name>
感谢阅读吾之文章,今已至此次旅程之终站 🛬。
吾望斯文献能供尔以宝贵之信息与知识也 🎉。
学习者之途,若藏于天际之星辰🍥,吾等皆当努力熠熠生辉,持续前行。
然而,如若斯文献有益于尔,何不以三连为礼?点赞、留言、收藏 - 此等皆以证尔对作者之支持与鼓励也 💞。