SatooRu's Profile

全ての記事梶研の進捗日常の記録制作物一覧

全ての記事

梶研 [技育CAMP マンスリーハッカソン vol.7]

梶研 [技育CAMP マンスリーハッカソン vol.7]

3年セミナー:??% [x]技育キャンプvol.7(技育展) [x]案出し [x]役割分担 [x]アプリイメージの作成 [x]サイトの作成 [x]スライドの作成 [x]技育キャンプvol.7発表(8/5) []追加開発 []技育展中部ブロック発表(8/12) []追加開発 []技育CAMPアドバンス発表(9/2) []HackUNagoya [x]案出し [x]役割分担 [x]キックオフ []アプリイメージの作成 []サイトの作成 []スライドの作成 []発表(8/27) 9月~端末状態推定 9/2技育キャンプアドバンス(梶研) 9/2技育キャンプアドバンス(シス研) 9/9,10技育CAMPvol.9(シス研) 10/7,8工科展 wisdomTree知ってる単語から知らない単語を視覚的に見つけられるサービスです. 完全一致したらそのノードが表示される 完全一致しなかった場合、候補が表示される フロントの仮データを扱っていたものを、APIから取得するように変更した. フレーム外を非表示にした 処理を分散して行い、Gitで管理するためにsqliteを使用した. デプロイ時はMySQLを使用するため、sqliteからMySQLへの移行を行った. データの数がノードが1万件,エッジが50万件あるため、データの移行には時間がかかる. ノードとエッジを減らしてデプロイするように工夫した. ノードはよく使われる(記事の数)が多い方から1000件, エッジはその組み合わせの記事の数が多い方から1万件 (これでも5分かかる) ウイングアーク1st株式会社賞! 2連続賞を獲得することができたから、まぁ満足!! 技育展中部ブロックにも出場するので、そこでの発表に向けて改善を行う. ※${TEAM_NAME}の読み方は"あんでふぁいんど"です. ユーザー認証(編集時) 編集機能の追加 検索をより楽に ダイアログの時間表示を修正 sqliteからMySqlへの移す APIの修正に合わせる 牧野先輩と計画を進めた. m先輩の圧により、工科展の前に技育CAMPvol9に出すことになった. tada 牧野先輩

2023年8月8日

[企業賞]wisdom Tree

[企業賞]wisdom Tree

梶研究室かつシステム工学研究会の同級生と先輩の4人で、技育CAMPマンスリーハッカソンvol.7に参加しました。 今回はオンライン開催で、私たちは"wisdomTree"という知っている単語から知らない単語へ知識を広げるアプリを制作しました。 ウィングアーク1st株式会社賞をいただきました!

2023年8月6日

梶研 [技育CAMP(技育展) & HackU]

梶研 [技育CAMP(技育展) & HackU]

3年セミナー:??% []端末状態推定 []技育キャンプvol.7(技育展) [x]案出し [x]役割分担 [x]アプリイメージの作成 [x]サイトの作成 []スライドの作成 []技育キャンプvol.7発表(8/5) []技育展中部ブロック発表(8/12) []HackUNagoya []案出し [x]役割分担 []アプリイメージの作成 []サイトの作成 []スライドの作成 []発表(8/27) 9/2技育キャンプアドバンス 10/7,8工科展 木構造はごちゃごちゃして面白くない ネットワーク構造に変更 ついでにUIも変更 ~~無駄に~~HTMLとCSSだけで描いた 技術系TikTok→LT会簡単にする蔵(仮) LT会をオンラインでも開催できるようにするアプリ アーカイブも残せる 1.スライド(pptx,pdf)をあらかじめアップロードしてもらう 1.発表はサイト上で行ってもらう(Googleスライドのイメージ) 発表中の場合、リアルタイムでスライドが遷移し、音が聞こえる アーカイブの場合、発表中と同様に見れる LT会特有の「発表資料、内容が一度きりになる」といった課題を解決できる ハッカソン等でも簡単にアーカイブを残し、後から見てもらうことができる 当日の発表で実演できる webRTCを使う P2Pで通信できるwebAPI スライドの遷移タイミングと音声のタイミングを合わせる pptxに埋め込まれた動画がライブラリでは再生されない pptxを解凍し動画を取り出した上で、xmlを解析し再生タイミングを取得すれば可能 発表者が動画を停止した場合、そのタイミングが分からない フォントが変わってしまい、レイアウトが崩れる もう暫くはいい...

2023年8月1日

梶研 [端末状態推定]

梶研 [端末状態推定]

3年セミナー:??% []端末状態推定 []技育キャンプvol.7(技育展) [x]案出し [x]役割分担 [x]アプリイメージの作成 [x]サイトの作成 []スライドの作成 []技育キャンプvol.7発表(8/5) []技育展中部ブロック発表(8/12) []HackUNagoya [x]案出し [x]役割分担 []アプリイメージの作成 []サイトの作成 []スライドの作成 []発表(8/27) 9/2技育キャンプアドバンス 10/7,8工科展 加速度と角速度,カルマンフィルターを使って端末の状態を推定する 歩く止まる曲がる歩くを繰り返す 加速度に変化がない時は、重力加速度の方向を使って端末状態を出す 変化がある時は、ジャイロセンサーの値を使って端末状態を変化させる normが9.5(m/s^2)以上10.1(m/s^2)以下の時は、動いていないと判断する 灰色が動いていない判定 歩いている途中でも9.8(m/s^2)前後になるが、重力加速度しか掛かっていないから、加速度センサーから推定しても良い? (カルマンフィルターの使い方がわからない) 知らない人からの無機質な指摘は怖い... が、とても為になる テスト週間は読書が捗ります. そろそろ新しい言語に触れ合いたい!!(RustorKotlin?) (藤崎彩織さんはSEKAINOOWARIのメンバーです.とても良い!!)

