goodLOGO-mingoodLOGO-mingoodLOGO-mingoodLOGO-min
  • دانشنامه
  • پرسش و پاسخ
  • پروژه‌ها
  • شروع یادگیری رآس
  • اخبار و رویدادها
  • ایران رآس
    • درباره ما
    • تماس با ایران رآس
    • چرا رآس؟
    • رآس چیست؟
    • درباره رآس
  • دانشنامه ایران رآس
  • پرسش و پاسخ
  • اخبار و رویدادها
  • رآس چیست؟
  • پروژه‌ها
✕

ویدئو آموزشی مربوط به این پروژه به زودی بارگذاری خواهد شد

اطلاعات مربوط به این پروژه

  • چکیده
  • راهنمای اجرا
  • آموزش ویدئویی
  • نظرات

چکیده

پروژه آموزشی turtlesim_iranmap، بر اساس آموزش‌های مقدماتی ارائه شده در دانشنامه ایران رآس مهیا شده است و در آن لاکپشت شبیه‌ساز turtlesim مسیر مرزهای ایران را طی کرده و ردی از حرکت خود باقی می‌گذارد.

در زیر تصویری از اجرای نهایی این پروژه را مشاهده می‌کنید.

مطالبی که در این پروژه آموزش داده می‌شوند:

    • آشنایی اولیه با محیط لینوکس و ROS
    • معرفی ترمینال و دستورات پرکاربرد در آن
    • نحوه ایجاد یک فضای کاری
    • ایجاد بسته یا پکیج
    • نحوه نوشتن یک نود برای اجرای دستورات موردنظر به زبان پایتون و C++
    • نحوه ارسال و دریافت پیام (publish & subscribe)
    • معرفی ابزار سرویس-کلاینت (فایل‌های .srv) و فراخوانی سرویس در قالب یک نود
    • تنظیمات مورد نیاز فایل‌های xml و CMakeListsبرای اجرای یک پروژه
    • ایجاد فایل لانچ برای اجرای همزمان چند نود
    • استفاده از ابزار rqt_plot برای مشاهده نمودار تاپیک‌های منتشر شده
    • نحوه دریافت و کامپایل یک پروژه از سرور گیت هاب
    • و سایر ریزه کاری‌هایی که در حین اجرای یک پروژه ممکنه باهاش مواجه بشین….

راهنمای اجرا

اهداف این پروژه:

در این پروژه قصد داریم تا با کمک شبیه‌ساز لاکپشت ROS روند ایجاد و اجرای یک پروژه ساده رو در رآس آموزش بدیم و در اون مطالبی که در بخش مقدماتی سایت ارائه شده رو پیاده‌سازی کنیم.

شبیه‌ساز turtlesim یک محیط گرافیکی ساده رو مهیا می‌کنه که در اون یک لاکپشت میتونه در یک صفحه دو‌بعدی حرکت کنه و در حین حرکت ردی از خودش توی صفحه به جا بذاره. این شبیه‌ساز به صورت پیش‌فرض روی رآس موجوده و از اون برای اهداف آموزشی استفاده می‌شه. ما در این پروژه قصد داریم تا به کمک این شبیه‌ساز نودی بنویسیم که این لاکپشت رو روی مسیری حرکت بده که پس از پایان حرکت نقشه ایران روی صفحه نقش ببنده.

شروع کنیم؟

ما فرض رو بر این گذاشتیم که شما قبل از اجرای این پروژه،  آموزش‌های بخش مقدماتی ایران رآس رو دنبال کردین و با مفاهیم اولیه در ROS آشنایی کافی رو دارید، در اینصورت با دنبال کردن این بخش مروری بر آنچه تا کنون آموخته‌اید خواهیم داشت.

