Розуміння вузлів у — ROS2

pic

Зображення надано: https://in.pinterest.com/pin/469007748668818011/

Вступ

У ROS2 вузол є основним будівельним блоком роботизованої системи. Вузли є незалежними процесами, які взаємодіють один з одним за допомогою тем, сервісів і дій. Кожен вузол виконує певну функцію, таку як зчитування даних з датчиків, управління моторами або обробка інформації.

Уявіть вузли як різних учасників команди в груповому проекті, кожен з яких виконує унікальну роль, але працює разом для досягнення спільної мети. Цей посібник проведе вас через налаштування базового вузла ROS2, використовуючи як C++, так і Python. Наприкінці ви матимете простий вузол, який виводить "Hello, ROS2!" в консоль.

Крок 1: Створення робочого простору

Створіть новий робочий простір і директорію src:

mkdir -p ~/aryu_ws/src

Крок 2: Перехід до робочого простору

cd ~/aryu_ws

Крок 3: Створення нового пакету ROS2

Для C++:

cd src  
ros2 pkg create my_robot --build-type ament_cmake

Для Python:

cd src  
ros2 pkg create my_robot_py --build-type ament_python

Крок 4: Створення файлу вузла

Для C++:

cd my_robot  
mkdir src  
cd src  
touch my_node.cpp

Для Python:

cd my_robot_py/my_robot_py  
touch my_node.py

Крок 5: Додавання коду до вузла

C++ Вузол (src/my_node.cpp):

#include "rclcpp/rclcpp.hpp"  
class MyNode : public rclcpp::Node {  
public:  
 MyNode() : Node("my_node") {  
 RCLCPP_INFO(this->get_logger(), "Hello, ROS2!");  
 }  
};  
int main(int argc, char **argv) {  
 rclcpp::init(argc, argv);  
 auto node = std::make_shared<MyNode>();  
 rclcpp::spin(node);  
 rclcpp::shutdown();  
 return 0;  
}

Python Вузол (my_node.py):

import rclpy  
from rclpy.node import Node  
class MyNode(Node):  
 def __init__(self):  
 super().__init__('my_node')  
 self.get_logger().info('Hello, ROS2!')  
def main(args=None):  
 rclpy.init(args=args)  
 node = MyNode()  
 rclpy.spin(node)  
 rclpy.shutdown()  
if __name__ == '__main__':  
 main()

Крок 6: Редагування файлів побудови

Для C++ (CMakeLists.txt):

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

Для Python (setup.py):

entry_points={  
 'console_scripts': [  
 'my_node = my_robot_py.my_node:main',  
 ],  
},

Крок 7: Встановлення залежностей

cd ~/aryu_ws  
rosdep install --from-paths src --ignore-src -r -y

Крок 8: Побудова робочого простору

colcon build

Очікуваний результат:

Starting >>> my_robot   
Finished <<< my_robot [X.Xs]  
Summary: 1 package finished [X.Xs]

Крок 9: Підключення робочого простору

source ~/aryu_ws/install/setup.bash

Крок 10: Запуск вузла

Для C++:

ros2 run my_robot my_node

Вивід:

[INFO] [my_node]: Hello, ROS2!

Для Python:

ros2 run my_robot_py my_node

Вивід:

[INFO] [my_node]: Hello, ROS2!

Крок 11: Додавання налаштувань ROS2 до .bashrc

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc

Крок 12: Додавання налаштувань робочого простору до .bashrc

echo "source ~/aryu_ws/install/setup.bash" >> ~/.bashrc

Крок 13: Застосування змін до .bashrc

source ~/.bashrc

Сумісність з ROS2 Humble

  • ament_cmake: Стандартна система побудови для пакетів C++.
  • ament_python: Стандартна система побудови для пакетів Python.
  • colcon build: Офіційний інструмент побудови для ROS2.
  • rclcpp: Основна бібліотека C++ для вузлів ROS2.
  • rclpy: Основна бібліотека Python для вузлів ROS2.
  • ros2 run: CLI команда для виконання вузлів ROS2.

Попередні статті:

Створення робочого простору та вашого першого вузла з використанням ROS2

Наступні статті:

Розуміння тем в ROS2

pic

@ariabotics-Червень.

Перекладено з: Understanding Nodes in — ROS2

Leave a Reply

Your email address will not be published. Required fields are marked *