Paglikha ng Package sa ROS2 at Introduksyon sa Nodes – Filipino ROS Tutorial

Written by Christian Anabeza

09/02/2024

This tutorial is created by Rosbotics Ambassador 019 Christian

 

Unit 1 Introduksyon sa Kurso

Mabuhay!

Sa ating nakaraang ROSject, ating tinutukan ang hinggil sa paglikha at pag-organisa ng ating ROS Workspaces at Directories. Ngayon naman sa maikling gabay na ito, ating dadaluban ang paggawa ng mga ROS package para sa ROS2 Humble Hawksbill!

Bilang gabay sa mga tatalakayin ng proyektong ito, sila ay nakalista bilang mga sumusunod:

Introduksyon sa Kurso 1.1 Mga Pangangailangan sa Kurso at mga Sanggunian

Ano ang mga ROS Package? 2.1 Madaliang Introduksyon sa ROS Packages 2.2 Paano gamitin ang mga ROS Package? Demo 2.2.1: Turtlesim + Ubuntu 22.04 w/ ROS2 Humble Hawksbill Virtual Machine

Paano Gumawa ng Package sa ROS2

BONUS: Paggawa ng Iyong Unang Node sa ROS2

Pangkaragdagan: Maaari mo ring gamitin ang Ingles na bersyon ng naturang notebook sa pamamagitan ng pagbukas ng default_Copy.ipynb notebook sa loob ng notebook_ws folder.

Unit 1.1 Mga Pangangailangan sa Kurso at mga Sanggunian

Para sa kursong ito, tinataya ng may-akda na may kaalaman ka na sa pangunahing operasyong pang-terminal ng mga sistemang gumagana sa Ubuntu 22.04 LTS na OS at maging sa pangunahing nabigasyon and commands na ginagamit sa mga Linux terminals. Kung nais mo pang matuto ng mga programming fundamentals na kailangan para sa pag-aral ng ROS, mangyaring tumungo at tignan ang kursong Code Foundation for ROS Learning Path ng The Construct! Tiyak na matututunan mo ang lahat ng kailangan mong kaalaman upang masimulan mo na ang paggamit ng ROS!

Mga Akdang Kasama sa Code Foundation for ROS Learning Path:

  • Linux for Robotics
  • Python 3 for Robotics
  • Examination

Iba pang mga Sanggunian:

  • The Construct Blog
  • Course Support of The Construct and Robot Ignite Academy
  • The Official Rosbotics Ambassadors Channel
  • This playlist from Robotics Back-End

Kung nais mong matuto hinggil sa kung paano gumawa at mag-ayos ng workspace directories sa ROS1 at ROs2, maaari mong tignan ang aking nakarrang gabay na ito: * How to Create and Organize Workspaces in ROS1 and ROS2

Sa ilang bahagi ng tutorial na ito, kakailanganin nating gumamit ng Virtual machine na tumatakbo sa Ubuntu. Para dito, ating susundan ang OS-to-Distribution compatibilities na siyang ibinahagi ng opisyal na dokumentasyon ng ros.org para sa ROS2 Humble Hawksbill

  • ROS2 Humble Hawksbill: PC o Virtual Machine na may Ubuntu 22.04 LTS

Unit 2 Ano ang mga ROS Packages?

Ngayong may pangunahing kaalaman na tayo hinggil sa pagsasaayos ng mga directories sa ROS — partikular na sa ROS2, ating naman ngayong daluban ang paggawa ng mga ROS packages.  Bilang panguna, ano nga muna ang mga ROS Packages?  Sa madaling salita, maaari nating silang tignan sa lente na kung saan ang isang package ay maaring tumutukoy sa isang partikular na bahagi o functionality ng ating robot. Bilang payak na halimbawa, maaring itong maging isang camera. Ating isipin na ang camera ng ating robot ang siyang kabuuan ng package — at sa loob nito, mayroon tayong iba pang mas maliliit ng kumpuni na, sa kontektso ng ROS, ay silang mga modyul, code, at iba pang mga bahagi na kailangan upang mabuo at mapagana ang ating camera. Yan ang ideya ng mga package sa ROS — maaari itong ilarawan bilang isang koleksyon o lipon ng mga sub-component na sa simulang sila’y paganahin ay mabubuo nila ang isang operasyon na siyang maihahalintulad sa naturang katangian, kumpuni, o functionality ng ating robot. Sa maikling bahagi na ito, tayo’y gagawa ng isang demonstrasyon hinggil sa kung paano ginagamit ang mga packages sa ROS2 sa pamamagitan ng Turtlesim! Para dito, kakailanganin nating gumamit ng hiwalay na virtual machine na mayroong Ubuntu 22.04 LTS na OS at may naka-install nang ROS2 Humble. Matapos dito ay tutungo na tayo sa paggawa ng ROS2 package sa ROSject na ito!

  • Demo 2.1 ROS2 Turtlesim –

