最終更新日:2024/10/01
GitHubから取得する場合
下記のGitHubで公開しています。2023/02/21より公開方法を変更しました。
リポジトリのアドレスが変更になっていますので、移行をお願いします。
(事情:これまで公開版と研究室内部版を別々のリポジトリとして管理してましたが、更新頻度が「公開版≪内部版」となってしまっていたので、
ARCS6の基本システムのリポジトリを公開リポジトリとして統一、機密情報を含む部分のみ別のプライベートリポジトリとしました)
導入の手順は以下の通り。詳細はARCS6のためのgithub手順書を参照のこと。
cd /expsrc/yoko ←既存の自分用ディレクトリ
mkdir ARCS6
cd ARCS6
git init
git config --global user.name 自分のユーザ名
git config --global user.email 自分のメールアドレス
git remote add origin https://github.com/Sidewarehouse/ARCS6.git
git pull origin main
git branch -m master main
非公開ロボットリポジトリへのアクセスについては横倉に直接聞いてください。
下記から直接ダウンロードする場合
従来通り、下記からもソースコード一式とサンプルコードをDLできますが、↑のGitHubの方が更新頻度が圧倒的に高い最新版なので、下記は補助的にお使いください。
コンパイルには C++17 (gcc7以上) 対応のコンパイラが必要です。
コンパイルに必要な環境と外部ライブラリ
ARCS6のコンパイルには gcc,g++,それから ncurses,libncurses,および libpng が必要です。RedHat系/AlmaLinuxの場合には,
dnf install make
dnf install gcc
dnf install gcc-c++
dnf install ncurses*
dnf install libncurses*
dnf install libpng*
として予めインストールしておいてください。Ubuntu系の場合は,
apt install make
apt install gcc
apt install build-essential
apt install ncurses*
apt install libncurses*
apt install libpng*
のように入力して事前にインストールしておいてください。
環境によっては上記の名前ではない場合があるかもしれませんが,とにかくncursesとpng関連がインストールできていればオーケーです。
ARCSの歴代の変遷を記述したチェンジログ
各バージョン間の更新内容を下記に載せておきます。
ARCS6-REV.23060610
- ARCS6の公開方法を変更
- REV.の命名規則変更
- BSDからMITライセンスに変更
- 近年のリアルタイム性悪化問題(mutexの混入)への暫定的対処
- MatrixクラスからArcsMatrixクラスへの移行準備
- mvprintwでの安全性改善
- 依存関係でエラーが出ていたのを修正
- README一部更新
- 伝達関数クラス・状態空間モデルクラスのバグFIX (1次のときに平衡化がオカCのを修正)
- 制御理論クラスを実装
- 状態空間モデルの平衡実現の実装(MATLABでいうところのbalreal)
- 連続リアプノフ方程式、可制御可観測グラミアンを計算する関数を追加
- 連続系状態空間モデルを離散化する関数を制御理論クラスに移動
- 離散化の際に自動的に平衡化するように変更
- 離散化クラスDiscretは将来的に廃止予定
- Matrixクラスを一部修正
- クロネッカー積とvec作用素を追加
- eigen関数のバグFIX (複素数のときの単位行列での初期化がオカCのを修正)
- 状態空間モデル機能追加 (1出力の際のスカラー返しを追加)
- 一般形のオブザーバクラス機能追加
- 2慣性共振系シミュレータにねじれ粘性Dsを追加
- Ds追加に対応するため、TwoInertiaParams構造体を追加
- P-D制御器クラス(微分先行型)を追加
- 移動微分器MovingDifferentiatorクラスを追加
- リングバッファクラスを行列にも対応
- Schur分解を追加
- 外乱オブザーバクラスを一新
ARCS6-REV.210731
- ARCS起動→停止→暫く放置するとLinuxがフリーズする問題を解消
(CFS無効にするとどうも不安定?そうなので,SFthreadクラスのkernelパラメータ設定を見直し)
- リミッタの縦ベクトル版を追加(Limiterクラス)
- 研究室で開発中のロボ「Zero Force Arm - ZFA01」のディレクトリとクラスを公開
- UNINET通信用IFボード対応(USV_PCIE7クラス)
- サンプル24「ユニサーボの実装例」の追加
- Makefile見直し,make cleanでEventlog.txtが消えるように修正
- 無駄なコンパイルをしないように修正,コンパイル時間短縮
- コンパイルオプションにfPIEをを追加,新しめのgccでPIEのリンクエラーが出ていた問題を解決
- ClassBaseクラス一部修正
- 可能な部分はconstからconstexprへ変更
- VScodeのパスの設定を見直し
- 無駄なファイルを削除
ARCS6-REV.210401
- Matrixクラスでauto引数に関する警告が,gcc新バージョンで大量に出てきたので対応
- VScodeのパスの設定を見直し
- サンプル23「ワコーテック6軸力覚センサの実装例」の追加
ARCS6-REV.210326
- TimeSeriesDatasetsクラスの追加
- サンプル22「再帰ニューラルネット_航空機需要予測」の追加(実装中)
- CMakeに対応(電機大CRL-Kobayashiさん,有難うございます)
ARCS6-REV.200918
- PCI-2826CVクラスの修正
- 大きい行列から小行列を抽出する関数を追加
- 上三角行列限定版の連立方程式高速ソルバ,左上小行列の逆行列&疑似逆行列の追加
- 最大固有値の固有ベクトル,行列のランクのコンパイル時定数演算の実装
- サンプル20「Constexprの再帰ループ」の追加
- サンプル21「行列演算の消費時間」の追加
ARCS6-REV.200618
- gitでバージョン管理・複数ロボット・複数制御系で使いやすくするためにディレクトリ構造を大幅変更
- 上記に伴いバージョンの命名規則を変更,Makefileも変更
- コーディング規約を変更
- 連続系状態空間モデルと連続形伝達関数クラスのバグFIX
- EtherCAT対応
- 行列のデータ型を自由に決められるようにMatrixクラスを拡張
- 行列の複素数対応
- コレスキー分解,複素数QR分解,SVD特異値分解,rank関数を追加
- エルミート転置を実装,LU分解と逆行列を複素数まで拡張
- サンプルコードを色々追加
ARCS6-REV.GNRL20041010
- わずか1日でアップデート
- オンライン設定変数の初期値を読み込む関数の致命的なバグをFIX
- Matrix.StoreArray() を const に変更
- 関数ベースコードを追加
- ステップ波形生成器を追加
- Cppcheckによる静的解析,explicit忘れとconst参照忘れをFIX
- doxygenコメントのミスを修正,doxygenプロジェクトを./srcに入れる
ARCS6-REV.GNRL20040909
- 全体的にかなりの大幅アップデート
- Visual Studio Code のワークスペースファイルをデフォルトで追加
- 「if constexpr」の使用と「constexprによる定義問題」の解決のためにC++17に移行
- 「make offline」でコンパイルするとオフライン計算モードで動作するように機能追加
(./OfflineCalculations.ccを参照のこと)
- 初期化順序などが問題になったので,多くのstatic変数,staticクラスを普通に戻した
- 上記に伴ってInterfaceクラスをInterfaceFunctionクラスに名称変更,アクセス方法もドット演算子に変更
- 任意変数表示,グラフ,オンライン変数変更などもドット演算子でアクセスするように変更
- 編集しやすいようにInterfaceFunctionクラスを最上位階層に置くようにした
- PCIボードなどのインターフェースの実装方法を変更
- DataStorageクラスを廃止,DataMemoryクラスを新たに作成し,スタック領域からヒープ領域に確保,
大容量の測定データ格納用メモリを確保しようとすると起動時にSIGSEGVで落ちる初歩的な定番バグをFIX
- ニューラルネットワーク用のクラスを色々実装開始,動作確認済
(今後もとりあえず趣味でニューラルネットを実装していく予定)
- 状態フィードバックなどの2慣性共振系の制御ためのクラスを色々追加
- 一般形のオブザーバクラスを追加
- 任意の連続形伝達関数を保持,応答を計算するクラスを追加
- 任意の連続系状態空間モデルを保持,応答を計算するクラスを追加
- atan2をさらに拡張した多回転可能なアークタンジェント
- CSVファイル操作クラスを追加
- メルセンヌ・ツイスタ乱数発生器を追加
- まだ残っていた生配列をstd::arrayに書き換え,at()でアクセスするように変更
- FrameGraphics(V2新型テンプレート版)をほとんど実装し直し,ダブルバッファリング実装,高速化,
フレームバッファがないときはダミーバッファを使うように変更
- 上記によって改造なしにWindows Subsystem for Linux上でも動作できるようになった
- フォントデータを別のクラスとして実装
- CuiPlot(新型きゅいプロットV2)をほとんど実装し直し,高速化と使い勝手を向上
- 上記によってグラフの表示方法を変更,過去の波形が残るようにして,波形表示の時間分解能も劇的に向上
- 6軸ロボット用の作業空間プロットも追加
- ARCScommon::SetCPUandPolicy()をスレッド優先度も変更できるように変更
- ARCSシステム用のスレッドのポリシーと優先度を見直し,個別に設定できるように変更
- pthread_cond_signal()によるスレッドの同期を幾つか追加,
スレッド間の同期の問題に起因するSegmentation FaultとデッドロックをFIX
- Mutexの変数同期の漏れをFIX
- SFthread内の時間ゼロのclock_nano_sleep()を入れるかどうかをテンプレートパラメータで変えられるように変更
Linuxの安定性を取るかリアルタイム性を取るかをユーザが決められるようにし,
カーネルパラメータも見直した
- 「SAVE and EXIT」を押したときにスクリーンショットをPNGファイルとして保存するようにした
- 外乱オブザーバをベクトル入出力に対応
- Matrix<1,M> v; のような縦ベクトルに対して,a = v[2]; とか v[3] = b; のような配列みたいなアクセスを可能にした
- const Matrix<N,M> A = {1,2,3,4,5,6}; のような書き方もできるようにした
- ニューラルネット実装のためにMatrixクラスにアダマール乗除と要素ごとの各種関数を実装
- 統計処理クラスをほとんど作り直し,Matrixに対応
- ARCSでベクトル制御ができるSA2ラズパイクラス
- リングバッファを改良
- 速度計算器クラスを実装,計測した本当の時間で微分することでジッタ発生時のスパイクを除去
- イベントログに実行したCPUコア番号,CPU時間も記録
- デッドロックが起きそうな場所など色々とクリティカルなポイントにイベントログを埋め込んだ
- やっとnew/deleteを一掃,unique_ptrで統一,ムーブセマンティクス!
- インクルードファイルと前方宣言の依存関係を見直し,循環参照を除去
- やっぱり危ないということでgccの最適化レベルをO3からO2に変更
- GDBデバッガ用の「make debug」時の最適化レベルをO0からOgに変更
- サンプルコードとMATLABスクリプトを幾つか追加
- コメントの間違いを修正
- 総行数23775行
ARCS6-REV.GNRL19073017
- バージョンの命名規則を変更
ARCS6-REV.<ロボット名>年月日時,<ロボット名> = GNRL = 一般公開用の意味
例えば某U社のなら <ロボット名> = UPLS)
- リアルタイムスレッド内での clock_nano_sleep() を完全にやめた
- リアルタイムに適したカーネルパラメータを自動で設定するようにした
- リアルタイムマルチスレッドの構成方法を変更してSFmultthreadクラスを廃止
- 制御関数内で「本当の時刻」と「本当の制御周期」と「前回の消費時間」を取得可能にした
(↑微分とかするときは本当の制御周期で計算した方が良いと思う)
- 極力関数ポインタをやめて std::function に変更
(↑そのおかげで,制御関数内からポインタ介さずメンバ関数/変数に直接アクセス可能になった)
- クロックオーバーライドフラグの実装
- SFthreadの同期処理を真面目にmutex化
- 生配列を std::array に変更
- new/deleteを一掃,ヒープをなるべく使わない or スマートポインタに変更
- PCIボード系をスマートポインタに変更
- 一部のクラスにムーブコンストラクタを実装
- Discret離散化クラスのタプル版だけでなくて引数で普通に渡す版も復活
- doxygenフォーマットのコメントを追記
- 任意のLinuxシェルコマンドを実行するクラス,CPU設定クラスを実装
- ARCS組込み用/一般組み込み用切り替えマクロの実装
- UDP送受信器クラスのバグFIX
- PNG画像描画クラスの実装
- グラフをPNGで出力するクラスも実装
- 「RESTART」ボタンを押した後の致命的なバグ(操作不能バグ)をFIX
- ./sample/ のサンプルコードを最新版に更新
- 計測周期の3σの計算を実装(したけどまだ機能は未使用)
- RSS422送受信ボード(PCI-46610x)クラスを実装
- ワコーテック6軸力覚センサ(WEF-6A)シリアル通信クラスを実装
- Cppcheckで静的解析&FIX
ARCS6.0-REV.GNRL190401
- コア部分のソースコードをほぼ一新!
- Matrixクラスのテンプレート化で高速化
- 制御動作中にオンラインでパラメータを変えられるようになりました!
ARCS5.1-REV.51SF181130
-
デバッグインジケータの追加
ハードウェア周りのデバッグ時に便利なリアルタイム用のデバッグプリントを実装。
./src/ConstParams.hhの下記を,
// デバッグインジケータの設定
static constexpr bool DEBUG_INDIC_VISIBLE = true; //!< デバッグインジケータ表示の有効/無効設定
のように設定するとARCS画面上にバイナリデータのリアルタイム表示が現れる。
そして,下記のようにDebugIndic関数を呼ぶと,
DebugIndic(0xFA39,1);
以下のような表示になる。(つーか何故今までなかったのか!!)