2023年7月25日

梶研 [磁気センサで方位角を測る & ハッカソンに向けて]

梶研 [磁気センサで方位角を測る & ハッカソンに向けて]

3年セミナー:??% [x]方位角を測る [x]xとyから求める []3次元的に求める []技育キャンプvol.7(技育展) [x]案出し [x]役割分担 [x]アプリイメージの作成 []サイトの作成 []スライドの作成 []技育キャンプvol.7発表(8/5) []技育展中部ブロック発表(8/12) []HackUNagoya [x]案出し [x]役割分担 []アプリイメージの作成 []サイトの作成 []スライドの作成 []発表(8/26) 8/5技育キャンプハッカソン 8/12技育展 8/26OpenHackU 9/2技育キャンプアドバンス 10/7,8工科展 矢印は計測時にiOS標準のコンパスで北となった向き 1.z軸上向き,y軸が北 0度 1.y軸上向き,z軸が北 0度 1.y軸上向き,x軸が北 90度 1.z軸上向き,x軸が北 90度 前回同様、加速度から垂直下向きを出して回転させた (0~5sでは0度のはず) A05s B612s C1419s D2125s とすると、 AB間+175度 BC間+110度(250度) CD間+100度 となっている はじめの向きが北(0度)ではない. 標準のコンパスと差が出ているため、磁場強度の値を元に北(仮)を決める必要がありそう 近くの金属からの影響もあるかも 端末の向きは変えずに机に置く、離すを繰り返した時のデータ (水色部分には単語のツリーを表示する) 蛍の光を流して帰宅促進 メニューバー常駐型アプリ 簡単に蛍の光を流すことができます (指定時間に流せるようにしたい)

2023年7月18日

hotaru.app

hotaru.app

メニューバーから蛍の光を流せるアプリです。 帰りたい時、いつでも帰らなければいけない雰囲気を出すことができます。 SwiftUI

2023年7月17日

梶研 [磁気センサで方位角を測る]

梶研 [磁気センサで方位角を測る]

3年セミナー:undefined% [x]方位角を測る [x]xとyから求める []3次元的に求める []技育キャンプvol.7(技育展) [x]案出し [x]役割分担 []アプリイメージの作成 []サイトの作成 []スライドの作成 []発表 8/5技育キャンプハッカソン 8/12技育展 8/26OpenHackU 9/2技育キャンプアドバンス 10/7,8工科展 磁気センサの値からarccos(x/y)を用いて出す 画面(z軸正)を上向ける y軸正が北を向いた状態から左回転で360度回す x/yからarccosを用いて方位角を出す python df_mag["angle"]=df_mag.apply( lambdarownp.degrees(math.atan2(row["x"],row["y"])), axis=1 ) 180度~180度のためグラフが急激に変化しているが理想通り x/yで計算しているためスマホを立てると狂う =>重力加速度を元に補正する 1.y軸正が北 2.z軸正が北 3.x軸正が北 1.重力加速度を元に傾きを出す 2.端末の傾きを磁気センサに適用する 3.世界座標を基準とした磁気センサから方位角を出す 理想は~5sは0度、5s~は90度となるはず =>開始時から120度となってしまい、磁気センサの値がおかしい 他の端末でもおかしいため、屋外で計り直す必要がある 記事に視覚的な繋がりある蔵(仮) プログラミングを学んでいる人 自分の知らない知識は調べられない 木構造で知っている単語からリンクして見つける 知っている言葉から辿ることで知らない言葉を知ることができる Next.js(TypeScript) Nest.js(TypeScript) 記事の表示 ツリー構造の表示 閲覧ノードの移動 ノード・記事の作成 親子ノードの設定 ノードの検索 ノード・記事の削除 ログイン 記事の編集 親・子ノードの移動 画像のアップロード めっちゃ後ろだったけど、会場全体が見れて楽しかった 続百名城の1つ.初めての台場をみれてよかった 初めて見るマゼランペンギン.かわいい

2023年7月11日

Mrs.GreenApple ライブ[NOAHnoHAKOBUNE]

Mrs.GreenApple ライブ[NOAHnoHAKOBUNE]

Mrs.GreenAppleのライブ [NOAHnoHAKOBUNE] 夜行バス 初めてのライブでとても楽しかった 遠くの座席だったが会場全体の雰囲気が見れて良かった さいたまスーパーアリーナ 品川台場 墨田水族館

2023年7月9日

梶研 [端末座標系を世界座標系に]

梶研 [端末座標系を世界座標系に]