Atin munang buksan ang ating virtual machine. Matapos niyo ay maghanda tayo ng isang terminal na kung saan ay nai-source na natin ang ating ROS distro.

# Sa Terminal 1

# i-source ang ROS Distro
source /opt/ros/humble/setup.bash

Atin naman ngayong bubuksan ang turtlesim simulation sa naturang terminal:

# In Terminal 1

ros2 run turtlesim turtlesim_node

Dapat ay magkaroon ka rin ng kahalintulad nito:

Pansining ang syntax na nauugnay sa pagtakbo ng nodes mula sa mga package ay sumusunod sa syntax na maaaring gawing pangkalahatang bilang:

ros2 run “package_name” “node_name”

Mula rito, tayo naman ay magbukas ng isa pang terminal at muling i-source ang ating ROS Distro. Matapos nito ay bubuksan naman natin ang magiging controller ng ating turtlebot:

# Sa Terminal 2

ros2 run turtlesim turtle_teleop_key

Mule sa code na inilathala sa ibabaw, alinsunod sa ating napagtanto hinggil sa syntax, maaaring sabihin na ang package na ‘turtlesim’ ay naglalaman ng node na ang pangalan ay turtle_teleop_key. Ano kaya sa palagay niyo ang ginagawa nitong node na ito? Atin itong subukan sa pamamagitan ng pag-enter ng naturang command!

Mukhang sa pamamagitan ng node na ito, maaari na nating manipulahin ang paggalaw ng ating turtlebot! Mangyaring masubukan niyo rin!

 

Mula dito, ating mapagtatantong ang mga packages, alinsunod sa ating kaninang naging kahulugan, ay tila kumakatawan sa mga partikular na parte o bahagi ng ating robot. Sa kaso ng turtlesim, tayo’y nagpatakbo ng dalawang nodes — ang turtlesim_node at turtle_teleop_key — na silang nagsisilbin bilang paraan upang maipakita ang ating robot at macontrol ito! Tayo naman ay tumungo sa susunod na paksa: Ang paggawa ng ating unang ROS2 Package.

Unit 3 Paglikha ng Unang ROS2 Package

Bumalik muli tayo sa ating ROSject platform na handog ng The Construct. Susundan natin ang kaparehong mga hakbang mula sa gabay na creating and organizing workspaces in ROS1 and ROS2. Tayo muna’y gagawa ng Workspaces folder na siyang maglalaman ng lahat ng ating mga workspaces; susundan naman ito ng paggawa ng ating workspace folder na ating papangalanang ‘sample_ws’ at sa loob nito, ay isang ‘src’ folder.

Matapos na gawin ito, tayo ay dapat na magkaroon ng direktori na kahawig ng sumusunod:

Workspaces    -sample_ws    -build    -install    -log    -src

# Sa Terminal 1

user:~$ mkdir Workspaces # Lalamanin nito ang lahat ng ating magiging workspaces
user:~$ cd Workspaces # Tutungo tayo sa Workspaces folder
user/Workspaces:~$ mkdir sample_ws # Lilikha tayo ng workspace na nagngangalang ‘sample_ws’
user/Workspaces:~$ cd sample_ws
user/Workspaces/sample_ws:~$ mkdir src # Gagawa tayo ng src folder na maglalaman ng ating package
user/Workspaces/sample_ws:~$ colcon build # Ating buuin ang Workspace
user/Workspaces/sample_ws:~$ source /install/setup.bash # i-source ang workspace