لازمه در ابتدا اشاره کنیم که کدهای این پروژه به صورت کامل در سرور گیت هاب بارگذاری شده و شما قادرید تنها با استفاده از دستور git clone بسته مربوطه رو دانلود و سپس اون رو کامپایل کنید (این کار رو در پایان این آموزش ارائه خواهیم داد)، اما برای یادگیری بیشتر توصیه می‌کنیم که ابتدا فرآیند ایجاد این پروژه رو گام به گام با ما جلو بیاین.

شبیه‌ساز turtlesim

قبل از اینکه پروژه خودمون رو شروع کنیم بیایید یک مروری بر شبیه‌ساز turtlesim داشته باشیم.

ابتدا یک ترمینال جدید باز کنید و در اون هسته مرکزی ROS رو با دستور زیر فراخوانی کنید.

 roscore 

سپس با فشار دادن کلیدهای cntrl+shift+T یک تب جدید باز کنید و با زدن دستور زیر نود مربوط به شبیه‌ساز لاکپشت رو اجرا کنید.

 rosrun turtlesim turtlesim_node

در این صورت شما صفحه‌ای رو مشاهده خواهید کرد که در وسط اون یک لاکپشت قرار گرفته است. برای به حرکت درآوردن این لاکپشت باید یک نود دیگه رو اجرا کنیم. مجدداً یک تب دیگه باز کنید و در اون نود حرکت رو با دستور زیر فراخوانی کنید.

 rosrun turtlesim turtle_teleop_key 

حالا در صورتی که داخل این تب ترمینال کلیک کنید و کلیدهای مکان نما رو فشار بدید، لاکپشت توی صفحه حرکت می‌کنه.

در حین اجرای پروژه به چند سرویس از سرویس‌های موجود این شبیه‌ساز نیاز خواهیم داشت، پس بهتره در ابتدا با اونا و عملکردشون آشنا بشید.

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

 rosservice list 

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

 rosservice info /نام سرویس 

در این پروژه از دو سرویس kill و spawn استفاده خواهد شد، برای آشنایی با عملکرد این دو سرویس می‌توانید از دستور call به صورت زیر استفاده کنید.

rosservice call /kill "name: 'turtle1'"  
rosservice call /spawn "x: 0.0 y: 0.0 theta: 0.0 name: 'turtle2'"

بعد از وارد کردن نام سرویس کلید تب را فشار دهید تا پارامترهای مورد نیاز سرویس ظاهر شود سپس آنها را مقدار دهی کنید.

ایجاد فضای کاری

برای شروع کار با رآس ابتدا باید یک فضای کاری ایجاد کنیم، اگر این اولین باریست که با رآس کار می‌کنید باید  قبل از ایجاد فضای کاری با استفاده از دستور زیر متغیرهای محلی سیستم مقدار دهی شوند. (توضیحات کاملتر در این باره و نحوه قرار دادن این دستور در فایل bashrc را می‌توانید در گام سوم دنبال کنید.)

 source /opt/ros/kinetic/setup.bash

در ادامه مطابق گام سوم آموزش مقدماتی دستورات زیر را وارد می‌کنیم تا فضای کاری با نام catkin_ws ایجاد شود.

  mkdir -p ~/catkin_ws/src
 cd ~/catkin_ws/
 catkin_make
 

سپس دستور سورس را به صورت زیر وارد کنید.

source devel/setup.bash

ساخت بسته

به مسیر پوشه src رفته و یک بسته به نام “turtlesim_iranmap” ایجاد می‌کنیم.

cd ~/catkin_ws/src
catkin_create_pkg turtlesim_iranmap std_msgs rospy roscpp

حالا به فضای کاری برگشته و بسته را کامپایل می‌کنیم.

cd ~/catkin_ws 
catkin_make

#!/usr/bin/env python
#!/usr/bin/env python

# /////////////////////////////////////////////////////////////////////////////////
# /////////////////////////////// www.IRANROS.com /////////////////////////////////
# /////////////////////////////////////////////////////////////////////////////////

#................................ Turtlesim_IranMap Project .........................

import rospy
from geometry_msgs.msg import Twist
from turtlesim.msg import Pose
from math import pow, atan2, sqrt