3年セミナー:??% [x]端末座標系を世界座標系に [x]データをとる [x]重力に対する各軸の傾きを出す [x]2次元ベクトルを回転させる [x]3次元ベクトルを回転させる [x]端末座標系を世界座標系に変換する 8/5技育キャンプハッカソン 8/12技育展 8/26OpenHackU 9/2技育キャンプアドバンス 10/7,8工科展 スマホの画面(z軸正)が垂直上向の状態を世界座標の基準とする python roll=math.acos(x/gravity) pitch=math.acos(y/gravity) yaw=math.acos(z/gravity) x軸0.0(m/s^2) y軸0.0(m/s^2) z軸9.8(m/s^2) text x軸90.0度(0度) y軸90.0度(0度) z軸0.0度(0度) ()内は理想 x軸9.8(m/s^2) y軸0.0(m/s^2) z軸0.0(m/s^2) text x軸0.0度(0度) y軸90.0度(0度) z軸90.0度(0度) x軸0.0(m/s^2) y軸9.8(m/s^2) z軸0.0(m/s^2) text x軸90.0度(0度) y軸0.0度(0度) z軸90.0度(0度) この計算方法では重力と各軸の角度を出している text x軸(roll)90.0度 y軸(pitch)90.0度 z軸(yaw)0.0度 この状態を基準とすると text x軸(roll)90.0度 y軸(pitch)0.0度 z軸(yaw)90.0度 text x軸(roll)90.0度 y軸(pitch)0.0度 z軸(yaw)90.0度 動かしているときは誤差が生まれているが、 静止状態では理想的な値になっている 加速度では下方向しかとれないため、 垂直方向(今回はz軸)を軸とした回転量はわからないのでは? スマホを机に置いた状態で、周りをコンコン叩いた様子 右→下→左→上 なにか遊べそう (オンラインとんとん相撲的な)

2023年7月4日

梶研 [端末座標系を世界座標系に]

梶研 [端末座標系を世界座標系に]

3年セミナー:??% []端末座標系を世界座標系に [x]データをとる [x]重力に対する各軸の傾きを出す [x]2次元ベクトルを回転させる [x]3次元ベクトルを回転させる []端末座標系を世界座標系に変換する 8/5技育キャンプハッカソン 8/12技育展 8/26OpenHackU 9/2技育キャンプアドバンス 10/7,8工科展 元の加速度を端末の傾きだけ回転させる 理想はyは常に9.8,x,zは常に0になるはず =>roll,pitch,yawの回転のさせ方の問題? y(橙)が理想に近づいた 上下が合えばいいからroll,pitch,yaw全て使う必要はないかも? 計算したroll,pitch,yawが入れ替わってしまっている可能性がある 端末の状態はz軸正が上向き =>pitch以外が回転している 傾きが0degである緑はpitchかyaw (yawとして扱っていた) 端末の状態はy軸正が上向き =>傾きが0degである橙がrollかpitch (pitchとして扱っていた) 端末の状態はx軸正が上向き =>傾きが0degである青がrollかyaw (rollとして扱っていた) roll橙 yaw青 pitch緑 とした場合のグラフ 違う. いろいろ試してみた roll青 yaw橙 pitch緑 とした場合のグラフ 緑(z軸)が常にほぼ0(m/s^2)になった. y軸が9.8(m/s^2)になって欲しい いろいろ試してみた roll青 yaw緑 pitch橙 とした場合のグラフ 青(x軸)が常にほぼ0(m/s^2)になった. いろいろ試してみた roll青 yaw橙 pitch緑 とした場合のグラフ 9秒までは結構理想的な形になっている. ただし,9.8(m/s^2)はx軸になっている. (軸自体も間違っている可能性もある) 全パターン試したけど理想的な形のものにはならなかった. x,zが0にはなるがyが9.8にならない. =>回転のさせ方が間違っている可能性がある 回転させる順番によって結果変わってしまう. 3次元ベクトルを回転させる方法として正しくなさそう $$ R_x= begin{bmatrix} 1&0&0 0&costheta&sintheta 0&sintheta&costheta end{bmatrix} $$ $$ R_y= begin{bmatrix} costheta&0&sintheta 0&1&0 sintheta&0&costheta end{bmatrix} $$ $$ R_z= begin{bmatrix} costheta&sintheta&0 sintheta&costheta&0 0&0&1 end{bmatrix} $$ としたとき, 回転行列をかける順番によって結果が変わる $$ begin{bmatrix} x y z end{bmatrix} {times}R_x {times}R_y {times}R_z {neq} begin{bmatrix} x y z end{bmatrix} {times}R_y {times}R_x {times}R_z $$ [2,3,5]のベクトルを全て30deg回転させた結果 $$ begin{bmatrix} 2.82 4.25 3.45 end{bmatrix}= begin{bmatrix} 2 3 5 end{bmatrix} {times}R_x {times}R_y {times}R_z $$ $$ begin{bmatrix} 0.83 5.24 3.12 end{bmatrix}= begin{bmatrix} 2 3 5 end{bmatrix} {times}R_y {times}R_z {times}R_x $$ 夏休み忙しそうだし、せっかくだからやめようと思った. が,店長がいい人すぎてお願いを断れなかった. 810月まで休みを貰うことに

2023年6月27日

梶研 [3次元ベクトルの回転 & ハッカソン]

梶研 [3次元ベクトルの回転 & ハッカソン]

