知る人ぞ知るプロジェクトOscilloDSP、3年ぶりの大規模アップデート!!

Python 3.12 and Qt upgrades power OscilloDSP’s evolution into a more efficient real-time data visualization tool. Automated testing and pip-tools boost code quality and reliability.

A clean computer screen displaying an oscilloscope connected to a DSP processor, with minimal data waves in a few clear lines. The background remains minimal, with more color, featuring an electric vehicle with its hood open, along with a Japanese professor and student working together in a motor control engineering lab. The overall illustration maintains a flat, minimalist aesthetic with soft muted tones, and uses color to enhance the scene's vibrancy while keeping a calm atmosphere. Illustrated by ChatGPT and DALL-E.

相模原市で IoT 設計を受託しているファームロジックスです。

日々の業務の中で、組込デバイス上のリアルタイムデータの可視化が必要になる場面はありませんか? ファームロジックスの GitHub プロジェクト OscilloDSP は DSP やマイコン上のリアルタイム数値データをオシロスコープのように閲覧するためのツールとして生まれました。

長らく更新が止まっていたこのプロジェクトを、このたび大幅に更新しました。最後の更新から約 3年が経過し、その間に使用している Python や各種パッケージが大きく進化しました。当時使用していた Python 3.8.5 や Qt の PySide2 は、今では古くなり、最新の OS や開発環境に対応しきれていない部分がありました。特に、Python の最新版は現在 3.12 に到達しており、また古い pip でインストールする各種パッケージに関するセキュリティ上の問題も指摘されています。このままでは、リポジトリをダウンロードしても動作しないユーザーが多くなってしまうため、最新の技術やツールを取り入れてリポジトリをアップデートしました。

OscilloDSP について

OscilloDSP は、組込プロセッサ(特に DSP: デジタルシグナルプロセッサ)からリアルタイムでデータを取得し、Python ベースで可視化するためのソフトウェアツールです。このプロジェクトは、ある大学の研究室からの依頼により開発が始まりました。物理的なオシロスコープに代わるソフトウェアとして、複数チャネルのリアルタイムデータの可視化、瞬間的な事象を捉えるトリガリング機能も備えています。

大学の教授にオープンソースの利点をご説明したところ、BSD ライセンスでの公開に快くご承諾いただき、GitHub で公開させて頂いております。

設計の概要

このツールは、組込システムとリアルタイムデータの可視化のギャップを埋めるよう設計されています。従来のオシロスコープでは、組込システム、特に DSP のような高速処理を行うプログラム上のリアルタイムデータを取得することに限界がありました。OscilloDSP は、送受信するデータ量を効率的に管理し、リアルタイムで必要なデータだけを表示することで、この課題を解決しています。

また、物理的な DSP ハードウェアがなくても PC 上でシミュレーションが可能で、開発環境に関わらず動作テストが行える点も大きな特徴です。特に、教育やプロトタイプ開発にも適したツールとして設計されています。

リポジトリの更新内容

Python 3.12.6 での動作確認

今回のリポジトリ更新において最も重要な点は、Python の最新バージョン 3.12 シリーズで動作するようにしたことです。これにより、今後も安心して使用できる基盤が整いました。

なお、私は現在でも macOS 10.15 を使用していますが、そこでは Python 3.9 あるいは 3.10 が必要でした。これは、最新の Qt のサポートから macOS 10.15 が外れたことが理由です。そのため、macOS 10.15 を使用されている方は、Python のバージョンに注意する必要があります。

PySide6 への移行

以前のリポジトリでは、Qt の Python バインディングとして PySide2 を使用していましたが、今回の更新で最新の PySide6 へ移行しました。これにより、最新の Qt 機能やバグ修正が適用され、さらに Qt と Python バインディングの今後の更新にもスムーズに対応できるようになり、長期的なメンテナンス性が向上します。

pip-tools の採用