class TurtleBot:

    def __init__(self):
        # Creates a node with name 'turtlebot_controller' and make sure it is a
        # unique node (using anonymous=True).
        rospy.init_node('turtlebot_controller', anonymous=True)

        # Publisher which will publish to the topic '/turtle2/cmd_vel'.
        self.velocity_publisher = rospy.Publisher('/turtle2/cmd_vel',
                                                  Twist, queue_size=10)

        # A subscriber to the topic '/turtle2/pose'. self.update_pose is called
        # when a message of type Pose is received.
        self.pose_subscriber = rospy.Subscriber('/turtle2/pose',
                                               Pose, self.update_pose)
        self.pose = Pose()
        self.rate = rospy.Rate(10)
    def update_pose(self, data):
        """Callback function which is called when a new message of type Pose is
        received by the subscriber."""
        self.pose = data
        self.pose.x = round(self.pose.x, 4)
        self.pose.y = round(self.pose.y, 4)

    def euclidean_distance(self, goal_pose):
        """Euclidean distance between current pose and the goal."""
        return sqrt(pow((goal_pose.x - self.pose.x), 2) +
                    pow((goal_pose.y - self.pose.y), 2))

    def linear_vel(self, goal_pose, constant=1.5):
        return constant * self.euclidean_distance(goal_pose)

    def steering_angle(self, goal_pose):
         return atan2(goal_pose.y - self.pose.y, goal_pose.x - self.pose.x)

    def angular_vel(self, goal_pose, constant=6):
         return constant * (self.steering_angle(goal_pose) - self.pose.theta)

    def move2goal(self):
	
        """Moves the turtle to the goal."""
        goal_pose = Pose()
       
       # latitude and  longitude of Iran boundries (normalized)   
        yy=[4.9757,5.2422,5.5389,5.9397,6.2290,6.4821,7.0084,7.6029,7.9349,8.4058,8.9055,9.6517,9.8965,9.5268,9.4584,9.8283,9.7003,9.2960,9.2313,8.8037,8.6863,8.3656,8.4471,8.6615,9.0417,8.9710,8.5277,8.3213,7.3428,6.2604,5.7545,5.6777,5.4247,4.9203,4.4076,4.2203,4.1304,3.6278,3.5848,3.3156,3.1512,2.6109,2.6884,3.2980,3.5704,3.5348,3.2733,3.4411,3.7613,3.8625,3.8625,4.4040,4.8056,5.0832,5.0916,4.9822,4.9757,4.7726,4.1873,3.6145,3.1581,2.5190,2.8706,3.0362,2.8373,2.4098,2.0003,2.0728,2.1265,2.5738,2.8819,3.0750,2.9837,2.5445,1.9702,1.7004,1.7351,2.5174,2.5492,3.1512] 
        xx=[2.2777,2.0158,1.8374,1.9234,1.7224,1.0192,0.7252,1.0648,0.9262,0.4333,0.2306,0.0218,0.2756,0.6784,1.2943,1.9546,2.1615,2.2343,2.4368,2.5767,3.0716,3.5328,4.9025,4.9797,5.8376,6.7861,7.9688,8.5460,8.5072,8.3632,8.4699,8.8492,8.9020,8.4449,8.8306,9.1910,9.3980,9.4201,9.6478,9.5764,8.9685,8.7808,8.1111,6.5252,6.3661,5.9319,5.3480,4.7403,4.2765,4.1003,4.1003,3.4323,3.2581,3.0175,2.6338,2.2995,2.2777,2.0492,2.2535,2.6457,3.1146,3.3452,3.4471,3.6407,3.7709,3.7596,3.8969,4.5440,5.1820,5.5310,5.9070,6.1418,6.2194,6.1636,6.5577,8.6394,9.0766,9.1688,8.7900,8.9685] 
     
       
	for i in range(0,79):
			goal_pose.x = xx[i]
			goal_pose.y = yy[i]

			# Please, insert a number slightly greater than 0 (e.g. 0.01).
			distance_tolerance =0.1

			vel_msg = Twist()
			
			while self.euclidean_distance(goal_pose) >= distance_tolerance:

				# Porportional controller.
			
				# Linear velocity in the x-axis.
				vel_msg.linear.x = 2*self.linear_vel(goal_pose)
				vel_msg.linear.y = 0
				vel_msg.linear.z = 0

				# Angular velocity in the z-axis.
				vel_msg.angular.x = 0
				vel_msg.angular.y = 0
				vel_msg.angular.z =2* self.angular_vel(goal_pose)

				# Publishing our vel_msg
				self.velocity_publisher.publish(vel_msg)

				# Publish at the desired rate.
				self.rate.sleep()
			i+=i
			
            	
	print(" /////////// Turtle traversed the Iran map boundries succesfully ////////////")
        # Stopping our robot after the movement is over.
        vel_msg.linear.x = 0
        vel_msg.angular.z = 0
        self.velocity_publisher.publish(vel_msg)

        # If we press control + C, the node will stop.
	print("\n press control + C for close. ")
        rospy.spin()