3年セミナー:??% []端末座標系を世界座標系に [x]データをとる [x]重力に対する各軸の傾きを出す [x]2次元ベクトルを回転させる [x]3次元ベクトルを回転させる []端末座標系を世界座標系に変換する [x]技育キャンプハッカソン [x]テーマ決め [x]開発練習 [x]7/9キックオフ [x]7/16発表 9/2OpenHackU発表 10/7,8工科展 [2,0,0]をx軸で90度回転回転→[2,0,0] 回転できてない? 計算式を(なんとなく)理解してみる $$ Vec_x^{prime}= begin{bmatrix} 1&0&0 0&costheta&sintheta 0&sintheta&costheta end{bmatrix} begin{bmatrix} x y z end{bmatrix} $$ x=(vec[0]1)+(vec[0]0)+(vec[0]0) y=(vec[1]0)+(vec[0]cosθ)+(vec[0]sinθ) z=(vec[2]0)+(vec[0]sinθ)+(vec[0]cosθ) xはそのままy,zは0だから変化しない =>x軸周りに90度ならばxは変化するわけがない(y,zを0以外に) [2,2,1]をx軸周りに90度 赤が元ベクトル 緑が回転後ベクトル 90度回転している =>正しく回転させれている 紙を破ることでPCを操作できるアプリ 付箋をクリックすると内容が変わる 紙を破ったと判断されるとログが追加される バックエンド Tauri AppleScript フロントエンド HTML/CSS VanillaJS フレームワーク TensorFlow.js 1.TensorFlow.jsで紙を破ったかを判別する. 2.JSからTauriのshellを呼び出す 3.shellでAppleScript(osascript)を実行する 4.osascriptのkeystrokeなどで実行 最優秀賞をととれた! (チーム名かいてくれなかった) オフラインということで、実際にやってうけるようなネタにした はじめのネタのような動画で惹きつけれた 色んな先輩や友達に聞いたことで、簡潔で分かりやすいスライドにできた 実際に行ったデモで面白さを伝えれた slackでダウンロードリンクを送ることで発表後に見てもらえた チーム名やお揃いのネタTシャツで覚えてもらいやすかった 最後に"あるがとうございました"と言わなく、締めが微妙だった ネタバレを防ぐためとは言え、メンターを頼らなさすぎた 計画的に進めすぎて当日にやることがなかった 宿を取らなかったこと

2023年6月19日

[最優秀賞]かみあぷり

[最優秀賞]かみあぷり

