2026年2月28日土曜日

DockerでROS2のGazeboを起動する方法について

 あまプロではROSのGazeboを使う事が有ります。
インストールがややこしかったので、あメログ。

 Windows10上のDockerのコンテナにUbuntuを構築して、Ubuntu上でGazebo Simを起動してみます。

  1. いきなり端折りますが、Docker Desktopをインストールして、WSLを有効にしておいて下さい。 
    インスートラをダウンロードして、インストールするだけなので、そない難しくないと考えます。 
    既にインストール済みの方は最新版のDockerDesktopとWSLにアップデートして下さい。
    WSLのアップデートは
    wsl --update

    で行えます。
  2.  WindowsStoreでUbuntuをインストールする  Ubuntuインストール時にユーザとパスワードを求められるので、適当に決めて入力する。


  3. スタートメニューにUbutu24.04 LTSが追加されるので、クリックしてターミナルのUbuntuを起動する。


  4. Ubuntuターミナルで設定変更する
    sed "s/\"credsStore\": \"desktop.exe\"//g" ~/.docker/config.json
  5. UbuntuターミナルでROSのコンテナを作成する
    docker run --name ros2 -d  --env="DISPLAY=:0"   --env="WAYLAND_DISPLAY=$WAYLAND_DISPLAY"   --env="XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR"   --env="QT_X11_NO_MITSHM=1"   --env="LIBGL_ALWAYS_SOFTWARE=1"   --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw"   --volume="/mnt/wslg:/mnt/wslg:rw"  --device=/dev/dri:/dev/dri  ros:jazzy-perception

     もしドライバ周りでエラーが発生する場合は--deviceを削除した下記でコンテナ作成して下さい。
    docker run --name ros2 -d  --env="DISPLAY=:0"   --env="WAYLAND_DISPLAY=$WAYLAND_DISPLAY"   --env="XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR"   --env="QT_X11_NO_MITSHM=1"   --env="LIBGL_ALWAYS_SOFTWARE=1"   --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw"   --volume="/mnt/wslg:/mnt/wslg:rw"  ros:jazzy-perception 

    ros用コンテナが作成されます。

  6. Dockerの設定⚙のResourcesのWSL integrationでUbuntu 24.04を有効にする


  7.  Ubuntuターミナルでコンテナを起動する
    docker start ros2
  8.  Ubuntuターミナルでコンテナに入る
    docker exec -it ros2 bash
  9.  UbuntuターミナルでGazeboをインストールする
    sudo apt update && sudo apt install -y ros-jazzy-ros-gz
  10. Ubuntuターミナルでros設定
    source /opt/ros/jazzy/setup.bash
    echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc
    source ~/.bashrc
  11. UbuntuターミナルでGazebo起動
    ros2 launch ros_gz_sim gz_sim.launch.py gz_args:='-r empty.sdf'
    そうすると、コンテナのGUIがホストのディスプレイに表示されて上記の様にWindowsのアプリの様に表示されます。
    あんまないやろうけど、コンテナのGUIをホストで表示したい場合にはこれでできます。

2026年2月1日日曜日

GeminiCLIでウェブサイトを作成する方法について

 あまプロでは授業でAIを使う事が有ります。
先日、無料プランでGeminiCLIの環境を構築してウェブサイトを作成したので、あメログ。

先ず、LXDでGeminiCLI用のコンテナを作成します。
ホスト(パソコン)に直接GeminiCLIをインストールしても良ぇけど、アンインストール時にあっちこっち削除して回るのが面倒なので、コンテナ内にインストールします。

LXDが未インストールの場合は

#インストール
sudo apt install lxd
#初期化
lxd init
を実行します。

GeminiCLIの利用には無料プランであってもGoogleアカウントが要りますので、作成しておいて下さい。
アカウントの作成方法は…Geminiに聞こう(最近は携帯番号が要るみたいです)。 

LXDでコンテナを作成します。

# イメージはお好みで何となくアルパインの最新版
lxc init images:alpine/edge container-name
#コンテナが作成されている事を確認
lxc list
#コンテナの5173ポートをホストの5173へ転送
sudo lxc config device add container-name http proxy listen=tcp:0.0.0.0:5173 connect=tcp:127.0.0.1:5173 bind=host
#転送設定確認
lxc config device show container-name
#コンテナ起動
lxc start container-name
#コンテナにログイン
lxc exec container-name ash
#アップデート
apk -U upgrade
#nodeとnvmをインストール
apk add nodejs nvm
#バージョン確認
node --version
npm --version
#GeminiCLIインストール
npm install -g @google/gemini-cli
#GeminiCLI起動
gemini
#初回起動時に認証を求められるので、1. Login with Googleを選択します
#選択するとめっちゃ長いURLが表示されますのでそれをコピーして、ホストのブラウザでアクセスします。
#(複数アカウントを持っている場合)どのアカウントを使います?許可します?と訊かれるので、許可します。
#ブラウザにちょっと長い認証コードが表示されるので、コピーしてコンテナのターミナルに貼り付けて、認証完了です
#完了するとこんな感じで表示されます。

表示は英語ですけど、日本語も通じます。
日本語でプロンプト(指示とか質問とか)を入力すると、作業や回答を返してくれます。
例えば

おしゃれなプログラミング教室のウェブサイトを作成して下さい。

と入力すると、カレントディレクトリにウェブサイトを生成してくれます。
生成作業中にセキュリティ上の確認が要る場合は、都度回答する必要があります(基本、日本語で訊いてきます)。
例えばウェブサイトを作成する際にBootstrapReactViteを使って良いか?等です。

取り敢えず、全部の確認に許可で答えると、2〜3分程で下記のファイル群が生成されました。 

.
├── index.html
├── src
├── index.html
├── package.json
├── tsconfig.json
└── vite.config.ts

サイトをビルドする為にnpmコマンドを実行する必要があるのですが、GeminiCLIはコマンドを実行できなかったので、GeminiCLIを終了します(これは設定で回避できるかも)。
GeminiCLIを終了するには、Ctrl+Dを2回押し(または/quit)です。
終了時にどれだけGeminiCLIを利用したかが表示されます。
無料プランには限りが有りますので、ご注意を。

GeminiCLIを終了後、手動で下記コマンドを実行します。
というか、GeminiCLIが「実行できなかったんで、自分で下記を実行して」と出力しています。

#必要なパッケージインストール
npm install
#ビルドしてウェブサーバ起動 外部からのアクセスを許可
npm run dev -- --host 0.0.0.0

では最後にホストのブラウザで確認します。 
http://localhost:5173/


ちゃんと生成されてますね。
レスポンシブデザイン(スマホ表示)も問題なさそうです。

以上、GeminiCLIでウェブサイトを作成する方法でした。

最後に使用したコンテナを削除して終了(継続して使用する場合は不要)です。

#コンテナ停止
lxc stop container-name
#コンテナ削除
lxc delete container-name