2025年1月11日 星期六

dorowu/ubuntu-desktop-lxde-vnc:bionic-lxqt Docker 映像介紹

 dorowu/ubuntu-desktop-lxde-vnc:bionic-lxqt Docker 映像介紹

1. 基本概述

名稱: dorowu/ubuntu-desktop-lxde-vnc:bionic-lxqt

維護者: Dorowu

用途: 提供基於 Ubuntu 18.04(Bionic)的輕量級桌面環境(LXQt/LXDE)Docker 映像,內建 VNC 支援。

場景: 適合需要圖形化介面(GUI)但不想安裝完整桌面環境的應用,如遠程桌面訪問、ROS 開發和機器人模擬。

2. 特點與功能

基於 Ubuntu 18.04(Bionic):

支援 ROS Melodic(與 Gazebo 9.x 相容)。提供穩定的長期支持(LTS)基礎。

輕量級桌面環境:LXQt 和 LXDE 是低資源消耗的桌面環境,適合在資源有限的 Docker 容器中運行。

內建 VNC 支援:容器內提供 VNC 服務,可以通過 VNC Viewer 遠程訪問桌面環境。默認使用 TigerVNC,易於配置。

支持無頭模式:即使沒有物理顯示器,仍可以啟動圖形化界面,適合雲端應用。

支持音頻與多媒體功能:預裝 PulseAudio,支援音頻輸出。

用於 ROS 和開發工具:提供圖形化環境,適合進行 ROS 開發、模擬(如 Gazebo)和調試工具(如 Rviz)。


3. 預裝軟體

基本工具: sudo, bash, curl, wget, nano, vim 等。

圖形化界面相關: LXQt/LXDE 桌面環境。

TigerVNC(VNC Viewer 支援)。

音頻支持: 預裝 PulseAudio。

4. 端口配置

VNC 默認端口:

5901: 用於 VNC 遠程桌面連接。

HTTP 端口(可選):

6080: 用於 Web 瀏覽器訪問(基於 noVNC)。

5. 使用場景與應用

遠程桌面開發:

使用 VNC Viewer 或 Web 瀏覽器遠程訪問 GUI。

適合在雲端或無頭伺服器上運行桌面環境。

ROS 開發:提供圖形化支持,便於使用 Rviz 和 Gazebo 等工具。支持 ROS Melodic 的安裝和配置。

模擬與測試:適合進行機器人模擬(如 Gazebo)或其他需要 GUI 的應用。輕量級桌面應用:

在低資源環境中提供圖形化桌面支持。

6. 快速啟動示例

6.1 拉取映像

bash

Copy code

docker pull dorowu/ubuntu-desktop-lxde-vnc:bionic-lxqt

6.2 運行容器

bash

Copy code

docker run -d \

  -p 5901:5901 -p 6080:6080 \

  -e VNC_PASSWORD=yourpassword \

  dorowu/ubuntu-desktop-lxde-vnc:bionic-lxqt

-p 5901:5901: 暴露 VNC 端口,供 VNC Viewer 使用。

-p 6080:6080: 暴露 Web 瀏覽器端口,使用 noVNC。

-e VNC_PASSWORD=yourpassword: 設定 VNC 連接密碼。

6.3 連接容器

使用 VNC Viewer:

連接到 localhost:5901。

使用設置的密碼進行登錄。

使用 Web 瀏覽器:

打開 http://localhost:6080。

通過網頁訪問圖形桌面。

7. 自訂與擴展

7.1 安裝額外軟體

可以在 Dockerfile 中基於該映像進行擴展:

FROM dorowu/ubuntu-desktop-lxde-vnc:bionic-lxqt

RUN apt-get update && apt-get install -y ros-melodic-desktop-full

7.2 修改分辨率

可通過環境變數設置桌面分辨率:

docker run -d -e RESOLUTION=1920x1080 dorowu/ubuntu-desktop-lxde-vnc:bionic-lxqt

7.3 啟用音頻

如果需要音頻支持,可以共享宿主機的 PulseAudio:

