แก้ไขแล้ว: เพิ่มไฟล์บริการใน setup.py ROS2

ในช่วงไม่กี่ปีที่ผ่านมา สาขาวิทยาการหุ่นยนต์มีความก้าวหน้าและเทคโนโลยีที่นำมาใช้เพิ่มมากขึ้น หนึ่งในนั้นคือ ROS2 (ระบบปฏิบัติการหุ่นยนต์ 2) ซึ่งเป็นเฟรมเวิร์กมิดเดิลแวร์โอเพ่นซอร์สที่ให้เครื่องมือ ไลบรารี และแบบแผนในการพัฒนา ทดสอบ และบำรุงรักษาแอปพลิเคชันของโรบ็อต บทความนี้เจาะลึกเกี่ยวกับการเพิ่มไฟล์บริการในแพ็คเกจ ROS2 โดยใช้ setup.py ซึ่งเป็นทักษะที่จำเป็นสำหรับนักพัฒนาที่ทำงานกับแพลตฟอร์มนี้ เราจะเริ่มต้นด้วยการแนะนำสั้นๆ นำเสนอวิธีแก้ปัญหา แนะนำทีละขั้นตอน และหารือเกี่ยวกับหัวข้อที่เกี่ยวข้องเพื่อความเข้าใจที่ลึกซึ้งยิ่งขึ้น

การตั้งค่าไฟล์บริการในแพ็คเกจ ROS2 เกี่ยวข้องกับสองขั้นตอนหลัก: การสร้างไฟล์คำจำกัดความข้อความบริการ (.srv) และการเพิ่มการกำหนดค่าที่จำเป็นในไฟล์ package.xml และ setup.py ในบทช่วยสอนนี้ เราจะสร้างบริการง่ายๆ ที่รับสตริงอินพุตและส่งกลับความยาวของอินพุตที่ให้มา

ขั้นแรก มาเตรียมพื้นที่ทำงานของเรากันก่อน สร้างแพ็คเกจ ROS2 ชื่อ “string_length_service” ด้วยคำสั่งต่อไปนี้:

““
ros2 pkg สร้าง – ชนิดบิลด์ ament_python string_length_service
““

ตอนนี้ให้สร้างไดเร็กทอรีชื่อ "srv" ภายในแพ็คเกจ "string_length_service" เพื่อจัดเก็บไฟล์คำจำกัดความข้อความบริการของเรา:

““
เอ็มเคดีร์ เอสอาร์วี
““

ภายในไดเรกทอรี “srv” ให้สร้างไฟล์ชื่อ “StringLength.srv” โดยมีเนื้อหาดังต่อไปนี้:

““
สตริง input_string
-
ความยาว int64
““

ในไฟล์ package.xml ตรวจสอบให้แน่ใจว่าได้เพิ่มการขึ้นต่อกันที่จำเป็น:

“`xml
std_msgs
service_interface_packages
ament_cmake
ament_cmake_auto
matplotlib
““

ตอนนี้ มาดูส่วนหลักของบทความนี้กัน – การเพิ่มไฟล์บริการใน setup.py เปิดไฟล์ “setup.py” และใส่รหัสต่อไปนี้:

“`หลาม
จากการตั้งค่าการนำเข้า setuptools
จาก glob นำเข้า glob

package_name = 'string_length_service'

ติดตั้ง(
ชื่อ=ชื่อแพ็คเกจ_,
รุ่น='0.0.0′,
แพ็คเกจ=[ชื่อแพ็คเกจ]
data_files=[
('share/ament_index/resource_index/packages',
['ทรัพยากร/' + package_name])
('share/' + package_name, ['package.xml'])
('share/' + package_name, glob('srv/*'))
],
install_requires=['เครื่องมือการตั้งค่า'],
zip_safe=จริง
ผู้ดูแล='นักพัฒนา_ชื่อ_ที่นี่',
maintainer_email='developer_email_here',
description='บริการสำหรับคำนวณความยาวสตริง',
ใบอนุญาต = 'MIT',
tests_require=['pytest'],
entry_points={
'console_scripts': [
'string_length_server = ' + package_name + '.string_length_server:main',
'string_length_client = ' + package_name + '.string_length_client:main',
],
},
)
““

ตอนนี้เรามาคุยกันว่าโค้ดนี้ทำอะไร: ไฟล์ setup.py ใช้เครื่องมือ setuptools เพื่อแจกจ่ายและจัดการแพ็คเกจของเรา ตัวแปร package_name เก็บชื่อของแพ็คเกจของเรา รายการ data_files ระบุรีซอร์สที่จำเป็น package.xml และไฟล์เซอร์วิสที่จะแจกจ่ายพร้อมกับแพ็กเกจ install_requires แสดงรายการแพ็กเกจที่จำเป็น และ entry_points กำหนดไฟล์ปฏิบัติการบริการของเรา ตรวจสอบให้แน่ใจว่าได้แทนที่ 'developer_name_here' และ 'developer_email_here' ด้วยค่าที่ถูกต้อง

ใช้ rclpy และ std_srvs

หลังจากตั้งค่าไฟล์บริการใน setup.py แล้ว จำเป็นต้องใช้เซิร์ฟเวอร์และโค้ดไคลเอ็นต์โดยใช้ ROS2 Python Client Library, rclpy และ std_srvs สำหรับประเภทบริการมาตรฐาน

สร้างไฟล์ “string_length_server.py” และ “string_length_client.py” ภายในไดเร็กทอรีแพ็กเกจของคุณ และใช้โค้ดเซิร์ฟเวอร์และไคลเอ็นต์ คุณสามารถดูรายละเอียดเกี่ยวกับวิธีการเขียนโค้ดเซิร์ฟเวอร์และไคลเอ็นต์ได้ในเอกสารประกอบ ROS2

การสร้างและทดสอบบริการ

สุดท้าย สร้างและทดสอบแพ็คเกจของคุณโดยใช้คำสั่งต่อไปนี้:

““
แหล่งที่มา /opt/ros/foxy/setup.bash
Colcon build – แพ็คเกจ - เลือก string_length_service
ติดตั้งแหล่งที่มา/setup.bash
““

หลังจากบิลด์สำเร็จ ให้รันเซิร์ฟเวอร์และไคลเอนต์โดยใช้เทอร์มินัลสองเทอร์มินัลแยกกัน:

““
ros2 รัน string_length_service string_length_server
““

““
ros2 รัน string_length_service string_length_client
““

คู่มือนี้นำเสนอคำอธิบายเชิงลึกเกี่ยวกับการเพิ่มไฟล์บริการใน setup.py สำหรับแพ็คเกจ ROS2 ในขณะที่พูดถึงหัวข้อที่เกี่ยวข้อง เช่น rclpy และ std_srvs ด้วยการทำตามขั้นตอนเหล่านี้ คุณสามารถสร้างและแจกจ่ายบริการ ROS2 ของคุณในลักษณะที่มีประสิทธิภาพและเป็นระเบียบ อำนวยความสะดวกในการโต้ตอบภายในแอปพลิเคชันหุ่นยนต์ของคุณ ขอให้โชคดีและมีความสุขในการเขียนโค้ด!

กระทู้ที่เกี่ยวข้อง:

แสดงความคิดเห็น