はじめに
TurtleBot3をROS2で動かした際の忘備録(3)です
同じネットワーク内のPCからTurtleBot3をリモート操作するまでになります
Raspberry Pi 3B+ バージョンの場合は下記別記事参照
https://qiita.com/pez/items/1d3d15b3911d5dab1702
・リモートPCにVirtualBox+Ubuntuが導入済み(下記別記事参照)
https://qiita.com/pez/items/a3ef1855f7e1e0ed3dfd
・リモートPCにROS(ROS2 Foxy)がインストール済み(下記別記事参照)
https://qiita.com/pez/items/1df36628524ff40a3d93
・TurtleBot3は組立て済み
の状態からを想定しています
環境
リモートPC (Panasonic Let's Note CF-FV)
・OS: Windows11 Pro (64bit)
・VirtualBox: 6.1.38 (Ubuntu20.04.5, GUI環境)
・ROS: ROS2 Foxy
ロボット
・TurtleBot3 waffle pi (Raspberry Pi 4B)
※ラズパイのバージョンが同じなら burger でもほとんど同じ操作になります
(waffle pi の部分がburgerになるくらい)
Raspberry Pi 3B+ バージョンの場合は下記別記事参照
https://qiita.com/pez/items/1d3d15b3911d5dab1702
その他
・microSD カード
16GB以上あればOK
TurtleBot3用のイメージファイルをダウンロード
ラズパイのハードウェアのバージョンを確認
※このページでは Raspberry Pi 4B を使用しています
$ cat /proc/device-tree/model
以後の手順は下記公式サイトを参考にしています
(ページの上の方で「Foxy」を選択する)←これお間違えなく!
使用するTurtlebot3に合わせてイメージファイルを選択しダウンロード:ここでは「Raspberry Pi 4B」のROS2 Foxy image
具体なファイル名は「tb3_rpi4_foxy_20210825.zip」でした
イメージファイルの準備
ダウンロードした zip ファイルを解凍すると img ファイルが現れるのでこれを microSD カードに書き込む
色々方法はあるかと思いますがここでは Disk Imager を使いました
※環境によってはかなり時間がかかる場合があります
できるだけデータ転送速度が速いもの(USBならGen3以降とか)を使うとよいと思います
micorSDの未割り当て領域を有効に
上のリンクの公式サイトではGPartedなどを使ってパーティションのリサイズをしなさいとありますが,今回はやろうとしたら何もしなくても全領域使ってパーティションが切られていたので何もせず
TurtleBot3を起動・初期設定
書き込みできた microSD を TurtleBot の RaspberryPi に挿入して起動する
waffle pi だとこんな感じ↓で入れにくいですが burger の方は手で何とかなります
・ユーザー名:ubuntu
・パスワード:turtlebot
となっています
下記やったことのメモ(全てTurtleBot3のUbuntuでのコマンド入力)
$ sudo dpkg-reconfigure keyboard-configuration
Generic 105-key(Intl) PC → Japanese → Japanese → The default for the keyboard layout → No compose key
$ reboot
$ cd /etc/netplan/
$ sudo vi 50-cloud-init.yaml
・access-points: の下の行に繋げたいwifiのSSIDを記入
・さらにその下 password: [パスワードを記入], 保存して終了
$ reboot
$ ifconfig
※ifconfig が入っていない場合は sudo apt install net-tools
$ sudo apt-get update
E: Release file for http://~~~~~ is not valid yet ~~~
(という感じのが4行ほど)
時刻がずれていることが原因らしいので修正しなくてはいけない
※エラーが起こらない場合は「Lidarの設定など」へ進む
Raspberry Pi の時刻の同期について
※時刻がずれていない場合はやる必要なし
$ timedatectl
→ 1年以上前の日時が表示された
$ sudo timedatectl set-timezone Asia/Tokyo
次に「timedatectl」関連で設定を試みたのですがなかなかうまくいかず・・・
System clock synchronized: が何をしても yes になってくれないなと思いながら調べたところ,どうやら私の職場のネット環境のせい(ntp通信が許可されていない,外部へのpingも帰ってこない)らしいということが分かった.実際,自宅のWiFiに繋いだらあっさり同期できた.
仕方ないので職場では時計を見ながら手動で合わせて乗り切ることにする
(再起動する度に時間がずれるが・・・)
$ sudo date --set='yyyy/mm/dd hh:mm:ss'
(例) sudo date --set='2022/10/27 09:18:55'
とりあえず apt-get update などはできるようになる
$ sudo apt-get update
dpkgのエラー
何かを apt install しようとすると下記のようなエラーが出た
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is ~~略
下記で対処(必要ないものもあるかも)
$ sudo systemctl mask apt-daily.service
$ sudo systemctl mask apt-daily.timer
$ sudo systemctl mask apt-daily-upgrade.service
$ sudo systemctl mask apt-daily-upgrade.timer
$ sudo rm /var/lib/apt/lists/lock
$ sudo rm /var/lib/dpkg/lock
$ sudo rm /var/lib/dpkg/lock-frontend
Lidarの設定など
./bashrc を確認する.もし「export ROS_DOMAIN_ID=30」の記載がなければ追加する
(MEMO: echoを使うよりエディタで編集した方がリスクが低いので推奨)
$ sudo vi ~/.bashrc
開いたら一番下などに「export ROS_DOMAIN_ID=30」を追記して保存
今回のTurtleBot3についているLidarは「LDS-02」なので下記操作を行いました
$ sudo apt update
$ sudo apt install libudev-dev
$ cd ~/turtlebot3_ws/src
$ git clone -b ros2-devel https://github.com/ROBOTIS-GIT/ld08_driver.git
$ cd ~/turtlebot3_ws/src/turtlebot3 && git pull
$ rm -r turtlebot3_cartographer turtlebot3_navigation2
$ cd ~/turtlebot3_ws && colcon build --symlink-install
さらに ./bashrc に「export LDS_MODEL=LDS-02」を追記する
$ sudo vi ~/.bashrc
開いたら一番下などに「export LDS_MODEL=LDS-02」を追記して保存
OpenCRのファームウェア更新
※OpenCR:Turtlebot3のラズパイにくっついている制御用ボード
基本的に公式サイトの通りなのでここはメモ書き程度
$ sudo dpkg --add-architecture armhf
$ sudo apt update
$ sudo apt install libc6:armhf
$ export OPENCR_PORT=/dev/ttyACM0
$ export OPENCR_MODEL=waffle
$ rm -rf ./opencr_update.tar.bz2
$ wget https://github.com/ROBOTIS-GIT/OpenCR-Binaries/raw/master/turtlebot3/ROS2/latest/opencr_update.tar.bz2
$ tar -xvf ./opencr_update.tar.bz2
$ cd ~/opencr_update
$ ./update.sh $OPENCR_PORT $OPENCR_MODEL.opencr
音が鳴る(ドレミファソラシド)
完了の合図?
設定確認/.bashrc
※ここからはTurtleBotだけでなくリモートPCの方のターミナルでもコマンド入力します
TurtleBotとリモートPC両方で ~/.bashrc の中を確認する
$ sudo vi ~/.bashrc
export の部分
export ROS_DOMAIN_ID=30
export TURTLEBOT3_MODEL=waffle_pi
export OPENCR_MODEL=waffle
export OPEN_PORT=/dev/ttyACM0
export LDS_MODEL=LDS-02
burgerの場合はwaffle, waffle_piのところをburgerにする
有効化
$ source ~/.bashrc
動作確認
公式サイトにてスイッチを押して動くか試せとあるのでその通りにする
https://emanual.robotis.com/docs/en/platform/turtlebot3/opencr_setup/#opencr-setup
(上で「Foxy」を選択して下の方の「OpenCR Test」の部分,詳細省略)
最後にteleopの確認
$ ros2 launch turtlebot3_bringup robot.launch.py
$ ros2 run turtlebot3_teleop teleop_keyboard
リモートPCからキーボード操作でTurtleBotが動かせたら成功