if __name__ == '__main__':
    try:
        x = TurtleBot()
        x.move2goal()
    except rospy.ROSInterruptException:
        pass


در کدهای بالا مقادیر طول و عرض جغرافیایی مرزهای ایران به صورت نرمال شده به عنوان نقاط هدف (goal_pose) تعریف شده است. موقعیت ربات شامل x,y,theta  نیز توسط دستور rospy.Subscriber دریافت شده و فاصله آن از نقطه هدف محاسبه می‌شود، سپس سرعت خطی و سرعت زاویه‌ای مناسب برای رسیدن به نقاط هدف محاسبه شده و با استفاده از دستور rospy.Publisher تحت تاپیک ‘turtle2/cmd_vel/’ منتشر می‌شود. (توضیحات بیشتر درمورد این کد را می‌توانید در ویدئوی آموزشی مربوطه مشاهده کنید.)

یکی از مزایای نوشتن نودها به زبان پایتون این است که برای شناساندن آن نیازی به اصلاح فایل CMakeLists نیست و تنها با اجرای دستور زیر این نود قابل اجرا می‌شود.

 chmod +x gotogoal.py 

دقت کنید که در هنگام اجرای این دستور، ترمینال در مسیر پوشه حاوی این نود باشد.

اگر بخواهیم عملکرد نود مربوطه را تا اینجای کار مشاهده کنیم، می‌توانیم به صورت زیر عمل کنیم:

  • ابتدا هسته مرکزی رآس را با دستور roscore فراخوانی می‌کنیم.
  • سپس نود turtlesim را مطابق آنچه در ابتدای این آموزش توضیح داده شد اجرا می‌کنیم.
  • سپس با وارد کردن دستور زیر نود جدید را اجرا می‌کنیم.
 rosrun turtlesim_iranmap gotogoal.py 

اگر همه چیز رو به راه باشه، لاکپشت باید از وسط صفحه شروع به حرکت کنه و نقشه ایران رو رسم کنه.

اجرای سرویس در قالب یک نود

اگر دقت کرده باشید ربات از وسط صفحه شروع به حرکت کرد و یک خط اضافه رسم شد. حالا برای اینکه ربات رو از یه مکان دلخواه به حرکت دربیاریم از سرویس‌های تعریف شده برای شبیه‌ساز که قبلاً با اونا آشنا شدید استفاده می‌کنیم.

توصیه می‌کنیم جهت آشنایی بیشتر با مفاهیم سرویس‌ها گام‌های ۶ و ۸ رو مرور کنید.

هدف ما در این قسمت اینه که نودی بنویسیم که در اون ابتدا سرویس kill رو فراخوانی کنه و ربات پیشفرض رو از صفحه حذف کنه، سپس با فراخوانی سرویس spawn یک ربات جدید در موقعیت دلخواه قرار بده.

