<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های محمد سعید</title>
        <link>https://virgool.io/feed/@m_saeid</link>
        <description>ارشد هو‌ش‌مصنوعی‌ می‌خونم، عاشق طبیعت و چیزایی که به بهش نزدیکم می‌کنه.</description>
        <language>fa</language>
        <pubDate>2026-06-10 12:53:03</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/1723156/avatar/XoW35f.jpeg?height=120&amp;width=120</url>
            <title>محمد سعید</title>
            <link>https://virgool.io/@m_saeid</link>
        </image>

                    <item>
                <title>مفهوم Service و Parameter در ROS</title>
                <link>https://virgool.io/@m_saeid/rosserviceparameter-svwnrwtgf15m</link>
                <description>این آموزش ادامه آموزش های زیر است که پیشنهاد میشود ابتدا مطالعه شود. مفهوم Node و Topic در ROSمفهوم Topic و Message در ROSو این آموزش: مفهوم Service و Parameter در ROSبی مقدمه بریم سراغ Service و ParameterServicesفرض می کنیم turtlesim_node از آموزش قبولی هنوز در حال اجرا است. حالا بیایید برویم به سراغ Service ها که راه دیگری برای ارتباط بین node ها هستند و به node اجازه می دهند که یک درخواست ارسال و پاسخ را دریافت کند. rosservice دستورات زیادی برای استفاده دارد که در زیر نمایش داده شده است:rosservice list         print information about active services
rosservice call         call the service with the provided args
rosservice type         print service type
rosservice find         find services by service type
rosservice uri          print service ROSRPC urirosservice list$ rosservice listلیست حاصل از دستور فوق نشان می دهد که turtlesim node نه سرویس در اختیار ما قرار می دهد: reset, clear, spawn, kill, turtle1/set_pen, /turtle1/teleport_absolute, /turtle1/teleport_relative, turtlesim/get_loggers, and turtlesim/set_logger_level. و دو service که مربوط به rosout node می باشند: /rosout/get_loggers and /rosout/set_logger_level./clear
/kill
/reset
/rosout/get_loggers
/rosout/set_logger_level
/spawn
/teleop_turtle/get_loggers
/teleop_turtle/set_logger_level
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/get_loggers
/turtlesim/set_logger_levelبیایید نگاهی دقیق تر به clear service با استفاده از rosservice بی اندازیم.rosservice typeشکل کلی برای استفاده از rosservice به صورت زیر است:rosservice type [service]برای مثال:$ rosservice type /clearخروجی کد فوق:std_srvs/Emptyاین سرویس empty است. بدین معنی که برای استفاده نیاز به هیچ آٰگومانی ندارد. (هیچ دیتایی را در هنگام ایجاد درخواست و دریافت پاسخ وجود نخواهد داشت) حالا بیایید این سرویس را با استفاده از rosservice call صدا بزنیم:rosservice callشکل کلی استفاده:rosservice call [service] [args]در هنگام صدا زدن هیچ آرگومانی اضافه نخواهد شد زیرا سرویس مدنظری از نوع empty بود.$ rosservice call /clearهمانطور که انتظار می رود با اجرای درستور فوق خطوطی که حرکت لاک پشت را نشان می دهند حذف خواهند شد.حالا بیایید سرویسی را بررسی کنید که دارای آرگومان است. نوع سرویس spawn را با دستور زیر بررسی میکنیم.$ rosservice type /spawn | rossrv showخروجی:float32 x
float32 y
float32 theta
string name
---
string nameاین سرویس یک لاک پشت دیگر را در مکان و جهت مشخص شده ایجاد میکند. نوشتن نام اختیاری است. بیایید این سرویس را صدا بزنیم.rosservice call /spawn 2 2 0.2 &amp;quot&amp;quotسرویس نام لاک پشت جدید را در پاسخ مشخص میکند:name: turtle2حالا دوتا لاک پشت داریم :)rosparamsبیایید نگاهی به ابزار های پارامتر ها بی اندازیم: rosparam set            set parameter
rosparam get            get parameter
rosparam load           load parameters from file
rosparam dump           dump parameters to file
rosparam delete         delete parameter
rosparam list           list parameter namesrosparam listبا دستور فوق لیست پارامترها را میتواینم مشاهده کنیم:/rosdistro
/roslaunch/uris/host_nxt__43407
/rosversion
/run_id
/turtlesim/background_b
/turtlesim/background_g
/turtlesim/background_rسه پارامتر انتهایی مربوط به لاک پشت ماست.rosparam set و rosparam getبه شکل کلی از دو دستور مذکور فوق می توان بهش شکل زیر استفاده کرد:rosparam set [param_name]
rosparam get [param_name]بیایید کانال قرمز رنگ زمینه را تغییر دهیم:$ rosparam set /turtlesim/background_r 150دستور فوق مقدار پارامتر را تغییر می دهد. حالا باید clear service را صدا بزنیم تا تغییرات اعمال شود.$ rosservice call /clearو حالا خواهیم داشت:بیایید نگاهی به مقدار دیگر پارامتر ها بی اندازیم. مثلا مقدار رنگ سبز زمینه.$ rosparam get /turtlesim/background_gخروجی کد فوق برابر خواهد بود با:86با دستور $ rosparam get /  می توان محتوای پارامتر ها را مشاهده کرد.$ rosparam get /خروجی دستور فوق:rosdistro: &#039;noetic

  &#039;
