9. RViz

RViz คือหน้าต่างที่ทำให้เห็นสิ่งที่หุ่น "คิด" ว่ากำลังเกิดขึ้น

Important

RViz แสดงสิ่งที่หุ่นเชื่อ ไม่ใช่สิ่งที่เป็นจริง

ถ้า RViz วาดว่าหุ่นอยู่กลางทางเดิน แต่หุ่นจริงชิดกำแพง — ไม่ได้แปลว่า RViz เสีย แต่แปลว่าหุ่นเข้าใจผิด ซึ่งเป็นข้อมูลที่มีค่ามาก

จำข้อนี้ไว้ให้ดี เพราะคนใหม่มักคิดว่า RViz คือกล้องวงจรปิด

เปิด

rviz2

Fixed Frame — ตั้งให้ถูกก่อนอย่างอื่น

ช่องแรกใน Global Options ทางซ้ายบน คือกรอบพิกัดที่ RViz ใช้เป็นจุดยึด

Danger

🔴 ตั้งผิดแล้วจะไม่เห็นอะไรเลย และไม่มีอะไรอธิบายว่าทำไม

ค่าเริ่มต้นคือ map ซึ่งจะใช้ได้ต่อเมื่อมี SLAM หรือ AMCL ทำงานอยู่ ถ้ายังไม่มี จะขึ้นข้อความสีแดงว่า Fixed Frame [map] does not exist แล้วจอว่างเปล่า

เลือกตามสถานการณ์

สถานการณ์

ตั้งเป็น

ทดสอบเซ็นเซอร์ ยังไม่มีแผนที่

base_link

มี odometry แล้ว ดูการเคลื่อนที่

odom

มีแผนที่และ AMCL แล้ว

map

Display ที่ใช้บ่อย

กด Add มุมซ้ายล่าง แล้วเลือกตามนี้

Display

ใช้ดู

topic

RobotModel

รูปร่างหุ่นจาก URDF

TF

กรอบพิกัดทั้งหมดเป็นแกนสี

LaserScan

จุดที่ LiDAR เห็น

/scan

Map

แผนที่

/map

Path

เส้นทางที่วางไว้

/plan

Costmap

พื้นที่ที่ห้ามเข้า

/global_costmap/costmap

Tip

เพิ่มทีละอัน แล้วดูว่าขึ้นไหมก่อนเพิ่มอันถัดไป

ถ้าเพิ่มทั้งหมดรวดเดียวแล้วจอว่าง จะไม่รู้ว่าอันไหนมีปัญหา ส่วนใหญ่ที่ไม่ขึ้นคือ Fixed Frame ผิด หรือ topic ไม่มีข้อมูล

TF display — ตัวที่มีประโยชน์ที่สุดตอนหาสาเหตุ

เปิด TF display แล้วจะเห็นแกนสีสามแกนของทุกกรอบพิกัด (แดง = x · เขียว = y · น้ำเงิน = z)

ใช้ตรวจได้ 3 อย่างในพริบตา

  1. LiDAR อยู่ถูกที่ไหม — แกนของ laser_front ควรอยู่ตรงตำแหน่งจริงบนหุ่น

  2. หันถูกทางไหม — แกนแดงควรชี้ไปทางหน้าหุ่น

  3. map กับ odom ห่างกันแค่ไหน — ยิ่งห่างแปลว่า odometry ยิ่งเพี้ยนสะสม

ตรวจ LiDAR ด้วยตา

เปิด LaserScan display ตั้ง Fixed Frame เป็น base_link แล้วเข็นหุ่นเข้าใกล้กำแพง

สิ่งที่ควรเห็น — เส้นจุดเป็นแนวกำแพงตรง อยู่ห่างจากจุดกลางหุ่นเท่าที่วัดได้จริง

สิ่งที่เห็น

แปลว่า

กำแพงเอียงทั้งที่ตรง

มุมติดตั้ง LiDAR ใน URDF ผิด

กำแพงอยู่ผิดระยะ

ตำแหน่ง LiDAR ใน URDF ผิด

มีจุดเป็นวงอยู่รอบตัวหุ่น

LiDAR เห็นตัวถังหุ่นเอง ต้องตัดมุมนั้นทิ้ง

ไม่มีจุดเลย

topic ผิด หรือ QoS ไม่ตรง (ดู หัวข้อ 10)

Note

กรณี "เห็นตัวถังหุ่นเอง" เป็นเรื่องที่เจอจริงบ่อยมากกับหุ่นที่มี LiDAR 2 ตัว ผลคือระบบคิดว่ามีสิ่งกีดขวางติดตัวตลอดเวลา แล้วไม่ยอมเคลื่อนที่

แก้ด้วยการตัดช่วงมุม ที่มองเห็นตัวเอง ไม่ใช่ตัดตามระยะ — ตัดตามระยะจะทำให้มองไม่เห็นสิ่งกีดขวางที่อยู่ใกล้จริง ๆ ไปด้วย

บันทึกการตั้งค่า

ตั้ง display ครบแล้ว File → Save Config As เก็บเป็น .rviz

เปิดครั้งหน้าด้วย

rviz2 -d ~/ros2_ws/src/my_robot/rviz/robot.rviz

Tip

ใส่ไฟล์ .rviz ลง git ด้วย — เป็นส่วนหนึ่งของงาน ไม่ใช่ค่าส่วนตัว ทีมจะได้เห็นภาพเดียวกันเวลาคุยกันเรื่องปัญหา

สั่งเป้าหมายจาก RViz

เมื่อ Nav2 ทำงานแล้ว ปุ่มบนแถบเครื่องมือใช้สั่งงานได้

  • 2D Pose Estimate — บอกหุ่นว่าตอนนี้อยู่ตรงไหนบนแผนที่ (ใช้ตอนเพิ่งเปิดเครื่อง)

  • 2D Goal Pose — สั่งให้ไปที่จุดนั้น

Danger

ปุ่ม 2D Goal Pose สั่งหุ่นจริงให้เคลื่อนที่ทันที ไม่มีหน้าต่างถามยืนยัน คลิกพลาดหุ่นออกวิ่งเลย — ก่อนกดต้องแน่ใจว่าไม่มีคนอยู่ในทาง


ก่อนหน้า: 8. tf2 · ต่อไป: 10. QoS