從頭開始學 Isaac Sim 06 -- 幫你的機器人裝感測器 === 在上一章節裡,我們已經可以用鍵盤控制 SimpleRobot 移動。接下來,要讓它能「看見」與「感知」周遭環境,我們會幫它加上感測器。這裡會示範 RGB 相機與 2D Lidar 的安裝與設定,並透過視覺化工具來確認它們的輸出。 ### 1 建立感測器的安裝位置 在 SimpleRobot 上新增一個 Xform,命名為 Front_Sensor。 用手動的方式,把它移到機器人前上方,作為感測器的固定基座。這時候它還只是一個座標系。 接著,必須在 Front_Sensor 上加上 Rigid Body。 > **為什麼要加上 Rigid Body?** Xform 本身只是定位器,沒有物理特性。加上 Rigid Body 之後,才能透過 Joint 與車身建立物理關聯,並確保相機、Lidar 等子物件會隨著機器人移動,而不是固定在原地。這就像把行李架牢牢鎖在車頂一樣,之後裝的感測器才會跟著車子一起動。 另外,為了標記位置,需要新增一個小 Cube(縮放 0.1, 0.1, 0.1),作為感測器的可視化標記。 最後建立 Fixed Joint(固定關節),把 Front_Sensor 固定在 Cube 上(父物件 Cube → 子物件 Front_Sensor)。 > 選取(1)Cube(2)Front_Sensor > Add > Physics > Joint > Fixed Joint 這樣做是為了讓所有感測器都能跟著機器人移動,並集中管理。Xform 就像是「安裝架」,而小 Cube 則是「定位點」,方便後續放置相機與雷射。 <div style="display:flex; align-items:center; justify-content:center; gap:20px;"> <img src="https://hackmd.io/_uploads/BymPZYGcgx.png" width="40%"> <img src="https://hackmd.io/_uploads/SJnYGKfcex.png" width="33%"></div> #### Notes 建立 Fixed Joint 時,一定要確保 Cube 為 Body0、Front_Sensor 為 Body1。這樣能保持正確的主從關係,避免後續模擬不穩定或異常。 在 Fixed Joint 裡,Body0 通常被當成「主要物件」,Body1 會去跟隨它。如果 Cube(車身)是 Body0,Front_Sensor 就會乖乖跟著車身動。 反過來,如果 Front_Sensor 是 Body0,等於「車身要跟著感測器」動,這就不符合邏輯。 #### 已知問題 有時候無法直接在 Xform 上加 Rigid Body,可以先把子物件移走,再加上 Rigid Body,最後再移回去。 ### 2 安裝 RGB 相機 把剛剛的小 Cube 改名為 Sensor_Mount。 在 Sensor_Mount 上新增 Rigid Body with Colliders Preset。 在 Sensor_Mount 上建立 Camera,命名為 Robot_Camera。 將相機旋轉 -90 度(Y 軸),讓它朝向前方。 把相機擺在 Sensor_Mount 的邊緣。 > 相機需要朝前,才能看到機器人的行進方向。Sensor_Mount 的設計,確保相機與其他零件不會互相干擾。 <div style="display:flex; align-items:center; justify-content:center; gap:20px;"> <img src="https://hackmd.io/_uploads/H1JJAFG9el.png" width="100%"> <img src="https://hackmd.io/_uploads/SJEgCFMcle.png" width="100%"> </div> #### 檢查方式 在 Viewport 選單中,切換到 Robot_Camera,就能看到相機視角。 新增一些立方體、圓錐、圓柱當作障礙物,再切回 Robot_Camera 視角,確認它能「看見」。 想要同時觀察兩種視角,可以開啟 Window > Viewports → 開啟 Viewport1 與 Viewport2,一個保持 Perspective,一個切換到 Robot_Camera。 <p style="display:flex; align-items:center; justify-content:center;"> <img src="https://hackmd.io/_uploads/B1IwAYGclx.png" width="80%"> </p>> <p style="display:flex; align-items:center; justify-content:center;"> <img src="https://hackmd.io/_uploads/Hyoxz9G5ll.png" width="80%"> </p>> ### 3 安裝 2D Lidar 選取 Front_Sensor > Create > Isaac > Sensors > PhysXLidar > Rotating。 把 Lidar 移到 Sensor_Mount 上方。 在 Raw USD Properties 中勾選 Draw Lines 與 Draw Points。 按下 Play,就會看到感測光束在旋轉。 Lidar 可以模擬真實雷射掃描,讓機器人偵測前方障礙物。 > 注意:這裡使用的是 Physics Lidar,必須讓場景中的物件具有物理屬性才能被偵測。 <div style="display:flex; align-items:center; justify-content:center; gap:20px;"> <img src="https://hackmd.io/_uploads/rk7Pz9Mcel.png" width="74%"> <img src="https://hackmd.io/_uploads/SkSOzcfqex.png" width="40%"></div> 檢查方式也很簡單,把障礙物選起來 > 右鍵 Add > Rigid Body with Colliders Preset。 再次按下 Play,這時候光束就會被障礙物阻擋,表示感測成功。 如果光束打到車輪,可以把 Lidar 往上移,或調整旋轉速度。 <p style="display:flex; align-items:center; justify-content:center;"> <img src="https://hackmd.io/_uploads/Hy72S9z5lx.png" width="80%"> </p>> ### 4 小結 到這裡,我們已經完成了: 1. 建立感測器的安裝架 Front_Sensor 2. 加上 RGB 相機,並驗證了視角輸出 3. 加上 2D Lidar,並成功偵測障礙物 現在 SimpleRobot 不僅能移動,還能「看」與「感知」,為之後的 ROS2 串接做準備。 --- 希望我的內容對你有所幫助,想看到更多內容歡迎追蹤我的 IG、Threads 等平台。 Threads:[@minimalist_shine](https://www.threads.com/@minimalist_shine) IG:[@minimalist_shine](https://www.instagram.com/minimalist_shine/)