docker run -d \

  -e PULSE_SERVER=unix:/run/user/$(id -u)/pulse/native \

  -v /run/user/$(id -u)/pulse/native:/run/user/$(id -u)/pulse/native \

  dorowu/ubuntu-desktop-lxde-vnc:bionic-lxqt

8. 注意事項

資源分配: 預設分配的 CPU 和內存可能不足,根據需求進行調整。

VNC 密碼: 設定 VNC_PASSWORD 確保安全性,默認未設置時無需密碼。

兼容性: 該映像基於 Ubuntu 18.04,可能不適用於需要更新版本的應用(如 ROS Noetic)。

圖形化性能: 無硬體 GPU 支持時,渲染性能可能較低。

9. 資源連結

Docker Hub 項目頁面:dorowu/ubuntu-desktop-lxde-vnc

官方代碼庫:GitHub Repository

====================================

如果您需要一个支持 Ubuntu 20.04 (Focal)dorowu/ubuntu-desktop-lxde-vnc Docker 镜像,可以直接使用以下版本:


镜像名称 : dorowu/ubuntu-desktop-lxde-vnc:focal-lxqt


特性

  1. 基础系统:Ubuntu 20.04 LTS (Focal Fossa)。
  2. 桌面环境
    • LXQt:轻量级桌面环境。
    • 适合低资源消耗的环境。
  3. 内建功能
    • VNC 支持:通过 VNC Viewer 或浏览器访问桌面。
    • TigerVNC 服务:提供远程桌面连接。
    • 支持 noVNC:通过浏览器直接访问桌面。
  4. 用途
    • 支持需要 GUI 的开发环境,如 ROS Noetic。
    • 适合远程桌面访问和轻量级的工作环境。

快速启动示例

拉取镜像

docker pull dorowu/ubuntu-desktop-lxde-vnc:focal-lxqt

运行容器

docker run -d \ -p 5901:5901 -p 6080:6080 \ -e VNC_PASSWORD=yourpassword \ dorowu/ubuntu-desktop-lxde-vnc:focal-lxqt
  • -p 5901:5901:暴露 VNC 端口,供 VNC Viewer 使用。
  • -p 6080:6080:暴露 HTTP 端口,供 Web 浏览器使用 noVNC。
  • -e VNC_PASSWORD=yourpassword:设置 VNC 密码。

连接容器

  1. 通过 VNC Viewer

    • 地址:localhost:5901
    • 密码:容器启动时设置的密码。
  2. 通过 Web 浏览器

    • 地址:http://localhost:6080
    • 无需安装任何客户端,直接访问桌面。

扩展功能

设置分辨率

通过环境变量修改默认分辨率(例如 1920x1080):

docker run -d \ -p 5901:5901 -p 6080:6080 \ -e RESOLUTION=1920x1080 \ -e VNC_PASSWORD=yourpassword \ dorowu/ubuntu-desktop-lxde-vnc:focal-lxqt

共享文件

挂载本地目录到容器内,以共享数据:

docker run -d \ -p 5901:5901 -p 6080:6080 \ -e VNC_PASSWORD=yourpassword \ -v /path/to/local/dir:/home/ubuntu/shared \ dorowu/ubuntu-desktop-lxde-vnc:focal-lxqt

安装额外软件

使用以下命令安装额外的工具或开发环境:

docker exec -it <container_id> bash apt-get update && apt-get install -y <package_name>

镜像资源




Dockerfile 的詳細說明與備註

內容說明與步驟分析

1. 基本設置

FROM dorowu/ubuntu-desktop-lxde-vnc:bionic-lxqt

LABEL maintainer "tysontest001@gmail.com"

FROM:基於 dorowu/ubuntu-desktop-lxde-vnc:bionic-lxqt 映像,這是一個 Ubuntu 18.04(Bionic)桌面環境的 Docker 映像,並內建 VNC 支援。

LABEL:提供維護者信息,便於追溯。

2. 設置非交互模式

