Docker 啟動 ROS Noetic 並加入 Linux 指令
你的 docker run
指令已經設置了 ROS Noetic 的 Docker 容器,並允許 使用 GPU、共享網路 (--net=host
)、X11 GUI 支援 (-e DISPLAY
)。
📌 1️⃣ 讓容器啟動後自動執行 Linux 指令
你可以透過 --entrypoint
或 CMD
來讓容器啟動時執行特定的 Linux 指令,如 bash
, roscore
, rviz
。
🔹 (1) 啟動容器並執行 roscore
📌 啟動時直接執行 roscore
bashsudo docker run -itd --restart=always \
--gpus all \
--net=host \
--name ros_container \
-e DISPLAY=${DISPLAY} \
-e QT_X11_NO_MITSHM=1 \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v $(pwd)/data:/home/ubuntu/data \
--privileged \
osrf/ros:noetic-desktop-full \
roscore
✅ 容器啟動後,會自動執行 roscore
,可用來啟動 ROS Master。
📌 確認 roscore
是否在運行
bashdocker logs ros_container
🔹 (2) 啟動 rviz
📌 讓容器啟動後自動運行 rviz
bashsudo docker run -itd --restart=always \
--gpus all \
--net=host \
--name ros_rviz \
-e DISPLAY=${DISPLAY} \
-e QT_X11_NO_MITSHM=1 \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v $(pwd)/data:/home/ubuntu/data \
--privileged \
osrf/ros:noetic-desktop-full \
rosrun rviz rviz
✅ 當容器啟動時,會自動打開 rviz
,讓你可以透過 GUI 進行視覺化。
📌 如果 rviz
沒有顯示,請嘗試手動執行
bashdocker exec -it ros_rviz bash
source /opt/ros/noetic/setup.bash
rviz
🔹 (3) 讓容器啟動後執行 bash
,並自動 source
ROS 環境
📌 有時候你可能想讓容器啟動後,自動進入 bash
並設定 ROS
bashsudo docker run -it --rm \
--gpus all \
--net=host \
--name ros_bash \
-e DISPLAY=${DISPLAY} \
-e QT_X11_NO_MITSHM=1 \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v $(pwd)/data:/home/ubuntu/data \
--privileged \
osrf/ros:noetic-desktop-full \
bash -c "source /opt/ros/noetic/setup.bash && bash"
✅ 這樣進入容器時,會自動載入 ROS Noetic 環境變數 (setup.bash
)
📌 2️⃣ 手動進入運行中的容器
📌 列出所有運行中的容器
bashdocker ps
✅ 應該看到
bashCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abcd12345678 osrf/ros:noetic-desktop-full "roscore" 2 minutes ago Up 2 minutes ros_container
📌 進入 ROS 容器
bashdocker exec -it ros_container bash
✅ 現在你可以在容器內執行 ROS 指令,例如
bashroslaunch turtlebot3_gazebo turtlebot3_empty_world.launch
📌 3️⃣ 讓容器自動執行多個 ROS 指令
🔹 使用 roslaunch
啟動 MoveIt!
bashsudo docker run -itd --restart=always \
--gpus all \
--net=host \
--name ros_moveit \
-e DISPLAY=${DISPLAY} \
-e QT_X11_NO_MITSHM=1 \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v $(pwd)/data:/home/ubuntu/data \
--privileged \
osrf/ros:noetic-desktop-full \
bash -c "source /opt/ros/noetic/setup.bash && roslaunch panda_moveit_config demo.launch"
✅ 當容器啟動時,會自動開啟 MoveIt! 的 demo.launch
📌 4️⃣ 停止 & 刪除 Docker 容器
📌 停止運行中的容器
bashdocker stop ros_container
📌 刪除容器
bashdocker rm ros_container
📌 刪除所有 Docker 容器
bashdocker rm $(docker ps -aq)
🚀 總結
功能 | 指令 |
---|---|
啟動 ROS Docker 容器 | docker run -itd --name ros_container osrf/ros:noetic-desktop-full |
自動啟動 roscore | docker run -itd --name ros_container osrf/ros:noetic-desktop-full roscore |
自動啟動 rviz | docker run -itd --name ros_rviz osrf/ros:noetic-desktop-full rosrun rviz rviz |
自動執行 roslaunch | docker run -itd --name ros_moveit osrf/ros:noetic-desktop-full roslaunch panda_moveit_config demo.launch |
進入運行中的容器 | docker exec -it ros_container bash |
停止容器 | docker stop ros_container |
刪除容器 | docker rm ros_container |
🚀 這樣你可以在 Docker 內運行 ROS 並自動啟動特定的指令!
沒有留言:
張貼留言