• اولین مرجع آموزش رآس در ایران
  • info@iranros.com
wikiros-minwikiros-minwikiros-minwikiros-min
  • ایران رآس
  • ROS
    • پیش نیازهای شروع ROS
      • بررسی مفاهیم، اطلاعات فنی
      • نصب ROS برای تمام توزیع‌ها
      • برای آموزش ROS از کجا شروع کنیم؟
      • آموزش ROS
      • واژه‌نامه ROS
    • آموزش گام به گام
      • پیش‌نیازهای ROS
      • آموزش مقدماتی ROS
      • آموزش سطح متوسط
    • .
    • .
  • Software
    • نمایشگر سه‌بعدی (Rviz)
    • شبیه‌ساز گزبو Gazebo
    • نرم افزار moveit
  • Robots
    • Robots
      • ربات‌های پرکاربرد در ROS
        • ربات‌های زمینی
      • حسگرهای پرکاربرد در ROS
      • موتورهای پرکاربرد در ROS
  • publications
  • ایران رآس
  • ROS
    • پیش نیازهای شروع ROS
    • آموزش گام به گام
    • .
    • .
  • Software
    • نمایشگر سه‌بعدی (Rviz)
    • شبیه‌ساز گزبو Gazebo
    • نرم افزار moveit
  • Robots
    • Robots
  • publications
در ROS این امکان وجود دارد که چندین نود را همزمان اجرا نمایید. این مفهوم که همزمان چند نود را اجرا کنید در ROS تحت عنوان Launch فایل شناخته می‌شود.
گام هفتم : مفهوم launch فایل‌ها در ROS
دسامبر 17, 2018
گام نهم: مفهوم Publisher-Subscriber در ROS به زبان ++C
ژانویه 31, 2019

گام هشتم : ایجاد فایل‌های msg و srv در ROS

Categories
  • آموزش مقدماتی ROS
Tags
  • roscp
  • rosmsg
  • rossrv
  • سرویس
  • فایلmsg
  • فایلsrv
  • نوع پیام

ایجاد فایل‌های msg و srv در ROS: در ROS نوع پیام‌ها با استفاده از فایل‌های متنی به نام msg مشخص می‌شوند. در این آموزش نحوه ساختن فایل‌های msg و srv و دستوراتی نظیر rosmsg, rossrv, roscp آشنا می‌شوید. در ابتدا این فایل‌ها را معرفی می‌کنیم.

msg: فایل‌های msg، فایل‌های متنی ساده‌ای هستند که نوع پیام‌ها در رآس را توصیف می‌کند. این فایل‌ها برای تولید سورس کد برای پیام‌ها در زبان‌های برنامه‌نویسی دیگر استفاده می‌شود.

Srv: یک فایل srv یک سرویس را توصیف می‌کند و از دو بخش درخواست و پاسخ تشکیل شده است.

فایل‌های msg و فایل‌های srv نیز در مسیر بسته و در پوشه‌ای به همان نام قرار دارند. msg ها فایل‌های متنی هستند که در یک خط نوع رشته و نام رشته در آن مشخص شده است. نوع رشته‌هایی که می‌توانید استفاده کنید به‌صورت زیر است:

  • int8, int16, int32, int64 (plus uint*)
  • float32, float64
  • string
  • time, duration
  • other msg files
  • variable-length array[] and fixed-length array[C]

همچنین یک نوع خاص به اسم Header در رآس وجود دارد که شامل یک برچسب زمان و اطلاعات دستگاه مختصات است که معمولاً استفاده از آن در رآس مرسوم است. غالباً خط اول در یک فایل msg به‌صورت Header header است.

در زیر نمونه‌ای از یک فایل msg که در آن، یک Header، یک رشته و دو پیام دیگر وجود دارد آورده شده است.

 Header header
 string child_frame_id
 geometry_msgs/PoseWithCovariance pose
 geometry_msgs/TwistWithCovariance twist

فایل‌های srv نیز شبیه فایل‌های msg هستند، با این تفاوت که آن‌ها شامل دو بخش درخواست و پاسخ هستند. این دو بخش توسط یک خط به‌صورت ‘—‘ از هم جدا شده‌اند. در زیر نمونه‌ای از یک فایل srv آورده شده است.

int64 A
int64 B
---
int64 Sum