roslaunch:
  uris:
    host_nxt__43407: http://nxt:43407/
rosversion: &#039;1.15.5

  &#039;
run_id: 7ef687d8-9ab7-11ea-b692-fcaa1494dbf9
turtlesim:
  background_b: 255
  background_g: 86
  background_r: 69ممکن است بخواهیم تنظیمات مربوط به پارامترها را در یک فایل ذخیره کنیم تا در زمان دیگری آن را بارگیری و استفاده کنیم. این امکان با استفاده از rosparam امکان پذیر است.rosparam dump and rosparam loadشکل کلی استفاده از دستورات فوق به صورت زیر است:rosparam dump [file_name] [namespace]
rosparam load [file_name] [namespace]در اینجا ما همه پارامترها را در فایلی به نام params.yaml ذخیره میکنیم.$ rosparam dump params.yamlشما میتوانید هر زمان که نیاز بود این فایل yaml را به شکل زیر load و استفاده نمایید:$ rosparam load params.yaml copy_turtle
$ rosparam get /copy_turtle/turtlesim/background_bخروجی کد فوق؛255در این بخش از آموزش سعی شد مفاهیم Service و Parameter در ROS مطرح شود. </description>
                <category>محمد سعید</category>
                <author>محمد سعید</author>
                <pubDate>Tue, 02 Aug 2022 18:28:16 +0430</pubDate>
            </item>
                    <item>
                <title>کالیبره کردن دوربین استریو با متلب</title>
                <link>https://virgool.io/@m_saeid/cameracalibrator-khsnzz8mtfqm</link>
                <description>برای داشتن عمق در تصویر میتوانیم از دوربین دوتایی استفاده کنیم! این یک آموزش برای استفاده از نرم افزار متلب برای به‌دست آوردن پارامترهای کالیبراسیون دوربین است.با استفاده از Stereo Camera Calibrator میتوانیم یک شئ شامل پارامترهای دوربین ایجاد کنیم. از شئ میتوان استفاده کرد برای:اصلاح(rectify) تصویر استریو با استفاده از تابع rectifyStereoImages بازسازی یک صحنه سه بعدی با استفاده از تابع reconstructSceneمحاسبه مکان سه بعدی مربوط جفت نقاط تصویر با استفاده از تابع triangulateمجموع توابع با استفاده از Stereo Camera Calibrator app در متلب قابل استفاه خواهند بود.روند کار به شکل زیر خواهد بود:برای کالیبره کردن دوربین استریو روند را طی نمایید: تصاویر، دوربین و الگو کالیبراسیون را آماده کنید.جفت تصویر ها را اضاقه کنید.دوربین استریو را کالیبره کنید.دقت کالیبراسیون را ارزیابی کنید.پارامترها را برای بهبود دقت تنظیم کنید. (درصورت لزوم)از شی پارامترها را خروجی بگیریدودر برخی مواقع مقادیر پیش فرض مناسب هستند.میتوانید از ظرح های تخته شطرنجی، شبکه دایره ای و الگوهای سفارشی استفاده کنید. برای جزئیات بیشتر: Calibration Patternsبرای به‌دست آوردن بهترین نتیجه نیاز به 10 الی 20 تصویر می‌باشد. و در حالت مینیمم به سه تصویر نیاز است.از فرمت های تصویر فشرد نشده مثل PNG استفاده نمایید.نحوه استفاده از Stereo Camera Calibrator Appدر نرم افزار متلب روند زیر را طی کنید: AppsImage Processing and Computer VisionStereo Camera Calibratorیا در کامنت پرامپت وارد کنید: stereoCameraCalibratorاز طریق گزینه Add Image تصاویر را اضافه و مدل دوربین را وارد کنید. پس از آن متلب به آنالیز تصاویر خواهد پرداخت برای مشاهده جزئیات این روند: Prepare Camera and Capture Imagesبرای مشخص کردن camera intrinsics میتوانید در تب Calibration و در قسمت Intrinsics گزینه Use Fixed Intrinsic و مقادیر Radial Distortion و  را وارد نمایید.  برای وارد کردن مقادیر از محیط workspace گزینه Load Intrinsics را انتخاب و برای مثال اگر ساختار wideBaselineStereo شامل intrinsics برای هر دو دوربین باشد این کد را در کامنت پرامپت وارد کنید:ld = load(&amp;quotwideBaselineStereo&amp;quot);
