9. RViz
RViz คือหน้าต่างที่ทำให้เห็นสิ่งที่หุ่น "คิด" ว่ากำลังเกิดขึ้น
Important
RViz แสดงสิ่งที่หุ่นเชื่อ ไม่ใช่สิ่งที่เป็นจริง
ถ้า RViz วาดว่าหุ่นอยู่กลางทางเดิน แต่หุ่นจริงชิดกำแพง — ไม่ได้แปลว่า RViz เสีย แต่แปลว่าหุ่นเข้าใจผิด ซึ่งเป็นข้อมูลที่มีค่ามาก
จำข้อนี้ไว้ให้ดี เพราะคนใหม่มักคิดว่า RViz คือกล้องวงจรปิด
เปิด
rviz2
Fixed Frame — ตั้งให้ถูกก่อนอย่างอื่น
ช่องแรกใน Global Options ทางซ้ายบน คือกรอบพิกัดที่ RViz ใช้เป็นจุดยึด
Danger
🔴 ตั้งผิดแล้วจะไม่เห็นอะไรเลย และไม่มีอะไรอธิบายว่าทำไม
ค่าเริ่มต้นคือ map ซึ่งจะใช้ได้ต่อเมื่อมี SLAM หรือ AMCL ทำงานอยู่
ถ้ายังไม่มี จะขึ้นข้อความสีแดงว่า Fixed Frame [map] does not exist
แล้วจอว่างเปล่า
เลือกตามสถานการณ์
สถานการณ์ |
ตั้งเป็น |
|---|---|
ทดสอบเซ็นเซอร์ ยังไม่มีแผนที่ |
|
มี odometry แล้ว ดูการเคลื่อนที่ |
|
มีแผนที่และ AMCL แล้ว |
|
Display ที่ใช้บ่อย
กด Add มุมซ้ายล่าง แล้วเลือกตามนี้
Display |
ใช้ดู |
topic |
|---|---|---|
RobotModel |
รูปร่างหุ่นจาก URDF |
— |
TF |
กรอบพิกัดทั้งหมดเป็นแกนสี |
— |
LaserScan |
จุดที่ LiDAR เห็น |
|
Map |
แผนที่ |
|
Path |
เส้นทางที่วางไว้ |
|
Costmap |
พื้นที่ที่ห้ามเข้า |
|
Tip
เพิ่มทีละอัน แล้วดูว่าขึ้นไหมก่อนเพิ่มอันถัดไป
ถ้าเพิ่มทั้งหมดรวดเดียวแล้วจอว่าง จะไม่รู้ว่าอันไหนมีปัญหา ส่วนใหญ่ที่ไม่ขึ้นคือ Fixed Frame ผิด หรือ topic ไม่มีข้อมูล
TF display — ตัวที่มีประโยชน์ที่สุดตอนหาสาเหตุ
เปิด TF display แล้วจะเห็นแกนสีสามแกนของทุกกรอบพิกัด (แดง = x · เขียว = y · น้ำเงิน = z)
ใช้ตรวจได้ 3 อย่างในพริบตา
LiDAR อยู่ถูกที่ไหม — แกนของ
laser_frontควรอยู่ตรงตำแหน่งจริงบนหุ่นหันถูกทางไหม — แกนแดงควรชี้ไปทางหน้าหุ่น
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 สั่งหุ่นจริงให้เคลื่อนที่ทันที ไม่มีหน้าต่างถามยืนยัน คลิกพลาดหุ่นออกวิ่งเลย — ก่อนกดต้องแน่ใจว่าไม่มีคนอยู่ในทาง