This tutorial is created by Robotics Ambassador 019 Christian
Robotics Ambassador: theconstruct.ai/robotics-ambassador/
Unit 1 Introduksyon sa Kurso
– Buod –
Tinatayang Oras na Kakailanganin: 30 minuto
Mabuhay!
Sa maikling gabay na ito, ating dadaluban nang pahapyaw ang konsepto ng ROS2 Services at kung paano gumawa ng Service Server.
Bilang gabay sa mga tatalakayin ng proyektong ito, sila ay nakalista bilang mga sumusunod:
1. Introduksyon sa Kurso
2. Pagpapahayag ng Konsepto ng ROS2 Services
3. Paglikha at Paggamit ng ROS2 Service sa Pamamagitan ng Isang Service Server
– Dulo ng Buod –
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:
a. Linux for Robotics
b. Python 3 for Robotics
c. Examination
Iba pang mga Sanggunian:
* The Construct Blog
* Course Support of The Construct and Robot Ignite Academy
* The Official Rosbotics Ambassadors Channel
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: ROS2 Services
Noong nakaraan, ating tinalakay ang kalikasan ng iba’t-ibang interfaces na maaari nating gamitin sa ROS2, partikular na ang mga mesages. Ngayon, atin namang tatalakayin ang konsepto ng mga Services!
Bilang panguna, ano nga ba ang mga ROS2 Services?
Kung ating aalalahanin, ang mga ROS2 messages ay naglalaman lamang ng isang lipon ng mga variable na maaari nating gamitin para sa ugnayang publisher-subscriber. At dahil sa ganitong istruktura, masasabing unidirectional lamang ang nagaganap na komunikasyon. Ang kahulugan nito ay walang interaksyon o feedback mechanism na nagaganap sa pagitan ng mga nodes. Ngayon, ang services naman ay siyang nagtataglay ng dalawang pangunahing fields — ang request at response.
Ang request field ay siyang lipon ng mga variable na, mula sa client, ay kukunin ng isang server mula sa isang service, at siyang gagamitin upang makapgpabalik ng tinatawag na response. Maaari natin itong ihalintulad sa proseso ng pagtala natin ng order mula sa isang kainan. Tayo ang nagsisilbing mga client, ang mga staff ang silang itinuturing na service, at ang kainan naman ang mismong server. Bale, magpapadala tayo ng ating request — depende sa kung ano ang ating nais na kainin (request)– at ito naman ay ipapadala sa kusina (server) sa pamamagitan ng mga staff (service), at pagtapos nang lutuin ay siyang ibibigay sa atin (response).
Kung ating ihahalintulad ang arkitektura nito sa ugnayang publisher-subscriber, maituturing nating katimbang ng publisher ang service client na siyang nagpapadala ng mga message. At maituturing nating kahalintulad ng /topic ang /service na siyang nagsisilbing channel upang mapadala at matanggap ang mga ito. Ang pinakamalaking pinagkaiba lamang sa konteksto ng client-server na ugnayan ay ang pagkakaroon ng tinatawag na response. Sa publisher-subscriber, matapos na matanggap ng subscriber ang message mula sa topic, wala na itong ibinabalik na value para sa node na nagpadala ng naturang halaga na iyon; subalit, para naman sa client-server na ugnayan, magpapadala ng request ang client at ibabalik naman ng server ang response.
Ngayon at malinaw na sa atin ang konsepto ng Services at ang Client-Server na uganayan, halina’t gumawa tayo ng Server!
Unit 3: Paglikha at Paggamit ng ROS2 Service sa Pamamagitan ng Isang Service Server
1. Lumikha ng Workspaces folder na siyang maglalaman ng lahat ng ating workspaces
# In Terminal 1
user@user:~$ mkdir Workspaces
2. Sa loob nito, gumawa ng ating workspace folder – ros2_ws – at sa loob ng workspace folder na ito, gumawa ng isa pang ‘src’ folder na siyang maglalaman ng ating package na siyang papangalanang ‘simple_adder’
# In Terminal 1
user@user:~$ cd Workspaces
user@user:~/Workspaces$ mkdir ros2_ws
user@user:~/Workspaces$ cd ros2_ws
user@user:~/Workspaces/ros2_ws$ mkdir src
user@user:~/Workspaces/ros2_ws$ cd src
user@user:~/Workspaces/ros2_ws/src$ ros2 pkg create simple_adder --build-type ament_python --dependencies rclpy std_msgs example_interfaces
3. Buuin ang naturang workspace
user@user:~/Workspaces/ros2_ws$ colcon build
4. Sa loob nito, gawin natin ang ating server file – simple_adder_server.py – at gawin itong executable
user@user:~/Workspaces/ros2_ws$ cd src/simple_adder/simple_adder
user@user:~/Workspaces/ros2_ws/src/simple_adder/simple_adder$ touch simple_adder_server.py
user@user:~/Workspaces/ros2_ws/src/simple_adder/simple_adder$ chmod +x simple_adder_server.py
5. Source Code para sa simple_adder_server.py
#!/usr/bin/env python3
# Import necessary libraries | I-import ang mga kinakailangang library
import rclpy
from rclpy.node import Node
from example_interfaces.srv import AddTwoInts
class SimpleAdderNode(Node):
def __init__(self):
super().__init__("simple_adder")
# Likhain ang server
self.server_ = self.create_service(AddTwoInts, "add_ints_service", self.callback_add_ints_service)
# Gumawa ng logger upang malaman kung gumagana na ang server
self.get_logger().info("Add Ints Server Currently Active!")
# Ilikha ang callback para sa ginawang server. Dito mangyayari ang pagproproseso ng requests upang makapagpadala ng response
def callback_add_ints_service(self, request, response):
response.sum = request.a + request.b
self.get_logger().info("The sum of "+str(request.a)+" and "+str(request.b)+" is "+str(response.sum))
return response
def main(args=None):
rclpy.init(args=args)
node = SimpleAdderNode()
rclpy.spin(node)
rclpy.shutdown()
if __name__=="__main__":
main()
6. I-install ang node sa loob ng setup.py
# Hanapin ang console scripts sa ilalim ng setup.py at idagdag ang mga ito:
"simple_adder_server=simple_adder.simpler_adder_server:main"
7. Muling buuin ang package
user@user:~/Workspaces/ros2_ws/src/simple_adder/simple_adder$ cd ../../../
user@user:~/Workspaces/ros2_ws$ colcon build --packages-select simple_adder --symlink-install
8. I-source ang workspace
user@user:~/Workspaces/ros2_ws$ source install/setup.bash
9. Patakbuhin ang Node
user@user:~/Workspaces/ros2_ws$ ros2 run simply_adder simple_adder_server
10. Sa isa pang terminal, i-source ang install/setup.bash ng naturang workspace
user@user:~$ cd Workspaces/ros2_ws
user@user:~/Workspaces/ros2_ws$ source install/setup.bash
11. Tawagin ang naturang server
user@user:~/Workspaces/ros2_ws$ ros2 service call add_ints_server example_interfaces/srv/AddTwoInts "{a: 5, b: 10}"
At ayan! Matagumpay tayong nakalikha ng Service Server at matawag ang service nito! Kapag tapos ka nang magsiyasat, maaarin mong pindutin ang “ctrl + c” upang patayin na ang naturang node. At diyan nagtatapos ang ating maikling gabay hinggil sa paggawa ng custom messages! 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!
Hanggang sa muli! Ito si Christian C. Anabeza, ang inyong FIlipino Robotics Ambassador!
0 Comments