در مثال بالا A و B درخواست و sum پاسخ است.

استفاده از msg:

ساخت یک msg

بگذارید تا یک msg جدید را در بسته‌ای که در آموزش قبلی ایجاد کرده بودیم تعریف کنیم.

roscd beginner_tutorials
mkdir msg
echo "int64 num" > msg/Num.msg

کد mkdir msg یک پوشه به نام msg درون پوشه بسته beginner_tutorials ایجاد می‌کند. در خط بعدی از کد echo استفاده شده است این کد عبارت داخل گیومه را در فایلی به نام Num.msg که در پوشه msg ایجاد کرده است قرار می‌دهد. شما البته می‌توانید بدون استفاده از این کد نیز فایل Num.msg را ایجاد کنید. برای این کار یک فایل خالی ایجاد کنید و نام آن را به همراه پسوند.msg انتخاب کنید و با باز کردن آن کدهای مربوط را در آن وارد کنید.

فایل Num.msg که به‌عنوان‌مثال در بالا آورده شده است، تنها ۱ خط دارد، البته شما می‌توانید یک فایل پیچیده‌تر با اضافه کردن چند المان دیگر هرکدام در یک خط، مشابه مثال زیر ایجاد کنید.

string first_name
string last_name
uint8 age
uint32 score

در گام بعدی ما باید مطمئن شویم که فایل‌های msg به سورس کد برای C++، پایتون و دیگر زبان‌های برنامه‌نویسی تبدیل‌شده‌اند. برای این کار  package.xml را باز کنید و مطمئن شوید که این دو خط در آن وجود دارد و کامنت (به‌صورت توضیحات) نباشد.

<build_depend>message_generation</build_depend>
 <exec_depend>message_runtime</exec_depend>

لازم به ذکر است که این دو خط به‌صورت پیش‌فرض کامنت هست و برای رفع کامنت آن باید کاراکترهای “<!–“ را از ابتدا و کاراکترهای “–>” را از انتهای آن خط حذف کرد.

توجه کنید که در زمان کامپایل کردن، ما به  “message_generation”نیاز داریم، درحالی‌که درزمان اجرا فقط به  “message_runtime”نیاز داریم.

CMakeLists.txt را با یک ویرایشگر متن دلخواه باز کنید، سپس وابستگی message_generation را در قسمت find_package که در CMakeLists.txt وجود دارد اضافه کنید، به‌این‌ترتیب قادر خواهید بود تا پیام‌ها را تولید کنید.

در زیر بخش موردنظر پس از اضافه شدن message_generation آورده شده است.

find_package(catkin REQUIRED COMPONENTS
   roscpp
   rospy
   std_msgs
   message_generation
)

دقت کنید که عبارت message_generation قبل از بسته شدن پرانتز اضافه شود.

  • در بعضی از مواقع ممکن است پروژه شما به‌درستی کمپایل شود درحالی‌که شما تمامی وابستگی‌های موردنیاز را در بخش find_package فراخوانی نکرده‌اید! دلیل آن این است که سیستم کتکین همه پروژه‌های شما را باهم ترکیب می‌کند، بنابراین اگر پیش‌تر در یک پروژه find_package فراخوانی شده باشد، سیستم شما با مقادیر مشابه پیکربندی‌شده است؛ اما عدم فراخوانی این وابستگی‌ها به این معنی است که پروژه شما به‌صورت مجزا اجرا نخواهد شد.

همچنین مطمئن شوید که وابستگی  message runtime را به‌صورت زیر وارد کرده‌اید.

catkin_package(
  ...
  CATKIN_DEPENDS message_runtime ...
  ...)

خطوط زیر را در فایل  CMakeLists.txt پیدا کنید:

# add_message_files(
#   FILES
#   Message1.msg
#   Message2.msg
# )

آن‌ها را با حذف # از حالت کامنت خارج کنید و سپس Message*.msg  ها را با فایل‌های msg خودتان مانند زیر جایگذاری کنید.

add_message_files(
  FILES
  Num.msg
)

با اضافه کردن فایل‌های.msg به‌صورت دستی CMake متوجه می‌شود که بعدازاینکه شما فایل‌های.msg دیگر را اضافه کردید باید پروژه را مجدداً تنظیم کند.