File “<ipython-input-1-96164921a7fb>”, line 3
user:~$ mkdir Workspaces # Lalamanin nito ang lahat ng ating magiging workspaces
^
SyntaxError: invalid syntax

Matapos nating maayos at mabuo ang ating workspace, tayo naman ay tutungo na sa paggawa ng mismong package!

Upang masimulan ito, tutungo muna tayo sa ‘src’ folder at papatakbuhin ang sumusunod na command:

# Sa Terminal 1

user/Workspaces/sample_ws:~$ cd src
user/Workspaces/sample_ws/src:~$ ros2 pkg create <package_name> –build-type ament_python –dependencies rclpy

Gamit ang naturang syntax, papangalanan natin ang ating package bilang ‘test_robot’ na siyang python ang kabuuan; dahil rito, ating gagamitin ang ament_python na build type kaakibat ng dependency na rclpy. Gamit ang bagong impormasyon na ito, atin muling patatakbuhin ang naturang syntax upang mabuo ang ating package:

# Sa Terminal 1

user/Workspaces/sample_ws/src:~$ ros2 pkg create test_robot –build-type ament_python –dependencies rclpy

Matapos nito, tayo naman ay muling tutungo sa ating workspace folder, sample_ws, at muli itong bubuuin gamit ang ‘colcon build’ at i-sosource ang workspace

# Sa Terminal 1

user/Workspaces/sample_ws/src:~$ cd ../ # Angat ng isang directory!
user/Workspaces/sample_ws:~$ colcon build
user/Workspaces/sample_ws:~$ source install/devel

At ayan! Matagumpay nating nalikha ang ating unang package sa ROS2! Pero sandali lang, hindi tayo diyan nagtatapos!

Unit 4 BONUS – Paglikha ng Iyong Unang ROS2 Node

Sa pangkaragdagang bahaging ito, ating mabilisang papasadahan ang paglikha ng node sa ROS2. Mula sa kaninang naging talakayan, kung ang ating package ay siyang naglalarawan ng kabuuan ng ating kumpuni, ang mga nodes, sa kontesktong ito, ay silang mga tinutukoy na sub-component o sekundaryong mga bahagi na siyang bumubuo sa ating package. Tulad na lamang ng ating turtlesim demo, ating nasilayan ang interaksyon sa pagitan ng mga nodes na ‘turtlesim_node’ at ‘turtle_teleop_key’

Mula rito, atin nang simulan ang paggawa ng ating unang node sa ROS2!

Para sa code ng ating node, gagamit tayo ng syntax na hango sa likha ni Edouard Renard ng Robotics Backend.

Ngayon, sa ating IDE, tayo ay tumungo sa directory na ito:

~/Workspaces/sample_ws/src/test_robot/test_robot

Dito, gagawa tayo ng python script na ating papangalanang ‘test_node.py’

# Sa terminal 1

user/Workspaces/sample_ws:~$ cd src/test_robot/test_robot
user/Workspaces/sample_ws/src/test_robot/test_robot:~$ touch test_node.py

Ngayon at nalikha na natin ang script, isa sa pinakamahalagang masigurado natin ay dapat executable ang file na ito!

Kung ating patatkbuhin ang syntax na ‘ls -la’ sa naturang directory, mapapansing natin na mayroong mga karakter na kahawig ang format na ‘rw–r–r–‘. Ang mga ito ang siyang tumutukoy sa mga access permissions. Upang gawing executable ang ating script, ating patakbuhin ang sumusunod na syntax:

# Sa terminal 1
user/Workspaces/sample_ws/src/test_robot/test_robot:~$ chmod +x test_node.py

# Upang matignan kung matagumpay nating napalitan ang access permissions
user/Workspaces/sample_ws/src/test_robot/test_robot:~$ ls -la

# Ngayon ay may nakikita ka na rapat na mga x’s sa permission ng iyong file; at sa terminal naman, iyong mapapansin na nakasulat ito sa kulay luntian!

File “<ipython-input-2-d342c070c0e9>”, line 2
user/Workspaces/sample_ws/src/test_robot/test_robot:~$ chmod +x test_node.py
^
SyntaxError: invalid syntax

Matapos nito, atin nang susulatin ang code para sa mismong node. Hindi niyo muna kailangang daluban gaano ng diwa ang mga detalye ng code na ito sa kasalukuyan subalit akin rin kayong hinihikayat na aralin na rin kung para saan ang mga ito!

