2.使用面向对象方式编写ROS2节点

写在前面

当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版| 四驱版为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn

1.C++版本

在d2lros2/chapt2/chapt2_ws/src/example_cpp/src下新建node_03.cpp,接着输入下面的代码。

#include "rclcpp/rclcpp.hpp"

/*

创建一个类节点,名字叫做Node03,继承自Node.

*/

class Node03 : public rclcpp::Node

{

public:

// 构造函数,有一个参数为节点名称

Node03(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);

/*产生一个node_03的节点*/

auto node = std::make_shared("node_03");

/* 运行节点,并检测退出信号*/

rclcpp::spin(node);

rclcpp::shutdown();

return 0;

}

接着修改CMakeLists.txt,添加下方代码。

add_executable(node_03 src/node_03.cpp)

ament_target_dependencies(node_03 rclcpp)

install(TARGETS

node_03

DESTINATION lib/${PROJECT_NAME}

)

接着即可自行编译测试

colcon build --packages-select example_cpp

source install/setup.bash

ros2 run example_cpp node_03

2.Python版本

在d2lros2/d2lros2/chapt2/chapt2_ws/src/example_py/example_py下新建node_04.py,输入下面的代码

#!/usr/bin/env python3

import rclpy

from rclpy.node import Node

class Node04(Node):

"""

创建一个Node04节点,并在初始化时输出一个话

"""

def __init__(self,name):

super().__init__(name)

self.get_logger().info("大家好,我是%s!" % name)

def main(args=None):

rclpy.init(args=args) # 初始化rclpy

node = Node04("node_04") # 新建一个节点

rclpy.spin(node) # 保持节点运行,检测是否收到退出指令(Ctrl+C)

rclpy.shutdown() # 关闭rclpy

接着修改setup.py

entry_points={

'console_scripts': [

"node_02 = example_py.node_02:main",

"node_04 = example_py.node_04:main"

],

},

注意格式和结尾的,符号,console_scripts是个数组。

编译测试

colcon build --packages-select example_py

source install/setup.bash

ros2 run example_py node_04

3.总结

把节点写成一个类的形式对我们组织代码和使用ROS2的新特性有很多的好处,后面我们将以此种方式(用类建立节点)来学习后续内容。

推荐文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: