Paano Gumawa ng mga Nodes Upang Pagalawin ang Turtlebot – Filipino ROS Tutorials

Written by Christian Anabeza

08/03/2024

Unit 1 Introduksyon sa Kurso

Mabuhay!

Sa ating nakaraang ROSject, ating tinutukan ang hinggil sa paglikha ng mga packages at nodes sa ROS2. Ngayon naman sa maikling gabay na ito, ating dadaluban kung paano natin magagamit ang mga ito upang magpatakbo ng isang robot!

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

  1. Introduksyon sa Kurso

    1.1 Mga Pangangailangan sa Kurso at mga Sanggunian

  2. Panunumbalik sa Konsepto ng Packages at Nodes

    2.1 Madaliang Introduksyon sa ROS Package at Node

  3. Paano Gumawa ng Packages at Nodes sa ROS2 para mapagalaw ang Turtlebot

    3.1 Pagpapagalaw Padiretso 3.2 Pagpapagalaw ng Pabilog 3.3 Pagpapagalaw ng Parisukat

  4. Takda: Paggawa ng Simpleng Obstacle Avoidance Algorithm para sa Turtlebot

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:

Iba pang mga Sanggunian:

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

At kung interesado ka na rin sa kung paano gumawa ng mga packages at nodes sa ROS2, mangyaring tignan mo na rin ang gabay na ito: How to Create Packages and Nodes in ROS2

Sa tutorial na ito, Gagamitin natin ang ROSject platform na handog ng TheConstruct! Subalit, kung nais niyong gumamit ng sariling virtual machine o computer, mangyaring gawing gabay 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 ROS Packages at Nodes?

Ating balikan ang konsepto ng mga ROS packages at nodes.

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.

Ngayon, ano namana ng mga tinatawag na NODES? Kung ang package ang siyang kumakatawan sa kabuuan ng isang kumpuni ng ating robot, ang nodes naman ang siyang maituturing na parte ng kumpuni ng ating robot. Ang mga ito, kapag pinagsama, ay siyang bumubuo o kumakatawan sa mga kakayanan o functionalities ng mga parte ng ating robot. Maaari nating isipin ito na parang ang workspace ang kabuuan ng ating robot habang ang isang parte nito, halimbawa na ay ang mga motor, ang siyang tinutukoy na package; habang ang mga nagpapagana naman sa ating motor ang siyang itinuturing na ROS Nodes!

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!

Paano Gumawa ng Packages at Nodes sa ROS2 para mapagalaw ang Turtlebot

Ngayon at may ideya na tayo hinggil sa Packages at Nodes, atin nang simulan ang pagpapatakbo ng ating Turtlebot! Para sa takdang ito, ating muling gagamitin ang Turtlesim platform upang magsilbing simulasyon para sa ating munting proyekto!

Bilang panimula, sa ating home directory, mangyaring gumawa ng Workspaces na folder na siyang maglalaman ng lahat ng ating mga workspaces. Matapos nito ay gumawa tayo ng turtlebot_ws na workspace sa loob na siyang maglalaman ng ating mga scripts upang mapatakbo ang turtlebot — at mangyaring patakbuhin ang colcon build upang mabuo ito.

In [ ]: # Gawin sa Terminal 1 user:~$ mkdir Workspaces user:~$ cd Workspaces user:~/Workspaces$ mkdir turtlebot_ws user:~/Workspaces$ cd turtlebot_ws user:~/Workspaces/turtlebot_ws$ colcon build

Matapos patakbuhin ang mga ito, ganito dapat ang kalalabasan ng iyong directory para sa naturang workspace.

Sunod, siguraduhing naka-source nang maigi ang ating workspace sa papamamagitan ng pagpapatakbo ng:

In [ ]: user:~/Workspaces/turtlebot_ws$ cd ~ user:~$ source ~/Workspaces/turtlebot_ws/install/devel/setup.bash

Ngayon naman ay ating nang gawin ang naturang package na magpapagalaw sa ating turtlesim!

Muli tayong bumalik sa ating turtlesim_ws, gumawa ng src folder at sa loob nito ay patakbuhin ang:

In [ ]: user:~$ cd Workspaces/turtlebot_ws user:~/Workspaces/turtlebot_ws$ mkdir src user:~/Workspaces/turtlebot_ws$ cd src user:~/Workspaces/turtlebot_ws/src$ ros2 pkg create moveturtle –build-type ament_python –dependencies rclpy geometry_msgs sensor_msgs std_msgs

Pag matagumpay ang iyong paggawa ng package, mangyaring tumungo muli sa ating workspace folder — turtlebot_ws — at patakbuhin ang colcon build. Dapat ay makita mong successful ang paggawa ng iyong package matapos ang hakbang na ito.

In [ ]: user:~/Workspaces/turtlebot_ws$ colcon build

Kapag may lumabas na ganitong error o warning sa inyong webshell:

Mangyaring patakbuhin ang naturang syntax upang ma-update ang version ng setuptools na ginagamit ng ROSject na ito:

pip install setuptools==58.2.0

Matapos ang hakbang na ito, maaari na tayong gumawa ng ating mga nodes upang mapatakbo ang ating turtlebot!

Ngayon, tayo naman ay tumungo sa ating /moveturtle/moveturtle directory kung saan natin gagawin ang ating mga nodes.Para sa takdang ito, gagawa tayo ng tatlong uri ng galaw para sa ating turtlesim: Padiretso, Pabilog, at Parisukat na ating papangalanang line.py, circle.py, at square.py.

In [ ]: user:~/Workspaces/turtlebot_ws$ cd src/moveturtle/moveturtle user:~/Workspaces/turtlebot_ws/src/moveturtle/moveturtle$ touch line.py user:~/Workspaces/turtlebot_ws/src/moveturtle/moveturtle$ touch circle.py user:~/Workspaces/turtlebot_ws/src/moveturtle/moveturtle$ touch square.py user:~/Workspaces/turtlebot_ws/src/moveturtle/moveturtle$ chmod +x line.py circle.py square.py

Upang matignan kung executable na ang ating mga nagawang file, mangyaring patakbuhin ang ‘ls-la’ sa terminal. Dapat ay may x nanakakabit sa access types ng iyong mga nalikhang files at makikita mo ring kulang luntian ang mga pangalan nito.

Ngayon, ang mga sumusunod na cells ay tumutukoy sa syntax ng bawat galaw na ating patatakbuhin para sa Turtlebot. Naglagay na rin ako ng mga pagpapaliwanang hinggil sa kung ano ang gamit ng bawat linyang nasa code.

–Syntax Para sa line.py–

In [ ]: #!/user/env/python3 import rclpy from rclpy.node import Node from geometry_msgs.msg import Twist class LineNode(Node): def __init__(self): super().__init__("line") self.cmd_vel_publisher_ = self.create_publisher(Twist, '/turtle1/cmd_vel', 10) self.timer_ = self.create_timer(0.5, self.publish_velocity) self.get_logger().info("Moving in a Line") def publish_velocity(self): msg = Twist() msg.linear.x = 0.2 self.cmd_vel_publisher_.publish(msg) def main(args=None): rclpy.init(args=args) node = LineNode() rclpy.spin(node) rclpy.shutdown if __name__=='__main__': main()

–Huling Bahagi ng Syntax Para sa line.py–

 

–Syntax Para sa circle.py–

In [ ]: #!/user/env/python3 import rclpy from rclpy.node import Node from geometry_msgs.msg import Twist class CircleNode(Node): def __init__(self): super().__init__("circle") self.cmd_vel_publisher_ = self.create_publisher(Twist, '/turtle1/cmd_vel', 10) self.timer_ = self.create_timer(0.5, self.publish_velocity) self.get_logger().info("Moving in a Circle") def publish_velocity(self): msg = Twist() msg.linear.x = 0.2 msg.angular.z = 0.1 self.cmd_vel_publisher_.publish(msg) def main(args=None): rclpy.init(args=args) node = CircleNode() rclpy.spin(node) rclpy.shutdown if __name__=='__main__': main()