#!/usr/bin/env python3

# Atin munang i-import ang mga kinakailangang libraries
import rclypy
from rclpy.node import Node

class TestNode(Node):
def __init__(self):
super().__init__(“first_node”)
self.get_logger().info(“ROS2 The Construct”)

def main(args=None):
rclpy.init(args=args)
node = TestNode() # ito ang ating Node
rclpy.spin(node) # Hinahayaan nitong tumatakbo ang ating node hanggangs sa atin itong patayin gamit ‘ctrl + c’
rclpy.shutdown()

if __name__ == ‘__main__’:
main()

Ngayon ay subukan nating patakbuhin ang node!

# Sa terminal 1
user/Workspaces/sample_ws/src/test_robot/test_robot:~$ ros2 run test_robot test_node.py

Ano nangyari? Mukhang pinapakita sa atin na hindi pa nakikita ng ating sistema ang package. Bakit kaya nagkaganito? Ating alalahanin na una, nilikha natin ang node; subalit, ang ating package ay hindi pa na-update sa kasalukuyan. Kaya sa ganitong palagay ay lumalabas na hindi pa installed ito sa ating ‘workspace’ kasama ng ating node. Maliban rito, sa syntax ng ating pagpapatakbo, isa ito sa mga kamalian na nararanasan ng ilang nagsisimula pa lamang sa ROS.

Alalahanin natin kung paano natin pinatakbo ang Turtlesim node. Ang ating syntax ay alinsunod sa format na ‘ros2 run  ‘ – ang pinapatakbo natin ay isang nakatalagang pangalan para sa ating node at hindi mismo yung executable. Upang maresolba ang isyu na ito, tayo’y tutungo sa setup.py file na nasa loob ng ating pangunahing package folder, test_robot.

Sa loob nito, hananapin natin ang syntax na nakasulat ang “entry_points” — halintulad sa litrato sa ilalim.

Sa loob ng ‘console scripts’, ating ipapasok o iiinstall ang ating node sa ating workspace gamit ang sumusunod na syntax:

# Sa setup.py

entry_points={
‘console_scripts’:[
“node = test_robot.test_node:main” # Syntax: <node_name> = <package_name>.<executable_name>:main
]

}

Matapos na i-save ang file naito, mangyaring tumungo muli sa workspace folder at buuin muli ang workspace at ang mga packages gamit ang colcon build. Matapos nito, huwag kakaligtaang i-source muli ang iyong ROS Distro and ang /install/setup.bash ng iyong workspace.

# Sa  terminal 1
user/Workspaces/sample_ws/src/test_robot/test_robot:~$ cd ../../../
user/Workspaces/sample_ws/:~$ colcon build
user/Workspaces/sample_ws/:~$ source install/setup.bash

Ngayon, subukan muling patakbuhin ang naturang node:

# Sa terminal 1
user/Workspaces/sample_ws:~$ ros2 run test_robot node

Kahawig dapat niyo ang iyong makukuhang resulta:

At ayan! Matagumpay nating nagawa ang ating unang node sa ROS2 kasama na ng ating unang package! Kapag tapos ka nang magsiyasat, maaarin mong pindutin ang “ctrl + c” upang patayon na ang naturang node. At diyan nagtatapos ang ating maikling gabay hinggil sa paggawa ng packages sa ROS2! Nawa’y may natutunan kayong bago na makatutulong sa inyong pag-aaral ng ROS!

Para sa iba pang mga ROSject na tulad nito, mangyaring bisitahin ang The Construct. Nag-aalok sila ng napakaraming praktikal na mga gabay sa ROS mula sa mga payak hanggang sa mga konseptong pangbihasa na!

Hanngang sa muli! Ito si Christian C. Anabeza, ang inyong ROSbotics Ambassador para sa Pilipinas!

Video Tutorial

 

Topics: ros2
Masterclass 2023 batch2 blog banner

Check Out These Related Posts

129. ros2ai

129. ros2ai

I would like to dedicate this episode to all the ROS Developers who believe that ChatGPT or...

read more

0 Comments

Submit a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Pin It on Pinterest

Share This