繧ウ繝ャ縺ッ菴包シ�/What is this?
Linux縺ィRTAI繧剃スソ縺」縺ヲ繝ェ繧「繝ォ繧ソ繧、繝�遨コ髢謎ク翫〒繧「繧ッ繝√Η繧ィ繝シ繧ソ繧貞宛蠕。縺ァ縺阪k繧ス繝輔ヨ繧ヲ繧ァ繧「
CUI縺ェ縺ョ縺ォ蜈磯�イ繧定ャウ縺�繝ュ繝懊ャ繝亥宛蠕。繧キ繧ケ繝�繝�(ARCS 縺ゅ�シ縺上☆�シ�)
ARCS縺ォ繧医▲縺ヲ蜀�貊代↓螳滄ィ薙′騾イ繧√i繧後k繧医≧縺ォ縺ェ繧奇シ瑚ォ匁枚邱�蛻�縺碁俣霑代↓霑ォ繧玖イエ譁ケ縺ョ蠑キ縺�蜻ウ譁ケ縺ォ縺ェ繧九〒縺励g縺�
This software, which is called "Advanced Robot Control System" or "ARCS", controls actuators mounted on your robots by using Linux and RTAI realtime operating system.
逕サ髱「/Screenshot

繝�繧ヲ繝ウ繝ュ繝シ繝�/Download
繧ス繝シ繧ケ繧ウ繝シ繝我ク�蠑上�ッ莉・荳九°繧峨ム繧ヲ繝ウ繝ュ繝シ繝峨〒縺阪∪縺吶��
You can download the source code of ARCS.
ARCS4.1-REV.20110721-A.zip
g++/gcc 縺ァ蜍穂ス懃「コ隱肴ク医∩縺ァ縺吶��
RTAI縺ョ莉悶↓�シ後ヵ繝ャ繝シ繝�繝舌ャ繝輔ぃ�シ慶urses�シ稽ath遲峨��縺悟ソ�隕√〒縺吶��
(莠区ュ縺ォ繧医j蜷�遞ョ繧ェ繝悶じ繝シ繝舌�ョ繧ス繝シ繧ケ縺ッ髱槫�ャ髢九〒縺�)
We confirmed that this source code was normally compiled and linked using g++/gcc.
In order to use this program, you need frame buffer, curses, and math libraries.
(For some reasons, we are not able to publish the source code of the observers.)
荳サ縺ェ讖溯�ス/Functions
繝サ繝槭Ν繝√Μ繧「繝ォ繧ソ繧、繝�繧ケ繝ャ繝�繝峨�ョ逕滓�舌�サ蜻ィ譛溷ョ溯。後�サ遐エ譽�
繝サ貂ャ螳壹ョ繝シ繧ソ縺ョ蜃コ蜉�(CSV蠖「蠑丞所縺ウTAB蛹コ蛻�繧灰AT蠖「蠑丞ッセ蠢�)
繝サ繧「繧ッ繝√Η繧ィ繝シ繧ソ繝代Λ繝。繝シ繧ソ(菴咲スョ�シ碁崕豬�シ梧耳蜉帷ュ�)縺ョ繝ェ繧「繝ォ繧ソ繧、繝�陦ィ遉コ�シ�CUI縺ァ繧0K�シ�
繝サ莉サ諢丞、画焚縺ョ繝ェ繧「繝ォ繧ソ繧、繝�豕「蠖「謠冗判�シ�CUI縺ァ繧0K�シ�
繝サ莉サ諢丞、画焚蛟、縺ョ繝ェ繧「繝ォ繧ソ繧、繝�陦ィ遉コ�シ�CUI縺ァ繧0K�シ�
繝サ螳滄圀縺ョ蛻カ蠕。蜻ィ譛溘�ョ險域クャ縺ィ陦ィ遉コ�シ�CUI縺ァ繧0K�シ�
繝サ螳滄圀縺ョ險育ョ玲カ郁イサ譎る俣縺ョ險域クャ縺ィ陦ィ遉コ�シ�CUI縺ァ繧0K�シ�
繝サD/A繧ウ繝ウ繝舌�シ繧ソ�シ窟/D繧ウ繝ウ繝舌�シ繧ソ�シ後お繝ウ繧ウ繝シ繝�繧ォ繧ヲ繝ウ繧ソ縺ィ縺ョ繧、繝ウ繧ソ繝シ繝輔ぉ繝シ繧ケ繧ッ繝ゥ繧ケ
繝サ繝「繝シ繧キ繝ァ繝ウ繧ウ繝ウ繝医Ο繝シ繝ォ繧ッ繝ゥ繧ケ鄒、(遨榊�蝎ィ�シ梧闘莨シ蠕ョ蛻�蝎ィ�シ悟推遞ョ蛻カ蠕。蝎ィ�シ瑚」懷─蝎ィ�シ後ヵ繧」繝ォ繧ソ遲�)
繝サ讒倥��縺ェ繧ッ繝ゥ繧ケ(繝ェ繝ウ繧ー繝舌ャ繝輔ぃ�シ檎オア險亥�ヲ逅�遲�)
- Generation, periodical execution, and disposal of multi-realtime thread.
- Writing operation of measured data in the experiment.
- Display of status of actuators (position, current, force, and so on) in real time.
- Plot of waveform of optional variables in real time (you can use this function based on a CUI).
- Display of optional variables in real time.
- Display of actual measured control periods.
- Display of computational time.
- Interfaces class for DACs, ADCs, and encoder counters.
- Motion control class (Integrators, Differentiators, Controllers and Regulators, Compensators, Filters, and so on).
- Other class (Ring buffers, statistical operations).
蠢�隕∫腸蠅�/Hardware and Software Requirements
蠢�隕∫腸蠅�縺ッ莉・荳九�ョ騾壹j縺ァ縺吶��
The hardware and software requirements of ARCS are as follows:
Hardware�シ哺ulti-Core CPU, Display(1024x768, 16bits colors)
Software�シ哭inux 2.6, RTAI 3.7 or 3.8, Framebuffer, C/C++ standard library.
譌「遏・縺ョ繝舌げ/Bug
繝サ荳�驛ィ縺ョ繧キ繝ウ繧ー繝ォ繧ウ繧「縺ョCPU縺ォ縺翫>縺ヲ�シ後Μ繧「繝ォ繧ソ繧、繝�繧ケ繝ャ繝�繝峨′荳�縺、縺励°遶九■荳翫′繧峨↑縺�迴セ雎。縺悟�ア蜻翫&繧後※縺�縺セ縺�
- In the case of certain single core CPU, ARCS 4.1 cannot generate multiple realtime thread.
蟆�譚・莉伜刈縺輔l繧倶コ亥ョ壹�ョ讖溯�ス/Future work
繝サEthernet荳翫〒縺ョ莉サ諢丞、画焚蛟、縺ョ繝ェ繧「繝ォ繧ソ繧、繝�騾∝女菫。
繝サ遲蛾ォ倡キ壹げ繝ゥ繝包シ後き繝ゥ繝シ繝槭ャ繝暦シ�3谺。蜈�繝ッ繧、繝、繝輔Ξ繝シ繝�縺ョ謠冗判�シ�CUI縺ァ繧0K�シ�
繝サ髱呎ュ「逕サ�シ悟虚逕サ繝�繝シ繧ソ縺ョ陦ィ遉コ�シ�CUI縺ァ繧0K�シ�
繝サ逕サ蜒剰ェ崎ュ倥け繝ゥ繧ケ
- Realtime communication for transmitting optional variables by using Ethernet (we are testing now).
- Contour map, color map, 3D wire frames (on a CUI).
- Picture images and video images will be projected on a CUI screen (we are testing now).
- Implementation of image recognition class.
繝ェ繧「繝ォ繧ソ繧、繝�蛻カ蠕。/Realtime control
繝サRTAI繧堤畑縺�縺ヲ繝ヲ繝シ繧カ遨コ髢謎ク翫〒險育ョ励r繝上�シ繝峨Μ繧「繝ォ繧ソ繧、繝�縺ァ螳溯。後☆繧九��
繝サ險育ョ鈴�上d繧、繝ウ繧ソ繝シ繝輔ぉ繝シ繧ケ縺ォ繧医k縺鯉シ悟宛蠕。蜻ィ譛溘�ッ100ホシs縺ァ蜍穂ス懷庄閭ス縲�
- Using RTAI, your required computation is performed on user space.
- In our lab, the control period is set to 100 micro seconds. (the period time depends on performances).
菴ソ縺�譁ケ/How to Use
1. 蛻カ蠕。繝励Ο繧ー繝ゥ繝�縺ョ螳溯」�/How to implement your tasks
縲�繝サ螳溯」�縺励◆縺�繝励Ο繧ー繝ゥ繝�繧抵シ�"ControlFunctions.cc" 縺ォ譖ク縺阪%繧�縲�
縲�- In order to implement your tasks, you can write your C/C++ code to "ControlFunctions.cc".
2. 繧ウ繝ウ繝代う繝ォ�シ�繝ェ繝ウ繧ッ/How to compile and link

