ROS2- 面向对象方式编写ROS2 -05

导航框架Nav2、
机械臂运动控制框架Moveit

1. cpp版本

cd chapt2_ws/src/example_cpp/src
vi 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<Node03>("node_03");
    /* 运行节点,并检测退出信号*/
    rclcpp::spin(node);
    rclcpp::shutdown();
    return 0;
}

root@ubuntu-16:~/stephen/chapt2_ws# vi ./src/example_cpp/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

另一个窗口
source install/setup.bash
ros2 node list

2. python版本

cd chapt2/chapt2_ws/src/example_py/example_py
vi 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

vi setup.py # 注意格式和结尾的,符号,console_scripts是个数组
root@ubuntu-16:~/stephen/chapt2_ws# find . -name setup.py
./src/example_py/setup.py
root@ubuntu-16:~/stephen/chapt2_ws# vi ./src/example_py/setup.py

entry_points={
        'console_scripts': [
            "node_02 = example_py.node_02:main",
            "node_04 = example_py.node_04:main"
        ],
    },

colcon build --packages-select example_py
source install/setup.bash
ros2 run example_py node_04

posted @ 2025-06-09 15:47  jack-chen666  阅读(23)  评论(0)    收藏  举报