[ROS2] --- 手动编写一个节点

简介: [ROS2] --- 手动编写一个节点

1 准备工作

1.1 创建/编译工作空间

  • 创建工作空间
mkdir -p ~/dev_ws/src
cd ~/dev_ws/src

1. 2 创建功能包

ros2 pkg create learning01_write_a_node --build-type ament_cmake --dependencies rclcpp

可以看到目录结构如下:

1. 3 创建节点

在learing01_write_a_node/src下创建一个learning01_test.cpp文件

2 编码

src/learing01_write_a_node/src/learning01_test.cpp

#include "rclcpp/rclcpp.hpp"
int main(int argc, char **argv)
{
    rclcpp::init(argc, argv);
    /*产生一个Wang2的节点*/
    auto node = std::make_shared<rclcpp::Node>("wang2");
    // 打印一句自我介绍
    RCLCPP_INFO(node->get_logger(), "hello world");
    /* 运行节点,并检测退出信号*/
    rclcpp::spin(node);
    rclcpp::shutdown();
    return 0;
}

src/learing01_write_a_node/CMakeLists.txt,在CmakeLists.txt最后一行加入下面代码

add_executable(learning01_write_a_node src/learning01_test.cpp)
ament_target_dependencies(learning01_write_a_node rclcpp)
install(TARGETS
  learning01_write_a_node
  DESTINATION lib/${PROJECT_NAME}
)

3 编译运行

cd ~/dev_ws/
colcon build
source install/setup.sh 
ros2 run learning01_write_a_node learning01_write_a_node

运行截图如下:

4 概念补充介绍

4.1 启动节点指令

ros2 run <package_name> <executable_name>

如:ros2 run turtlesim turtlesim_node

4.2 工作空间

工作空间是包含若干个功能包的目录。

一个工作空间下可以有多个功能包,一个功能包可以有多个节点存在

4.3 功能包

功能包可以理解为存放节点的地方,ROS2中功能包根据编译方式的不同分为三种类型。

  • ament_python,适用于python程序
  • cmake,适用于C++
  • ament_cmake,适用于C++程序,是cmake的增强版

功能包常见CLI(command line interface)

# 创建功能包
ros2 pkg create <package-name>  --build-type  {cmake,ament_cmake,ament_python}  --dependencies <依赖名字>
#  列出可执行文件
ros2 pkg executables <package_name>
# 列出所有的包
ros2 pkg list


相关文章
|
Python
ROS节点检测ArUco标签并记录空间坐标
利用Realsense D435i相机检测ArUco标签,使用Python程序订阅相机的ROS话题,记录Time和标签的XYZ值,储存在一个csv文件中;当出现识别不到标签或者反馈坐标为0,0,0的情况时,不进行记录。
303 0
|
存储 缓存 算法
【ROS】如何让ROS中节点获取数据 III --参数服务器通信及ros常用工具指令介绍
相较于之前的通信模型,参数服务器是最为简单的。在之前的模型中,ROSMASTER都是扮演一个帮二者连接在一起的桥梁。
304 0
|
3月前
|
传感器 自然语言处理 机器人
ROS2教程03 ROS2节点
本文是关于ROS2(机器人操作系统2)节点的教程,涵盖了节点的概念、特性、使用方法,以及如何编写、测试和使用ROS2节点相关的命令行工具。文章介绍了节点的独立性、任务执行、跨硬件分布和多语言编写能力。详细解释了如何启动节点、查看节点信息、编写节点代码(包括面向过程和面向对象的方法),以及如何为功能包添加依赖和入口点。此外,还探讨了重映射节点名称和使用节点命令行工具的方法,如 `ros2 node info` 和 `ros2 node list`。适合已安装ROS2 Humble和Ubuntu 22.04操作系统,并具有Shell基础知识的读者学习。
87 1
|
3月前
|
机器人 Python
ROS2教程 03 节点Node
本文是关于ROS2(机器人操作系统2)的教程,介绍了ROS2的节点概念、与ROS1的区别、节点的编写和基本流程、ros2的node相关命令,以及如何对节点名进行重映射,旨在帮助读者理解ROS2中节点的创建和操作。
104 0
ROS2教程 03 节点Node
|
4月前
|
机器人 Shell 开发者
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
|
消息中间件 算法 机器人
【ROS】如何让ROS中节点实现数据交换Ⅰ--ROS话题通信
比较常用的目前就这一些,之后的命令现用现学就好了
255 1
|
算法 中间件 C语言
【ROS】如何让ROS中节点实现数据交换Ⅱ --服务通信
在ros中,一个节点想要获取某种服务(例如:一个节点想要获取此时的相机数据,节点就需要向相机发送一个请求,而相机接收到请求后可以根据消息类型将数据类型返回),这就是基本的服务通信使用场景。
163 0
【3. 初学ROS,年轻人的第一个Node节点】
【3. 初学ROS,年轻人的第一个Node节点】
100 0
|
Shell
奥比中光ROS启动节点运行异常退出:[camera/driver-2] process has finished cleanly
奥比中光ROS启动节点运行异常退出:[camera/driver-2] process has finished cleanly
476 0
奥比中光ROS启动节点运行异常退出:[camera/driver-2] process has finished cleanly
|
C++ Python
ROS学习-理解ROS节点
ROS学习-理解ROS节点
501 0
ROS学习-理解ROS节点

推荐镜像

更多