メニュー
はじめに
1. 概要
RTno (アールティーノ) とは、arduinoのようなマイコンボードをRTミドルウェアで簡単に扱うためのライブラリおよびツール群です。 名前のRTnoはRT + arduinoから取られています。
RTnoは、RTミドルウェアの開発を容易にすることを目的としています。 RTミドルウェアは、ロボットシステムの構築において重要な役割を果たしていますが、その開発には専門的な知識と経験が必要です。 特に、マイコンボードを使用したシステムでは、ハードウェアとソフトウェアの両方の理解が求められます。 RTnoを使うと、これらの課題を克服し、よりスムーズにRTミドルウェアを利用できるようになります。
RTnoは、マイコンボード上の組み込みソフトウェア開発で使われるライブラリを提供しています。 このライブラリのAPIを使うと、PC上で動くツール (RTnoProxy) が中立ちとなって、他のRTコンポーネントと通信することができます。 RTnoProxyとは、Serialを使った通信の他、TCPソケットを使った通信に対応しています。
通常であれば、RTコンポーネントに対応した組み込みデバイス開発では、 「組み込みデバイス内のコントローラで動作するソフトウェア」 「PC上で動作する、組み込みデバイスと通信するソフトウェア(RTコンポーネント)」の両方の開発に加えて、 2者間の通信プロトコルを定義することが必要です。 RTnoを使えば、組み込みデバイス側のソフトウェアのみを開発することで、PC上のツールを中立ちとして、 他のRTコンポーネントと通信するデバイスが開発できます。
2. インストール
- Arduino IDEのインストール
- RTno2ライブラリのインストール (ZIPファイルから または ライブラリマネージャから)
- RTno2Proxyのインストール
2.1. Arduino IDEのインストール
RTnoを使うには、まずArduino IDEをインストールしてください。 Arduino IDEは、公式サイト (https://www.arduino.cc/en/software) からダウンロードできます。 インストール手順については、公式サイトのガイドを参照してください。
2.2. RTno2ライブラリのインストール
a. RTno2ライブラリのインストール (ZIPファイルから)
RTno2ライブラリは、ZIPファイルからもインストールできます。 まず、RTno2のGitHubリポジトリ (https://github.com/rtno2/RTno2) からZIPファイルをダウンロードしてください。 ダウンロードしたZIPファイルを解凍し、Arduino IDEを起動します。 メニューから「スケッチ」->「ライブラリをインクルード」->「.ZIP形式のライブラリをインストール...」を選択し、 解凍したフォルダを指定してインストールしてください。
b. RTno2ライブラリのインストール (ライブラリマネージャから (近日対応予定))
RTno2ライブラリは、Arduino IDEのライブラリマネージャを使ってインストールできます。 Arduino IDEを起動し、メニューから「スケッチ」->「ライブラリを管理...」を選択します。 ライブラリマネージャが開いたら、検索バーに「RTno2」と入力し、表示された結果からRTno2ライブラリを選択してインストールしてください。
2.3. RTno2Proxyのインストール
a. RTno2Proxyのインストール (Windowsバイナリ)
Windowsであれば、RTno2Proxyの最新のリリースを GitHubリポジトリ (https://github.com/rtno2/RTno2ProxyRTC/releases/tag/v1.0.0) からダウンロードしてください。 ダウンロードしたZIPファイルを解凍し、任意の場所に配置してください。 RTno2Proxyは、コマンドプロンプトから実行できます。
b. RTno2Proxyのインストール (Linux)
Linuxでは、RTno2Proxyをソースコードからビルドする必要があります。 まず、GitHubリポジトリ (https://github.com/rtno2/RTno2ProxyRTC) からソースコードをクローンしてください。 ターミナルを開き、クローンしたディレクトリに移動してビルドしてください。 以下のようなコマンドを使用します。
$ git clone https://github.com/rtno2/RTno2ProxyRTC.git $ cd RTno2ProxyRTC $ git submodule update --init --recursive $ mkdir build $ cd build $ cmake .. $ makeビルドが完了したら、build/srcディレクトリにRTno2Proxyがあります。RTno2Proxyを実行できます。
c. RTno2Proxyのインストール (Windows Visual Studio)
Windows環境でVisual Studioを使用している場合、RTno2Proxyをソースコードからビルドできます。 まず、GitHubリポジトリ (https://github.com/rtno2/RTno2ProxyRTC) からソースコードをクローンしてください。 次に、CMakeを使用してVisual Studioのソリューションファイルを生成します。 ターミナルを開き、クローンしたディレクトリに移動して以下のコマンドを実行します。
$ git clone https://github.com/rtno2/RTno2ProxyRTC.git $ cd RTno2ProxyRTC $ git submodule update --init --recursive $ mkdir build $ cd build $ cmake -G "Visual Studio 16 2019" ..これにより、Visual Studio用のソリューションファイルが生成されます。 次に、Visual Studioを開き、クローンしたディレクトリを開いてビルドしてください。 ビルドが完了したら、build/Debugまたはbuild/ReleaseディレクトリにRTno2Proxyがあります。RTno2Proxyを実行できます。
3. テスト
テストではArduino R4 Minima, M5 Core2でテストしています。USBシリアル接続のArduinoを最初に試してみると良いと思います。 (Arduino Uno R3でもテストを行なっていますが、メモリが少ないため一部のテストが実行できません。) AVRマイコンボードのArduinoの場合、double型がfloat型として扱われることに注意してください。RTno2ProxyライブラリおよびRTno2ライブラリではマイコンのCPUを検出した後に 自動的にdoubleを4バイト長に変換しながら使っていますが、精度はfloatになります。
3.1 RTno2ライブラリを使ったArduinoソフトウェアのビルドとテスト
a. Arduino IDEでのビルドとテスト用スケッチのアップロード
Arduino IDEを開き、「ファイル」「スケッチの例」「RTno2」と選択し最後に「AutoTestProgram」を選択します。 ArduinoボードをPCに接続し、適切なボードとポートを選択してから、スケッチをアップロードします。
AVRマイコンボードのArduinoの場合、メモリが足りずに全てのテストを実行することができません。 ifdef文でコメントアウトされている部分を有効にして、必要に応じてテストを実行してください。
b. RTno2Proxyを使ったテスト
RTno2Proxyを使って、ArduinoボードにアップロードしたAutoTestProgramスケッチのテストを実行します。 RTno2Proxyでは、OpenRTM-aistを使わずにライブラリ単体でArduinoと通信してテストを行うことができます。
RTno2Proxyを起動し、Arduinoボードが接続されているシリアルポートを指定して実行します。 例えば、Windowsの場合は以下のようにコマンドプロンプトで実行します。
C:\path\to\rtno_test.exe COM3 57600Linuxの場合は以下のようにターミナルで実行します。
$ ./build/src/rtno_test /dev/ttyACM0 57600以下のような出力が表示され、テストが実行されます。
[RTno2Proxy] Started.
[2025-11-10 19:11:38.303] [main] [info] [TEST] 'Bool data test. Send true then recv it'
[2025-11-10 19:11:38.329] [main] [info] [PASSED] 'Bool data test. Send true then recv it' OK
[2025-11-10 19:11:38.332] [main] [info] [TEST] 'Bool negative data test. Send false then recv it'
[2025-11-10 19:11:38.358] [main] [info] [PASSED] 'Bool negative data test. Send false then recv it' OK
[2025-11-10 19:11:38.361] [main] [info] [TEST] 'Character data test. Send 'c' then recv it'
[2025-11-10 19:11:38.388] [main] [info] [PASSED] 'Character data test. Send 'c' then recv it' OK
[2025-11-10 19:11:38.391] [main] [info] [TEST] 'Octet data test. Send 0x32 then recv it'
[2025-11-10 19:11:38.418] [main] [info] [PASSED] 'Octet data test. Send 0x32 then recv it' OK
[2025-11-10 19:11:38.422] [main] [info] [TEST] 'Long positive data test. Send 3 then recv it'
[2025-11-10 19:11:38.450] [main] [info] [PASSED] 'Long positive data test. Send 3 then recv it' OK
[2025-11-10 19:11:38.452] [main] [info] [TEST] 'Long negative data test. Send -3 then recv it'
[2025-11-10 19:11:38.480] [main] [info] [PASSED] 'Long negative data test. Send -3 then recv it' OK
[2025-11-10 19:11:38.483] [main] [info] [TEST] 'Float positive data test. Send 3.0f then recv it'
[2025-11-10 19:11:38.512] [main] [info] [PASSED] 'Float positive data test. Send 3.0f then recv it' OK
[2025-11-10 19:11:38.515] [main] [info] [TEST] 'Double positive data test. Send 3.0 then recv it'
[2025-11-10 19:11:38.547] [main] [info] [PASSED] 'Double positive data test. Send 3.0 then recv it' OK
[2025-11-10 19:11:38.550] [main] [info] [TEST] 'BoolSeq data test. Send true then recv it'
[2025-11-10 19:11:38.581] [main] [info] [PASSED] 'BoolSeq data test. Send true then recv it' OK
[2025-11-10 19:11:38.584] [main] [info] [TEST] 'BoolSeq negative data test. Send false then recv it'
[2025-11-10 19:11:38.614] [main] [info] [PASSED] 'BoolSeq negative data test. Send false then recv it' OK
[2025-11-10 19:11:38.617] [main] [info] [TEST] 'CharacterSeq data test. Send 'abc' then recv it'
[2025-11-10 19:11:38.648] [main] [info] [PASSED] 'CharacterSeq data test. Send 'abc' then recv it' OK
[2025-11-10 19:11:38.651] [main] [info] [TEST] 'OctetSeq data test. Send 0x32,0x33,0x34 then recv it'
[2025-11-10 19:11:38.683] [main] [info] [PASSED] 'OctetSeq data test. Send 0x32,0x33,0x34 then recv it' OK
[2025-11-10 19:11:38.686] [main] [info] [TEST] 'LongSeq positive single element vector test. Send {3} then recv it'
[2025-11-10 19:11:38.717] [main] [info] [PASSED] 'LongSeq positive single element vector test. Send {3} then recv it' OK
[2025-11-10 19:11:38.720] [main] [info] [TEST] 'LongSeq positive vector test. Send {3, 2, 1} then recv it'
[2025-11-10 19:11:38.755] [main] [info] [PASSED] 'LongSeq positive vector test. Send {3, 2, 1} then recv it' OK
[2025-11-10 19:11:38.758] [main] [info] [TEST] 'FloatSeq positive single element vector test. Send {3.0f} then recv it'
[2025-11-10 19:11:38.791] [main] [info] [PASSED] 'FloatSeq positive single element vector test. Send {3.0f} then recv it' OK
[2025-11-10 19:11:38.794] [main] [info] [TEST] 'FloatSeq positive vector test. Send {3.0f, 2.0f, 1.0f} then recv it'
[2025-11-10 19:11:38.829] [main] [info] [PASSED] 'FloatSeq positive vector test. Send {3.0f, 2.0f, 1.0f} then recv it' OK
[2025-11-10 19:11:38.833] [main] [info] [TEST] 'DoubleSeq positive single element vector test. Send {3.0} then recv it'
[2025-11-10 19:11:38.869] [main] [info] [PASSED] 'DoubleSeq positive single element vector test. Send {3.0} then recv it' OK
[2025-11-10 19:11:38.872] [main] [info] [TEST] 'DoubleSeq positive vector test. Send {3.0, 2.0, 1.0} then recv it'
[2025-11-10 19:11:38.913] [main] [info] [PASSED] 'DoubleSeq positive vector test. Send {3.0, 2.0, 1.0} then recv it' OK
3.2 dockerをつかったビルドとテスト
バグが取れなくて・・・未対応です。4. RTno2のサンプル
a. サンプルスケッチの紹介
- AutoTestProgram: RTno2ライブラリの各データ型の送受信をテストするスケッチです。Arduino IDEの「ファイル」「スケッチの例」「RTno2」「AutoTestProgram」から開けます。
- TimerOneEC: RTno2ライブラリを使って、TimerOneライブラリを使ったTimer実行コンテキストの利用例です。Arduino IDEの「ファイル」「スケッチの例」「RTno2」「TimerOneEC」から開けます。
- FSPTimerEC: RTno2ライブラリを使って、標準ArduinoライブラリのFSPTimerを使った実行コンテキストの例です。Arduino IDEの「ファイル」「スケッチの例」「RTno2」「FSPTimerEC」から開けます。
- DigitalInOut: RTno2ライブラリを使ったデジタル入出力ピンの利用例です。Arduino IDEの「ファイル」「スケッチの例」「RTno2」「DigitalInOut」から開けます。