همانطور که در آموزش‌های مربوط به سرویس گفته شد، هر سرویس از دو بخش server (نودی که سرویس را ارائه می‌دهد) و client (نودی که از سرویس ارائه شده استفاده می‌کند) تشکیل شده است.

در مورد مثال ما نودهای مربوط به سرور در پکیج turtlesim موجود هستند و ما تنها نیاز داریم تا نودی به عنوان کلاینت یا استفاده کننده از سرویس را در پکیج خودمان ایجاد کنیم. همچنین برای استفاده از سرویس‌ها باید فایل‌های srv مورد نیاز را درون پکیج ایجاد کنیم و همچنین تغییرات لازم را در فایل package.xml و  CMakeLists.txt ایجاد کنیم.در ادامه این مراحل رو به صورت گام به گام توضیح می‌دهیم.

ایجاد فایل srv

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

cd ~/catkin_ws 
roscp turtlesim Kill.srv srv/Kill.srv
roscp turtlesim Spawn.srv srv/ Spawn.srv

اگر حالا به مسیر پوشه srv بروید مشاهده خواهید کرد که دو فایل مورد نظر در آن کپی شده است.

حالا نوبت به انجام تنظیمات فایل‌های package.xml و  CMakeLists.txt می‌رسد.

ابتدا دو خط زیر در فایل  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
 Kill.srv
 Spawn.srv
)

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

catkin_make install

نوشتن نود کلاینت

همانطور که توضیح داده شد قصد داریم تا فراخوانی هر دو سرویس را در یک نود انجام بدهیم،  برای این کار یک فایل جدید در پوشه src  با نام initial_pos.cpp ایجاد می‌کنیم و کدهای زیر رو در اون قرار می‌دهیم.

   //..................... www.IRANROS.com ..........................\\
  //////////////////////////////////////////////////////////////////////
       // set initial position of turtle with calling services //
  //////////////////////////////////////////////////////////////////////

#include <ros/ros.h>
#include <turtlesim/Kill.h>
#include <turtlesim/Spawn.h>
     
int main(int argc, char **argv) {
  ros::init(argc, argv, "initial_pos");
  ros::NodeHandle nh;

  // Wait until the clear service is available, which
  // indicates that turtlesim has started up, and has
  // set the background color parameters.
  ros::service::waitForService("kill");  //this is optional
  ros::service::waitForService("spawn");  //this is optional

 
 // calling kill service for delete defult turtle:
 
    ros::ServiceClient killClient = nh.serviceClient<turtlesim::Kill>("kill");
	  turtlesim::Kill srv;
	  srv.request.name="turtle1";
	  killClient.call(srv);
	  
	  ROS_INFO("kill");
    
  // calling spawn service for locate robot in initial position:
  
    ros::ServiceClient spawnClient = nh.serviceClient<turtlesim::Spawn>("spawn");
	  turtlesim::Spawn srv2;
	  srv2.request.x=2.2777;  //initial pose.x
	  srv2.request.y=4.9757;  //initial pose.y
	  srv2.request.theta=0.0; //initial orientation
	  srv2.request.name="turtle2";
	  spawnClient.call(srv2);
	 
      ROS_INFO("spawn"); 


  return 0;
}

در ادامه برای قابل اجرا بودن نود نوشته شده باید دو خط زیر را به فایل CMakeLists.txt اضافه کنیم.

add_executable(initial_pos src/initial_pos.cpp)
target_link_libraries(initial_pos  ${catkin_LIBRARIES} )

خب تا اینجای کار هر کدام از نودها به صورت مجزا قابل اجرا هستند و می‌توانیم هر کدام از آنها را در یک ترمینال با استفاده از دستور rosrun اجرا کنیم، اما در ادامه می‌خواهیم با استفاده از یک فایل لانچ تمامی نودها را به صورت همزمان اجرا کنیم.

ساخت فایل لانچ

