我々にとってわかりやすい情報とは何かを考え、研究し表現してみる。
違う案や複数案がある場合、新しい項目と案を書き加えること |
疑問点、問題点、解決した点を書き残すこと。日々更新すべし |
毎月初めにWikiを見やすいようにまとめること
メモには記入した日時を記入しフォルダ分けしましょう
今後の予定
11月 自律分散システムのアルゴリズム・プログラムの完成(研究の終了)
1~ 7 アルゴリズム協議・文章化・テキスト保存・プログラム製作
8~14 動作確認
15~27 調整
28 自律協調分散システムの完成
12月 論文・プレゼンの仮製作
1~ 5 プレゼン製作、概略
6~12 論文製作(目次の製作)
13~19 各自論文の製作状況の確認
20~26 一次論文提出
1月 論文・プレゼンの製作
1~ 8 論文とプレゼンの擦り合わせ
9 調整
10~16 二次論文提出
17~23 論文とプレゼンのまとめ
1月末 提出
2月
1~12 プレゼン練習
13~ 本番発表
1/11
目次
第一章 序章
1.1 はじめに
-動機・目的
1.2 研究テーマ
-音楽を自動で演奏するシステム
1.3 システム分析
-実際のオーケストラはどのように演奏しているのか?
-ロボットで再現するにはどのようにすべきか?
+基本的な仕様
・音の出力方法
・音程の制御
・リズム
+指揮
・演奏の先導
+各パート
・伴奏の方法(コード・ハーモニー)
-ロボットで行うことによって発生する問題
・安全性
・確実性
・信頼性
-その解決方法
・自律協調分散システム(わかりやすい簡単な説明)
第二章 自律協調分散システム
2.1 自律協調分散システムとは?
2.1.1 基本概念
2.1.2 システムの特徴
第三章 自律協調分散システムを用いた音楽システムの実現
+どんなロボットで製作するか
・レゴを使用
・その理由(利点と制限)
決められた制限内で製作することにより、ものの
原理も学ぶことが出来るから
3.1 レゴによる音楽合唱システムの制作
・全体の流れを説明
・リーダー選挙、役割決め、同期、音の読み込み、
エラー検出、音の変換、出力
・各部分に分けて細かく説明
・リーダー選挙:ーーーーーーーーーー
・役割決め :ーーーーーーーーーー
・同期 :ーーーーーーーーーー
・音の読み込み:ーーーーーーーーーー
・エラー検出 :ーーーーーーーーーー
・音の変換 :ーーーーーーーーーー
・出力 :ーーーーーーーーーー
第四章 結果・考察
12/20
論文を物語的に相手に疑問を持たせて解決するように進めていく。
必要ではなく理解の妨げになるような説明は付録にまわすこと。
12/7
プログラムの完成
(プログラムは自律協調分散のベージに記入)
プログラムの流れ (4小節バージョン)
1、乱数を使ったリーダー選挙
2、リーダーが他のRCXの役割を決める。
3、同期をし、音楽データの読み取り。
4、音楽再生の前にもう一度同期を行う。
5、リーダーが不在となれば、
他のRCXがリーダーを引き継ぐ。
6、音楽の再生。
今までのデータ、書類をまとめて論文の下準備を行う。
卒業論文仮目次
1、はじめに
2、自律協調分散とは?
3、アルゴリズム(部分的プログラムを使って説明)
4、Legoについての説明
5、Bricx CC の説明
6、今後の課題
付録 プログラム、参考文献
2007/11/29 「引き継ぎ未対応 4小節」アルゴリズム
①リーダーの選挙〜役割決定まで
・プログラム開始時に乱数(1〜1000)を発生させ、特定の数値と一致するまで繰り返す。
・一番早く一致したRCXがリーダーとなり、他のRCXの乱数発生をやめるように命令する
・リーダー以外のRCXは ”乱数*wait(10)/時間” 待機し、リーダーからの役割命令を受ける。
乱数待機を終えた終えた順にベース、アルト、ソプラノ、ベース、アルトとなる。
②データの読み込み
・リーダー、ベース、アルト・・・などのすべてのRCXが同時にデータを読み込む
・1つのRCXには3つの光センサが接続されており、データは2進数に対応させる
0=白 1=黒
000=1=ド
001=2=レ
010=3=ミ
011=4=ファ
100=5=ソ
101=6=ラ
110=7=シ
111=8=ド
・変数に入る最大値は32768なので1つの変数を4桁、つまり4音までとし、
4小節*4音で16個のデータが必要なので変数は4つ用意する。
③音の再生
・例としてデータ変数a1,a2,a3,a4としa1とa3には1234がa2,a4には5678が格納されているとする。
PG
for(i=1;i<=4;i++){ {
switch(1){
case(1); ドレミファ再生;
case(2); ソラシド再生;
case(3); ドレミファ再生;
case(4); ソラシド再生;
**ドレミファ再生
{
x=a1/1000;
switch(x){
case(1); ドを再生
case(2); レを再生
case(3); ミを再生
case(4); ファを再生
}
a1=a1%1000;
a1*=10;
} if(a1==0) break;
11/29の16時30分までに上記を終わらせる。11/28
リーダーが何らかの原因で不在の場合リーダーの引き継ぎをさせるようにした。
何台でも動作させられるようにした。
まずは4小節音を読み取り動作させてから8小節を可能にするようにしたいが、リーダーが先に動作をしてしまい、他のRCX達が後から勝手に動作してしまう。
11/27
リーダーが故障した時に他のRCXが引き継ぐアルゴリズム及びプログラムを作る。
ソプラノを使用できるようにする。
アルゴリズムの作成
プレゼンの作成
11/27
アルゴリズム
センサーの初期設定をする。
リーダーを決めるときに必要な個体性を持たせるために乱数発生させ、乱数が100になったRCXがリーダーになる。
リーダー:
そこでリーダーになった場合そのRCXはこの乱数発生をストップさせる命令を送る。そして、リーダー以外のRCXに乱数が若い順番になるようにベース、アルト、ソプラノの順に子に役割を送信する。子と同調を取る。
子:
リーダー以外のRCXは乱数が若い順に役割を決めるため、乱数x定数秒、待機し、リーダーからの役割命令を受信し、親に確認メッセージを送信、同期を待つ。
同期がとれたら光センサーでデータを読み取る。光センサーは白を0、黒を1という信号として、2進数3bitを1つのデータととらえて信号を読み取る。
データと音データの対応は以下の通りである。
1=000 :ド
2=001 :レ
3=010 :ミ
4=011 :ファ
5=100 :ソ
6=101 :ラ
7=110 :シ
8=111 :ド
音を読み取り、貯める方法は2進数3bitを10進数1bitの情報にする。
そして、左に1bitシフトし、次の音は1桁目に加算する。これを繰り返し、音の情報を貯める。例えばド、ミ、ソ、シという音を貯めるときは・・・・
ド:000から1に数値をかえて、左に1bitシフトして10。
ミ:010から3に数値をかえて、左に1bitシフトして13。
ソ:100から5に数値をかえて、左に1bitシフトして135。
シ:110から7に数値をかえて、左に1bitシフトして1357。
最終的に1357というデータが貯められる。
また、音を読み取る際に、その音からコードを決めるカウントを動かす。
音程とコードのカウントの対応は以下の通りである。
ド:C+2 F+2
レ:F+1 G+1
ミ:C+1
ファ:F+2
ソ:C+1 G+2
ラ:F+2
シ:G+2
ド:C+1 F+1
音を再生:リーダーメロディ再生方法
1小節を4音として再生する。
例:ドミソシの場合
aに1357が収納されている。
xにa/1000の値である1を入れる。そうするとxにデータが入り、音が鳴る。
aにa%1000=357を入れる。
aを10倍にする。3570
aが0ならば終了する。
コードの決定方法
コードのカウンタが一番大きいのをコードにし、カウンタの数値が同じ場合のコードの優先順位は、C、G、Fの順とする。
ベース音の再生
コードがCの場合はド
コードがFの場合はファ
コードがGの場合はソ
これらを1小節分流す。
アルト音の再生
コードがCの場合はミ
コードがFの場合はラ
コードがGの場合はド
これらを1小節分流す。
ソプラノ音の再生
コードがCの場合はソ
コードがFの場合はド
コードがGの場合はレ
これらを1小節分流す。
11/21
一度アルゴリズムの流れ全体を詳しく書いたものを作成する必要がある。
問題点
全体を通したプログラムがうまく動作しない。
プログラムを分割して行うと正常に動作する。
エラー部分としては、光センサーがデータを読み取った後、正しく 変数にデータを格納することができない。もしくはすべてのパート の演奏部分が正しいプログラムになっていないのかもしれない。いずれにしても見た感じでは間違っている部分がわからないため、非常にやっかいなことになっている。
問題点の発見のため、アルゴリズムから問題点のチェックリストを作ることが必要だと思われる。
リーダー選挙後のアルゴリズムはメロディを光センサから読み取り、子はそれからコードを判断する。
メロディを読み取るアルゴリズムは、光センサから3bitひとまとまりとした音符を数秒ごとに読み込む。音符の情報として低いドから1オクターブ高いドまでを000〜111というふうに取り扱う。
音符情報の取り込みは一音読み込んだらそのバッファから変数に貯める。次の数値のバッファを貯めたら、その変数を10倍してシフトさせて、バッファを変数に足すことにより次の変数を貯めていくというやり方である。
音を取り込んでいるときに音からコードを判断させている。
それは、コードを決定する時に重要な音に重みをつけてそれぞれのコードのカウンタで計っている。そして、一番カウントの高いカウンタをコードとして採用する。
そこで変数に音を貯めたら、音を再生するために一音づつ音を取り出す。このために変数を1000で割れば一音目は取り出せる。
次に二音目は1000で割った余りを出して、それを10倍し、1000で割れば二音目が取り出せる。その動作を繰り返せば、さらに三音目、四音目も取り出せる。
11/13
演奏する前にリーダーが不在の場合はグループの中で一番不必要なRCXがリーダーになる
発生させた乱数をもとにその回数分メッセージを送受信して、メッセージを受け取れなかったものが次のリーダーとなる。
リーダー選挙から読み取りまでのアルゴリズム
例えば、リーダーになる値が329の場合
RCX1 |
RCX2 |
RCX3 |
①乱数発生 (329) |
(640) |
(792) |
②(リーダーになり役割決めのメッセージを送る) |
for文を使い乱数wait()待機のfor(i=0;i<640;i++)wait(0); |
for文を使い乱数wait()待機のfor(i=0;i<792;i++)wait(0); |
③ベースメッセージの1を送信。他のRCX(今回はRCX2)から受信完了メッセージを送ったらアルトメッセージの2を送信*この作業はRCXがいくつあっても可 |
メッセージ受付開始、ベース、アルト、ソプラノの順に繰り返す今回はRCX3よりも数が少ないので1のベースになる。メッセージの受信を完了したらRCX1(リーダー)に受信完了メッセージを送信 |
メッセージ受付開始、ベース、アルト、ソプラノの順に繰り返す今回はRCX2よりも数が大きいので2のアルトになる。メッセージの受信を完了したらRCX1(リーダー)に受信完了メッセージを送信 |
リーダー |
ベース |
アルト |
10/30
アルゴリズムの記入・・・未記入!!
10/24
今日の目標:プレゼン、最終目標を決める。
テーマ候補
- 協調分散システム=これからの研究内容で、今までの研究と関連もつけやすい
- LEGO=曖昧
- 情報表現=今までの研究内容と関連性をつけづらく、研究内容としての範囲が大きい
最終目標:「Legoを用いた協調分散システムの開発」
リーダーありの音楽を再生、自動伴奏をつけるシステム
プレゼンの流れ
1.目標:自律協調分散システムの製作
2.自律協調分散システムとは何か?
3.自律協調分散システムの具体的な例、種類
4.自律協調分散システムの反対の意味を説明(その具体例)
5.Legoを用いて製作したペンプロッタとマークシートリーダーはどのような協調分散をしているか?
6.自律協調分散システムの作成方法(アルゴリズムおよびプログラム?)の説明
7.今後の課題
自律協調分散システムをリーダー無しで実現すること。
10/23
プレゼンテーションの問題点
全体:最終目標に話を導くような流れにする。
時系列ではなく、内容の関連性をもとに話をつなげていく。
自律協調分散:例として、人間社会の分業化(農耕時代から、江戸時代の変化の違いをわかりやすくする)、動物の社会、インターネットを例にわかりやすく表現していく。
反対の例も出すとわかりやすくなる。
専門用語を使うときには相手に伝わりやすい単語を用いて説明する
木構造:木構造とは何か?なぜ木構造で表現しなければならないのか?
利点は問題を階層化して把握できる
階層の違い(枝の数の違い)でデータ量の違いがわかる。
ペンプロッタ:なぜペンプロッタ?
マークシート:なぜマークシート?
なぜ自律協調分散システムなのか?
10/17
メロディからコードを生成するアルゴリズム
4分音符の場合、4つづつ音を読み取る。
そして、一音ごとにコードの構成音と照らし合わせて一番近いコードに決定する。
そして、ベース、アルト、ソプラノなどの声部にそれぞれ音を割り振る。
10/16
これまでの成果
1.情報表現:木構造についての研究
犬を木構造によりデータの再現率の違いを表現
2.Legoの基本動作を知るために
ペンプロッタ:オープンキャンパスのために作成
縦、横、斜めにペンを移動させて描くことができる。
アルゴリズム(プログラム):ペンの上下、左右の移動速度、距離などの調整
ハード:ギアの仕組み。
3.マークシートリーダー
光センサを使用し、データの書かれた用紙を送り、光センサで黒、白(0、1)のデータを読む。
白黒のデータはパソコン上でも確認ができ、光センサからの反射光の強さが表示される。
このデータから白か黒かを判断することが可能になる。
またペンプロッタとの通信が可能になる。これによってマークシートリーダーで読み取られたデータが、
ペンプロッタに送られ、そのデータからペンプロッタで何らかの情報を表現することが可能になった。
4,マークシートリーダーを応用し、協調分散としてのシステムを考える
その結果、協調分散システムを用いたオルゴールの製作に決定。
5.協調分散オルゴールのアルゴリズムを考える。(現在)
協調分散処理として、各RCXが自律して動くようなアルゴリズムを作る。
仕組みとして、各RCXは親(命令する)と子(命令される)の両方を担当することができる。
(すべてのRCXは同じアルゴリズム(プログラム)になっている。)
乱数を用いて、ランダムで一つのRCXが親になり、子に音楽の担当を命令する。
目標:協調分散を用いた研究
今後の製作物は光センサを用いたオルゴールの作成
10/10
本日決めたこと
目標:RCXで協調分散
RCX1、2、3は同じアルゴリズムを持つ
RCX間でリーダーの選挙を行いメロディとコードの役割を決める。
(どうやってリーダー選挙を行うか?)
コードはRCXのアルゴリズムより決定
1.各自役割が決まっていてプログラムにそって行う。
2.主旋律を弾くRCXを一台決めて、他のRCXがベースコードを担当
3.すべてのRCXはすべて同じアルゴリズムにする。情報が入力されたらリーダーの選挙をしてメロディコードを弾く役割を決める。
4.すべてのRCXは同じアルゴリズムが同一。リーダー選挙はせず、各自が役割を決めて動作する。
1、2は集中型アルゴリズム
3、4は分散型アルゴリズム
リーダーとは、ある状態である条件に対して優位な物をリーダーとする。
- リーダー選挙の提案の一つとして参考
1,乱数を用いる
1〜1000までの乱数を永久ループで読み込み、あらかじめ決めておいた数値と同じならばリーダーとなる。リーダーになったRCXは他のRCXに強制終了させる命令を送る。
2.通信を用いる
乱数*定数で送信と受信時間を決めて、送受信し続ける。
その後、信号を受信したら、送信側をリーダーにして他をコードを演奏させる役割にする。
10/3
これまでの成果
1.情報表現:木構造についての研究
犬を木構造によりデータの再現率の違いを表現
2.Legoの基本動作を知るために
ペンプロッタ:オープンキャンパスのために制作
縦、横、斜めにペンを移動させて描くことができる。
アルゴリズム、ハード、プログラム
マークシートリーダー
光センサを用いてデータを読む
ペンプロッタとの通信が可能に
目標:協調分散を用いた研究
今後の制作物は光センサを用いたオルゴールの作成
9/26
マークシートリーダをRCX一台に統合。今後の目標、スケジュール調整。
プロッッタと同期させて絵を読み取ってプロッタ側に書かせたい
9月21日(金)予定
光センサが予定よりも多くデータを取ってしまうのを改善
RCX間での通信成功
マークシートリーダーのプログラム完成。今後はRCX一台に統合予定。
1,0でのデータログ取得成功、音声で、黒白も人間が認知出来るように
9月18日(火)
いつもどおり朝から。
01ユニット改造?
プログラムの欠点の発見及び、改善。
マークシートの構造をもっと研究すること
アルゴリズムの完成
基本動作プログラムの完成
次回アルゴリズムの完成
プログラムの制作予定
9月7日(金)の進行途中経過
プログラム未完成
問題点:プラグラム上で光りセンサーを使用できない。
プログラムが正常に動かない。
01ユニットの完成(タッチセンサーによるセンサー出力を利用したbinary出力を得る装置)。0と1を出力できる!?
最大の問題点としてはプログラムがアルゴリズムに乗っ取り作成したが言語の問題上動かない場所やコンピュータが理解できない欠点がある。
8月29日(水)の進行途中経過
マークシートリーダーのセンサーテスト終了
モータの回転数制御
8月8日(水)
・プロッタのプログラムを全体的に改良。
しかしNQCでは変数のlong宣言が使用できないため、プログラムの大幅な改善(簡略)には至らず。次回までに何らかの改善方法を考察しなければならない。
10月半ばまでに論文の内容、発表について考えておきたいです
前月 |
2017年10月 |
翌月 |
日 |
月 |
火 |
水 |
木 |
金 |
土 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
|
|
|
|
June:29-研究予定(今日LEGOのプログラミングやろうとしていた人は、研究室に前の人の論文があるので、読んでプログラム組んでみること)
July:
August:協調分散システムを例をプロッタを改良して作る。
September:マークシートリーダの完成
Octorber:協調分散について勉強
November:卒論、協調分散のモデル完成
December:卒論
Janualy:卒論とプレゼン完成
February:卒研発表、13-18日
進行状況
制作物
- プロッター
- マークシートリーダー
- タッチセンサーによるバイナリ出力装置
マークシートの用紙フォーマット
光センサオルゴール
「材料」
RCX:*3
光センサ:*9
モータ:*1
アルゴリズム
1.RCX1のモータを動かして紙を送る(高速)
2.RCXの光センサ1,2,3に黒が入ったらモータを一時停止
3.モータを再始動(低速)
4.光センサ1-9をそれぞれ音階のドレミに対応させ、音を出す
5.光センサ1,2,3すべてに黒が入ったら、停止させる
マークシートリーダー
読み取り装置をスタート地点まで移動
黒の読み取り初期位置まで紙を移動
データ取得開始して、データの記録を取る
読み取りを行っている行が最後まできたら、次の行に移動する
紙が最後まできて、入力が一定時間ない場合、終了する
アルゴリズム
まだ正確に動くほどのアルゴリズムではないので、もっとマークシートのフォーマットを練ってから考えよう
センサユニット:a
紙送り:b
センサ:s
押しボタン初期位置:p1
押しボタン終了位置:p2
Start
①
aをp1が反応するまで移動/*初期値設定*/
sの反応があるまでbを動かす。/*スタート位置検索*/
②
bを次のs反応があるまで移動。/*値読み取りの開始ビット検索*/
③
sの反応があれば、bの停止、aが1ビットごとに値を読み取る
p2が反応すれば、読み取りを終了して、p1が反応するまで移動④
②③を開始ビットが無くなるまで行う
⑤
開始ビットが一定時間無い場合は終了
4分木
2D画像を4分木に分けていき、4分木構造を理解する。
3D画像の場合、元の模型から8分木のモデルをLEGOで作る。
現在の目標
LEGOの光センサによりモノクロの画像を解析。そして、その数値をデータベース化して画像生成できることを確かめる。また、それが成功すれば、LEGOで画像生成をするアセンブリラインを作ることも思案している。
協調分散
diggに登録された記事をフラッシュ形式で、スタック、円整列を使って表現しているページ
digg labs
共創:鳥の群像システムなど
自律、分散、協調
simulation of a flock
LEGOで画像解析する装置の構想(どういう手順で完成まで進めるかを正確に記入すること)
- 光センサによる白黒の識別を正確に行えるようにする。
- 識別した値をPCに送信できるようにする。(または変数にデータを溜め込む)
今後進めていきたい研究
july
プロッタの制作。その後、自走式の車にペンを持たせて、コントローラと協調をさせるプロッタを作る。
プログラミングでローマ字A~Zまでの字を書けるようにすること。
タッチセンサーを使って強制的にプログラムをストップさせるようにする。
文字を書く時の始点と終点を設定する。
光センサーからのデータをパソコン上で見れるようにする。
更新日2007年07月25日
Lego 3D scanner
magmixer
データ構造
- 線形
- 配列
- スタック
- キュー
- グラフ
- 木構造
- ハッシュテーブル
- ルックアップテーブル
- データフロー(データ構造)
- フローチャート(アルゴリズム)
- グラフ理論
備忘録
最終更新:2008年01月11日 15:03