int1 = ld.intrinsics1
int2 = ld.intrinsics2سپس گزینه Load Intrinsics را انتخاب کنید.کالیبره کردنروی گزینه Calibrate کلیک کنید. در حالت پیش فرض کمترین حالت پارامترها در نظر گرفته خواهد شد. پس از ارزیابی نتایج شما میتوانید برای بهبود دقت کالیبراسیون اقدام نمایید با تنظیم تنظیمات و کم و زیاد کردن تصاویر و کالیبره کردن مجدد.وقتی دوربین اعواج شدیدی داره، دوربین ممکن است نتواند مقادیر ذاتی دوربین را محاسبه کند. اگر شما این مقادیر فنی دوربین خود را میدانید(pixel size - focal length - lens characteristics) میتوانید به صورت دستی حدس‌های اولیه برای ویژگی های ذاتی و اعواج شجاعی(radial distortion) انتخاب کنید. برای این منظور روند زیر را طی نمایید: OptionsOptimization Optionsانتخاب کنید Specify initial intrinsics as a 3-by-3 matrix of the form [fx 0 0; s fy 0; cx cy 1] و سپس 3-by-3 matrix را به عنوان ماتریس ویژگی های اولیه انتخاب کنید. اگر حدس اولیه ای ندارید تابع این مقادیر را با حداقل مربعات خطی محاسبه میکند.انتخاب کنید Specify initial radial distortion as 2- or 3-element vector و سپس بردار 2- or 3-element را برای تعیین اعواج شجاعی(radial distortion) اگر این مقدار را ندارید تابع از مقدار صفر برای تمام ضرایب استفاده میکند.برای مشاهده جزئیات بیشتر در مورد پارامترهای کالیبراسیون بخوانید: What Is Camera Calibration?ارزیابی نتایج کالیبراسیونبرای ارزیابی نتایج کالیبراسیون می‌توانید از سه روش زیر و برای ارزیابی بهتر می‌توانید از هر سه روش استفاده کنید:Examine Reprojection Errorsاین خطا فاصله برحسب پیکسل بین نقاط شناسایی شده و نقاط reprojecte شده است. به عنوان یک قاعده کلی، میانگین خطاهای reprojecte شده کمتر از یک پیکسل قابل قبول است.برنامه این خطا را روی یک نمودار میله ای بر حسب پیکسل نمایش میدهد. این نمودار کمک میکند تا متوجه شویم کدام تصاویر به کالیبراسیون کمک میکند. ورودی نمودار میله‌ای را انتخاب کنید و تصویر را در پنجره Data Browser حذف کنید.نمودار Reprojection Errorsاین نمودار میانگین خطا به همراه میانگین کلی نمایش میدهد.می‌توان میانگین خطای کلی را تنظیم کرد، برای انتخاب جفت تصویر با مقدار بیشتر از خطای مشخص شده، خط قرمز را جابجا کنید.Examine Extrinsic Parameter Visualizationیک نمایش سه بعدی خارجی خواهیم داشت که میتوانید شبیه به نمودار های سه بعدی متلب آن را جابجا و از زوایای متفاوت ببینید. موقعیت های نسبی دوربین و الگو ها را مقایسه کنید و ببینید آیا با آنچه انتظار داشته یاد تطابق دارد. به عنوان مثال اگر الگویی در پشت دوربین نمایش داده شده ات نشان دهنده خطای کالیبراسیون است.Show Rectified Imagesبرای مشاهده اثر stereo rectification در تب Calibration، در قسمت View، Show Rectified را انتخاب کنید. اگر کالیبراسیون صحیح باشد، تصاویر بدون اعوجاج و تراز خواهند بود.بهبود کالیبراسیونبرای بهبود کالیبراسیون می‌توانید تصاویر با خطای بالا را حذف کنید، تصاویر بیشتری اضافه کنید یا تنظیمات کالیبراتور را تغییر دهید.جفت تصویر بیشتری اضافه کنید اگر:کمتر از ده جفت تصویر را در نظر گرفتید.الگوهای کالیبراسیون به اندازه کافی قاب تصویر را پوشش نمی‌دهند.الگو ها نسبت به دوربین تنوع کافی در جهت و زاویه قرارگیری ندارند.جفت تصویر را حذف کنید اگر:خطای reprojection error بالایی دارد.تار است.نسبت به دوربین زاویه بیشتر از 45 درجه دارد.نقاط الگوی کالیبراسیون به‌درستی شناسایی نشده است.خروجی گرفتن از پارامتر هاوقتی دقت کالیبراسیون مدنظر ایجاد شد، گزینه Export Camera Parameters را انتخاب کنید. شما میتوانید ذخیره و یا خروجی بگیرید از پارامترها به عنوان یک شی در workspace متلب و یا پارامترها را به عنوان یک اسکریپت تولید کنید.منبع: mathworks.com</description>
                <category>محمد سعید</category>
                <author>محمد سعید</author>
                <pubDate>Mon, 01 Aug 2022 18:46:41 +0430</pubDate>
            </item>
                    <item>
                <title>مفهوم Topic و Message در ROS</title>
                <link>https://virgool.io/@m_saeid/rostopicmassage-auowmoppyasc</link>
                <description>این آموزش ادامه آموزش مفهوم Node و Topic در ROS است که پیشنهاد میشود ابتدا مطالعه شود.در این بخش Topic ها و ابزار کار با آن‌ها را بررسی خواهیم کرد و با نحوه ارسال Message به Topic و جزئیات آن آشنا خواهیم شد. به طور خلاصه؛ پیام ها از یک Node که publisher است از طریق یک Topic مشخص به Node دیگری که Subscriber است ارسال خواهند شد. به تصویر زیر دقت کنید:شکل کلی ارتباط Node ها در تصویر فوق قابل مشاهده است حالا بیایید از کل به جزء حرکت کنیم و جزئیات را نیز مورد بررسی قرار دهیم و البته در انتها نحوه ارسال پیام و جزئیات مربوط به آن  را نیز بررسی خواهیم کرد.rostopicدستور rostopic این امکان رو میده تا اطلاعاتی درمورد ابزارهایی که برای Topic ها داریم را مشاهده کنیم: (از h- استفاده میکنیم تا کامنت های راهنما نیز نمایش داده شود)$ rostopic -hخروجی دستور فوق:rostopic bw     display bandwidth used by topic
