تا اینجا ARCHO فقط در فایلهای XML و خروجیهای ترمینال وجود داشته. زمانش رسیده که برای اولین بار او را «ببینیم». RViz ابزاری است که دقیقاً همین کار را میکند: هر چیزی که در شبکه ROS 2 منتشر میشود — مدل ربات، درخت TF، داده LiDAR، مسیر برنامهریزیشده Nav2 — را بهصورت سهبعدی و زنده نمایش میدهد.
RViz پنجره اطلاعات ربات است؛ Gazebo (فصل بعد) آزمایشگاه مجازی ربات است. RViz هیچ فیزیکی شبیهسازی نمیکند — اگر ARCHO را یک متر بالای زمین قرار بدهی، در RViz همانجا در هوا میماند، چون RViz فقط چیزی را نشان میدهد که از شبکه ROS دریافت کرده، نه اینکه قوانین دنیای واقعی را اعمال کند.
اگر بخواهی یک خودرو را طراحی کنی، یک نرمافزار نقشهکشی فقط ظاهرش را نشان میدهد؛ نمیگوید آیا واژگون میشود یا ترمز میگیرد. RViz دقیقاً همان نقش را برای ربات دارد — یک پنجره برای دیدن و دیباگکردن، نه یک آزمایشگاه فیزیکی.
پیش از باز کردن RViz، بیایید ببینیم داخلش با چه چیزی روبهرو میشویم:
| بخش پنجره | نقش |
|---|---|
| پنل Displays | فهرست همه لایههای اطلاعاتی که میخواهی ببینی؛ هرکدام را میتوان با تیک فعال/غیرفعال کرد |
| دکمه Add | اضافهکردن یک Display جدید (مثلاً LaserScan، PointCloud، Path) |
| Fixed Frame | Frame مرجعی که همه چیز نسبت به آن رسم میشود |
| نمای سهبعدی | صحنه اصلی؛ با ماوس میتوان چرخاند، بزرگنمایی کرد و جابهجا شد |
| Views | نوع دوربین (Orbit، Top Down، First Person و غیره) |
برای نمایش مدل، به یک زنجیره سهمرحلهای نیاز داریم که هر حلقهاش را در فصلهای قبل ساختیم:
یک فایل Launch به نام display.launch.py در archo_description/launch میسازیم:
from launch import LaunchDescription
from launch.substitutions import Command
from launch_ros.actions import Node
from launch_ros.parameter_descriptions import ParameterValue
from ament_index_python.packages import get_package_share_directory
import os
def generate_launch_description():
package_path = get_package_share_directory('archo_description')
xacro_file = os.path.join(package_path, 'urdf', 'archo.urdf.xacro')
robot_description = ParameterValue(
Command(['xacro ', xacro_file]), value_type=str)
return LaunchDescription([
Node(
package='robot_state_publisher',
executable='robot_state_publisher',
parameters=[{'robot_description': robot_description}],
),
Node(
package='joint_state_publisher_gui',
executable='joint_state_publisher_gui',
),
Node(
package='rviz2',
executable='rviz2',
output='screen',
),
])
هنوز هیچ Controller واقعی یا شبیهسازی چرخ نداریم (این کار فصل بعد است). joint_state_publisher_gui
یک پنجره کوچک با اسلایدر برای هر Joint متحرک باز میکند — میتوانی دستی چرخ چپ یا راست را «بچرخانی»
و بلافاصله ببینی که robot_state_publisher این تغییر را در TF منعکس میکند. ابزار عالی
برای تست سریع قبل از رفتن سراغ شبیهسازی کامل.
وقتی RViz برای اولین بار باز میشود، معمولاً چیزی نمیبینی — چون هنوز هیچ Displayای اضافه نکردهای. این چهار مورد را با دکمه Add اضافه کن:
| Display | چه چیزی نشان میدهد |
|---|---|
Grid | یک شبکه مرجع روی زمین، فقط برای جهتیابی چشمی |
RobotModel | ظاهر واقعی ARCHO، دقیقاً همان Visual که در فصل چهارم در Xacro تعریف کردیم |
TF | محورهای رنگی (قرمز/سبز/آبی) هر Frame، برای دیدن اینکه درخت TF فصل قبل واقعاً درست ساخته شده |
LaserScan | نقاط داده LiDAR، وقتی در فصل بعد وارد Gazebo شویم؛ Topic آن معمولاً /scan است |
و مهمتر از همه، Fixed Frame را روی base_footprint تنظیم کن — یعنی همان Root که در فصل چهارم با check_urdf تأیید کردیم.
اگر بعد از اضافهکردن RobotModel چیزی در صفحه نمیبینی، معمولاً یکی از این سه چیز است: Fixed Frame
اشتباه انتخاب شده، robot_state_publisher اجرا نشده، یا Xacro خطا داده و
robot_description اصلاً منتشر نشده. پنل Displays معمولاً یک آیکون قرمز کنار موردی که
مشکل دارد نشان میدهد.
این فصل، برخلاف فصلهای قبل، Checkpointش «چشمی» است — باید با نگاهکردن به RViz، این موارد را تأیید کنی:
برای اولین بار در این کتاب، ARCHO را با چشم خودمان دیدیم — نه بهعنوان خطوط XML، بلکه بهعنوان یک مدل سهبعدی زنده که درخت TF فصل پنجم را واقعی نشان میدهد. اما یادت باشد: RViz فقط یک پنجره اطلاعات است. هیچچیز در آن واقعاً «اتفاق» نمیافتد. برای اینکه ARCHO واقعاً حرکت کند، با گرانش برخورد کند و رفتار فیزیکی واقعی داشته باشد، باید وارد آزمایشگاه مجازی بعدی شویم.
پروژه ARCHO اکنون برای اولین بار قابل مشاهده است. فایل display.launch.py که همین حالا ساختیم، پایه تمام Launchهای بعدی خواهد بود — فقط هر بار یک لایه جدید (Gazebo، Nav2، SLAM) رویش اضافه میشود.
در فصل هفتم، ARCHO برای اولین بار وارد Gazebo میشود — جایی که دیگر فقط دیده نمیشود، بلکه گرانش رویش اثر میگذارد، با زمین برخورد میکند، و LiDAR و IMUاش دادههای واقعی (با نویز) تولید میکنند.