日々記録

情報系や工作系知識のアウトプット

BLE開発

BLEの構造

  • BLEデバイス
    Bluetoothチップ。1または複数のservieを持つ。識別子としてMACアドレスのようなバイト列を持つ。
  • service
    個々のAPIをまとめた概念。1または複数のcharactiristicを持つ。識別子としてUUIDを持つ。e.x. C3FF0001-1D8B-40FD-A56F-C7BD5D0F3370
  • chatactirictics
    バッテリーの残量確認やシリアル通信など、個別の機能を提供する識別子としてUUIDを持つ。e.x. C3FF0005-1D8B-40FD-A56F-C7BD5D0F3370

BLEデバイス(ハードウェア) ∋ service ∋ charactiristic の包含関係となる。

UUIDなどの簡単な確認

nRF Connect for Mobile (Android)
が便利。

Windows10でのBLE利用(未完)

windows上でBLE+Pythonに対応したライブラリは少ない・・・・。 bleakは唯一対応しているようだが、うまく行かない。 Pythonライブラリ bleakでWindows10/macOS/Linux上でtoioコア キューブを動かしてみる - Qiita

まず、TapStrap2とPCは接続した状態でスクリプトを実行するのが正しいのか、ペアリングせずに実行するのが正しいのかわからず。

  • PCとTapStrap2を接続していない状態で実施した場合
    → TpaStrap2のMACアドレスは確認できるが、その後のcharactiristicへの接続で失敗する。DotNetの何かが見つからない というエラーが出る。

  • PCとTapStrap2を接続していない(ペアリングしていない)状態で実施した場合
    → TpaStrap2のMACアドレスは確認できず。

マイコンの開発のフレームワークの検討

LPC1763の開発フレームワークについて調査した結果

調査動機

ライントレースカーの開発に対して、

  •  n秒間ブザーを鳴らす
  • n秒進んだ後にm秒バック

などを実装していると状態変数がどんどん増えてきてソースコードの見通しが悪くなってきたため。

もっと全体を見通しよく開発できる環境を作りたかった。

 

見つけた候補たち

1.組み込みRUST

RUSTはC、C++の置き換えを狙った、低レベル部分の制御が行える高級言語

言語仕様自体は新しいようで、C++などと比べてもリスト型の操作などはしやすそう。

ただし、マイコンに実装した例があまりなく、使うとなると人柱の覚悟いりそう。

レジスタのメモリマップについても、メーカーの提供するsvdファイルから変換できるらしいが、トラブルある模様。

https://qiita.com/tatsuya6502/items/7d8aaf3792bdb5b66f93

 

2.FreeRTOS

リアルタイムOS

端的に言うと、関数をスレッドとして並列処理することがで着るので、通常のように大きな無限ループを回し続けて状態を管理するのでなく、

細かな無限ループを作って情報を共有できるイメージ。

例えば5秒間ブザーを鳴らしながら走行するとき、

通常ではブザー鳴動開始時刻と現在時刻を比較して状態を管理する必要があるが、

スレッドとしておけば5秒間ならす、と処理を書くだけですむ。

実行の流れが複雑になってデバッグは大変になるのかな・・・?不明

https://www.aps-web.jp/academy/rtos/ex2/

 

3.mbed

IoT用OS。マイコンレジスタをたたくことなく、Arduinoのように機能設定のメソッドを呼び出すことで使える。

このmbedの機能の一つとしてRTOSの機能がある。

公式のボードはLPC1769だが、LPC1763にもちょこちょこいじれば使えそう。

以前はLPCXpressoで扱うときはWEB版でエクスポートしたプロジェクトを読み込まないとmbed用のローカル環境を作れず面倒だったりしたけど、今はどうなんだろう。

MCUXpressoになって変わったりしたのかな。

http://erias00.blogspot.com/2016/04/mbedlpc.html

候補

使えそうなのは、FreeRTOSかmbedあたり。

MCUXpressoで扱いやすい方を使うのが良さそう。

 

kaggle挑戦: Santander Customer Transaction Predictionのkernel読み

データサイエンスの実践的な知識が欲しい。 あとKaggleメダルが欲しいのでKaggleに挑戦する。

Santander Customer Transaction Prediction

概要

Santanderという会社で、顧客が取引を行うかを予測する(2クラスの分類問題)。 入力データは200列。 列名はすべて匿名化されていて正直何が何やらわからない。

カーネル読み

一番vote数が多かった以下カーネルから手続きを抜粋。 www.kaggle.com

確認手続き

  • 欠損値の確認
    • → 無し
  • 重複の確認
    • → 無し
  • trainをx,testをyとして散布図作成。円or正方形に分布するか確認   - → 問題なし(季節周期性とかがあると歪な形になる?)
  • クラス0とクラス1で、それぞれの変数の正規分布の形状が一致しているか確認

    • var_0, var_1, var_2, var_5, var_9, var_13, var_106, var_109, var_139 やその他多数でtrainとtestの分布形状が違う。
    • var_2, var_13, var_26, var_55, var_175, var_184, var_196などが二変量分布の模様
  • 変数同士の相関係数確認   - → ほとんど相関なし

特徴量作成

  • 各行のsum, min, max, mean, std, skew, kurt, medを追加

予測

  • StratifiedKFoldでCVようにデータを分割
  • lightgbmで予測