ROS2 自作 Turtlebot3 による 草刈りロボット開発。#2

ROS2 自作 Turtlebot3 による 草刈りロボット開発。#2

ROS2 自作 Turtlebot3 による 草刈りロボット開発。 の続き。

7. 屋外での Map II。
結局、今は、GPS(みちびき級) を使って、畑の外周の、各頂点でGPSデータを採取して、 それを、順に線分で結んで、
畑の図形に使う事にしました。

はーー、しかし面倒くさい、誰か替わりに、此処のシステムを作ってくれないじゃろうか?
システム構成のラフは、ノートに手書きで出来あがっています。誰か、これを実際に作ってくれないだろうか?
替わりに、もし実際に出来上がたっら、システムとして自由に販売もOKにするのだが!!
仕方がないので、自分で作っています。
いまは、 ESP32 bluetooth で、GPSデータが、PCで採取できるところまで出来ています。by nishi 2023.5.6

8. おんちゃんのメモ2
Arduino で、 serial の default baud rate の判定方法のアイデアが、ありました。
UART Automatic Baud Rate Detector
Rx ピンの 立ち上がり、立下りの時間を計測するみたい。
しかし、これって、 arduino の 自己プログラムからできるのだろうか?
サンプルプログラムがあるので、見てみます。
データを受信している時の、これを使って 相手側の baud rate を計測して、自分側の serial の rate を変更すればよいのかも?

他に、方法は無いものか?

相手側が、データを常に送ってくる状態であれば、Serial.available() > 0 になる迄、順繰り、自分側の serial の rate
を上げていって、データが取れる時点の、 barud rate を使えば、良い気もします。

但し、その時 char data = Serial.read(); で、 data > 0x00 が取れている状態であることを条件にする。
Ascii コードが取れている確率が一定以上(90%)であれば、baud rate が一致していると判定しても良いのでは。

9 おんちゃんのメモ3
1) GPS の NMEAデータ を、UTM座標に変換するのに参考になるページがありました。
i) pythonで緯度経度座標↔UTM座標変換
ii) API Documentation » Proj
iii) Pythonパッケージのpyprojを使ったGPSのNMEAデータ分析
iv) TOPIC 3|3D都市モデルデータの基本[4/4]|CityGMLの座標・高さとデータ変換

上記、サンプル例を合体させて、前者の i) の pyproj を参考にしました。

動作環境
Ubuntu Mate 22.04
Python 3.10.6
pyproj ver 3.3.0

gps_to_map2.py

注1) NMEA レコードは、$GPGGA だけ与えています。
注2) $GPGGA レコードの最後に、 id (自分で使うための識別番号) を、追加しています。
オリジナルの、$GPGGA レコード を使うときは、下記にすれば、OK です。


注3) 試しに、GYSFDMAXB を使って、部屋の中で、GPSデータを採って、上記 Pythonスクリプトで、
X-Y座標に出してみました。
2[m]誤差では、まるっきりだめのようです。屋外の、2[m]誤差 が無視できるくらいの広い場所の測定でないと、NGか!!。

GPS(AE-GYSFDMAXB)について に、NMEA の説明がありますが、GPGA の 水平精度低下率(HDOP)が、
衛星6個の時、1.46
衛星7個の時、1.16
衛星10個の時、0.93
になっています。
これは、UTM座標に変換した時、約 32[m] / HDOP の様なので、
0.93 * 32[m] = 29.76[m] のズレのようです。
12個まで、衛星は補足できる性能ですが、たまに 11個取れて、12個取れたのは、まだありません。

注4) Convert Lat Long to UTM で、実際のデータで確認すれば、UTM の値が、一致しました。す...すごい!!
ただ、plt.show() で表示したら、X 軸が逆転している気がする。
X軸は、東から西へ増加するのだから、逆のようだ。plt で、X軸をdecrease できるのか?
plt.gca().invert_xaxis()
で、OKみたい。

今は、みちびきの L6 補強情報で誤差補正できる、GNSSボードがあるようですが、
一式揃えると、60,000円 程します。うむ.....
ZED-F9P と F9PX1
ZED-F9P + F9PX1 + アンテナ が必要みたい。
ZED-F9Pは、最近、aliexpress で、BNX-F9P と言う名称で、2万円台が出ているが、これは、使えるのだろうか?
注)スプリッターは、不要みたい。by nishi 2023.7.25

Sony Spresense (6,050円)で、通常の、GPS信号を、みちびきの L1S 補強信号で誤差補正すれば、1[m] 誤差以下になるようです。こちらを試してみるか?

9. GPS を使った場合の ROS MAPの位置決めに関して。
上記、処理で、 NMEA から、UTM座標への変換が出来るのが確認できたので、次は、ROS2 の MAP への変換です。
その際に、UTM座標を、MAP上の位置へ変換するのは、どうするのか?
下記に、この件に関しての記述があるぞね。
Integrating GPS Data

10. Android スマホで、GPSデータを採取してみる。
GYSFDMAXB での、GPSデータは、役に立たないので、試しに、Android スマホで、データを採ってみました。
急遽、android-studo を入れて、再度 Andorid のアプリ開発を勉強しました。
また、Java かと思っていましたが、今は、kotlin と言う言語があるそうで、今回はそちらを使ってつくてみました。
結局、精度は、GYSFDMAXB と変わらなくて、今回の目的では、使えません。

序に、Android で、Bluetooth Serial で、ESP32+Bluetooth+GPS のデータを採取するアプリも作ってみました。
こちらの方は、将来、ZED-F9P + F9PX1 が手に入ったら実際に使えます。

11. おんちゃんのメモ。
1) UTMグリッドとは
2) FAQ/ UTM座標系とは
3) Android 上で、Python が使えるみたい。
Android上でPython3が利用できるPydroid3がスゴイ
4) Simple GPS data visualization using Python and Open Street Maps
5) ECEF とは?
WGS84 と座標変換のはなし

このブログ記事について

このページは、おんちゃんが2023年5月10日 14:00に書いたブログ記事です。

ひとつ前のブログ記事は「Gazebo ROS2 Humble で、My ワールドを追加する」です。

次のブログ記事は「T100TA Ubuntu 20.04 Sound 設定」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

カテゴリ

ウェブページ

サイトナビ