اکنون ما باید از فراخوانی تابع  generate_messages() اطمینان حاصل کنیم. برای این کار در توزیع‌های Hydro به بعد باید خطوط زیر را از حالت کامنت خارج کنید.

# generate_messages(
#   DEPENDENCIES
#   std_msgs
# )

در توزیع‌های قدیمی‌تر تنها باید خط زیر را از کامنت خارج کرد:

generate_messages()

اکنون شما برای تولید فایل‌های مرجع برای تعریف msg خودتان آماده‌اید.

دستور rosmsg

پس‌ازاینکه یک msg ساختید، می‌توانید با یک سری از دستورات در رآس اطلاعات آن‌ها را مشاهده کنید.

به‌عنوان‌مثال دستور زیر محتویات یک msg را نشان می‌دهد.

rosmsg show beginner_tutorials/Num

که طبق چیزی که قبلاً تعریف کردیم، خروجی آن به‌صورت زیر است:

int64 num

اگر شما بسته‌ای که msg در آن قرار دارد را فراموش کرده‌اید می‌توانید از کد زیر استفاده کنید:

rosmsg show Num

که خروجی آن به‌صورت زیر خواهد بود:

[beginner_tutorials/Num]:
int64 num

با استفاده از دستور زیر می‌توانید انواع دستورات rosmsg را مشاهده کنید.

rosmsg -h

و خواهید دید:

Commands:
  rosmsg show     Show message description
  rosmsg list     List all messages
  rosmsg md5      Display message md5sum
  rosmsg package  List messages in a package
  rosmsg packages List packages that contain messages

استفاده از srv

ساخت یک srv

برای ساخت یک srv با استفاده از دستور زیر ابتدا به مسیر بسته موردنظر رفته و سپس پوشه srv را ایجاد می‌کنیم.

roscd beginner_tutorials
 mkdir srv

شما می‎‌توانید به‌جای ساخت یک srv جدید به‌صورت دستی، یک مورد موجود را از بسته‌های دیگر کپی کنید. برای این کار از دستور roscp به فرمت زیر استفاده کنید:

roscp [package_name] [file_to_copy_path] [copy_path] mkdir srv

اکنون می‌توانیم به‌عنوان‌مثال یک سرویس را از بسته  rospy_tutorials که به‌صورت خودکار در هنگام نصب رآس اضافه شده است، به بسته خودمان کپی کنیم.

roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv

در ادامه باید مشابه اقدامات انجام‌شده برای msg را انجام دهیم.

ابتدا دو خط زیر در فایل  package.xml را از کامنت خارج می‌کنیم.

<build_depend>message_generation</build_depend>
 <exec_depend>message_runtime</exec_depend>

سپس عبارت message_generation را در بخش find_package از فایل  CMakeLists.txt اضافه می‌کنیم.

find_package(catkin REQUIRED COMPONENTS
 roscpp
 rospy
 std_msgs
 message_generation
)

و درنهایت خطوط زیر را از کامنت خارج کرده و srv خودمان را جایگذاری می‌کنیم.

# add_service_files(
# FILES
# Service1.srv
# Service2.srv
# )

مشابه زیر:

add_service_files(
 FILES
 AddTwoInts.srv
)

دستور rossrv

مشابه با دستور rosmsg می‌توان قابلیت‌های یادشده را با جایگذاری rossrv به‌جای rosmsg تحصیل نمود.

گام‌های مرسوم برای msg و srv:

پس از اجرای مراحل توضیح داده‌شده به مسیر فضای کاری خود رفته و دستور زیر را وارد کنید.

catkin_make install

پس‌ازاین هرکدام از فایل‌های.msg موجود در پوشه msg، کدهای مورداستفاده برای سایر زبان‌های برنامه‌نویسی که پشتیبانی می‌شوند را تولید خواهد کرد. فایل‌های مربوط به C++، پایتون،lisp به ترتیب در مسیرهای زیر ایجاد خواهند شد.

C++: ~/catkin_ws/devel/include/beginner_tutorials/
Paython: ~/catkin_ws/devel/lib/python2.7/dist-packages/beginner_tutorials/msg
Lisp: ~/catkin_ws/devel/share/common-lisp/ros/beginner_tutorials/msg/

به طریق مشابه، هر فایل.srv نیز کدها را در مسیرهایی مشابه ایجاد کرده است.