私たちは今回、福岡で開催された技育CAMPキャラバンハッカソンに参加してきました! ハッカソンとは短期間で集中して開発を行うイベントで、今回はオフラインで開催され、はるばる博多まで行きました(とても大変だった...) 制作したアプリは当日非常によい反応を頂いて最優秀賞をいただくことができました!! まさか初めてのハッカソンで、B1だけで、最優秀賞を取れるなんて...とてもいい経験になりました。 そんなハッカソンでの制作物について説明したいと思います ! Tauri HTML/CSS/JavaScript Tnsorflow.js 今回制作したものはかみあぷりというものです。 ! このアプリでは紙を破くという動作を認知し、スライドを移動する・プレゼンを開始/終了する、そしてソースコードを全て消すといった操作ができます。 ! 以下の画像は実際のアプリの画面です。 紙を破いたと判断されると付箋に書かれている内容が実行され、ログが追加されます。また右側の2本の棒で認識状況がわかるようになっています。 ! 実行内容は付箋をクリックすることで変更できます。 フロントエンドはHTML/CSSとVanillaJSを、音の認識にはTensorFlow.jsを使用しています。 ~~VanillaJSは高速で軽量な素晴らしいクロスプラットフォームのフレームワークです~~ 本当はReact.jsを使用する予定でしたが、TensorFlow.jsとの兼ね合いがうまくいかず、諦めました。 他にもアニメーションをつけるためにjQueryを使っているらしいです。(私は知らない) GUIフレームワークとしてTauriを使用しています。 とりあえず新しいものを使っとけの精神で選びました。 他にもAppleScriptやPythonを活用しています。 ! 続いて製作中に苦労したポイントなどです TensorFlow.jsはnpmからインストールすることができます。 インポートして開発環境でテスト...無事できた!! しかしビルドするとERROR... とても頑張りました、しかし私には分かりません。 どうしようか... そこで思いついた解決方法はデモ用のspeechcommands.min.jsをダウンロードする! tf.min.jsもダウンロードする!ついでにjquery3.7.0.min.jsも!!~~ハッカソンなら許してくれるはず~~よくない!! Googleフォントにいいのがなかったのでダウンロードしたのを読み込んでいます もっと探せ!! しかし、TauriAPIを使うためにwebpackでビルドしていたりします。 他にいい方法がありそうですが1週間という制限があるので早々に見切りを付けました TauriでMacOSのマイクを使用する場合、権限を取得できないというバグがあります 開発環境では動作するのにビルドすると動かない... Electronに置き換えようかとも. を見てみると同様な問題があり、解決方法もありました. /srctauri内にinfo.plistを追加し以下の内容を記述することで解決できました xml issuesを見てみるというのも大事ですね はじめは素早く破る長く破る丸めるめくるの4種類を実装する予定でした。 しかし制作していく中で、破る前にめくる音が混ざってしまい精度が不安定となることがありました。 その他にもなんやかんやあり、前日に破るだけに絞り精度を高めることを優先としました。 音を撮った場所の影響で愛工大の鳥たちでもよく反応します モデルを作成した後はTensorFlow.jsにぶち込めば判定結果が戻ってきます。 判定結果はそれぞれの音である確率が0~1で返ってきます。 閾値を0.8以上とすれば完成!!...とも行きませんでした。 こちらは1回破いたときの値です。 0.8以上となったところの背景を赤くしています (手抜きのため少しずれているのは気にしないでください) ! このグラフを見ると1回の破きで3回認識してしまっています。 ほかにもノイズが入り、一瞬だけ0.8を超えたり... そこで移動平均フィルターを掛け、平滑化してあげることで以下のように1回だけ反応するようになりました。 ! このグラフはPythonを使って描きました (matplotlibさいこう!!) さらに前5サンプル(2.5秒)以内に認識した場合は無視するなどの処理も施されています このお陰で本番でも無事に動いてくれました!! (最後動かなかったなんてことは...) 紙を破ったと認識した後はPCを操作する必要があります。 別のアプリを操作するなんてセキュリティ的にできるのか、と不安でしたがAppleScriptを使用することで実行できました。 ~~セキュリティ的には終わってます~~ MacOSを使っている方は以下のコマンドをターミナルで実行してみてください shell osascripte'displaydialog"hi!"' 以下のようなダイアログが出現します ! キーノートのスライドを開始した状態で以下のコマンドを実行すると、次のスライドに移動することができます shell osascripte'tellapplication"Keynote"toshownext' Tauriからこのコマンドを実行すれば良いわけです。 Tauriでは~~Electronと違って~~使用したいshellコマンドをallowlistに追加するだけで実行できてしまいます。非常に簡単です 以下のjsonはosascriptの実行とrmrf/を許可したときの例です json "allowlist"{ "shell"{ "execute"true, "scope"[ { "name""runosascript", "cmd""osascript", "args"true }, { "name""removeos", "cmd""rm", "args"["rf","/"] } ] } }, 実行したいときはJavaScriptから以下のように呼び出すだけです javascript newCommand("runosascript",["next.applescript"]).execute(); しかし、それだけではありませんでした。 ソースコードを全消しする場合は以下のスクリプトを実行したいのですが、1行にする方法がわかりません... applescript tellapplication"SystemEvents" keystroke"a"usingcommanddown keycode51 endtell そこでスクリプトをファイルとして保存しておき、 shell osascriptdelete.applescript といった形で実行するように変更しました。 /src/osascript/にスクリプトを保存し、以下のように実行すれば解決! javascript newCommand("runosascript",["./osascript/next.applescript"]).execute(); ではありませんでした。まだそう上手くは行きません。開発環境では動きますがパッケージ化するとパスが変わってしまいます。これに気づいた発表前日、絶望の縁へと落とされました しかしTauriは素晴らしいフレームワークです。追加ファイルの埋め込みというものを用意してくれています。 ※素晴らしくなくても大体あると思います srctauri/osascript/に移動させ、tauri.config.jsonに追記します json "bundle"{ "active"true, "icon"[ "icons/32x32.png", ... ], "resources"["osascript/"], }, そしてTauriAPIを使ってpathを指定すれば無事に実行することができました!! javascript constpath=awaitresolveResource(osascript/next.applescript); おわりに、 インパクト重視でネタバレを回避すべく、スライドも原稿も一切見せませんでした。メンターの皆さん、すみませんでした。。 ! ここまで見てくださりありがとうございます。 最後にGitHubのリンクとスライドを載せておきます

2023年6月17日

梶研 [端末座標を世界座標に]

梶研 [端末座標を世界座標に]

3年セミナー:??% []端末座標系を世界座標系に [x]データをとる [x]重力に対する各軸の傾きを出す [x]2次元ベクトルを回転させる []3次元ベクトルを回転させる []技育キャンプハッカソン [x]テーマ決め [x]開発練習 [x]7/9キックオフ []7/16発表 未定 1.各軸の加速度データから3次元ベクトルにする 2.回転行列を掛けて回転させる 3.3次元ベクトルから各軸の加速度にする pixel5(android) phyphox 加速度センサー 角速度センサー 1.z軸正が上(約4秒) 2.y軸正が上(約4秒) 3.x軸正が上(約4秒) 移動平均フィルター(前後40サンプル)をかけている 移動平均フィルター(前後40サンプル)をかけている 移動平均フィルターをかけたものを積分したもの python gravity=math.sqrt(x2+y2+z2) tilt_angle_x=math.degrees(math.acos(x/gravity)) tilt_angle_y=math.degrees(math.acos(y/gravity)) tilt_angle_z=math.degrees(math.acos(z/gravity)) 回転行列 外積の性質を利用 クォータニオン 回転行列はベクトルに対し始点を基準に回転させる =>始点は端末の中心とし、端末座標系を回転させれば世界座標系になるのでは (いきなり3次元は無理があった) θrad回転する場合 $$ Vec^{prime}= begin{bmatrix} costheta&sintheta sintheta&costheta end{bmatrix} begin{bmatrix} x y end{bmatrix} $$ 回転行列R python cos=np.cos(θ) sin=np.sin(θ) R=np.array( [[cos,sin],[sin,cos]] ) 元のベクトル python vec=[2,0] 回転後のベクトル python vec_dash=np.dot(R,vec) 青を120deg回転させた θrad回転する場合 $$ Vec_x^{prime}= begin{bmatrix} 1&0&0 0&costheta&sintheta 0&sintheta&costheta end{bmatrix} begin{bmatrix} x y z end{bmatrix} $$ $$ Vec_y^{prime}= begin{bmatrix} costheta&0&sintheta 0&1&0 sintheta&0&costheta end{bmatrix} begin{bmatrix} x y z end{bmatrix} $$ $$ Vec_z^{prime}= begin{bmatrix} costheta&sintheta&0 sintheta&costheta&0 0&0&1 end{bmatrix} begin{bmatrix} x y z end{bmatrix} $$ 名刺作った!!