縲�繝サ縲靴ontrolFunctions.cc縲阪d縲訓arameters.hh縲阪r螟画峩縺励◆蝣エ蜷医�ッ�シ後�稽ake縲阪さ繝槭Φ繝峨〒繧ウ繝ウ繝代う繝ォ�シ�繝ェ繝ウ繧ッ
縲�繝サ縲畦ib/縲� 莉・荳九�ョ繝輔ぃ繧、繝ォ繧貞、画峩縺励◆蝣エ蜷医�ッ�シ後�稽ake all縲阪さ繝槭Φ繝峨r菴ソ逕ィ縺吶k縺薙→
縲�繝サ縲瑚ュヲ蜻�: array subscript is above array bounds縲阪′蜃コ繧九′�シ後%繧後�ッRTAI縺ョ譁ケ縺ョ繧ス繝シ繧ケ縺ェ縺ョ縺ァ蝠城。後↑縺�
縲�- If you changed "ControlFunctions.cc" and/or "Parameters.hh", you can use "make" command to compile and link.
縲�- You should type "make all" when you revise the files in "lib/".
縲�- You can ignore the warning text "warning: array subscript is above array bounds," because it is source code of RTAI.
3. 螳溯。�/How to execute

縲�繝サ縲�./ARCS縲阪→謇薙▽縺ィ�シ御サ・荳九�ョ繧医≧縺ェ逕サ髱「縺檎樟繧後k
縲�- Type "./ARCS", then ARCS screen shown as the figure below appears.

