柚子快報(bào)邀請碼778899分享:基于Docker的ROS開發(fā)
柚子快報(bào)邀請碼778899分享:基于Docker的ROS開發(fā)
本文主要介紹如何使用Docker在Windows和Linux環(huán)境中部署并使用ROS,通過Docker Container運(yùn)行ROS,可以方便我們在一個(gè)本地環(huán)境中運(yùn)行多個(gè)ROS版本。 更多內(nèi)容,訪問專欄目錄獲取實(shí)時(shí)更新。
關(guān)于ROS的版本
參考ROS1 Distribution Wiki和ROS2 Distribution Wiki,推薦使用:
ROS1 Noetic 版本(2020/05發(fā)布,支持到2025/05)ROS2 Humble版本(2022/05發(fā)布,支持到2027/05)
拉取ROS鏡像并運(yùn)行ROS容器
要求閱讀者需要具有基礎(chǔ)的Docker使用經(jīng)驗(yàn) 關(guān)于ROS的鏡像,可以訪問Docker Hub查找對應(yīng)版本的腳本,本文里我們以ROS1 Noetic和ROS2 Humble為例演示。
環(huán)境要求 在Windows環(huán)境中,需要安裝Docker Desktop,并且可以通過命令行執(zhí)行docker命令: Linux環(huán)境使用的是Ubuntu 22,同樣已經(jīng)提前安裝了docker:
拉取鏡像 在Windows環(huán)境中,需要首先啟動Docker Desktop。然后執(zhí)行下面的腳本,可以拉取ROS1和ROS2的鏡像文件:
docker pull osrf/ros:noetic-desktop
docker pull osrf/ros:humble-desktop
執(zhí)行完成后,通過指令查看已拉取的鏡像文件:
docker images
運(yùn)行容器
docker run --name
上面的指令是運(yùn)行一個(gè)容器,容器名為’container-name’的替換內(nèi)容,使用’image-name:tag’指定的鏡像文件,并運(yùn)行在交互模式下(-it),指令示例:
docker run --name noetic-gui -it osrf:noetic-desktop
指令運(yùn)行以后,命令行將會進(jìn)行到該容器的交互模式下,在Docker Desktop中,能看到當(dāng)前運(yùn)行的容器:
運(yùn)行ROS
當(dāng)前我們已經(jīng)啟動了ROS Noetic的Docker容器,并進(jìn)入了交互模式,在命令行中執(zhí)行roscore來啟動ROS Master (僅針對ROS1版本需要) 如果你也在命令行中看到了上述的內(nèi)容,說明ROS1運(yùn)行成功。 Windows中啟動另一個(gè)命令行,執(zhí)行下面的命令,進(jìn)入到一個(gè)已啟動容器的交互模式:
docker exec -it
然后執(zhí)行:
source /opt/ros/noetic/setup.bash
printenv | grep ROS
rostopic list
第一條指令在每啟動一個(gè)shell時(shí)都需要執(zhí)行一下(除非你將該指令加入到了.bashrc文件中),它能配置你的shell讓你獲取到ROS的程序和幫助這些程序找到依賴的包。 第二,三條指令分別是查看已安裝ROS的環(huán)境變量和當(dāng)前的ROS Topic列表,如果已正確完成了上述步驟,你可以看到下圖類似的內(nèi)容:
Docker容器中的GUI程序
如果我們運(yùn)行的ROS程序需要打開一些用戶交互界面,比如Gazebo,RViz等,在Docker容器中要怎么辦呢?
以經(jīng)典的小烏龜(turtlesim)為例,演示如何在docker容器中使用GUI。
rosrun turtlesim turtlesim_node
我相信執(zhí)行完上面的指令后你將會得到下面的錯誤: 這時(shí)就需要我們安裝XLaunch來實(shí)現(xiàn)界面的顯示,你可以訪問Xming網(wǎng)站獲取,或通過SourceForge下載。在安裝時(shí)基本不許要任何配置,僅注意同時(shí)安裝XLaunch即可。 安裝完成后,啟動XLaunch,只需要在下圖標(biāo)注的步驟修改值為0,其他一直點(diǎn)擊下一步直至結(jié)束 這時(shí)在電腦的狀態(tài)欄里你應(yīng)該能夠看到啟動的XServer. 確保XServer正常運(yùn)行,這時(shí)再重新運(yùn)行Noetic的容器,不過通過下面的指令運(yùn)行:
docker run --name noetic-gui -e DISPLAY=host.docker.internal:0.0 -it osrf/ros:noetic-desktop
然后運(yùn)行roscore并在另一個(gè)命令行中重復(fù)之前的命令(不要忘記source一下),啟動turtlesim
rosrun turtlesim turtlesim_node
我們的小烏龜就正常的顯示在桌面上了。 啟動另一個(gè)命令行,我們來通過鍵盤上下左右控制小烏龜:
rosrun turtlesim turtle_teleop_key
在Ubuntu中,步驟基本類似,在啟動ROS時(shí),建議通過一個(gè)bash文件來啟動容器,run_noetic_gui.bash:
xhost local:root
XAUTH=/tmp/.docker.xauth
docker run -it \
--name=noetic-gui \
--env="DISPLAY=$DISPLAY" \
--env="QT_X11_NO_MITSHM=1" \
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
--env="XAUTHORITY=$XAUTH" \
--volume="$XAUTH:$XAUTH" \
--net=host \
--privileged \
osrf/ros:noetic-desktop \
bash
echo "Done."
如何訪問Docker容器中的文件
在之后的開發(fā)中,我們需要創(chuàng)建工作空間并創(chuàng)建自己的工程項(xiàng)目,而當(dāng)前的ROS運(yùn)行在Docker容器中,要怎樣訪問的到呢。
這里推薦使用VisualStudio Code,并安裝插件Dev Container 成功安裝了插件后,我們就可以通過VS Code打開一個(gè)Docker Container的文件目錄啦。 至此,我們成功的在Windows或Ubuntu環(huán)境下,通過Docker中運(yùn)行了ROS Noetic,并且能夠顯示用戶界面,并且通過VS Code訪問容器中的文件和工程。
如有錯誤,歡迎留言或來信指正:hbin6358@163.com
柚子快報(bào)邀請碼778899分享:基于Docker的ROS開發(fā)
推薦閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。