依存パッケージの管理には、pip-tools を新たに採用しました。これにより、依存関係の管理が容易になり、requirements.in ファイルを元に pip-compilerequirements.txt を自動生成するフローを導入しています。これによって、必要なパッケージのバージョンを正確に指定することができます、

nanopb パッケージの導入

OscilloDSP では、Google の Protocol Buffers を使用して DSP と PC 間のデータ通信を行っています。これまで、プロジェクト内で手動で protoc をインストールしていましたが、今回は pip install nanopb で簡単に protobuf ファイルを扱えるようにしました。これにより、開発環境のセットアップが簡単になります。

コードのフォーマットとリファクタリング

今回の更新では、コードの品質向上にも力を入れました。具体的には、以下のツールを導入しました。

  • isort: import 文の順序を自動で正規化
  • Black: Python コードを一貫したスタイルでフォーマット
  • pylint: コードの静的解析とリファクタリング支援

pylint を活用して、多くのコード改善を行いました。これにより、コードの可読性が向上し、メンテナンスもしやすくなったと思います。これらのツールを組み合わせて、コードの一貫性と品質が保たれています。

ただし、OscilloDSP のコードを設計してから 4年近くが経過しており、当時の設計の詳細や意図を覚えていない部分がいくつかあります。現状では十分な動作確認ができていないため、pylint のチェックを抑止するコメントを多く含んでいます。その点はご了承ください。

自動テストと GitHub Actions の導入

GitHub リポジトリには、自動テスト環境を導入しました。具体的には、GitHub Actions を使用して、git pushのたびに自動でコードの検査とユニットテストが実行されるように設定しています。README.md には、テスト結果を視覚的に確認できるバッジも追加しました。これにより、リポジトリの品質を常に管理し、保つことができます。

現在の課題と今後の展望

ドキュメントの整備

今回の更新では、README.md を含めたドキュメントの見直しを行い、新たに英語版ドキュメントも追加しました。しかし、すべてのドキュメントを更新しきれていない部分もあります。今後は、これらのドキュメントの充実を図り、利用者がスムーズにプロジェクトを導入できるよう改善を進める予定です。

GUI の不具合と IPyWidgets 版のサポート終了予定

OscilloDSP には、Jupyter Notebook を使用した GUI が含まれていますが、今回のアップデートにより、表示が崩れる不具合が確認されています。IPyWidgets と最新ライブラリとの互換性が問題であると考えられますが、利用者数が少ないこともあり、IPyWidgets 版のサポートは今後終了する予定です。現状では、Qt 版のホストアプリを利用頂きたいと思います。将来的には、よりモダンな技術である Flutter を用いた Flet への移行を視野に入れています。

macOS 10.15 での問題点

前述の通り、macOS 10.15 では、最新の PySide6 をフルに活用できない問題があります。これは、macOS のバージョンに依存するもので、現在のところ回避策はありません。可能な方は Windows、Linux、または最新の macOS での利用をご検討ください。README.md にもこの注意点を追記していますので、macOS ユーザーの方は確認ください。

おわりに

今回のリポジトリ更新は、Python 3.12 や pip-tools、PySide6 といった最新の技術を採用し、OscilloDSP のサポート期間を大幅に延長させるものです。ただし、ドキュメントや GUI の問題など、まだ改善すべき点も残されています。今後も継続してリポジトリを更新し、利用者の皆様にとってより使いやすいツールにしていく予定です。

もし、御質問などございましたら、このブログのフォームあるいは GitHub の Issues ページからご連絡ください。今後も皆様のご意見を参考にしながら、プロジェクトを進化させていければと考えております。

お問い合わせはお気軽に!

お問い合わせを頂いた後、継続して営業活動をしたり、ニュースレター等をお送りしたりすることはございません。
御返答は 24時間以内(営業時間中)とさせて頂いております。必ず返信致しますが、時々アドレス誤りと思われる返信エラーがございます。返答が届かない場合、大変お手数ではございますが別のメールアドレスで督促頂けますと幸いです。

コメントを残す