welcom ! Handel home

2025年3月18日 星期二

(ROS)Docker 啟動 ROS Noetic 並加入 Linux 指令

 

 Docker 啟動 ROS Noetic 並加入 Linux 指令

你的 docker run 指令已經設置了 ROS NoeticDocker 容器,並允許 使用 GPU、共享網路 (--net=host)、X11 GUI 支援 (-e DISPLAY)


📌 1️⃣ 讓容器啟動後自動執行 Linux 指令

你可以透過 --entrypointCMD 來讓容器啟動時執行特定的 Linux 指令,如 bash, roscore, rviz


🔹 (1) 啟動容器並執行 roscore

📌 啟動時直接執行 roscore

bash
sudo 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 是否在運行

bash
docker logs ros_container

🔹 (2) 啟動 rviz

📌 讓容器啟動後自動運行 rviz

bash
sudo 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 沒有顯示,請嘗試手動執行

bash
docker exec -it ros_rviz bash source /opt/ros/noetic/setup.bash rviz

🔹 (3) 讓容器啟動後執行 bash,並自動 source ROS 環境

📌 有時候你可能想讓容器啟動後,自動進入 bash 並設定 ROS

bash
sudo 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️⃣ 手動進入運行中的容器

📌 列出所有運行中的容器

bash
docker ps

應該看到

bash
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES abcd12345678 osrf/ros:noetic-desktop-full "roscore" 2 minutes ago Up 2 minutes ros_container

📌 進入 ROS 容器

bash
docker exec -it ros_container bash

現在你可以在容器內執行 ROS 指令,例如

bash
roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch

📌 3️⃣ 讓容器自動執行多個 ROS 指令

🔹 使用 roslaunch 啟動 MoveIt!

bash
sudo 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 容器

📌 停止運行中的容器

bash
docker stop ros_container

📌 刪除容器

bash
docker rm ros_container

📌 刪除所有 Docker 容器

bash
docker rm $(docker ps -aq)

🚀 總結

功能指令
啟動 ROS Docker 容器docker run -itd --name ros_container osrf/ros:noetic-desktop-full
自動啟動 roscoredocker run -itd --name ros_container osrf/ros:noetic-desktop-full roscore
自動啟動 rvizdocker run -itd --name ros_rviz osrf/ros:noetic-desktop-full rosrun rviz rviz
自動執行 roslaunchdocker 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 並自動啟動特定的指令! 


沒有留言: