</> Make for Iran – بسازیم برای ایران

پروژه‌ها، آموزش‌ها و ابزارها برای سازندگان و علاقه‌مندان الکترونیک

  • خانه
  • الکترونیک
  • پرینت سه‌بعدی
  • حکاکی و برش لیزری
  • ابزار کارگاهی
  • پهپاد
  • ربات زمینی UGV
  • ربات پرنده UAV
  • صنایع دستی
  • آموزش
  • پروژه‌ها
  • درباره ما
خانه›آموزش›ادغام ROS با UGV آردوینو — rosserial و ارتباط با Raspberry Pi (فارسی)
آموزش ربات‌های زمینی (UGV)

ادغام ROS با UGV آردوینو — rosserial و ارتباط با Raspberry Pi (فارسی)

​ ژوئن 12, 2026 2 دقیقه مطالعه
ROS rosserial آردوینو Raspberry Pi UGV

ROS چیست و چرا برای UGV پیشرفته لازم است؟

ROS (Robot Operating System) یک چارچوب نرم‌افزاری متن‌باز برای ربات‌ها است که روی Linux اجرا می‌شود. درست مثل سیستم‌عامل کامپیوتر، به ماژول‌های مختلف (node) اجازه می‌دهد از طریق پیام‌رسانی با هم ارتباط برقرار کنند. ناوبری، مدیریت حسگر، SLAM و کنترل همه در قالب nodeهای مجزا هستند.

rosserial یک bridge است که به آردوینو اجازه می‌دهد مستقیماً در شبکه ROS شرکت کند — publish و subscribe توکن‌های ROS از داخل کد آردوینو. Raspberry Pi نقش master را دارد و آردوینو node.

🛠️ کارت پروژه

پردازنده Raspberry Pi 4 (ROS master) + Arduino (node)
ROS ROS Noetic (Ubuntu 20.04)

نصب rosserial روی Raspberry Pi

sudo apt install ros-noetic-rosserial-arduino ros-noetic-rosserial
# نصب کتابخانه در Arduino IDE:
# Sketch → Include Library → Manage Libraries → جستجو "rosserial"

کد آردوینو — Subscribe به cmd_vel و Publish Odometry

#include <ros.h>
#include <geometry_msgs/Twist.h>
#include <nav_msgs/Odometry.h>

ros::NodeHandle nh;
nav_msgs::Odometry odom_msg;
ros::Publisher odom_pub("odom", &odom_msg);

// دریافت دستور حرکت از ROS
void cmdVelCallback(const geometry_msgs::Twist& cmd){
  float linear  = cmd.linear.x;   // m/s
  float angular = cmd.angular.z;  // rad/s

  // تبدیل به سرعت چرخ (Differential Drive)
  float v_r = (2*linear + angular*WHEEL_BASE) / (2*WHEEL_RADIUS);
  float v_l = (2*linear - angular*WHEEL_BASE) / (2*WHEEL_RADIUS);

  int pwm_r = constrain((int)(v_r * 128/MAX_SPEED), -255, 255);
  int pwm_l = constrain((int)(v_l * 128/MAX_SPEED), -255, 255);
  driveDiff(pwm_l, pwm_r);
}

ros::Subscriber<geometry_msgs::Twist> cmd_sub("cmd_vel", &cmdVelCallback);

void setup(){
  nh.initNode();
  nh.subscribe(cmd_sub);
  nh.advertise(odom_pub);
}

void loop(){
  // انتشار Odometry از encoder
  updateOdometry();
  odom_pub.publish(&odom_msg);
  nh.spinOnce();
  delay(20);
}

اجرا روی Raspberry Pi

# ترمینال ۱: ROS Master
roscore

# ترمینال ۲: اتصال آردوینو
rosrun rosserial_python serial_node.py /dev/ttyACM0

# ترمینال ۳: کنترل صفحه‌کلید
rosrun teleop_twist_keyboard teleop_twist_keyboard.py

# ترمینال ۴: مشاهده Odometry
rostopic echo /odom

  • ROS Wiki: rosserial_arduino
  • آپارات: ROS ربات آردوینو
برچسب‌ها: cmd_vel Odometry Raspberry Pi Robot OS ROS rosserial UGV آردوینو ناوبری
​
مطلب بعدی دنبال کردن خط با UGV — ساده‌ترین پروژه خودکار با حسگر IR (فارسی) مطلب قبلی جمع‌بندی ۵۰ پست UGV — راهنمای انتخاب پروژه بر اساس بودجه و تجربه (فارسی)
</> Make for Iran – بسازیم برای ایران

پروژه‌ها، آموزش‌ها و ابزارها برای سازندگان و علاقه‌مندان الکترونیک

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

دسته‌بندی‌ها

  • پروژه‌ها
  • ربات‌های پرنده (UAV)
  • آموزش
  • ربات‌های زمینی (UGV)
  • الکترونیک
  • پهپاد و مولتی‌روتور

پیوندها

  • خانه
  • درباره ما
  • تماس
  • فید RSS

آخرین مطالب

  • خلاصه دوره ArduPilot/iNAV و گام‌های بعدی (فارسی)
  • رادیو تله‌متری در مقابل LTE/4G برای کنترل از راه دور (فارسی)
  • Ground Station روی موبایل و تبلت — QGroundControl و Solex (فارسی)
  • راه‌اندازی Ground Station با Mission Planner (فارسی)
© 2026 Make for Iran – بسازیم برای ایران. تمامی حقوق محفوظ است.
ساخته شده با ❤️ برای سازندگان ایران  |  ورود