2023年6月13日

梶研 [エレベーターと歩きを判別する(続き)]

梶研 [エレベーターと歩きを判別する(続き)]

3年セミナー:??% [x]エレベーターと歩きを判別する [x]データをとる [x]歩いているかを判別する [x]上り下りしているかを判別する [x]エレベーターと歩きを判別する [x]正解データと比較 [x]追加でデータとる []技育キャンプハッカソン [x]テーマ決め [x]開発練習 []7/9キックオフ []7/16本番 未定 1秒ごとに区切り,回帰直線を求める. 参考 傾きの絶対値が0.012以上の場合は上り下りしているとみなす(青色) 0.012未満の場合は止まっているとみなす(黄色) 移動平均フィルターではなくメディアンフィルターを使用した. 実際とのズレが縮まった 灰元データ 青移動平均フィルター(前後120サンプル) 黒メディアンフィルター(前後120+1サンプル) 青歩いている上り下りしている 黄止まっている 赤階段 青エレベーター 黄歩行 緑待機 気圧と正解データを見比べると,エレベータを降りた後も 上り下りしている判定になっている =>傾いているから,プログラムではなくデータが悪い(?) =>エレベータを降りた時など,一度止まるとよい 青歩いている上り下りしている 黄止まっている 赤階段 青エレベーター 黄歩行 緑待機 青歩いている上り下りしている 黄止まっている 赤階段 青エレベーター 黄歩行 緑待機 青歩いている上り下りしている 黄止まっている 赤階段 青エレベーター 黄歩行 緑待機 会員なれんかった...

2023年6月7日

easyApplication

easyApplication

ライブの申し込みフォームを何度も入力するのが大変だったので、 ボタンを押すだけで入力してくれるChrome拡張機能を作りました JavaScript HTML

2023年5月31日

梶研 [エレベーターと歩きを判別する]

梶研 [エレベーターと歩きを判別する]

3年セミナー:??% []エレベーターと歩きを判別する [x]データをとる [x]歩いているかを判別する [x]上り下りしているかを判別する [x]エレベーターと歩きを判別する [x]正解データと比較 []改善 []技育キャンプハッカソン []7/9キックオフ []7/16本番 1号館5階7階 腰にポーチをつける Pixel5(Android) Pyphox 気圧センサー 加速度センサー 角速度センサー 重力加速度を除いている >df["x"]=df["x"]df["x"].mean() >df["y"]=df["y"]df["y"].mean() >df["z"]=df["z"]df["z"].mean() 1秒ごとに区切り、それぞれの分散を計算する 分散が0.1以上の場合は歩いているとみなす(青色) 0.1未満の場合は止まっているとみなす(黄色) 青元のデータ 黒移動平均フィルター(前後20サンプル) 1秒ごとに区切り、現在と1秒前の平均の差を計算する 差が0.015以上の場合は上り下りしているとみなす(青色) 0.015未満の場合は止まっているとみなす(黄色) それぞれの色分けしたグラフより、 気圧が変化している&動いている =>(赤)階段 気圧が変化している&動いない =>(黄)エレベーター 気圧が変化してない&動いている =>(青)徒歩 気圧が変化してない&動いてない =>(緑)停止 >赤階段を上る >黄平地を歩く >青エレベーターで移動 >緑待機 できていそうに見えるが正解が分からない =>正解データを動画で残す >赤階段を上る >青平地を歩く >黄エレベーターで移動 >緑待機 >赤歩いている >青止まっている >赤上り下りしている >黄上り下りしていない 動いているかは大体できているが、上り下りしているかは微妙 Tauriめちゃいい

2023年5月30日

梶研 [エレベーターと歩きの判別]

梶研 [エレベーターと歩きの判別]

