Pythonインストールして、IMUからシリアル受信して、CSVファイル保存するまでプログラム作ってみました。
初めてですが、6時間くらいでできました。
●目的 コト作り「スキーティーチャー システム」
私の開発テーマであるスキーターン計測システムですが、膨大なデータがたまってます。それの処理が3年たっても賢くできません、そこで機械学習させて、上手に滑れたときのデータと下手な時のデータなど、膨大なスキー運動のデータをどう処理すればよいのかを解析するツールとしてpythonを学習始めました。
●Pythonでマイコンからシリアル受信するメリット デメリット(初めて1週間感想)
①メリット1:多CHで膨大なデータ数があって、Excelでもスクロールするのが大変になるような計測データの場合Pythonのデータ処理ライブラリー群が強力なので、Excelで苦労するより数十倍生産性が上がります、
例えば、4水準のデータの相関を散布図にすると16枚の散布図が作れますが、これをExcelでやるよりPythonライブラリのseabornを使えば一瞬で12個の散布図と4個のヒストグラムを作成表示してくれます。
②メリット2:Pythonの適応分野は、機械学習AIとサーバーサイドプログラムとデータアナリシス分野の3分野です。ですので、測定データが複雑統計処理が必要な場合、Pythonのscikit-learnライブラリで各種統計処理が
手軽に行うことができます。Excelでグラフを作って悩んでいるより、各種処理したグラフを眺めたほうが
事象を把握する手間と時間が大幅に改善されます。
③メリット3:RTKの場合、GPSですので、場所によって電波状態が悪くてデータ異常値がでます、そのような外れ値が多いのでGNSS RTK測定データの悩みですが、外れ値などデータの前処理機能がscikit-leanについてますので、RTKの生データをまずは、外れ値検出にかけてからデータを整えて処理にまわします。
②デメリット;インタープリター言語なので、どうしても遅くなります。リアルタイム処理が不得意ですので、
データをログしてから後でじっくり解析する用途向きです。Pythonは、膨大なデータ処理を短いプログラム記述で処理できるのが得意ですが、その分CPUとメモリーに負担がかかるので、同じ処理でもVBとかC#より遅くなります。さらにm、デスクトップアプリなどユーザーインターフェースが必要なアプリは不得意です。
●初めていじってみた感想
①インタープリターでライブラリーを気軽に使えるので、走らすまでが簡単です。
②検索していろいろ解説サイトを見るのですが、全画面を覆う広告が多すぎて、見ずらいブログ記事ばかりで、VBとかC#のように、非営利で、丁寧に解説しているサイトが全くありません。例えば、dobon.net様のようにここさえ見ていれば相当のプログラムが作れてしまうようなサイトがありません。
③Pythonブログ全体を網羅しているもの少ない。必要な機能を全部網羅しているサイトがほとんどないので、調べるのが非常に大変手間がかかります。chatGPT、GoogleAI生成でもあまり詳しくないです。
これは、未だWEB全体で、pythonの内容が充実したサイトが少ないからだと思います。
④組込み系のC++ C#で使っているシリアル接続とか、マイコンのIFなどについての記事は少ないです。=>元々できないから無い
=>pythonは、特定分野3つ向けの言語と割り切ったほうが良いです。【実験データを処理したい人は必須科目です。】
A:機械学習、AI関連分野 B:サーバーサイドプログラム C:データ解析ツール開発
=>pythonで組込み系システムは無理です。遅いしメモリー食うので、とてもマイコン系IOTは無理です。
無理やりマイクロpythonで作っても、C++のプログラムに負けると思います。
=>デスクトップアプリケーションもとても他の言語にかないません。
⑤あちこちのライブラリーで成り立っている言語なので、統制がとれてないので、習熟が大変ではないかと思います。VisualStudioのような全ての面倒をみてくれるIDEがないので、環境の選定に迷います。
●環境づくり
①anacondaは、使わないことにした。1GBを超えるダウンロードで、重いので、今回は使ってませんが
基礎学習では、教本がanacondaベースでおしえているので、基礎学習では別のPCにインストールして
juoyter notebookと一緒に使ってます。
②Python本家 https://www.python.org/ から最新版をダウンロードしてインストール
③IDEは、pycharm comunity版を使ってます。無料です。
https://www.jetbrains.com/ja-jp/pycharm/download/?section=windows
このページの下のほうに、無料版ダウンロードあります。
④ライブラリーのインストール
正式には、コマンドプロンプトを開いて、コマンドラインで、pip install するのが、面倒です。
※GUIでライブラリーをインストールする方法
=>例えば import scikit-learn の行で右クリックしてShowContext Actionsがをクリすると
install package scikit-learn と出てくるのでクリックするとダウンロードしてインストールが始まります、
一番下に、インストールの進捗状況がでてますにで、待っていればライブラリのインストールが完了します。
https://zero-cheese.com/2956/
https://corvus-window.com/python_install_lib/
●プログラム作り
①シリアル受信
Python正式版ではシリアル通信ライブラリはついてないので、自分でインストールします。
pyserialというデファクトスタンダードがあります。https://pyserial.readthedocs.io/en/latest/#
=>速度が心配なので、460800bpsで有線USBシリアルで30bytedデータを受信してみましたが、コンソールにprintするだけならデータ落ちなく受信できてました。大きなデータを高速で受信させなら、各種処理してみて
どこまでついていけるかですが、VBやC#よりは苦しくなると思います。元々pythonは、組込み系の言語では
ないのでライブラリーはC++で作られていても、本処理がpythonインタープリターになるので、苦しくなるのは
目に見えてますので、リアルタイム処理は、しないで、一旦ファイルにログしたデータを後で処理する使い方になると思います。
②CSVファイル
タイムスタンプをつけたファイル名で保存します。パスの指定が面倒なので、何もつけなければ
プロジェクトのフォルダー(main.pyのあるフォルダー)に保存してくれます。
pythonのプロジェクトは、便利で、好きな場所に作ってもプロジェクトフォルダーに必要な環境がはいって
いるので、ライブラリー関係も全部そこに入っているので、迷うことがありません。
実際は、仮想環境がはいっているだけらしいです。
●コードはここにおいてあります。
https://gist.github.com/dj1711572002/40dcbfadb012233d6e84a64c1c0ec027
C#で作るよりコードは短いです。でも、データの型定義がないので、printさせるのが不安があります。ファイルの中身もコントロールできてないので、まだまだ大変苦労するとおもいます。