4. 螳滄ィ馴幕蟋�/How to start
縲�繝サ縲郡TART縲阪〒繧ィ繝ウ繧ソ繝シ繧ュ繝シ繧呈款縺励※螳滄ィ馴幕蟋具シ√��縺ゅ↑縺溘�ョ諤昴>騾壹j縺ォ蜍輔¥繧医≧�シ悟▼髣倥r逾医j縺セ縺呻シ�
縲�- To start the experiment, you select "START" on the screen, and press enter. Good luck and God's speed !

縲�繝サ繧ゅ@菴輔b縺帙★縺ォ�シ檎オゆコ�縺励◆縺�蝣エ蜷医�ッ縲窪XIT縲阪r驕ク繧薙〒繧ィ繝ウ繧ソ繝シ繧呈款縺�
縲�- If you want to exit, you select "EXIT", and press enter.
5. 螳滄ィ鍋オゆコ�/How to stop

縲�繝サ繝「繝シ繧ソ縺ョ菴懷虚繧貞●豁「縺吶k蝣エ蜷医�ッ�シ後お繝ウ繧ソ繝シ繧呈款縺�
縲�- To stop your robots, please press enter key.
6. 螳滄ィ薙ョ繝シ繧ソ縺ョ菫晏ュ倥→邨ゆコ�/How to save and exit

縲�繝サ貂ャ螳壹ョ繝シ繧ソ繧剃ソ晏ュ倥@縺溘>蝣エ蜷医�ッ�シ後�郡AVE and EXIT縲阪r驕ク縺カ
縲�- Please select "SAVE and EXIT" and press enter key if you would like to store measured data to disk.
縲�繝サCSV繝輔ぃ繧、繝ォ縺汽AT繝輔ぃ繧、繝ォ縺檎函謌舌&繧後k縺ッ縺壹〒縺�
縲�- The CSV/DAT file, which is measurement data in the experiment, is generated.

縲�繝サ蛻・縺ォ貂ャ螳壹ョ繝シ繧ソ繧剃ソ晏ュ倥@縺溘¥縺ェ縺�縺ィ縺阪�ッ�シ後�轡ISCARD and EXIT縲阪r驕ク縺カ
縲�- If you want to discard the data stored to the temporal memory, please select "DISCARD and EXIT" as shown in the above figure, and then press enter.
讒矩��/Structure
繝サ蝓コ譛ャ逧�縺ェ繝輔ぃ繧、繝ォ讒矩��縺ッ莉・荳九�ョ蝗ウ縺ョ騾壹j
- The fundamental structure of ARCS is shown in the figure below.

