{"id":876,"date":"2026-06-12T15:57:17","date_gmt":"2026-06-12T07:57:17","guid":{"rendered":"https:\/\/projectleon.net\/make\/blog\/ros-ugv-arduino-rosserial-raspberry-pi-integration-farsi\/"},"modified":"2026-06-12T15:57:18","modified_gmt":"2026-06-12T07:57:18","slug":"ros-ugv-arduino-rosserial-raspberry-pi-integration-farsi","status":"publish","type":"post","link":"https:\/\/projectleon.net\/make\/blog\/ros-ugv-arduino-rosserial-raspberry-pi-integration-farsi\/","title":{"rendered":"\u0627\u062f\u063a\u0627\u0645 ROS \u0628\u0627 UGV \u0622\u0631\u062f\u0648\u06cc\u0646\u0648 \u2014 rosserial \u0648 \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0627 Raspberry Pi (\u0641\u0627\u0631\u0633\u06cc)"},"content":{"rendered":"<div class='hero-image-container' style='margin-bottom:28px;border-radius:14px;overflow:hidden;box-shadow:0 4px 18px rgba(0,0,0,0.08)'>\n<img src='https:\/\/projectleon.net\/make\/wp-content\/uploads\/2026\/06\/post187-ros-arduino-ugv.jpg' alt='ROS rosserial \u0622\u0631\u062f\u0648\u06cc\u0646\u0648 Raspberry Pi UGV' style='width:100%;height:auto;display:block' loading='eager'\/>\n<\/div>\n<div class='beginner-intro' style='background:#f0f7ff;border-right:4px solid #2e5fb6;padding:16px 20px;border-radius:10px;margin-bottom:22px'>\n<h2 style='margin-top:0'>ROS \u0686\u06cc\u0633\u062a \u0648 \u0686\u0631\u0627 \u0628\u0631\u0627\u06cc UGV \u067e\u06cc\u0634\u0631\u0641\u062a\u0647 \u0644\u0627\u0632\u0645 \u0627\u0633\u062a\u061f<\/h2>\n<p><strong>ROS (Robot Operating System)<\/strong> \u06cc\u06a9 \u0686\u0627\u0631\u0686\u0648\u0628 \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631\u06cc \u0645\u062a\u0646\u200c\u0628\u0627\u0632 \u0628\u0631\u0627\u06cc \u0631\u0628\u0627\u062a\u200c\u0647\u0627 \u0627\u0633\u062a \u06a9\u0647 \u0631\u0648\u06cc Linux \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u0634\u0648\u062f. \u062f\u0631\u0633\u062a \u0645\u062b\u0644 \u0633\u06cc\u0633\u062a\u0645\u200c\u0639\u0627\u0645\u0644 \u06a9\u0627\u0645\u067e\u06cc\u0648\u062a\u0631\u060c \u0628\u0647 \u0645\u0627\u0698\u0648\u0644\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 (node) \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f \u0627\u0632 \u0637\u0631\u06cc\u0642 \u067e\u06cc\u0627\u0645\u200c\u0631\u0633\u0627\u0646\u06cc \u0628\u0627 \u0647\u0645 \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0631\u0642\u0631\u0627\u0631 \u06a9\u0646\u0646\u062f. \u0646\u0627\u0648\u0628\u0631\u06cc\u060c \u0645\u062f\u06cc\u0631\u06cc\u062a \u062d\u0633\u06af\u0631\u060c SLAM \u0648 \u06a9\u0646\u062a\u0631\u0644 \u0647\u0645\u0647 \u062f\u0631 \u0642\u0627\u0644\u0628 node\u0647\u0627\u06cc \u0645\u062c\u0632\u0627 \u0647\u0633\u062a\u0646\u062f.<\/p>\n<p><strong>rosserial<\/strong> \u06cc\u06a9 bridge \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u0622\u0631\u062f\u0648\u06cc\u0646\u0648 \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc\u200c\u062f\u0647\u062f \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u062f\u0631 \u0634\u0628\u06a9\u0647 ROS \u0634\u0631\u06a9\u062a \u06a9\u0646\u062f \u2014 publish \u0648 subscribe \u062a\u0648\u06a9\u0646\u200c\u0647\u0627\u06cc ROS \u0627\u0632 \u062f\u0627\u062e\u0644 \u06a9\u062f \u0622\u0631\u062f\u0648\u06cc\u0646\u0648. Raspberry Pi \u0646\u0642\u0634 master \u0631\u0627 \u062f\u0627\u0631\u062f \u0648 \u0622\u0631\u062f\u0648\u06cc\u0646\u0648 node.<\/p>\n<\/div>\n<div style='background:#fff8e1;border:1px solid #ffd54f;border-radius:10px;padding:16px;margin-bottom:22px'>\n<h3 style='margin-top:0'>&#x1f6e0;&#xfe0f; \u06a9\u0627\u0631\u062a \u067e\u0631\u0648\u0698\u0647<\/h3>\n<table style='width:100%;border-collapse:collapse'>\n<tr>\n<td style='padding:6px;font-weight:bold;width:40%'>\u067e\u0631\u062f\u0627\u0632\u0646\u062f\u0647<\/td>\n<td style='padding:6px'>Raspberry Pi 4 (ROS master) + Arduino (node)<\/td>\n<\/tr>\n<tr style='background:#fffde7'>\n<td style='padding:6px;font-weight:bold'>ROS<\/td>\n<td style='padding:6px'>ROS Noetic (Ubuntu 20.04)<\/td>\n<\/tr>\n<\/table>\n<\/div>\n<h2>\u0646\u0635\u0628 rosserial \u0631\u0648\u06cc Raspberry Pi<\/h2>\n<pre style='background:#1e1e1e;color:#d4d4d4;padding:12px;border-radius:8px;font-size:12px;margin-bottom:14px'><code>sudo apt install ros-noetic-rosserial-arduino ros-noetic-rosserial\n# \u0646\u0635\u0628 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u062f\u0631 Arduino IDE:\n# Sketch \u2192 Include Library \u2192 Manage Libraries \u2192 \u062c\u0633\u062a\u062c\u0648 \"rosserial\"<\/code><\/pre>\n<h2>\u06a9\u062f \u0622\u0631\u062f\u0648\u06cc\u0646\u0648 \u2014 Subscribe \u0628\u0647 cmd_vel \u0648 Publish Odometry<\/h2>\n<pre style='background:#1e1e1e;color:#d4d4d4;padding:14px;border-radius:8px;font-size:12px;margin-bottom:18px'><code>#include &lt;ros.h&gt;\n#include &lt;geometry_msgs\/Twist.h&gt;\n#include &lt;nav_msgs\/Odometry.h&gt;\n\nros::NodeHandle nh;\nnav_msgs::Odometry odom_msg;\nros::Publisher odom_pub(\"odom\", &odom_msg);\n\n\/\/ \u062f\u0631\u06cc\u0627\u0641\u062a \u062f\u0633\u062a\u0648\u0631 \u062d\u0631\u06a9\u062a \u0627\u0632 ROS\nvoid cmdVelCallback(const geometry_msgs::Twist& cmd){\n  float linear  = cmd.linear.x;   \/\/ m\/s\n  float angular = cmd.angular.z;  \/\/ rad\/s\n\n  \/\/ \u062a\u0628\u062f\u06cc\u0644 \u0628\u0647 \u0633\u0631\u0639\u062a \u0686\u0631\u062e (Differential Drive)\n  float v_r = (2*linear + angular*WHEEL_BASE) \/ (2*WHEEL_RADIUS);\n  float v_l = (2*linear - angular*WHEEL_BASE) \/ (2*WHEEL_RADIUS);\n\n  int pwm_r = constrain((int)(v_r * 128\/MAX_SPEED), -255, 255);\n  int pwm_l = constrain((int)(v_l * 128\/MAX_SPEED), -255, 255);\n  driveDiff(pwm_l, pwm_r);\n}\n\nros::Subscriber&lt;geometry_msgs::Twist&gt; cmd_sub(\"cmd_vel\", &cmdVelCallback);\n\nvoid setup(){\n  nh.initNode();\n  nh.subscribe(cmd_sub);\n  nh.advertise(odom_pub);\n}\n\nvoid loop(){\n  \/\/ \u0627\u0646\u062a\u0634\u0627\u0631 Odometry \u0627\u0632 encoder\n  updateOdometry();\n  odom_pub.publish(&odom_msg);\n  nh.spinOnce();\n  delay(20);\n}<\/code><\/pre>\n<h2>\u0627\u062c\u0631\u0627 \u0631\u0648\u06cc Raspberry Pi<\/h2>\n<pre style='background:#1e1e1e;color:#d4d4d4;padding:12px;border-radius:8px;font-size:12px;margin-bottom:18px'><code># \u062a\u0631\u0645\u06cc\u0646\u0627\u0644 \u06f1: ROS Master\nroscore\n\n# \u062a\u0631\u0645\u06cc\u0646\u0627\u0644 \u06f2: \u0627\u062a\u0635\u0627\u0644 \u0622\u0631\u062f\u0648\u06cc\u0646\u0648\nrosrun rosserial_python serial_node.py \/dev\/ttyACM0\n\n# \u062a\u0631\u0645\u06cc\u0646\u0627\u0644 \u06f3: \u06a9\u0646\u062a\u0631\u0644 \u0635\u0641\u062d\u0647\u200c\u06a9\u0644\u06cc\u062f\nrosrun teleop_twist_keyboard teleop_twist_keyboard.py\n\n# \u062a\u0631\u0645\u06cc\u0646\u0627\u0644 \u06f4: \u0645\u0634\u0627\u0647\u062f\u0647 Odometry\nrostopic echo \/odom<\/code><\/pre>\n<div style='display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:18px;margin:20px 0'>\n<iframe width='100%' height='280' src='https:\/\/www.youtube.com\/embed\/0p0aeFKfFrE' title='ROS Arduino rosserial Tutorial' frameborder='0' allowfullscreen><\/iframe><br \/>\n<iframe width='100%' height='280' src='https:\/\/www.youtube.com\/embed\/wnd_vDdAJMw' title='ROS UGV Raspberry Pi Complete Build' frameborder='0' allowfullscreen><\/iframe>\n<\/div>\n<ul>\n<li><a href='http:\/\/wiki.ros.org\/rosserial_arduino' target='_blank'>ROS Wiki: rosserial_arduino<\/a><\/li>\n<li><a href='https:\/\/www.aparat.com\/result\/ROS+%D8%B1%D8%A8%D8%A7%D8%AA+%D8%A2%D8%B1%D8%AF%D9%88%DB%8C%D9%86%D9%88' target='_blank'>\u0622\u067e\u0627\u0631\u0627\u062a: ROS \u0631\u0628\u0627\u062a \u0622\u0631\u062f\u0648\u06cc\u0646\u0648<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u0622\u0645\u0648\u0632\u0634 \u0627\u062f\u063a\u0627\u0645 ROS (Robot Operating System) \u0628\u0627 \u0622\u0631\u062f\u0648\u06cc\u0646\u0648 UGV: \u0646\u0635\u0628 rosserial\u060c publish \u06a9\u0631\u062f\u0646 Odometry\u060c subscribe \u06a9\u0631\u062f\u0646 cmd_vel\u060c \u06a9\u0646\u062a\u0631\u0644 UGV \u0627\u0632 teleop_keyboard \u0648 \u0627\u0631\u0633\u0627\u0644 \u062f\u0633\u062a\u0648\u0631 \u0627\u0632 \u0631\u0627\u06cc\u0627\u0646\u0647.<\/p>\n","protected":false},"author":1,"featured_media":875,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"pagelayer_contact_templates":[],"_pagelayer_content":"","footnotes":""},"categories":[19,16],"tags":[684,571,23,685,676,683,48,21,585],"class_list":["post-876","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials-2","category-ugv","tag-cmd_vel","tag-odometry","tag-raspberry-pi","tag-robot-os","tag-ros","tag-rosserial","tag-ugv","tag-arduino","tag-585"],"_links":{"self":[{"href":"https:\/\/projectleon.net\/make\/wp-json\/wp\/v2\/posts\/876","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/projectleon.net\/make\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/projectleon.net\/make\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/projectleon.net\/make\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/projectleon.net\/make\/wp-json\/wp\/v2\/comments?post=876"}],"version-history":[{"count":1,"href":"https:\/\/projectleon.net\/make\/wp-json\/wp\/v2\/posts\/876\/revisions"}],"predecessor-version":[{"id":877,"href":"https:\/\/projectleon.net\/make\/wp-json\/wp\/v2\/posts\/876\/revisions\/877"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/projectleon.net\/make\/wp-json\/wp\/v2\/media\/875"}],"wp:attachment":[{"href":"https:\/\/projectleon.net\/make\/wp-json\/wp\/v2\/media?parent=876"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/projectleon.net\/make\/wp-json\/wp\/v2\/categories?post=876"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/projectleon.net\/make\/wp-json\/wp\/v2\/tags?post=876"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}