rostopic echo   print messages to screen
rostopic hz     display publishing rate of topic
rostopic list   print information about active topics
rostopic pub    publish data to topic
rostopic type   print topic typeچند مورد را که برایمان اهمیت دارد را بررسی کنیم :)rostopic echoاین دستور اطلاعاتی که در یک topic منتشر می‌شود را نمایش می‌دهد و در حالت کلی به شکل زیر نوشته میشود:rostopic echo [topic]برای مثال میتوانیم اطلاعات مربوط به سرعت لاک پشت که در بخش قبل مطرح شد و  در گره turtle_teleop_key منتشر(publish) می‌شود را مشاهده کنیم(در یک ترمینال جدید):rostopic echo /turtle1/cmd_velممکن است هیچ خروجی مشاهده نکنید برای مشاهده نتیجه کار باید همانطور که در بخش قبل مطرح شد ترمینال مربوط به turtle_teleop_key در حالت فعال باشد و شما لاک پشت را با کلیدهای جهت دار کیبرد حرکت دهید سپس سرعت آن را در ترمینال جدید مشاهده کنید.linear:
x: 2.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0
---
linear:
x: 2.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0
---حالا اگر نگاهی به rqt_graph بی‌اندازیم. (اگر از آموزش قبل هنوز پنجره مربوط به rqt_graph را باز نگه داشته اید کافیست روی علامت refresh کلیک کنید تا گراف جدید را مشاهده نمایید) در تصویر زیر rostopic echo با رنگ قرمز مشخص شده است. که به عنوان یک node شنونده(subscriber) عمل میکند.rostopic listاین دستور لیستی از topic های فعال را نمایش میدهد. در یک ترمینال جدید آن را اجرا و topic های فعال را خودتان مشاهده نمایید. اما بیایید ببینیم این دستور چه آرگومان های فرعی ای میتواند داشته باشد:در یک ترمینال جدید دستور زیر را اجرا کنید:$ rostopic list -hنتیجه به شکل زیر خواهد بود:Usage: rostopic list [/topic]
Options:
-h, --help            show this help message and exit
-b BAGFILE, --bag=BAGFILE
list topics in .bag file
-v, --verbose         list full details about each topic
-p                    list only publishers
-s                    list only subscribersاگر از آرگومان verbos استفاده کنیم خواهیم دید که لیستی از topic ها و نوع آن‌ها نمایش داده خواهد شد:$ rostopic list -vخروجی دستور مذکور:Published topics:
* /turtle1/color_sensor [turtlesim/Color] 1 publisher
* /turtle1/cmd_vel [geometry_msgs/Twist] 1 publisher
* /rosout [rosgraph_msgs/Log] 2 publishers
* /rosout_agg [rosgraph_msgs/Log] 1 publisher
* /turtle1/pose [turtlesim/Pose] 1 publisher
Subscribed topics:
* /turtle1/cmd_vel [geometry_msgs/Twist] 1 subscriber
* /rosout [rosgraph_msgs/Log] 1 subscriberMessageارتباط در تاپیک ها با ارسال پیام بین node ها اتفاق می‌افتد. فرستنده یا publisher در مثال ما turtle_teleop_key و گیرنده، شنونده یا subscriber در مثال ما turtlesim_node است که با یکدیگر در ارتباط هستند. فرستنده و شنونده هر دو نوع مشخصی از پیام را ارسال و دریافت میکنند. نوع topic به وسیله نوع پیامی که در آن منتشر میشود مشخص میگردد.rostopic typeمیتوانیم نوع topic را با دستور rostopic type متوجه شویم. این دستور نوع پیام هر topic که در حال انتشار باشد را مشخص میکند. برای مثال:$ rostopic type /turtle1/cmd_velخروجی کد بالا:geometry_msgs/Twistهمچنین ما میتوانیم برای مشاهده جزئیات بیشتر در مورد پیام از rosmsg استفاده کنیم:$ rosmsg show geometry_msgs/Twistکه جزئیات بیشتری از پیام را نمایش میدهد:geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 zrostopic pub(ارسال پیام)حالا که با پیام ها آشنا شدیم بیایید از آنها استفاده کنیم. دستور rostopic pub اطلاعاتی را در یک topic مشخص که در حال اجرا است را منتشر میکند و ساختار کلی آن به شکل زیر است:rostopic pub [topic] [msg_type] [args]برای مثال:$ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- &#039;[2.0, 0.0, 0.0]&#039; &#039;[0.0, 0.0, 1.8]&#039;دستور فوق یک تک پیام به topic مشخص شده که همان لاک پشتمان است ارسال میکند و آن را با سرعت خطی 2 و سرعت زاویه ای 1.8 حرکت میدهد. حاصل این حرکت به شکل زیر است:این کار به شدت ساده و پرکاربرد است :) بیایید به جزئیات دستور مذکور نگاهی بی‌اندازیم:این دستور پیام را برای یک topic مشخص ارسال میکند:rostopic pubبه شکل زیر میتوانیم مشخص کنیم که rostopc تنها یک بار این پیام را منتشر کند:-1این نام topic مدنظر ما برای انتشار پیام است:/turtle1/cmd_velاین نوع پیام مدنظر است:geometry_msgs/Twistبه شکل زیر مشخص میکنیم که هیچ کدام از آرگومان ها مجزا نیستند. این مورد در مواقعی ضروری است که که آرگومان های ما دارای خط تیره هستند(مثل اعداد منفی)--نوع پیام geometry_msgs/Twist msg دارای دو بردار که هرکدام شامل سه عدد اعشاری می باشد است و مشخص کننده سرعت خطی و زاویه میباشد.با استفاده از دستور مذکور لاک پشت پس از طی مسیر کوتاهی می‌ایستد اما برای حرکت مداوم آن می‌توانیم از دستور زیر استفاده کنیم و یک حرکت مداوم با فرکانس ۱ هرتز ایجاد کنیم:$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- &#039;[2.0, 0.0, 0.0]&#039; &#039;[0.0, 0.0, -1.8]&#039;این دستور سرعت را با نرخ ۱ هرتز در topic منتشر میکند.اکنون بیایید ببینیم در rqt_graph چه اتفاقی افتاد. روی کلید refresh در گوشه بالای پنجره rqt_graph کلیک کنید. rostopic pub node که در اینجا به رنگ قرمز است در ارتباط است با rostopic echo node که در اینجا با رنگ سبز قابل مشاهده است:وقتی که لاک پشت ما در حال حرکت است می‌توانیم در یک ترمینال جدید با استفاده از دستور زیر دیتا های منتشر شده را مشاهده نماییم:rostopic echo /turtle1/poserostopic hzاین دستور نرخ هر داده در حال انتشار را مشخص میکند و شکل کلی آن به شکل زیر است:rostopic hz [topic]برای مثال میتوانیم ببینیم با چه سرعتی turtlesim_node در حال انتشار /turtle1/pose می‌باشد:$ rostopic hz /turtle1/poseخروجی دستور فوق:subscribed to [/turtle1/pose]
average rate: 59.354
min: 0.005s max: 0.027s std dev: 0.00284s window: 58
average rate: 59.459
min: 0.005s max: 0.027s std dev: 0.00271s window: 118
average rate: 59.539
min: 0.004s max: 0.030s std dev: 0.00339s window: 177
average rate: 59.492
min: 0.004s max: 0.030s std dev: 0.00380s window: 237
average rate: 59.463
min: 0.004s max: 0.030s std dev: 0.00380s window: 290بنابراین می‌توان گفت turtlesim در حال انتشار داده ها در مورد لاک پشت با نرخ 60HZ است. همچنین میتوانیم با استفاده از rostopic type و rosmsg همانطور که ذکر شد اطلاعات بیشتری درمورد یک topic بدست آورد:$ rostopic type /turtle1/cmd_vel | rosmsg showrqt_plotاین دستور یک نمایش در لحظه و روی نموداری در حال حرکت از داده هایی که در یک topic در حال نمایش هستند را ارائه میدهد.برای مثال میتوانیم از rqt_plot برای رسم داده هایی که در /turtle1/pose منتشر میشوند:$ rosrun rqt_plot rqt_plotدر پنجره ظاهر شده میتوانید در قسمت بالا سمت چپ اطلاعات هر topic که مدنظر شماست را انتخاب و نمودار آن را مشاهده نمایید. برای مثال در این قسمت /turtle1/pose/x را تایپ کنید روی + کلیک کنید و نمودار مربوط به /turtle1/pose/y را هم اضافه کنید. حالا می‌توانید نمودار مربوط مکان x-y لاک پشت را مشاهده نمایید.برای مشاهده دیگر اطلاعات نیز میتوانید با استفاده از گزینه − topic های دیگر را حذف کنید. در شکل زیر اطلاعات مربوط به /turtle1/pose/theta نمایش داده شده است.در این آموزش تلاش شده ابزارهای مهم برای کار و بررسی Topic ها و نحوه ارسال Message به یک Topic بررسی شود :))منبع: wiki.ros.org   -   docs.ros.org</description>
                <category>محمد سعید</category>
                <author>محمد سعید</author>
                <pubDate>Sun, 31 Jul 2022 10:50:29 +0430</pubDate>
            </item>
                    <item>
                <title>مفهوم Node و Topic در ROS</title>
                <link>https://virgool.io/@m_saeid/rosnodetopic-hqc8lr2r0mig</link>
                <description>ROSسیستم عامل ربات (به انگلیسی: Robot Operating System) یا ROS یک میان‌افزار رباتیک (یعنی مجموعه ای از چارچوب‌های نرم‌افزاری برای توسعه نرم‌افزار ربات) است. اگر چه ROS یک سیستم عامل نیست اما سرویس‌هایی را مثل فراهم کردن یک لایه انتزاعی برای سخت‌افزار، کنترل دستگاه در سطح پایین، پیاده‌سازی عملیات‌های معمول رباتیک، انتقال پیام بین فرایندها و مدیریت بسته فراهم می‌کند.مفهوم Node و Topicمفاهیم Node و Topic از جمله مباحث اجتناب‌ناپذیر برای شروع کار با سیستم عامل ربات‌ها هستند و در یک تعریف ساده می‌توان گفت که Node ها در قالب Topic ها با هم در ارتباط هستند. به عبارت ساده‌تر Topic ها مانند کانال ارتباطی مشخصی بین Node ها عمل می‌کنند. در ادامه این مطلب تلاش شده تا با طرح یک مثال ساده این دو مفهوم بیشتر توضیح داده شوند.پیش از شروع اگر هنوز ROS را نصب نکرده‌اید می‌توانید از طریق این لینک ورژن مورد نظر خود را انتخاب و آن‌را نصب کنید. مراحل نصب بسیار ساده است.ROS: Node and Topicتمام کدهایی که در ادامه آمده در (Ubuntu(18.04.6 LTS و ROS(melodic) تست شده است.NODEیک Node چیزی بیشتر از یک فایل قابل اجرا توسط ROS package نیست. (توضیح بیشتر اینکه: به همین دلیل در حین ایجاد package برای پایتون rospy را جزو وابستگی های package تعریف می‌کنیم تا بتوانیم در آن فایل‌هایی به زبان پایتون اجرا کنیم, در صورتی که بخواهیم از زبان C++ استفاده کنیم میتوانیم roscpp را هم جزو وابستگی ها تعریف کنیم) یک node میتواند در یک Topic نقش publisher و یا subscriber داشته باشد.(با این مفاهیم در ادامه آشنا خواهیم شد)بیایید با یک پروژه جالب ادامه دهیم:برای شروع اولین کاری که باید انجام شود اجرای دستور زیر در ترمینال است:$ roscoreحالا بیایید نگاهی به node های در حال اجرا بی‌اندازیم. (ترمینال قبلی را باز نگه دارید) یک ترمینال جدید باز کنید و دستور زیر را به منظور مشاهده لیست node های در  حال اجرا وارد کنید: $ rosnode listنتیجه دستور فوق به شکل زیر است:/rosoutاین یعنی تنها یک نود در حال اجرا است. در صورتی که بخواهیم اطلاعات یک node را ببینیم میتوانیم از دستور زیر استفاده کنیم:$ rosnode info /rosoutحالا بیایید node های بیشتری ببینیم. برای اجرای یک node که در یک package خاص قرار دارد در حالت کلی از دستور زیر استفاده میکنیم:$ rosrun [package_name] [node_name]   برای مثال در یک ترمینال جدید turtlesim_node را به شکل زیر اجرا میکنیم:$ rosrun turtlesim turtlesim_nodeحالا پنجره مربوط به لاک پشت برای ما ظاهر میشود. (ممکن است شکل لاک پشت برای شما متفاوت باش. جای نگرانی نیست:) )Turtlesim windowیک ترمینال جدید باز کنید و دستور زیر را برای مشاهده لیست node های در حال اجرا وارد کنید:$ rosnode listمشاهده خواهید کرد که حالا دو node در حال اجرا هستند که یکی مربوط به لاک پشت تازه متولد شده ماست :)/rosout