繧ッ繝ゥ繧ケ縺翫h縺ウ髢「謨ー荳�隕ァ/List of Class and Functions
繝サ繧ッ繝ゥ繧ケ縺翫h縺ウ髢「謨ー荳�隕ァ縺ッ莉・荳九r蜿ら�ァ
- You can see the list of the class and functions of ARCS.
繧ッ繝ゥ繧ケ縺翫h縺ウ髢「謨ー荳�隕ァ/List of Class and Functions
繝輔ぃ繧、繝ォ/Files
縲�ARCS4.1-REV.20110721-A/
ARCS 螳溯。悟庄閭ス繝輔ぃ繧、繝ォ/Executable File. ARCS.cc 譛ャ菴�(main髢「謨ー繧貞性繧�)/The main code including main function. ARCSscreen.cc 逕サ髱「陦ィ遉コ繧ス繝シ繧ケ繧ウ繝シ繝�/The source code for projecting ARCS screen. ARCSscreen.hh 逕サ髱「陦ィ遉コ繝倥ャ繝�繝輔ぃ繧、繝ォ/The header file for above. ControlFunctions.cc 蛻カ蠕。繧ス繝シ繧ケ繧ウ繝シ繝�(蜻ィ譛溷ョ溯。碁未謨ー繧貞性繧�)/The control source code including periodic functions. 繧「繧ッ繝√Η繧ィ繝シ繧ソ縺ョ蛻カ蠕。繝励Ο繧ー繝ゥ繝�縺ッ縺薙%縺ォ譖ク縺� ControlFunctions.hh 蛻カ蠕。繝倥ャ繝�繝輔ぃ繧、繝ォ/The header file for the above code. Makefile 繝。繧、繧ッ繝輔ぃ繧、繝ォ/Makefile Parameters.hh 螳壽焚繝サ螟画焚譬シ邏咲畑繝倥ャ繝�/The header file for storing constant or variable value. 蛻カ蠕。蜻ィ譛滂シ梧鋤邂励ご繧、繝ウ�シ靴SV/DAT繝輔ぃ繧、繝ォ蜷搾シ檎ュ峨��縺ョ險ュ螳壹�ッ縺薙%縺ォ譖ク縺� ReadMe.txt 遘√r隱ュ繧薙〒/Read Me lib 濶イ縲�縺ェ繧ッ繝ゥ繧ケ縺瑚ゥー縺セ縺」縺溘ョ繧」繝ャ繧ッ繝医Μ/The source and header files exist in this directory. makefile.depend 萓晏ュ倬未菫りィ倩ソー逕ィ/For dependencies.縲�ARCS4.1-REV.20110721-A/lib/
AccObsrv.cc 蜉�騾溷コヲ繧ェ繝悶じ繝シ繝�(髱槫�ャ髢�)/Acceleration Observer(closed function). AccObsrv.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. ActuatorSim.cc 繧「繧ッ繝√Η繧ィ繝シ繧ソ繧キ繝溘Η繝ャ繝シ繧ソ/Actuator Simulator. ActuatorSim.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. DataStorage.cc 貂ャ螳壹ョ繝シ繧ソ菫晏ュ倥け繝ゥ繧ケ/Measurement Data Storage Class. DataStorage.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. Differentiator.cc 逍台シシ蠕ョ蛻�蝎ィ/Pseudo Differentiator. Differentiator.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. Differentiator2.cc �シ呈ャ。逍台シシ蠕ョ蛻�蝎ィ/2nd-order Pseudo Differentiator. Differentiator2.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. DistObsrv.cc 1谺。蠖「螟紋ケア繧ェ繝悶じ繝シ繝�(髱槫�ャ髢�)/1st-order Disturbance Observer(closed function) DistObsrv.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. DistObsrv2.cc 2谺。蠖「螟紋ケア繧ェ繝悶じ繝シ繝�(髱槫�ャ髢�)/2nd-order Disturbance Observer(closed function) DistObsrv2.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. FrameGraphics.cc 繝輔Ξ繝シ繝�繝舌ャ繝輔ぃ謠冗判繧ッ繝ゥ繧ケ/Framebuffer Display Class. FrameGraphics.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. GraphPlot2D.cc 繧ー繝ゥ繝墓緒逕サ繧ッ繝ゥ繧ケ/2D Plot Class. GraphPlot2D.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. HighPassFilter.cc 1谺。鬮伜沺騾夐℃豼セ豕「蝎ィ/1st-order HPF. HighPassFilter.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. HighPassFilter2.cc 2谺。鬮伜沺騾夐℃豼セ豕「蝎ィ/2nd-order HPF. HighPassFilter2.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. Integrator.cc 1谺。遨榊�蝎ィ/1st-order Integrator. Integrator.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. Integrator2.cc 2谺。遨榊�蝎ィ/2nd-order Integrator. Integrator2.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. kbhit.cc 繧ュ繝シ繝懊�シ繝画款荳区、懷�コ/Key Detector kbhit.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. Limiter.cc 繝ェ繝溘ャ繧ソ/Limitter Limiter.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. LowPassFilter.cc 1谺。菴主沺騾夐℃豼セ豕「蝎ィ/1st-order LPF. LowPassFilter.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. LowPassFilter2.cc 2谺。菴主沺騾夐℃豼セ豕「蝎ィ/2nd-order LPF. LowPassFilter2.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. Makefile 繝。繧、繧ッ繝輔ぃ繧、繝ォ/Makefile makefile.depend 萓晏ュ倬未菫ゅヵ繧。繧、繝ォ/The dependencies description for make. NotchFilter.cc 繝弱ャ繝√ヵ繧」繝ォ繧ソ/Notchfilter(BEF) NotchFilter.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. PCI-3133.cc A/D繧ウ繝ウ繝舌�シ繧ソ繧、繝ウ繧ソ繝シ繝輔ぉ繝シ繧ケ繧ッ繝ゥ繧ケ/Interface Class for ADCs. PCI-3133.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. PCI-3340.cc D/A繧ウ繝ウ繝舌�シ繧ソ繧、繝ウ繧ソ繝シ繝輔ぉ繝シ繧ケ繧ッ繝ゥ繧ケ/Interface Class for DACs. PCI-3340.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. PCI-6205.cc 繧ィ繝ウ繧ウ繝シ繝�繧ォ繧ヲ繝ウ繧ソ繧、繝ウ繧ソ繝シ繝輔ぉ繝シ繧ケ繧ッ繝ゥ繧ケ/Interface Class for Encoder Counters. PCI-6205.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. PDcontroller.cc PD蛻カ蠕。蝎ィ/PD controller. PDcontroller.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. PhaseLeadLag.cc 菴咲嶌陬懷─蝎ィ/Phase compensator. PhaseLeadLag.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. PIcontroller.cc PI蛻カ蠕。蝎ィ/PI controller. PIcontroller.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. PIDcontroller.cc PID蛻カ蠕。蝎ィ/PID controller. PIDcontroller.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. Quarry.cc Quarry陦悟��/Quarry Matrix. Quarry.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. RingBuffer.cc 繝ェ繝ウ繧ー繝舌ャ繝輔ぃ/Ring buffer. RingBuffer.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. RTAItask.cc RTAI繧ソ繧ケ繧ッ逕滓�舌け繝ゥ繧ケ/RTAI Task Generation Class. RTAItask.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. RTAIthread.cc RTAI繧ケ繝ャ繝�繝臥函謌舌け繝ゥ繧ケ/RTAI Thread Generation Class. RTAIthread.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. Statistics.cc 邨ア險亥�ヲ逅�/Statistics Functions. Statistics.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code. TimeDelay.cc 驕�蟒カ逕滓�舌け繝ゥ繧ケ/Time Delay Generation Class. TimeDelay.hh 荳願ィ倥�ョ繝倥ャ繝�/The header of the above source code.
隧ヲ鬨鍋腸蠅�/Experimental Setup
隧ヲ鬨鍋腸蠅�縺ッ莉・荳九�ョ騾壹j縺ァ縺吶��
The experimental setup in the test of ARCS is as follows:
Hardware�シ唔ntel Core i7 870 @ 2.93 GHz, Gigabyte P55-UD3R, Intel SSD X25-M
Software�シ哥edora 12 64bit, kernel-2.6.32.2, rtai-3.8
荳願ィ倥〒蜍穂ス懊r遒コ隱阪@縺ヲ縺�縺セ縺吶��
We confirmed that ARCS is capable of operating normally in this situation.
繝ゥ繧、繧サ繝ウ繧ケ/Licenses
Copyright (C) 2011 Yuki YOKOKURA
This program is free software;
you can redistribute it and/or modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 3 of the License, or any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details <http://www.gnu.org/licenses/>.
Besides, you can negotiate about other options of licenses instead of GPL.
If you would like to get other licenses, please contact us<yuki@katsura.sd.keio.ac.jp>.
遐皮ゥカ螳、縺ョ讓ェ縺ョ蛟牙コォ - Side Warehouse of Laboratory
Copyright(C), Side Warehouse, All rights reserved.