ENV DEBIAN_FRONTEND noninteractive

禁用交互模式,以便在 Docker 構建過程中避免安裝包時的提示。


3. 設置 APT 資源與密鑰

RUN apt-get update && apt-get install -q -y \

dirmngr \

gnupg2 \

lsb-release \

&& rm -rf /var/lib/apt/lists/*

RUN sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

RUN apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

添加 ROS 軟體源:這裡使用 ROS 官方的包源,以便後續安裝 ROS。

密鑰設置:添加密鑰以驗證 ROS 軟體包。

4. 安裝 ROS Melodic

RUN apt update

RUN apt-get install -y ros-melodic-desktop-full

安裝 ROS Melodic 的完整桌面版,包含核心功能與 Gazebo 等模擬器。


5. ROS 設定:

RUN apt-get update && apt-get install -y python-rosdep

RUN rosdep init && rosdep update

安裝 rosdep:rosdep 是 ROS 的依賴管理工具,用於安裝與配置 ROS 所需的系統依賴。

初始化並更新 rosdep 的數據庫。


6. 安裝開發工具與依賴:

RUN apt-get install -y git wget curl nano mercurial python-pip

RUN apt-get install -y python-rosinstall python-rosinstall-generator python-wstool build-essential

工具包:安裝一些必要的工具,如 git、wget、curl 和 nano。

ROS 工具鏈:包括 rosinstall 和 wstool,用於管理工作區。

7. 設定 shell 環境:

RUN /bin/bash -c "echo 'export HOME=/home/ubuntu' >> /root/.bashrc"

RUN /bin/bash -c "echo 'source /opt/ros/melodic/setup.bash' >> /root/.bashrc"

RUN cp /root/.bashrc /home/ubuntu/.bashrc

RUN /bin/bash -c "source /home/ubuntu/.bashrc"

設置環境變數:配置 ROS 環境的初始化腳本,以便在容器內使用 ROS 工具時,自動加載相關設置。

8. 安裝 VS Code 和 Python 插件:

RUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg

RUN install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/

RUN sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'

RUN apt-get install -y apt-transport-https

RUN apt-get update

#RUN apt-get install -y code

#RUN pip install pylint

安裝 VS Code 的軟體包源,但實際安裝步驟被註解,可能是為了避免與其他工具衝突。

9. 安裝 Catkin:

RUN apt-get install -y ros-melodic-catkin python-catkin-tools

安裝 Catkin 工具,用於建立和管理 ROS 工作空間。

10. 複製模型:

RUN mkdir -p /home/ubuntu/.gazebo/

COPY models /home/ubuntu/.gazebo/models

建立 Gazebo 的模型目錄,並將本地的 models 資料夾複製到容器內。

11. 設定工作目錄:

RUN mkdir -p ROAST

COPY lib/curiosity_mars_rover_description ROAST/

建立名為 ROAST 的工作目錄,並複製 lib/curiosity_mars_rover_description 到容器內。

需要注意的事項

#文件路徑正確性:

#確保 models 和 lib/curiosity_mars_rover_description 目錄存在於構建上下文中,否則 COPY 指令會失敗。

#VS Code 安裝步驟被註解:如果需要安裝,解除相關指令的註解。

#容器用戶環境:環境變數與 .bashrc 文件的配置需要確認,確保 ROS 的環境正確加載。

#容器用戶權限: /home/ubuntu 的目錄權限應正確設置,避免運行中出現權限錯誤。


建議改進

合併 RUN 指令:

合併多個 RUN 指令以減少 Docker 層數,提升構建效率。

例如:

dockerfile

Copy code

RUN apt-get update && apt-get install -y \

    dirmngr gnupg2 lsb-release git wget curl nano mercurial python-pip \

    python-rosinstall python-rosinstall-generator python-wstool build-essential


完整測試模型路徑:

在構建過程中驗證 models 和 lib 的存在性。

如需更多調整建議或有特定需求,請提供詳細指引!


docker image 匯出 tar.gz

 

Docker image 映像檔的匯入與匯出:容器化離線部署的關鍵步驟

Docker 是一個 Open source 的容器化平台,可以輕鬆地打包、部署和運行你的應用程式。
Docker image (映像檔) 是該平台重要元件,它是一個輕量級、可執行、可快速打包的軟體包,不只是應用程式所需的執行檔,還包含運作環境和環境設定。

因為一些特殊需求,需要離線安裝 (offline install) 或者是有些時候你可能沒有一個可以使用私有 docker registry,
你可能會需要這些指令,因有常常忘記故筆記一下。

docker image 匯出

首先,先列出有什麼 images

$ docker image ls

這指令會列出所有你曾經用過的 images

找到你要的 images

然後用 docker save 來匯出 image

$ docker save myimage:latest | gzip > myimage_latest.tar.gz

docker image 匯入

在別台機器,使用 docker load 來匯入 image

docker load --input myimage_latest.tar.gz

備註:官方文件有說 docker load 除了可以直接輸入

  • *.tar 打包檔案(未壓縮)
  • *.tar.gz 壓縮檔案( gzip 壓縮格式)
  • *.tar.bz2 壓縮檔案( bzip2 壓縮格式)
  • *.tar.xz 壓縮檔案( xz 壓縮格式)

當然還是建議放在類似 Docker hub 這樣的 registry 比較好,
如果 docker hub 私有 registry 方案不符合需求,
三大雲端也有提供對應的服務,
有地端 (on-premise) 伺服器自建 docker registry 的方式
不過這個就是另外一個故事了

另外, Kubernetes (k8s) 就非常不建議用匯出匯入這種方式來做,
因為它是叢集自動部署的,你不知道它每次會部署在哪一台機器(除非你有特別指定),
如果你要做類似這樣匯入匯出,你需要在每一個 Node 都做匯出匯入,曠日費時,
建議還是架一個 docker registry 比較理想。

參考資料

2025年1月10日 星期五

Gazebo Simulaiton (3D 物理模擬系統)

 

#Gazebo 是一個 3D 即時物理模擬系統1,可以模擬現實世界中各種模型及物體的軟體2,非常適合用來實驗機器人如何與周遭環境互動2。Gazebo 本身是一個獨立的開源機器人仿真平台3,與 ROS 無關4,但它與 ROS 整合得非常好23,可以讓開發者將機器人導入 Gazebo 中,並存取機器人的所有資訊2。

#Gazebo 的架構包含兩個主要部分:

>Server 端:負責基本的物理運動運算,以及感測器產生數據等2。Server 端可以單獨執行,只需輸入 "run headless" 這樣的參數2。

>Client 端:主要執行圖形化使用者介面 (GUI),方便視覺化模擬2。


#Gazebo 的運作模式如下:

>模型 (Model):在 Gazebo 世界中,所有看到的物體都是模型56。模型由連桿 (links) 和關節 (joints) 組成56。

連桿是模型的一部分,可以是簡單的形狀或是使用者匯入的自訂網格56。關節用於連接兩個連桿56。

>世界 (World):Gazebo 的世界檔案描述了模擬環境,例如重力、時間流逝速度、光線、視角等7。

>物理引擎:Gazebo 使用物理引擎 (例如 ODE) 來模擬機器人的運動學和動力學3。

>感測器模擬:Gazebo 可以模擬機器人常用的感測器,例如雷射雷達、攝影機和 IMU3。

>外掛程式 (Plugin):Gazebo 允許使用者加入自訂的外掛程式,來擴展模擬的功能4。

      例如,可以使用外掛程式來控制 Gazebo 中機器人輪子的轉速8。


Gazebo 與 ROS 的整合透過 gazebo_ros_pkgs 這個套件來實現910,它可以讓 ROS 和 Gazebo 之間傳遞訊息和服務10。此套件提供了一些工具,可以讓你使用 roslaunch 啟動 Gazebo11,並從 ROS 存取 Gazebo 的資訊。

>時間同步:PX4 和 Gazebo 沒有實施鎖步機制,PX4 會訂閱 Gazebo 的時鐘並將其用作時鐘源12。

>獨立模式:Gazebo 可以單獨啟動,讓 PX4 知道不應啟動 Gazebo 實例13.

>ROS topics: Gazebo 可以將感測器資料透過 bridge 傳遞到 ROS2,例如 LiDAR 的資料14.


Gazebo 使用 SDF (Simulation Description Format) 格式來描述模型15,SDF 是一種 XML 格式,

可以使用文字編輯器或 Gazebo 提供的 GUI 編輯器來編輯15。


>URDF: ROS 使用 URDF (Unified Robot Description Format) 檔案來描述機器人7。可以使用 gz sdf -p myrobot.urdf > myrobot.sdf 指令將 URDF 轉換為 SDF16.


總結來說,Gazebo 是一個功能強大的機器人模擬器,它可以獨立運作,也可以與 ROS 整合。

Gazebo 的核心概念包括模型、世界、物理引擎和外掛程式。

透過 gazebo_ros_pkgs 套件,ROS 可以與 Gazebo 進行通訊,實現機器人的模擬和控制。


2025年1月8日 星期三

RealVNC 功能介紹

 


RealVNC 是一種基於 VNC(Virtual Network Computing)協議的遠端桌面軟體,允許用戶通過網路遠程控制和管理其他計算機。其主要功能包括:
  • 遠端桌面控制:用戶可以從任何地方訪問和控制遠端計算機的桌面環境。
  • 跨平台支持:RealVNC 支持多種操作系統,包括 Windows、Linux 和 macOS,實現了平台間的無縫連接
    3
    4
  • 虛擬模式和服務模式
    • 虛擬模式:用於創建虛擬桌面,允許多個用戶同時連接,並且每個用戶都可以獨立操作
      1
    • 服務模式:用戶的操作與主機同步,類似於直接在主機上操作
      1
  • 安全性:RealVNC 提供加密連接和身份驗證功能,以保護遠端訪問的安全性
    2

安裝流程

以下是安裝 RealVNC 的基本步驟:
  1. 下載 RealVNC 軟體
    • 訪問 RealVNC 的官方網站,選擇適合您操作系統的版本(如 Debian、Ubuntu 或 CentOS)進行下載
      2
      6
  2. 安裝 VNC 伺服器
    • 對於 Debian 和 Ubuntu 系統,使用以下命令安裝:
      bash
      curl -L -o VNC.tar.gz https://www.realvnc.com/download/binary/latest/debian/arm/ tar xvf VNC.tar.gz sudo dpkg -i VNC-Server-5.2.3-Linux-ARM.deb
    • 對於 CentOS 和 Fedora 系統,則需使用相應的 RPM 包進行安裝
      2
      6
  3. 啟動 VNC 伺服器
    • 使用以下命令啟動 VNC 伺服器並設置解析度(例如 1366x768):
      bash
      vncserver -geometry 1366x768
    • 默認情況下,虛擬模式的 VNC 埠號為 5901 至 5905
      1
  4. 設置開機啟動
    • 若希望 VNC 伺服器在系統啟動時自動啟動,可以在家目錄下的 .config/autostart 中創建 realvnc.desktop 文件,並添加相應的啟動指令
      1
      2
  5. 連接到 VNC 伺服器
    • 使用 VNC Viewer 客戶端連接到伺服器,輸入伺服器的 IP 地址和相應埠號(如 5901),並提供登錄密碼以進行連接
      2
      3
這些步驟將幫助您成功安裝和配置 RealVNC,以便能夠進行遠端桌面控制。

dorowu/ubuntu-desktop-lxde-vnc:bionic-lxqt Docker 映像介紹

 dorowu/ubuntu-desktop-lxde-vnc:bionic-lxqt Docker 映像介紹 1. 基本概述 名稱: dorowu/ubuntu-desktop-lxde-vnc:bionic-lxqt 維護者: Dorowu 用途: 提供基於 Ub...