特徴はDebugPrint関数と異なりリアルタイム空間でも使えること。
デフォルトでは DEBUG_INDIC_VISIBLE = false に設定してある。
- stringで引数を渡すべきところをc_str()で渡しているところがあったのでFIX。
- SCHED_FIFOスレッド開始指令後に,開始完了を確認するまで待機するように変更。
- Cppcheckによる静的解析&FIX。
- FrameGraphicsのグラフ描画アルゴリズムを「ブレゼンハムのアルゴリズム」に変更。
ARCS5.1-REV.51SF170729
- assert関数のバグフィクス&仕様変更&拡張。
- 非リアルタイムモードとリアルタイムモードで動作を変更
- assert条件に引っ掛かっても,動作が続行される危なすぎるバグをfix
- 実時間マルチスレッドクラスに緊急停止関数を追加。
- main関数の緊急停止処理を一部変更。
- ARCS画面描画クラスのShowEmergencyWindow関数の引数を変更。
- 不感帯関数,ヒステリシス比較器,シグモイド関数,シグナム関数を追加。
- 同一次元0次外乱オブザーバ,トルクセンサベース速度オブザーバを実装。
- 総行数12293行。
ARCS5.1-REV.51SF170515
- ARCS用のassert関数を追加,緊急停止機能を実装! (つーか何故今までなかったのか!!)