برای اطلاعات بیشتر راجع به فرمت پیام‌ها می‌توانید به این صفحه مراجعه کنید.

Share
9

Related posts

مارس 16, 2020

نصب ROS بر روی ویندوز ۱۰


Read more
سپتامبر 20, 2019

گام سیزدهم: نوشتن یک service و client ساده (Python)


Read more
سپتامبر 19, 2019

گام دوازدهم: نوشتن یک service و client ساده (C++)


Read more

2 دیدگاه

  1. sina گفت:
    نوامبر 24, 2019 در 11:17 ب.ظ

    rosmsg show beginner_tutorials/Num <— rosmsg show beginner_tutorials/Nu

    پاسخ
  2. رضا گفت:
    اکتبر 1, 2020 در 6:33 ب.ظ

    با سلام
    به نظر می رسه که یک typo در بخش ساخت یک msg به شرح زیر موجود می باشد:
    typo: echo "int64 num" > msg/Num.msg
    correct version: echo “int64 num” > msg/Num.msg
    با تشکر از سایت خوبتون!

    پاسخ

دیدگاهتان را بنویسید لغو پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

آموزش سیستم عامل رباتیک ROS

  • پیش‌نیازهای شروع ROS
    • نصب Ubuntu در کنار ویندوز به صورت Dual Boot
    • نحوه نصب اوبونتو بر روی VMware در ویندوز ۱۰
    • اشتراک اطلاعات بین ویندوز و ماشین مجازی(VMware)
    • راه اندازی و تنظیمات اولیه Ubuntu جهت کار با ROS
    • نصب ROS
  • آموزش مقدماتی ROS
    • گام اول: نصب و پیکربندی محیط ROS
    • گام دوم: آدرس دهی در ROS
    • گام سوم: ایجاد بسته در ROS
    • گام چهارم :مفهوم Node در ROS
    • گام پنجم : مفهوم تاپیک در ROS
    • گام ششم : مفهوم service و parameters در ROS
    • گام هفتم : مفهوم launch فایل‌ها در ROS
    • گام هشتم : ایجاد فایل‌های msg و srv در ROS
    • گام نهم: مفهوم Publisher-Subscriber در ROS به زبان ++C
    • گام دهم: مفهوم Publisher-Subscriber در ROS به زبان python
    • گام یازدهم: ضبط و بازپخش داده‌ها در ROS
    • گام دوازدهم: نوشتن یک service و client ساده (C++)
    • گام سیزدهم: نوشتن یک service و client ساده (Python)
  • آموزش سطح متوسط ROS
    • ساخت یک پکیج به صورت دستی
    • مدیریت وابستگی‌های سیستم
    • تعریف پیام های سفارشی در ROS
    • مقدمه‌ای بر شبیه‌ ساز گزبو Gazebo
    • مقدمه‌ای بر RVIZ نمایشگر سه‌بعدی

ربات‌ها

  • ربات‌های زمینی
    • ربات TIAGo
    • TurtleBot
  • ربات‌های هوایی
  • بازوهای رباتیک
  • ربات‌های دریایی

برچسب‌ها

  • ;hvhdd fhgh
  • A Gentle Introduction to ROS
  • actor
  • actor_Gazebo
  • ajk nv vhs
  • bash
  • C++
  • ca tvhsd v
  • catkin
  • chmode

Google-fomrs

ایران رآس، اولین مرجع آموزش و توسعه ROS در ایران

سایت ایران رآس با بهره گیری از متخصصین حوزه رباتیک به تولید محتوای آموزشی پرداخته و آنها را در اختیار کاربران قرار می­دهد . همچنین متخصصین ما این آمادگی را دارند تا به موسسات و مراکزی که قصد ورود به دنیای رآس را دارند مشاوره های تخصصی داده و برای آنها دوره های آموزشی خصوصی برگزار کند.


درباره ما تماس با ما قوانین و مقررات ثبت شکایات
  • پیش نیازهای ROS
  • آموزش مقدماتی ROS
  • آموزش سطح متوسط ROS
  • کتاب آموزش ROS
  • نرم افزارها
  • ربات‌ها
© تمام حقوق مادی و معنوی برای ایران رآس محفوظ است.
  • No translations available for this page