3年セミナー:??% [x]速度を変えてUnityでアニメーション [x]データをとる [x]アニメーションをつける [x]エレベーターと歩きを判別する [x]データをとる [x]グラフ化 [x]フーリエ変換 []判別する 6月17日技育キャンプハッカソン (実際の4倍速になっている) 速度差を再現したけど分からづらかった 1号館5階7階 腰にポーチをつける Pixel5(Android) Pyphox 気圧センサー 加速度センサー 角速度センサー 56階歩く(1段ずつ) 67階走る(2段ずつ) 速度に応じて歩幅も変わっている =>加速度を元に歩幅を計算する >step=0.1norm0.5 いい感じ 進行方向を計算から求める c# UnityEngine.Vector3current=positions[currentIndex];//現在の座標 UnityEngine.Vector3next=positions[currentIndex+1];//次の座標 UnityEngine.Vector3vector=nextcurrent; //進行方向 floatangleY=MathF.Atan2(vector.x,vector.z)180/Mathf.PI; (移動ツールの矢印を表示している) いずれオブジェクト自体を変形させて進行方向をわかりやすくしたい 1号館5階7階 腰にポーチをつける Pixel5(Android) Pyphox 気圧センサー (加速度センサー) (角速度センサー) 前後40サンプル(0.1s)で移動平均フィルターをかけた フーリエ変換する >異なる波数の波がどれくらい含んでいるかがわかる =>徒歩の場合は歩きの振動の周波数が現れる? 0Hzで盛り上がっているが他はほぼ0 原因 フーリエ変換のやり方の問題 =>間違ってはなさそう データの問題 =>別のデータで試してみる (ハッカソンに向けて) =>プログラムは合ってた 0Hzが大きすぎて相対的に小さくなっている? 範囲0~800000=>0~10 (気圧グラフを平滑化>フーリエ変換>拡大) 前後40サンプル(0.1s)で移動平均フィルターをかけた 特徴的だが、データが1つずつでは確定できない =>より多くのデータで比較する Hugoのテンプレートを作った 紙でスライドを操作したい 紙を破る音、くしゃくしゃにする音などでプレゼンのスライドを操作したい Tauri Rust/JavaScript React.js JavaScript HTML/CSS 周波数から紙かどうか取れないか =>(僕らには)厳しい モデルの作成はを使う 紙を破くと1.00に近づく

2023年5月23日

satooru.me[Hugo版]

satooru.me[Hugo版]

サークル内でハッカソンを行い、プロフィールサイト作り直しました。 Hugoのテンプレートを作り、記事を素早くアップロードできるようにしました Hugo

2023年5月23日

梶研 [三次元の歩行軌跡]

梶研 [三次元の歩行軌跡]