設定した条件に引っ掛かるとこんな感じのウィンドウが表示されて緊急停止できるようになった。
- データ格納/ファイル出力クラス(DataStorage.hh/cc)に間引き機能を追加,一部引数見直し。
- PCI-3340のデジタル入出力ピンを使えるように機能追加。
- 三角波発振器を実装。
- 階段波発生器を実装。
- 2段ステップ発生器を実装。
- 前進オイラー,後退オイラー,台形を選べるように積分器クラス(Integrator.hh/cc)に機能追加。
- I-P-I-P制御器を実装。
- 通過した場所をイベントログに記録するPassedLog関数を追加。
- 幾つかあったEventLog関数呼び出しをPassedLog関数呼び出しに変更,メッセージを抑制。
- Linuxカーネルモジュールのコンパイル,モジュール自動起動/自動停止の機能を標準搭載。これで独自デバドラが作りやすく。
- 前記に伴ってMakefileを修正。
- ARCS-HFDLインターフェースボード用のデバイスドライバとクラスを実装。
- Cppcheckによる静的解析&FIX。
- ライセンス形態を GPLv3 から 二条項BSDライセンス に変更。(ソース中の文章はまだ修正しきれていないけど…)
- この時点でコードの総行数は11492行。
ARCS5.1-REV.51SF160824
- Cppcheckにより静的解析を行い,以下のリファクタリングを実施。安全性とパフォーマンスが向上。
- 幾つかの関数をstaticメンバ関数に変更
- 幾つかのコンストラクタをexplicitで修飾
- 幾つかのメンバ関数をconstメンバ関数に変更
- 幾つかの引数を参照渡しに変更
- 幾つかの変数のスコープを狭める
- 一部の書式指定子の間違いを修正
- 初期化漏れを修正
- if文の不必要な条件式を削除
- イベントログ機能を強化。イベントログ関数を呼んだ位置のファイル名と行番号を EventLog.txt に自動的に記録。
- イベントログメッセージを各所に追加。今後もどんどん追加していく予定。
- ARCS画面の青い部分の一部がマゼンタになるバグをFix。加えて白文字を明るく変更。
- 緊急非常停止用メッセージウィンドウの実装。緊急停止機能そのものはただ今実装中。
- すべてのソースコードのコメントを含む行数を表示する機能をMakefileに搭載。この時点で10681行。
ARCS5.1-REV.51SF160817
- SCHED_FIFOスレッドを見直し,リアルタイム性をさらに向上させた。詳細はこちら→SCHED_FIFOによるリアルタイム制御 ~その2~
- 余計なインクルードを削除&ヘッダからソースへ移動&クラスの前方宣言。これによりコンパイル時間が短縮した。
- Makefileの挙動を一部変更。
- 画面解像度1280×1024に正式対応。
- 1次外乱オブザーバ&I-PD制御器をARCSライブラリへ追加。
ARCS5.1-REV.51SF160516
- 制御停止時のコードを見直し。実時間スレッドがすべて終了する前に終了処理コードが実行され,タイミングによっては稀に,
オブジェクトのdelete後にも関わらず,そのオブジェクトが呼び出される可能性があり,「Segmentation fault」が発生する場合があった。
そのバグをFixした。
- 制御停止直後に電流指令が零にならない可能性があったので,それもFix。
ARCS5.1-REV.51SF160513
- 行列の加減乗演算,冪乗,LU分解,逆行列,擬似逆行列…等々の行列計算が可能に!→詳細
- 連続系状態方程式の離散化が可能に!→詳細
- メッセージや変数,行列を表示するデバッグプリント機能を搭載
- イベントログ機能を搭載,要所でイベントメッセージを出力するように改良
- C++11に対応させるため,Makefileを修正
- 部分的にNULLからnullptrに,constからconstexprに変更し始めた
- CuiPlotにグラフ描画の有効/無効設定を追加
- 2慣性共振系シミュレータクラスを追加
ARCS5.1-REV.51SF160419
- 終了時に稀に「Segmentation fault」が発生していたので,ARCS.cc内の終了処理(delete)の順番を修正
- delete直後にNULLが代入されてないところがあったので,代入するように修正(二重解放回避)
- グラフプロットの実装を見直し。任意変数をプロットするのがやりにくかったものをやりやすいように修正
- 方形波発振器クラスを追加
- FixedAverageクラスを追加 (時刻ゼロから現在時刻までの信号の平均を計算する)
- PCI-3340クラス,PCI-6205Cクラスの仕様を変更 (使用しない機能を削除&実装をすっきり)
Ver.4.1,Ver.4.2,Ver.5.0との差分
- 画面表示を一新
- ディスプレイ解像度の変更に対応 (1920x1080とか1024x600等々でも正常に表示)
- Makefileの見直しにより、コンパイル時間を短縮
- コンパイルオプション(CPUアーキテクチャ)に関して、Makefileを色々と見直し&機能追加
- 作業し易いようにディレクトリ構造を変更 (ConstParamsとControlFunctionsの紛らわしさ解消)
- アクチュエータの数に表示が自動追従するように修正
- スレッド数を2個に削減(8個も使うことはなさそうなので)
- グラフ表示にCuiPlotを使用
- D/A,A/Dコンバータのクラス,UDP通信のクラスが増えた
- Raspberry Pi 2 Model B に対応(動作確認済み)
- その他色々と細かい部分を修正
RCS Ver.1.0
- "Not Advanced"な初期のRobot Control System Ver.1.0の画面
ダサさが滲み出ている。。。
SWL - The Side Warehouse Laboratory, 横倉研究室 - 技術倉庫
Copyright(C), The Side Warehouse Laboratory, All rights reserved.