はじめに
TurtleBot3をROS2で動かした際の忘備録(1)です
(waffle pi と burger 両方で確認済)
同じネットワーク内のPCからTurtleBot3をリモート操作します
Raspberry Pi 4B バージョンの場合は下記別記事参照
https://qiita.com/pez/items/1251c7ad0a21fd6f0a48
・リモート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 3B+)
または
・TurtleBot3 burger (Raspberry Pi 3B+)
Raspberry Pi 4B バージョンの場合は下記別記事参照
https://qiita.com/pez/items/1251c7ad0a21fd6f0a48
その他
・microSD カード
16GB以上あればOK
TurtleBot3用のイメージファイルをダウンロード
ラズパイのハードウェアのバージョンを確認
※このページでは Raspberry Pi 3B+ を使用しています
$ cat /proc/device-tree/model
以後の手順は下記公式サイトを参考にしています
(ページの上の方で「Foxy」を選択する)
使用するTurtlebot3に合わせてイメージファイルを選択しダウンロード:ここでは「Raspberry Pi 3B+」のROS2 Foxy image
具体なファイル名は「tb3_rpi3b+_foxy_20210715/tb3_rpi3b+_foxy_20210715.img」でした
イメージファイルの準備
ダウンロードした iso ファイルを 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行ほど)
時刻がずれていることが原因らしいので修正しなくてはいけない
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
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_pi
$ 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
ここで最後の行に
failed to set dtr/rts
という気になる表示が出ていたが調べても原因は分からず
放置してもロボットは動くらしいのでスルー
音が鳴る(ドレミファソラシド)
完了の合図?
Lidarの設定
ここで使うTurtleBot3のLidarは「LDS-01」だったので下記を実施
$ echo 'export LDS_MODEL=LDS-01' >> ~./bashrc
$ source ~/.bashrc
設定確認/.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-01
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が動かせたら成功