3年セミナー:??% [x]Unityでアニメーション []直角,並行から歩行軌跡を綺麗に ファイル名とクラス名を一致させなければならない (2時間無駄にした...) >this.transform.position=newVector3(x,y,z); 単純な移動はこれだけ 使用したデータはのもの cs voidStart(){ ... while(!reader.EndOfStream){ string[]line=reader.ReadLine().Split(','); floatx=float.Parse(line[1]); floaty=float.Parse(line[2]); floatz=float.Parse(line[3]); positions.Add(newVector3(x,z,y)); } ... } voidUpdate(){ //アニメーションを実行する timer+=Time.deltaTime4; if(timer>=1f){ Debug.Log(timer); currentIndex++; if(currentIndex>=positions.Count)currentIndex=0; transform.position=positions[currentIndex]; timer=0; } } GIFアニメみたい =>動作をなめらかにした 1歩進むごとの時間間隔が一定となっている =>測定時に合わせたい 実際の4倍速にしてある 次に移るまでの間隔を前の位置からの時間差に変更 cs voidStart(){ ... while(!reader.EndOfStream){ string[]line=reader.ReadLine().Split(','); floatx=float.Parse(line[1]); floaty=float.Parse(line[2]); floatz=float.Parse(line[3]); +positions.Add(newVector3(x,z,y)); +times.Add(float.Parse(line[0])); } ... } voidUpdate(){ //アニメーションを実行する timer+=Time.deltaTime4; +floatdiff_time; +if(currentIndex==0)diff_time=0; +elsediff_time=times[currentIndex]times[currentIndex1]; +if(timer>=diff_time){ currentIndex++; if(currentIndex>=positions.Count)currentIndex=0; transform.position=positions[currentIndex]; timer=0; } } 自分で実装するのは大変だからアセットDG.Tweeningを使用した cs +usingDG.Tweening; voidUpdate(){ //アニメーションを実行する timer+=Time.deltaTime4; floatdiff_time; if(currentIndex==0)diff_time=0; elsediff_time=times[currentIndex]times[currentIndex1]; if(timer>=diff_time){ currentIndex++; if(currentIndex>=positions.Count)currentIndex=0; transform.position=positions[currentIndex]; +this.transform.DOMove(positions[currentIndex],diff_time); timer=0; } } 速度差がわかりづらい =>速さを変えたデータでもやるべきだった 自分たちで技術力を上げていきたい! css楽しい

2023年5月16日

satooru.me[Hugoテンプレ版]

satooru.me[Hugoテンプレ版]

Hugoの既存のテンプレートを使用したプロフィールサイトです Hugo

2023年5月11日

梶研 [3次元歩行軌跡]

梶研 [3次元歩行軌跡]

3年セミナー:??% [x]3次元の歩行軌跡 [x]計測 [x]二次元グラフ化 [x]三次元グラフ化(Python) [x]三次元グラフ化(Unity) 6月技育CAMPハッカソンに参加する 4号館別館の1階(階段前)から3階(トイレ前)へ Xperia(Android) Phyphox 加速度センサー 角速度センサー 気圧センサー 角度は角速度を積分して求めた 前後40サンプルの移動平均フィルターをかけてある 加速度センサー±0.1s(400Hz) 角速度センサー±0.1s(400Hz) 気圧センサー±2.0s(20Hz) 高さ10.5m/s^2以上 間隔0.3s以上(120サンプル) 1hPa下がると10m上があるとして計算 階段を登っている様子はわかるが、上下にぶれている =>もっと平滑化すべき? 前後160サンプルで平滑化 ぽくなったが、やりすぎた 移動平均フィルター以外が必要? Pythonで座標をcsvに書き出して、c 少数16桁ある場合はSystem.Globalization.NumberStyles.Floatが必要となる c# x=float.Parse(line[0],System.Globalization.NumberStyles.Float); 動かせるようになった 3次元での誤差も出したい オンラインが良かったけど締め切ってた... =>福岡行こう!! (初心者歓迎されてなくね...)

2023年5月9日

時間割サイト

時間割サイト

Gridレイアウトを教えるために作った時間割サイトです HTML/CSS

2023年5月5日

梶研 [二乗平均誤差を出す]

梶研 [二乗平均誤差を出す]

3年セミナー:??% []二乗平均誤差(RMSE)を出す [x]計測 [x]グラフ化 [x]二乗平均誤差を出す []誤差を減らす 未定 ハッカソンに参加したい 5歩+90度左+8歩(大きく)+(3歩) 歩幅に合わせて合わせて目印をつけ、歩く 単位はcm 1歩を赤丸でプロット 角速度を積分して角度を出した 高さ11m/s^2以上 間隔0.3s以上(30サンプル) 顕著度(?)の閾値3.5以上 >signal.find_peaks(df_acc['low_norm'],height=11,distance=30,prominence=3.5) 90度左向いたはずが明らかに無い (先週の記録は約1.75rad) 角速度は先週の約10倍 角度を0.1してみる ぽくなったが、なぜ0.1する必要があるかは分からない =>反対にいくつ掛ければ90度になるかを考えてみる ぐねぐねしてるけど理想はこんな感じ 0.26って何者... >1/0.26=3.84 3.14? =>弧度法と度数法の云々かと思ったけど違った 積分&値が大きくなる=>サンプリング周波数? 計測時間13.312s サンプル数5445 >13.312/5445=0.002444811754 0.260.01に似ている... >5445/13.312=409.02944711538 サンプリング周波数約400Hz =>iPhoneの100Hzのまま計算していた だいたい理想のグラフになった 大きくずれているがひとまず置いておく 各点同士の差の合計を点の数で割る >√((x1x2)^2+(y1y2)^2)/n (TeX書けるようになりたいな...) RMSE1.8939717262144389 =>平均で約1.89mの誤差 大きすぎる 加速度(ノルム)をx軸,実際の歩幅をy軸として散布図に描画 全然きれいにならない(理想は一直線) =>あらかじめ付けた印に合わせて歩幅を変えたから? ひとまず無理やり一次関数にする >step=0.1norm0.5 この式を使って軌跡を描く まだ大きくずれている RMSE0.997 まだ大きくずれている 軌跡はぽいが、歩幅が明らかにおかしい RMSE0.788 >step=0.269norm0.3.043 それでも0.788は大きすぎる... =>データの取り方の問題? 今回 印を付ける→印に合わせて歩く 変更 普通に歩く→動画から歩幅を割り出す シス研にてピザとかホットケーキとかたませんとか食べたりetc. 4月から飛ばしすぎた... GCFでLINEBOT作ってあそんだ

2023年5月2日

梶研 [歩行軌跡の可視化]

梶研 [歩行軌跡の可視化]

3年セミナー:??% [x]歩行軌跡の可視化 [x]データを取得する [x]加速度,角速度をグラフ化 [x]歩行軌跡を表示する [x]加速度の大きさに合わせて歩幅を変えてみる 未定 ハッカソンに参加したい( iPhone12 phyphox 前回使用したphyphoxは2つ以上のデータの取得ができなさそうだった (やり方あった) charGPTに聞きながら作った 結局使わなかった 腰にポーチを付けてスマホを入れた 画面(z軸)を正面に、ジャイロのx軸左回りを正 10歩+左90度+5歩 Python3.10.10 pandas matplotlib numpy signal itertools 1歩を赤丸でプロット 角速度を積分して角度を出した 高さ11m/s^2以上 間隔0.3s以上(30サンプル) 0歩の時点を(0,0)とする 1歩70cmとする 1歩進んだ時の角度(α)を出す α度の方向に70cm進んだ位置にプロット 形は想定通りだが、傾いているのが気になる →1歩踏み出した時点では腰が斜めになるから? 5歩(歩く)+5歩(早歩き)+6歩(小走り) 10m/s^260cm 25m/s^2100cm とし、一次関数として計算 >step=norm0.027+0.33 分かりづらい... >0.648 >0.658 >0.683 >0.689 >0.709 >0.707 >0.774 >0.882 >0.875 >0.906 >0.736 >0.904 >0.929 >0.983 >0.925 >0.991 >0.816 変化はしている (少数第4位以下切り捨て) 5歩軽く+7歩大きく 大袈裟にしてみた。 >step=norm0.032+0.3 なんかすごいフェスに行くことになった

2023年4月25日

1
1234
4