همانطورکه در گام هفتم توضیح داده شد، ابتدا در بسته خودمان پوشه‌ای با نام launch ایجاد می‌کنیم و درون آن یک فایل با نام دلخواه و با پسوند .launch ایجاد کرده (ما iranmap.launch رو انتخاب کردیم) و کدهای زیر را در آن قرار می‌دهیم.

<launch>
   <node pkg="turtlesim" name="turtle" type="turtlesim_node"/>
   <node pkg="turtlesim_iranmap" name="init" type="initial_pos" output="screen"/>
   <node pkg="turtlesim_iranmap" name="go" type="gotogoal.py" output="screen"/>
</launch>

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

حالا برای اجرای پروژه کافیست ابتدا در ترمینال به مسیر بسته رفته و با دستور catkin_make پروژه رو کامپایل کنید، پس از اون با استفاده از دستور زیر فرآیند سورس کردن رو انجام بدید.

source devel/setup.bash

حالا می‎‌تونید فایل لانچ خودتون رو به صورت زیر اجرا کنید.

roslaunch turtlesim_iranmap iranmap.launch

اگر همه چیز رو به درستی انجام داده باشید باید بدون هیچ مشکلی صفحه مربوط به شبیه‌ساز باز بشه و ربات شروع به حرکت کنه. 🙂

دانلود بسته از مخزن گیت هاب و کامپایل کردن آن

در این قسمت نحوه دانلود یک بسته و کامپایل کردن آن از سرورهای گیت هاب رو توضیح می‌دهیم.

خوبه در ابتدا یه معرفی از گیت داشته باشیم:

گیت (به انگلیسی: Git) یک نرم‌افزار آزاد و متن‌باز برای بازنگری کد منبع توزیع شده و مدیریت منبع کد است که برروی سرعت تاکید می‌کند. گیت ابتدا برای توسعه لینوکس توسط لینوس تروالدز به وجود آمد و اکنون پروژه‌های فراوانی از آن الهام گرفته‌اند. هر دایرکتوری کاری در گیت یک مخزن کامل با تاریخچه کامل تغییرات و قابلیت بازنگری تغییرات است و برای کار با آن نیازی به دسترسی به شبکه یا سرور مرکزی وجود ندارد. گیت یک نرم‌افزار آزاد است که تحت عنوان جی‌پی‌ال نسخه ۲ توزیع شده است. (ویکی پدیا).

برنامه نویسان معمولاً کدهای خودشون رو در مخازن آنلاینی نظیر GitHb قرار می‌دهند تا علاوه بر  استفاده از قابلیت‌های جذاب اون مثل  تاریخچه کامل تغییرات و قابلیت بازنگری تغییرات ، بتونن اونا رو به راحتی انتشار بدن.

در رآس این امکان وجود داره که بسته‌ها رو مستقیماً توسط دستور git clone از مخازن گیت هاب دانلود کنیم. در ادامه ما این کار رو برای کدهای مربوط به پروژه خودمون که در گیت هاب بارگذاری شدند انجام می‌دهیم.

ابتدا دایرکتوری فعلی رو به مسیر پوشه src فضای کاری تغییر می‌دهیم.

cd ~/catkin_ws/src

توجه: اگر از ابتدای این آموزش را دنبال کرده‌اید یک فضای کاری جدید درست کنید !

حالا می‌توانید با استفاده از دستورات زیر بسته turtlesim_iranmap را دانلود و سپس آن را کامپایل کنید.

git clone https://github.com/iranros/turtlesim_iranmap.git
cd ..
catkin_make
source devel/setup.bash

همونطور که قبلاً هم گفتیم، چون نود مربوط به حرکت رو به زبان پایتون نوشتیم باید اون رو قابل اجرا کنیم. برای این کار ابتدا به مسیر حاوی این فایل رفته و سپس نود را معرفی می‌کنیم.

 cd src/turtlesim_iranmap/src
chmode +x gotogoal.py

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

 cd ../../..