/turtlesimمی‌توانید نام node ها را به شکل زیر تغییر دهید(ترمینال مربوط به لاک پشت را متوقف کنید یا آن را ببندید):$ rosrun turtlesim turtlesim_node __name:=my_turtleحال اگر دوباره به لیست node ها نگاهی بی‌اندازیم:$ rosnode listخواهیم دید که نام node تغییر کرده است:/my_turtle
/rosoutتغییر نام node به دلخواه شماست. در ادامه ما با نام پیش فرض ادامه خواهیم داد:$ rosrun turtlesim turtlesim_nodeبیایید لاک پشت را حرکت دهیم. دستور زیر را که گره turtle_teleop_key از package به نام turtlesim را اجرا می‌کند را در یک ترمینال جدید اجرا کنید:$ rosrun turtlesim turtle_teleop_keyحالا با کلیدهای جهت دار کیبرد می‌توانید لاک پشت را حرکت دهید. (ترمینال مدنظر باید در حالت انتخاب باشد)TOPICحال شما توانستید لاک پشت را حرکت دهید اما برای فهمیدن مفهوم topic بیایید نگاهی به آنچه در پشت صحنه نمایش اتفاق می‌افتد بی‌اندازیم:دو node به نام های turtlesim_node و turtle_teleop_key در تحت یک Topic در ارتباط با یکدیگر هستند. turtle_teleop_key در حال ارسال(publishing) وضعیت کلیدها به topic است و turtlesim_node و در حال دریافت(subscribe) از همان topic است. برای نمایش گرافیکی وضعیت node ها و topic ها میتوانیم از rqt_graph استفاده کنیم.نکته: در صورت نصب نبودن می‌توانید با دستور زیر rqt package را متناسب با distribution خود(indigo, jade, kinetic, lunar و...) نصب کنید:$ sudo apt-get install ros-&lt;distro&gt;-rqt$ sudo apt-get install ros-&lt;distro&gt;-rqt-common-pluginsحالا در یک ترمینال جدید دستور زیر را برای رسم گراف اجرا کنید:$ rosrun rqt_graph rqt_graphو سپس پنجره‌ای مشابه شکل زیر مشاهده خواهید کرد:اگر موس خود را روی /turtle1/command_velocity ببرید. نوشته ها رنگی خواهند شد. در اینجا node ها به رنگ آبی و سبز و topic به رنگ قرمز قابل مشاهد است. همانطور که مشخص است دو node به نام های turtlesim_node و turtle_teleop_key با یکدیگر از طریق یک topic به نام /turtle1/command_velocity در ارتباط هستند.برای تمرین بیشتر می‌توانید Node های بیشتری را اجرا و گراف آن‌ها را مشاهده و تحلیل کنید.در ادامه این آموزش بخوانید: مفهوم Topic و Message در ROSمنبع: wiki.ros.org - wikipedia.org</description>
                <category>محمد سعید</category>
                <author>محمد سعید</author>
                <pubDate>Fri, 29 Jul 2022 16:46:50 +0430</pubDate>
            </item>
                    <item>
                <title>چرا نمیتونی شرایط فعلیت رو بپذیری؟</title>
                <link>https://virgool.io/@m_saeid/%DA%86%D8%B1%D8%A7-%D9%86%D9%85%DB%8C%D8%AA%D9%88%D9%86%DB%8C-%D8%B4%D8%B1%D8%A7%DB%8C%D8%B7-%D9%81%D8%B9%D9%84%DB%8C%D8%AA-%D8%B1%D9%88-%D8%A8%D9%BE%D8%B0%DB%8C%D8%B1%DB%8C-xyxgq9lnggbl</link>
                <description>همه ما توی حلقه‌ای از خواستن چیزایی که نداریم گیر کردیم. نمیتونیم گذشتمونُ رها کنیم و هنوز درمورد چیزایی که نداریم رویا میبافیم. خودمونُ جوری توی قفس گذشته یا خیالات آینده اسیر کردیم که لذت پرواز در زمان حال رو هم از دست میدیم.یه رازی وجود داره که کمکت می‌کنه تا خیال‌بافی‌هاتُ کنار بزاری و استارت بزنی لذت بردن از زندگی رو همینجور که هست! این راز نه درباره بیشتر پول داشتنه و نه موفقیت بیشتر بلکه درمورد یادگیری قدردانی از چیزاییه که همین الآن داری.Photo by Francisco Gonzalez on Unsplashخواسته‌هاموناگه مثه خیلی از مردم باشی، اهدافی داری که برات مهم هستن. مثه ورود به یه دانشگاه خاص، رسیدن به درآمدی مشخص یا نوشتن یک کتاب. هرچی که باشه، این احتمال میره که هنوز بهش نرسیده باشی.با این حال، این احتمال وجود داره که اگه به زندگی‌ت با ذره‌بین نگاه کنی، متوجه شی که همه‌چیز واقعا خوب پیش میره. اگه الآن جایی که میخواستی نیستی، شاید به این دلیله که انتظارای غیرمنطقی از خودت داری...میزان کنترل‌مون‌همه‌مون روزای بد داریم و گیر کردن در یک طرز فکر منفی خیلی آسونه. مهم اینه که این حقیقت رو بدونی و افکارت رو کنترل کنی. منفی اندیشی یکی از اولین قدم‌ها به‌سوی افسردگی و اضطرابه که دو مورد از شایع‌ترین بیماری‌های روانی‌اند.درسته که نمی‌تونیم همه جنبه‌های زندگی‌مون رو کنترل کنیم ولی درعین حال می‌تونیم خیلی چیزا بیشتر از اون‌که فکر می‌کنیم رو کنترل کنیم. هر فکری که داری، هر عملی که انجام میدی، واکنش‌های سلسه‌وار جدیدی ایجاد میکنه که منجر به فکر و عمل بعدیت میشه. (پس از همین الان سعی کن طرز فکر و رفتارت رو اصلاح کنی تا دومینو افکار و رفتارت شکل بهتری بگیره)انتخاب‌یه ضرب‌المثل هست که میگه: &quot;اگه بخوایش یه دلیل کافیه اگه نخوای هزارتا بهونه میاری&quot;. اگه میخوای شرایط فعلی‌ت رو بپذیری باید از قالب خودت بیرون بیای و منطقی به شرایط نگاه کنی. تنها در این صورته که میتونی به‌وضوح ببینی چرا همه‌چیز این شکلیه و چرا لزوما این چیز بدی نیست. شرایط رو بپذیر، کنترل افکار و رفتارت رو به‌دست بگیر و این حرکت رو ادامه بده.افرادی که توانایی پذیرفتن شرایط فعلی‌شون رو دارن، خیلی شادتر از کسانی‌اند که این توانایی رو ندارن.منبع: medium.com (برداشت آزاد)</description>
                <category>محمد سعید</category>
                <author>محمد سعید</author>
                <pubDate>Mon, 25 Jul 2022 22:48:12 +0430</pubDate>
            </item>
                    <item>
                <title>ما پدربزرگ‌های عقب‌مانده دنیای متاورس</title>
                <link>https://virgool.io/@m_saeid/grandpa-metaverse-mnmgu4mesx0s</link>
                <description>- اَه مگه نگفتم رنگ زردُ استفاده نکن، تِم خونمُ خراب میکنه!+ حواسم نبود، نهایتا تا فردا آمادش میکنم.- من امشب مهمون دارم، باید آماده باشه. دیوار بزرگُ براش خالی کردم.+ ولی پردازش رنگش زمان میب...- من این‌چیزا حالیم نیست، آمادش کنید و با توکن ERC 721 تو اتریوم منتشرش کنید. امشب باید رو دیوار خونم باشه.ما پدربزرگ‌های عقب‌مانده دنیای متاورستماس صوتی میگیره با پدربزرگش* سلام نوه قشنگم، خوبی؟ بابا، مامان خوبن؟ از مدرسه چه‌خبر؟- بابابزرگ دیشب دوتا خونه خریدم، امشب کام پلیز. بابا و مامانم میان.* بابایی کجا باید بیام، من هنوز این آدرسای متاورسیُ خوب بلد نیستم. بابات برام گوگل مپ ریخته ولی تا بازش میکنم گوشیم هنگ میک...- گوگل مپ چیه بابا بزرگ اونکه خودش نصبه. ولش کن id خودت و مامان‌بزرگُ برام بفرست میارمتون.* دستت درد نکنه بابایی، مامان‌بزرگم اینجاس، بیا باهاش صحبت کن.صدایی شبیه صدا زنگ گوشی میاد.- ببین بابابزرگ این یارو طراح خونم داره زنگ میزنه من باید برم سر ساختمون! حالا شب میارمتون می‌صحبتیم.صدای بوق ممتد میاد.معمولا پدربزرگ‌ها از دنیای تکنولوژی عقب می‌مونن. اینُ میدونیم اما شاید توجه نکردیم که پدربزرگ‌های هر نسل عقب‌مونده تر از پدربزرگ‌های نسل قبل هستن! و بچه‌ها برعکس و گاها هم بی اعصاب‌تر. وای به‌حال ما پدربزرگ‌ها و مادربزرگ‌ها و وای‌وای به‌حال پدربزرگ‌ها و مادربزرگ‌های نسل بعد.</description>
                <category>محمد سعید</category>
                <author>محمد سعید</author>
                <pubDate>Fri, 22 Jul 2022 11:06:35 +0430</pubDate>
            </item>
                    <item>
                <title>چیزایی که با دوری از خانوادم یاد گرفتم</title>
                <link>https://virgool.io/@m_saeid/%DA%86%DB%8C%D8%B2%D8%A7%DB%8C%DB%8C-%DA%A9%D9%87-%D8%A8%D8%A7-%D8%AF%D9%88%D8%B1%DB%8C-%D8%A7%D8%B2-%D8%AE%D8%A7%D9%86%D9%88%D8%A7%D8%AF%D9%85-%DB%8C%D8%A7%D8%AF%D9%85-%DA%AF%D8%B1%D9%81%D8%AA%D9%85-ncbr7djs3pnm</link>
                <description>این مسیر یه ترن‌هوایی از احساسات بوده. ولی حالا مقصدش اینجا در مرحله شادی از زندگیمه :)در بیشتر عمرم مجبور بودم، خانوادمُ راضی کنم و درمورد چیزای مختلف به افراد گوش کنم؛ انتخاب کار، زندگیم و حتی درمورد عشق! و این عواقب زیادی برای من داشته که هنوز در تلاشم تا از شرشون خلاص شم.من یاد گرفتم که خوبه به خودم تکیه کنم. افراد زیادی‌ هستن که باور دارن به بقیه نیاز دارن چون از تنهایی میترسن. شما چطور؟ آیا ترجیح نمیدین به خودتون تکیه کنین؟ من که ترجیح میدم برای زندگیم به خودم تکیه کنم و به توانایی خودم باور دارم.صادقانه بهت بگم؛ تنهایی از بهترین انتخاباییه که ممکنه داشته باشی و تا واقعا تجربش نکنی حظّشُ نمیبری و باور نمیکنی که بتونی.من یاد گرفتم مهم نیست بقیه چی میگن. تقریبا هر روزِ زندگیم، خانوادم تحقیرآمیز به شغلم نگا میکردن، با اینکه درآمدم هشت برابر مینیمم بود! من در نهایت متوجه شدم گاها سستی افراد مسبب اینچنین نگاهی به شما میشه.من باید یاد میگرفتم چطور شادی رو به خودم برگردونم و بار نگاه افراد رو از ذهنم پاک کنم.من خودم رو وقتی هنوز درگیر صحبت‌های دیگران درمورد خودم بودم، پیدا کردم(منظور اینکه سخته از شرش خلاص شد و گاها فکر میکنیم این اتفاق افتاده ولی وقتی با دقت به خودمون نگاه میکنیم خودمون رو هنوز درگیرش میبینیم)اماااا یاد گرفته‌ام دوباره خودم رو روبرا کنم...و این کار آسونی نیست، روزایی هستن که احساس وحشتناکی دارم، اما روزای خوب بیشتر از روزای بدن. من 100 درصد مطمئنم تصمیم درستی گرفتم. من حاضرم دوباره زندگیم بسازم.برگرفته از medium.com نوشته Lia Chenاین نوشته برداشتی آزاد همراه با تغییراتی از منبع مذکور بود.لطفا نظرتون رو برام بنویسید :)   مر30</description>
                <category>محمد سعید</category>
                <author>محمد سعید</author>
                <pubDate>Thu, 21 Jul 2022 16:44:08 +0430</pubDate>
            </item>
            </channel>
</rss>