自作PC製作→ubuntu環境構築→GPU環境構築→ROS環境構築

# はじめに

きっかけはさておき、突然自作PCを作ってみたいと思いました。
その時の流れをここにまとめます。
また、このPCを使用して色々遊びたいなと思ったので、備忘録のページとして残せればな...と思っています。
結構長い記事になってしまいました笑

- 目標
    - 金額：15万程度
    - OS：ubuntu
    - 用途：rosやAI系の重た目なソフトウェアを動かす
    - 購入サイト：amazon

# 購入リスト

|名称|概要（chatGPT君から参考）|時価(円)|リンク|選定理由|
|:--:|:--:|:--:|:--:|:--:|
|CPU|コンピュータの「脳」とも呼ばれる部品で、計算や処理を行う。すべてのプログラムやアプリケーションが動作するための中核的な部分。|31280|[INTEL CPU RPL-S CoreI5-13400F](https://www.amazon.co.jp/%E3%82%A4%E3%83%B3%E3%83%86%E3%83%AB-CoreI5-13400F-7xxChipset-%E3%82%B0%E3%83%A9%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E6%A9%9F%E8%83%BD%E3%81%AA%E3%81%97-%E5%9B%BD%E5%86%85%E6%AD%A3%E8%A6%8F%E4%BB%A3%E7%90%86%E5%BA%97%E5%93%81/dp/B0BQ6BRL4T/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=5UIRB6QLU2PW&dib=eyJ2IjoiMSJ9.2ILuk8PfMITpujs0iWjmc9FXkCeRYNZBwxjpuOatiU7wrvOax3mgviAdjkBAD32Kt8mzd7Bb0sqboY3XMeny0XwfWIGYTXDl6p8_fxqtOXnchx9uuXZToWUjhDK5Tbt_a253B6EKmCrqj3R4OVyw06S1WmK9lAqrEbHYYHW3Fqkw0_88MviwUI3G6q2k1yh72fdanuXJfD8eM32phxsH-_-iB7r8RT5Nq1vWL5t45P4j01hHl9LMqqI8sj6P6QZj1q4kD9tP6OvplbPseiUxQCloZVua2sdC2IuRSbfucf8.10Anq5AFNq7uabHpJz5HYcH4Sb45e0lk3iPByO_l9SU&dib_tag=se&keywords=i5%2B13400f&qid=1721565664&sprefix=i5+13400f%2Caps%2C198&sr=8-2 )|スペック的にi5がほしかったのと、コスパ良いという記事が多めだった。|
|GPU|映像処理を専門に行う部品で、ゲームや動画編集などで高性能なグラフィックスを提供する。|45253|[MSI GeForce RTX 3060 VENTUS 2X 12G](https://www.amazon.co.jp/MSI-RTX-4060-VENTUS-BLACK/dp/B08WPRMVWB?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dib=eyJ2IjoiMSJ9.Q1cvnSvzuygjr8cPvQdfBy3BGtdDXFuRSw3QOyTWMxfwzMr38xBe-a7rq-jAPdktki6ReUEXj_J_CMTLKZpdJ1SIy1vITcsg1d-mSJLnFE4PgdJRAeg9wklNsgBXJK1ZH3phYCZ4LHqbt5_U-ywe53q7e1aJu5AVawoaRSWyjSN86E-Qdthw-Zj2ZMF8GhELV7qrE0CUNEDFOdSHShj1hKRjCb-8rOt1lyVcsQLPzFPFsizrfa9xi1ugMFI-1v1zNajbuJx0Zm0T1HznxsKOy2z3JHaUSqnoF712cwMJvoc.v0jAJlwssER85pRc6czTa-hnn_6nrM2o_xpdOvIwIA0&dib_tag=se&keywords=rtx4060&qid=1720660132&sr=8-6&linkCode=sl1&tag=jin427405-22&linkId=44c94e76aa83ada1139c67c2c86e4727&language=ja_JP&ref_=as_li_ss_tl&th=1)|4080シリーズあたりが台頭してきたので、3060が当時安めの雰囲気があった|
|メモリ|一時的にデータを保存するための高速な記憶装置。プログラムが実行中に必要とするデータを一時的に保持する。|16475|[CORSAIR Corsair DDR5-5200MHz デスクトップPC用メモリ](https://www.amazon.co.jp/dp/B0BD4V2Q42?ref=cm_sw_r_apan_dp_EGDR36N1CTFZ4713X6XF&ref_=cm_sw_r_apan_dp_EGDR36N1CTFZ4713X6XF&social_share=cm_sw_r_apan_dp_EGDR36N1CTFZ4713X6XF&starsLeft=1&th=1)|32Gあれば安心|
|SSD|データを高速で読み書きできるストレージデバイス。HDDよりも圧倒的に速く、耐衝撃性も高い。|10480|[キオクシア KIOXIA 内蔵 SSD 1TB ](https://www.amazon.co.jp/%E3%82%AD%E3%82%AA%E3%82%AF%E3%82%B7%E3%82%A2-KIOXIA-FLASH%E6%90%AD%E8%BC%89-SSD-CK1-0N3G2-%E3%80%90%E5%9B%BD%E5%86%85%E6%AD%A3%E8%A6%8F%E4%BB%A3%E7%90%86%E5%BA%97%E5%93%81%E3%80%91/dp/B09KZG6PQV?th=1&linkCode=sl1&tag=jin427405-22&linkId=3a48bbf9aee080523d66dba9c616013b&language=ja_JP&ref_=as_li_ss_tl )|1TBは欲しいなと思い、その中で有名所・価格重視で。|
|マザーボード|コンピュータの全ての部品を接続する基板で、CPU、メモリ、ストレージ、グラフィックカードなどが取り付けられる。|18556|[MSIマザーボード B760 GAMING PLUS WIFI DDR5 ](https://www.amazon.co.jp/B760-GAMING-PLUS-WIFI-ATX%E3%82%B2%E3%83%BC%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%A2%E3%83%87%E3%83%AB/dp/B0C85YY829?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&dib=eyJ2IjoiMSJ9.GVSVwamwtDizkuSRHOQdz0OveT4olD-2pVGX1covkan1ZR83-1fY6tcReIc-GEZEOsPpdNqwCbMbn3dQwzZvFq4s7PZ52Yf6rjSsRgW41q2lv7S8GSAr9CW03ghBuTpS-Sapkon9ySiMx8Mwizef7kGADvWMsu3Ipiq5EYstsW4i-gFlByqJdsICVEZ4UNBUBeXv1t7cI9DPUdTySmGvha-EDSMzUcQx3J34nYijwz9J-haisBfqT_Zd1J2d2mWQqLT7XST-ODKmK-MyFRCeGujgx3ZhaqLWlTsHP5pEqUA.wYwLIg-1ozg5Y7Ob9RW7YSvaS_HQYewuqekn0XzrcIQ&dib_tag=se&keywords=b760&qid=1716174205&sr=8-6&th=1&linkCode=sl1&tag=jin427405-22&linkId=80905627fe82a47dd9d5f3743f17e5e7&language=ja_JP&ref_=as_li_ss_tl)|機能面や周囲の自作PCの記事を参考に選定。無線ありにしたかった。|
|電源|コンピュータの部品に電力を供給する装置|11190|[Apexgaming AGシリーズ 80 PLUS GOLD認証 750W](https://www.amazon.co.jp/Apexgaming-AG%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E3%83%95%E3%83%AB%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3ATX%E9%9B%BB%E6%BA%90-AG-750M-V2-JP-PSE%E3%82%B1%E3%83%BC%E3%83%96%E3%83%AB/dp/B0CF4399J2/ref=sr_1_1_sspa?crid=JF45DCHQ2WH0&dib=eyJ2IjoiMSJ9.M840MOPkSGKp8Wv0lWA_N8SA8q0q-BdiuNR_zlZzGEoMX5tYsr0WtXb8W31zV0_M5sQ45QtKs_lQMn6rlLX9Rhit93vTiCxdJGANk9ahF-xUCYf-5DWoAJZHo6YBNO1a0l5CgjgZe6E6DCjIqFDc26fzM2NdPQ8880N9XJRjl-zu7Pi3vp39LAOrYyAFdwWw_xyMDR3e21SwfquHT43DCx6PC71IIMqajZTMUrsQZKAB-lxkyE_IWlXL-ADl5tWQxDYHGEauUU1fPcWgOmoDshjHYY603CL7TxaV2ADz1U0.7sb9sOrBYKsAqncuAyqjCdI56pGnzOHU4M0HIY3yixQ&dib_tag=se&keywords=pc%2B%E9%9B%BB%E6%BA%90%E3%83%A6%E3%83%8B%E3%83%83%E3%83%88%2B700w&qid=1721563443&s=computers&sprefix=PC%E9%9B%BB%E6%BA%90%E3%83%A6%E3%83%8B%E3%83%83%E3%83%88%2B7%2Ccomputers%2C170&sr=1-1-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9hdGY&th=1)|750WあればCPUとGPUに供給する電力として十分なイメージ|
|PCケース|コンピュータのすべての部品を収納するための外装。冷却や配線の管理もする。|10525|[NZXT H5 Flow ミドルタワー PCケース](https://www.amazon.co.jp/dp/B0B6Y15C5L?tag=jin427405-22&linkCode=osi&th=1)|ミドルタワーのものの中で価格とかっこよさから選定|
|クーラー|コンピュータの部品、特にCPUやGPUの熱を冷却するための装置。空冷や水冷などがある。|9080|[MSI MAG CORELIQUID M240 簡易水冷CPUクーラー FN1949](https://www.amazon.co.jp/MSI-MAG-CORELIQUID-M240-%E7%B0%A1%E6%98%93%E6%B0%B4%E5%86%B7CPU%E3%82%AF%E3%83%BC%E3%83%A9%E3%83%BC/dp/B0C8M36Z75?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=36R1D5JI3GX6O&keywords=%E6%B0%B4%E5%86%B7%E3%82%AF%E3%83%BC%E3%83%A9%E3%83%BC%2Bmax&qid=1703038747&sprefix=%E6%B0%B4%E5%86%B7%E3%82%AF%E3%83%BC%E3%83%A9%E3%83%BC%2Bma,aps,194&sr=8-4&th=1&linkCode=sl1&tag=jin427405-22&linkId=37f1cbfcc198d92db32733398eca752a&language=ja_JP&ref_=as_li_ss_tl )|冷却能力の高い水冷で見た目を重視|

- 結果
    - 合計金額：152839円
    - 
- 所感
    - amazonの格安セールとかを狙えば、もう少し安くなるかもしれませんが目標は達成（特に、CPUやGPUやケースは変動しやすいイメージなので、もう少し安い時期を狙いましょう。）
    - 今回、OSをubuntuにしているのでOSの代金はなしというところがポイント
    - amazon配達員様、ありがとうございます。


# 組み立て

はじめに...組み立て時の写真を撮っておけばよかったのですが、完全に放念...ごめんなさい
メモのみ残しておきます。

このあたりを参考に作成
- [マザーボード説明書](https://download.msi.com/archive/mnu_exe/mb/MPGB550GAMINGPLUS.pdf)
- [クーラー説明書](https://download.msi.com/archive/mnu_exe/lc/7ZW4.pdf)

1. CPUの取り付け
    - マザーボードの横にレバーがあるので、解除
    - CPU本体を設置し、レバーを下ろすことで取り付け完了
    - <img width="400" alt="qiita_000_000.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1106935/a632d3ec-b038-eca1-d37f-ea70f5a971b5.png">
1. クーラーの取り付け
    - 下図のように設置する。今回のCPUはIntel1700のバージョンで取り付けます。
    - グリスを塗ることを忘れずに。
    - <img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1106935/da089f5d-b6d0-0cce-cc91-b2ac9c40699c.png">
1. メモリの取り付け
    - メモリに穴があるのでマザボの穴に合わせて差し込み、ロックする。
    - <img width="400" alt="qiita_000_001.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1106935/759e5649-d104-e6c2-a78a-952767e03dd5.png">
    - 挿す位置は以下を参照。今回は2つのため、B2とA2に入れる。あくまでも参照なので違う位置に入れても動作はするが、起動時に警告は出る。
    - <img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1106935/7a4c917e-b0fb-0208-627b-1118dfba8f80.png">
1. SSDの取り付け
    - 差し込んだあとに、ネジ止めする。
    - <img width="400" alt="qiita_000_003.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1106935/5369b726-9976-c74f-0695-d1dca480c6a2.png">
1. GPUの取り付け
    - マザーボードの増設箇所に接続する。
    - PCケースのGPUの高さの部分をはずしておく
    - <img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1106935/a6e572e5-2606-5f01-4c27-e073826be418.png">
1. ケースに各種機器を取り付け
    - マザーボードの隅をPCケースの側面にネジ止め。その際、コネクタを挿す用のパネルも取り付けておく。
    - ファンのラジエーターをPCケースの天井にネジ止め
    - 電源をPCケースの底にネジ止め（事前にCPU電源・GPU電源・ファン用の電源は取り付けておく）
1. コネクタを接続
    - 基本的には[マザーボード説明書](https://download.msi.com/archive/mnu_exe/mb/MPGB550GAMINGPLUS.pdf)に従う。各種、取り付けの説明書があるはず。ここでは大まかな接続した内容を記載する。（以下、マザーボードはマザボと略す）
    - フロントパネルコネクター（JFP1・JFP2）：ケースにある9pinのコネクタをマザボに挿す
    - 電源コネクター（CPU_PWR1, ATX_PWR1）：24pinと8pinのコネクタをマザボに挿す
    - typeCコネクタ（JUSB4）・USB3.2コネクタ（JUSB3）・USB2.0コネクタ（JUSB1~2）：PCケースにあるコネクタを接続
    - ファンコネクタ（CPU_FAN1, PUMP_FAN1, SYS_FAN1~6）：CPUファンをCPU_FAN1へ、水冷ファンをPUMP_FAN1へ、その他のファンをSYS_FANへ接続する。
    - RGB LEDコネクター（JRGB1）・追加のRGB LEDコネクター（JRAINBOW1~2）：ファンを光らす用のコネクタ。足りない場合は増設できるように電源が構成されているので、並列つなぎ的な感じに接続する。
    - <img width="400" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1106935/8783c90c-1e56-9b36-c3c6-31ede195e490.png">
1. いよいよ接続確認
    - 本体内のケーブルを結束バンドなどできっちり固定し、ファンに触れないことを確認。蓋を閉める。
    - キーボードやマウスと取り付ける。
    - 電源ONし、BIOSの画面になることを確認する。
    - 電源onしたらこんな感じになるはず
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1106935/e0161cf5-8761-0681-744d-c008633b8bfb.png)


# ubuntuインストール

1. usbメディアの作成
    -　別PCと空のUSBメモリを用意(USBのデータが削除されるので注意)
    -　別PCにubuntuのisoファイルをdownloadする。
        -　基本的にはどこでも良いが、日本語版がよいのかな？ｰ>[ダウンロードサイト](https://www.ubuntulinux.jp/download)
        -　今回はubuntu22を選択した（選ぶなら、22or24。サポート期間の時期に合わせて最適なバージョンを選択しましょう。）
    -　別PCに[rufus](https://rufus.ie/ja/)をインストールしておく
    -　USBメモリを挿し、「ブートの種類」を選択し、「スタート」を押す
1. ubuntu環境の構築
    -　作成したUSBをPCに接続して再度電源を入れる。
    -　ubuntuのインストール画面に遷移する。
    -　https://www.kkaneko.jp/tools/ubuntu/ubuntudesktop.html
    -　上記など参考にしてインストールを完了させる。

# 起動後にやる（と良さそうな）こと

ターミナルを起動し下記を実行

- 環境の更新
最初に必ず実行する
```sh
sudo apt update
sudo apt upgrade
```

- google chromeのダウンロード
検索エンジンとして、chromeが好きなので。
https://www.google.com/intl/ja_jp/chrome/
からdebファイルをダウンロード。その後に下記を実行。
```sh
cd ダウンロード/
sudo dpkg -i google-chrome-stable_current_amd64.deb 
```

- vscodeのダウンロード
プログラムを書くときに便利なツール
```sh
sudo apt install curl
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo install -o root -g root -m 644 microsoft.gpg /etc/apt/trusted.gpg.d/
sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
sudo apt install apt-transport-https
sudo apt update
sudo apt install code
```

- terminatorのインストール
複数のターミナルを並列させて操作することが可能
```sh
sudo add-apt-repository ppa:mattrose/terminator
sudo apt update
sudo apt install terminator
```

- geditのインストール
あまり使用しないが、色々と便利なので一応。
```sh
sudo apt  install gedit 
```

- 画像の編集ツール
```sh
sudo apt install snapd
sudo snap install pinta
pinta
```

- pipのインストール
```sh
sudo apt install python3-pip
```

# nvidia+cuda+cudnn環境の構築

## nvidia driverのインストール

推奨のnvidia driverのバージョンを確認する。


```sh
ubuntu-drivers devices
```
```sh
== /sys/devices/pci0000:00/0000:00:1c.1/0000:03:00.0 ==
modalias : pci:v000010DEd00002504sv00001462sd0000397Dbc03sc00i00
vendor   : NVIDIA Corporation
model    : GA106 [GeForce RTX 3060 Lite Hash Rate]
driver   : nvidia-driver-545-open - distro non-free
driver   : nvidia-driver-535-server - distro non-free
driver   : nvidia-driver-545 - distro non-free
driver   : nvidia-driver-535 - distro non-free
driver   : nvidia-driver-470-server - distro non-free
driver   : nvidia-driver-555 - third-party non-free recommended
driver   : nvidia-driver-535-server-open - distro non-free
driver   : nvidia-driver-550 - third-party non-free
driver   : nvidia-driver-555-open - third-party non-free
driver   : nvidia-driver-550-open - third-party non-free
driver   : nvidia-driver-535-open - distro non-free
driver   : nvidia-driver-470 - distro non-free
driver   : xserver-xorg-video-nouveau - distro free builtin
```

今回は555にしましょうか。
```sh
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-driver-555
```

インストール完了したら再起動する。その後、インストール完了の確認をする。

```sh
nvidia-smi
```

## cudaのインストール

[cuda-archive](https://developer.nvidia.com/cuda-toolkit-archive)
からcudaの最適なバージョンを選びます。
torchのインストール対応表にCUDA12.1とあるので、今回は12.1をダウンロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1106935/ab7bda94-3adc-34d6-1a74-d211ad416479.png)

```sh
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-ubuntu2204.pin
sudo mv cuda-ubuntu2204.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/12.1.1/local_installers/cuda-repo-ubuntu2204-12-1-local_12.1.1-530.30.02-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu2204-12-1-local_12.1.1-530.30.02-1_amd64.deb
sudo cp /var/cuda-repo-ubuntu2204-12-1-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get -y install cuda
```

bashrに以下を記載する。

```sh
gedit ~/.bashrc
```
```.bashrc￼
export PATH=/usr/local/cuda:/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/cuda/lib64:$LD_LIBRARY_PATH
```

bashrcの更新
```sh
source ~/.bashrc
```


## cudnnのインストール

https://docs.nvidia.com/deeplearning/cudnn/latest/installation/linux.html#

以下を実行するのみ。（以前はアカウント登録してダウンロードして...と進める必要があったが不要になった？）

```sh
sudo apt-get -y install cudnn9-cuda-12
```

## pytorch環境のインストール

```sh
pip3 install torch torchvision torchaudio
```

## tensorrtのインストール

https://developer.nvidia.com/tensorrt

から適切なものをインストールする。今回はTensorRT 10.3 GA for Ubuntu 22.04 and CUDA 12.0 to 12.5 DEB local repo Packageを選択。

```sh
sudo dpkg -i nv-tensorrt-local-repo-ubuntu2204-10.3.0-cuda-12.5_1.0-1_amd64.deb
sudo cp /var/nv-tensorrt-local-repo-ubuntu2204-10.3.0-cuda-12.5/*-keyring.gpg /usr/share/keyrings/
sudo apt update
sudo apt install tensorrt
```

確認する。
```sh
dpkg-query -W tensorrt
```

# ROS2環境構築

ubuntu24.04にROS2 humbleの環境構築をします。
[公式ドキュメント](https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html)
を参考にすすめていきます。

## 手順

1. universeリポジトリの追加
    ```sh
    sudo apt install software-properties-common
    sudo add-apt-repository universe
    ```
    ubuntuには下記の4種類のリポジトリがあり、標準のubuntuにはMainとRestritedからダウンロードできるようになっているので、Universeを追加する。
    - Main - Canonical-supported free and open-source software.
    - Universe - Community-maintained free and open-source software.
    - Restricted - Proprietary drivers for devices.
    - Multiverse - Software restricted by copyright or legal issues.

1. ROS2のGPGキーを追加
    ```sh
    sudo apt update && sudo apt install curl -y
    sudo curl -sSL
    https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
    ```
    
    GPGキーとは、オープンソースのツールの公開鍵。ROS2の公開鍵を登録する。
    
1. source.listに追加

    ```sh
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
    ```

    ソフトウェアパッケージを取得するためのリポジトリのリストを管理するファイルに追加する。このファイルに記述されたリポジトリのURLから、パッケージがダウンロードされてインストールされる。

1. アップデート+インストール+セットアップ
    ```sh
    sudo apt update
    sudo apt install ros-jazzy-desktop
    ```
1. 環境変数の追加
    ```sh
    cd 
    echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc
    source ~/.bashrc
    ```

1. 動作確認
    - talkerの実行
    ```sh
    source /opt/ros/humble/setup.bash
    ros2 run demo_nodes_cpp talker
    ```
    ```sh
    [INFO] [1723622549.135275508] [talker]: Publishing: 'Hello World: 1'
    [INFO] [1723622550.135108463] [talker]: Publishing: 'Hello World: 2'
    [INFO] [1723622551.135095695] [talker]: Publishing: 'Hello World: 3'
    [INFO] [1723622552.135037076] [talker]: Publishing: 'Hello World: 4'
    [INFO] [1723622553.134974142] [talker]: Publishing: 'Hello World: 5'
    [INFO] [1723622554.134864330] [talker]: Publishing: 'Hello World: 6'
    ...
    ```
    - listenerの実行
    ```sh
    source /opt/ros/humble/setup.bash
    ros2 run demo_nodes_py listener
    ```
    ```sh
    [INFO] [1723622556.145260016] [listener]: I heard: [Hello World: 8]
    [INFO] [1723622557.136622529] [listener]: I heard: [Hello World: 9]
    [INFO] [1723622558.136576119] [listener]: I heard: [Hello World: 10]
    [INFO] [1723622559.136505719] [listener]: I heard: [Hello World: 11]
    [INFO] [1723622560.136440269] [listener]: I heard: [Hello World: 12]
    [INFO] [1723622561.136401371] [listener]: I heard: [Hello World: 13]
    ...
    ```

1. ros2のビルドツール・テストツールのインストール
    ```sh
    sudo apt update && sudo apt install -y \
      python3-flake8-docstrings \
      python3-pip \
      python3-pytest-cov \
      ros-dev-tools
    sudo apt install -y \
       python3-flake8-blind-except \
       python3-flake8-builtins \
       python3-flake8-class-newline \
       python3-flake8-comprehensions \
       python3-flake8-deprecated \
       python3-flake8-import-order \
       python3-flake8-quotes \
       python3-pytest-repeat \
       python3-pytest-rerunfailures
    ```

1. ros2初期設定
    ```sh
    sudo rosdep init
    rosdep update
    rosdep install -i --from-path src --rosdistro $ROS_DISTRO -y
    ```
1. ros2ワークスペースの作成
    ```sh
    cd 
    mkdir -p ros2_ws/src 
    cd ros2_ws 
    colcon build
    source ~/ros2_ws/install/setup.bash
    ```