Зображення надано: 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
@ariabotics-Червень.
Перекладено з: Understanding Nodes in — ROS2