–Huling Bahagi ng Syntax Para sa circle.py–

 

–Syntax Para sa square.py–

In [ ]: import rclpy from rclpy.node import Node from geometry_msgs.msg import Twist class SquareNode(Node): def __init__(self): super().__init__('square') self.cmd_vel_publisher_=self.create_publisher(Twist, 'turtle1/cmd_vel', 10) self.timer = self.create_timer(2.0, self.timer_callback) self.timer_count=0 def timer_callback(self): msg = Twist() if self.timer_count % 4 == 0: msg.linear.x = 1.0 msg.angular.z = 0.0 elif self.timer_count % 4 == 1: msg.linear.x = 0.0 msg.angular.z = -0.1 elif self.timer_count % 4 == 2: msg.linear.x = 1.0 msg.angular.z = 0.0 else: msg.linear.x = 0.0 msg.angular.z = -1.0 self.cmd_vel_publisher_.publish(msg) self.get_logger().info(f"Publishing: {msg.linear.x}, {msg.angular.z}") self.timer_count+=1 def main(args=None): rclpy.init(args=args) node = MoveSquare() rclpy.spin(node) node.destroy_node() rclpy.shutdown() if __name__=='__main__': main()

–Huling Bahagi ng Syntax Para sa square.py–

Pagkatapos ng iyong paggawa ng mga program na ito, mangyaring pumunta sa setup.py at iinput ang mga sumusunod:

Muling bumalik sa workspace folder — turtlebot_ws — at patakbuhin ang colcon build. Kapag matagumpay itong nagawa, maaari na anting subukang patakbuhin ang ating turtlesim!

Sa ikalawang terminal, patakbuhin ang sumusunod na syntax upang mabuksan ang turtlesim:

In [ ]: user:~$ ros2 run turtlesim turtlesim_node

Pagkatapos nito ay lalabas na ang naturang simulation:

Bumalik muli tayo sa terminal 1 at muling i-source ang workspace upang masigurong gumagana na ito. Matapos naman nito ay atin nang subukang patakbuhin ang mga nodes na ating nagawa!

In [ ]: user:~/Workspaces/turtlebot_ws$ source install/setup.bash

Sa parehong terminal, atin munang siyasatin ang mga nainstall na nodes sa pamamagitan ng pagpapatakbo ng:

In [ ]: user:~/Workspaces/turtlebot_ws$ ros2 run moveturtle

Kasunod nito ay pindutin ang ‘tab’ nang dalawang beses at ganito ang kaniyang kalalabasan.

Kung ating papansinin, makikita natin ang ating mga nalikhang nodes: circle_node, line_node, at square_node. Halina’t patakbuhin natin sila nang isa-isa.

In [ ]: # Pagpapatakbo sa cirle_node user:~/Workspaces/turtlebot_ws$ ros2 run moveturtle circle_node

In [ ]: # Pagpapatakbo sa line_node user:~/Workspaces/turtlebot_ws$ ros2 run moveturtle line_node

In [ ]: # Pagpapatakbo sa square_node user:~/Workspaces/turtlebot_ws$ ros2 run moveturtle square_node

Sa bawat pagtakbo nito, dapat makikita niyong bumubuo na ng mga hugis ang ating turtlesim — pabilog, padiretso, at parisukat!

At ayan! Matagumpay nating nagawa ang ating nodes sa ROS2 upang mapatakbo ang Turtlesim! Kapag tapos ka nang magsiyasat, maaarin mong pindutin ang “ctrl + c” upang patayon na ang naturang node at maging ang simulation. At diyan nagtatapos ang ating maikling gabay hinggil sa paggawa ng nodes para sa Turtlesim! 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: ROS | turtlebot
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