roslaunch turtlesim_iranmap iranmap.launch

در پایان توصیه می‌کنیم برای دیدن توضیحات بیشتر ویدئوی آموزشی مربوط به این پروژه رو هم مشاهده کنید.

در صورتی که در حین اجرای این پروژه به مشکلی برخوردید می‌تونید در بخش پرسش و پاسخ ایران رآس سوالات خودتون رو مطرح کنید تا پاسخگوی شما باشیم.

موفق باشید.

تیم ایران رآس

کارشناسان ما پاسخگوی سؤالات و مشکلات شما هستند.

پرسش و پاسخ ایران رآس

آموزش ویدئویی

نظرات

آخرین دیدگاه‌ها درباره این پروژه

  • محمد در شبیه سازی ربات زیرسطحی(AUV)
  • فریدون جعفری در شبیه سازی ربات زیرسطحی(AUV)
  • محمد در شبیه سازی ربات زیرسطحی(AUV)
  • iranros author در راه‌اندازی ربات پرنده در ROS
  • محمد وجدانی در راه‌اندازی ربات پرنده در ROS
  • شبیه سازی ربات زیرسطحی(AUV)
    تیر 10, 1400 3
    1
    در این پروژه نحوه راه‌اندازی و اجرای شبیه ساز UUV_Simulator برای شبیه سازی وسایل بدون سرنشین زیر سطحی آموزش داده می‎‌شود.
  • مدلسازی و کنترل بازوی ۲ درجه آزادی
    خرداد 17, 1400 0
    0
     در این پروژه مدلسازی و کنترل یک بازوی رباتیک ساده دو درجه آزادی را در ROS آموزش داده می شود. با انجام این پروژه شما می توانید ربات‌های شخصی خودتان را نیز در رآس مدلسازی و کنترل کنید.
  • شبیه‌سازی حسگر Velodyne LIDAR در ROS و Gazebo
    شبیه‌سازی حسگر Velodyne LIDAR در ROS و Gazebo
    آذر 12, 1398 0
    0
    در این پروژه به معرفی و شبیه سازیشبیه‌سازی حسگر Velodyne LIDAR در ROS و Gazebo پرداخته می‌شود. کاربردهای اصلی این حسگر را می توان در سیستم‌های خودمختار، توسعه الگوریتم ها برای پردازش داده های لیدار، استفاده از ابر نقاط و یا به عنوان بخشی از الگوریتم های پیشرفته خودمختاری SLAM (مکان یابی و نقشه کشی همزمان ) یافت.
  • راه‌اندازی ربات پرنده در ROS
    فروردین 14, 1398 4
    3
    در این پروژه نحوه راه‌اندازی و کنترل یک کوادکوپتر در ROS آموزش داده خواهد شد.
اشتراک گذاری
6

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

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

  • اخبار و رویدادها
    • اخبار رباتیک
    • رویداد های رباتیک
  • پروژه‌ها
    • ربات‌های زمینی
    • ربات‌های هوایی
    • بازوهای رباتیک
    • مقدماتی
  • دوره های آموزشی

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

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


درباره ما تماس با ما قوانین و مقررات ثبت شکایات

دسترسی سریع

  • دانشنامه ایران رآس
  • پرسش و پاسخ
  • اخبار و رویدادها
  • رآس چیست؟
  • پروژه‌ها

مجوزها

logo-samandehi

© تمام حقوق مادی و معنوی برای ایران رآس محفوظ است.
0

0تومان

✕

ورود

گذرواژه خود را فراموش کرده اید؟

می خواهید یک حساب کاربری ایجاد کنید؟



    • ورود به ایران رآس
    • ایجاد حساب کاربری

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

    Prove your Humanity: − =

    رمزعبور خود را گم کردی؟ لطفا آدرس ایمیل خود را وارد کنید. برای تنظیم رمز جدید ، ایمیلی با لینک دریافت خواهید کرد.

    بازگشت به صفحه ورود

    بستن پنجره