這里包括docker desktop安裝ros2 humble hawkshill , 安裝xserver(用來在windows中顯示ubuntu中窗口), vscode安裝插件連接docker并配置python的一系列方法
1.安裝xserver 為了能方便的在windows中顯示ubuntu內的窗口,比如rqt窗口
參考文章:https://www.cnblogs.com/larva-zhh/p/10531824.html
需要安裝vcxsrv軟件,直接安裝到windows主機即可.
2.下載鏡像
在docker desktop的設置- dockerEngine中添加用于下載的 registry-mirrors,由于國內目前無法訪問docker的相關服務器.當我們可以訪問這里的鏡像.
{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"features": {"buildkit": true},"insecure-registries": [],"registry-mirrors": ["https://hub.uuuadc.top","https://docker.anyhub.us.kg","https://dockerhub.jobcher.com","https://dockerhub.icu","https://docker.ckyl.me","https://docker.awsl9527.cn","https://docker.m.daocloud.io","https://docker.laoex.link","https://dockerhub.icu","https://a7snawvi.mirror.aliyuncs.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https://reg-mirror.qiniu.com"]
}
參考:https://blog.csdn.net/qq_39779233/article/details/142900876
下載指令如下
docker pull osrf/ros:humble-desktop-full-jammy
3.運行humble
docker run -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=host.docker.internal:0.0 osrf/ros:humble-desktop-full-jammy bash
驗證可以在windows中能夠顯示docker內窗口,在docker內執行
source ros_entrypoint.sh
rqt
之后會發現windows中出現了來自ubuntu的rqt窗口.
4.docker內安裝vscode-server
參考文章 https://docs.ros.org/en/jazzy/How-To-Guides/Setup-ROS-2-with-VSCode-and-Docker-Container.html
參考文章 https://zhuanlan.zhihu.com/p/294933020
在windows內的vscode中安裝插件 Remote Development 安裝完成后即可進入docker內并可以進行文件操作.但是有可能會遇到登錄docker時無法在docker內下載vscode-server的情況,這個時候我們要手動下載才可以
那么在服務器上離線安裝VS Code Server,只需要在個人用戶目錄 H O M E 下新建 . v s c o d e ? s e r v e r 文件夾,在其中建立 b i n 目錄,放置“對應版本”的 V S C o d e S e r v e r 程序。點擊菜單欄中的幫助 ? > 關于,可以看到 C o m m i t I D ,剛好與 HOME下新建.vscode-server文件夾,在其中建立bin目錄,放置“對應版本”的VS Code Server程序。點擊菜單欄中的幫助->關于,可以看到Commit ID,剛好與 HOME下新建.vscode?server文件夾,在其中建立bin目錄,放置“對應版本”的VSCodeServer程序。點擊菜單欄中的幫助?>關于,可以看到CommitID,剛好與HOME/.vscode-server/bin/中文件夾名稱相同。其實只需要將這個文件夾打包,放到服務器上對應的位置,就已經安裝成功了,這是最方便的做法。
下載server的地址
https://update.code.visualstudio.com/commit:${commit_id}/server-linux-x64/stable(注意把:${commit_id}替換成對應的Commit ID)
運行命令 重新拷貝vscode-server到指定位置
運行下面兩行命令,建立空的$HOME/.vscode-server/bin文件夾。
mkdir -p ~/.vscode-server/bin
rm ~/.vscode-server/bin/* -rf #把$HOME/.vscode-server/bin下的內容刪干凈,防止出錯cd ~/.vscode-server/bin
tar -zxf vscode-server-linux-x64.tar.gz
mv vscode-server-linux-x64 ${commit_id} # 注意把:${commit_id}替換成對應的Commit ID
這個時候在運行windows中的vscode使用remote development即可.
5.python編程時遇到找不到ros2中的rclpy模塊
rclpy 模塊找不到,有兩種可能,第一種是真的沒有這個模塊,可以使用rosdep來引過來,但是一般按配置好應該只vscode真的找不到,這個時候, 即便時通過vscodeserver 我們也可以在vscode打開-首選項-設置,在搜索框中填入"python.analysis.extrapaths 并添加rclpy在docker中存在的位置.這里是 /opt/ros/humble/local/lib/python3.10/dist-packages
這個位置可以在docker的ubuntu中 echo $PYTHONPATH ,會找到兩個路徑,rclpy應該會在第二個 /opt/ros/humble/local/lib/python3.10/dist-packages路徑下.
注意:我們設置vscode的python.analysis.extrapaths實在windows里設置,但拿到的路徑其實是ubuntu里 python的路徑.