Raspberry Pi 3でCapsLockをCtrlに変更する

Raspberry Pi 3でCapsLockをCtrlに変更するためには,
/etc/default/keyboard
を編集する

sudo nano /etc/default/keyboard

XKBOPTIONSの行がデフォルトでは指定なしになっているが, 次のようにcapslockをctrlに変更する句を挿入する.

XKBOPTIONS=ctrl:nocaps

あとはrebootして確認.

Raspberry Piにemacs25をインストールする

sudo apt install emacs25

としてインストールできる。 ただし次のようなエラーメッセージが出る。

** (emacs:12527): WARNING **: Error retrieving accessibility bus address: org.freedesktop.DBus.Error.ServiceUnkno│drwxr-xr-x  2 pi   pi   4096  627 10:23 Pictures
wn: The name org.a11y.Bus was not provided by any .service files    

これはat-spi2-coreをインストールすることで解決する。

sudo apt-get install at-spi2-core

at-spi2-coreはdescriptionを読むとaccessibilityに関するパッケージ。

Description-en: Assistive Technology Service Provider Interface (dbus core)
 This package contains the core components of GNOME Accessibility.

なお上記のエラーは ~/.bashrc 等のprofileにに以下を追記することでも解決する(が古い解決方法のようだ)

export NO_AT_BRIDGE=1

Raspberry Pi 3でDMAするためにBroadcom BCM2837のマニュアルを読む

DMAはCPUを介さずに直接メモリにアクセスしてメモリコピーする方式のことをいう。
メモリ→メモリ、
メモリ→ペリフェラル
ペリフェラル→メモリの3種類のDMAでコピー可能だ。

ラズパイのメインLSIはラズパイ世代ごとに違う。
ラズパイ3は Broadcom BCM2837で ここにマニュアルがある。
ちなみにラズパイ1やラズパイ2だとLSIBroadcom BCM2835やBCM2836だったりするが、マニュアルに書いてあることは同じだった。

...と読んでいったら実はこのマニュアル,
表紙だけBCM2837で中身のページにははBCM3835って書いてある。
なんだこれ。

以下メモ

概要

  • BCM2835のDMA Controllerは16個のDMAチャネルを提供している。
    各チャネルは3つのシステムバス上を共有して独立に動く。
  • DMAチャネルは Control Block(CB) というデータ構造をメモリからレジスタに読み込む。
    Control BlockはDMAによるoperationを定義している。
    各Control Blockは次のControl Blockへのポインタを持っている連結リストになっていて、処理が終わると次のControl Blockが読み込まれる。
  • メインメモリからペリフェラルへの転送はペリフェラルが発行する Data Request(DREQ) 信号でpaceされる。
  • ペリフェラルPanic 信号も出す。
    Panic信号はFIFO underflowやFIFO overflowや他のcritical situationがあることを示すもの。
  • ペリフェラルのDMAチャネルへの割当はソフトで制御可能

DMA Controller Registers

  • DMA Controllerは16個のDMAチャネルから構成される
    このDMAチャネルはベースアドレスが違うだけで、すべて同類のメモリマップを持つ
  • DMAチャネル0は0x7E007000、チャネル1は0x7E007100,...という感じで0x100おきに隣接している

DMAチャネル レジスタアドレスマップ

  • DMAチャネルのレジスタのうち、
    書き込めるのはCS,CONBLK_AD,DEBUGのみである。
    他のレジスタ(TI, SOURCE_AD, DEST_AD, TXFR_LEN, STRIDE, NEXTCONBK)は書き込めず、Control Block構造体から自動で読み込まれる
Control Blockデータ構造
  • Control Block(CB)は8words(8byte)の長さの構造体
32-bit word offset Description Register
0 Transfer Information TI
1 Source Address SOURCE_AD
2 Destination Address DEST_AD
3 Transfer length TXFR_LEN
4 2D Mode Stride STRIDE
5 Next Control Block Address NEXTCONBK
6-7 Reserved N/A
  • DMAはCB構造体をDMAレジスタマップのCONBLK_ADレジスタへセットして、ACTIVEビットを立てると開始する。
  • DMA transferが完了したら(length->0になったら)、DMAはNEXTCONBKレジスタにあるデータ構造体にCONBLK_ADレジスタを更新し、CBをそのアドレスからフェッチする。
  • DMAはNEXTCONBKレジスタが0x0000_0000にセットされたら終了する。

Raspberry Piにsshで入る

Raspberry Piを買ってみたのでsshで入ってみる.

固定IPアドレス割当

デフォルトゲートウェイのアドレス情報を知るためにroute -nとコマンドを打つ

pi@raspberrypi:~ $ route -n
カーネルIP経路テーブル
受信先サイト    ゲートウェイ    ネットマスク   フラグ Metric Ref 使用数 インタフェース
0.0.0.0         192.168.11.1    0.0.0.0         UG    303    0        0 wlan0
192.168.11.0    0.0.0.0         255.255.255.0   U     303    0        0 wlan0

ゲートウェイIPアドレスが192.168.11.1であることがわかった.
BUFFALOのルータではだいたい同じ.
次に/etc/dhcpcd.confを編集する

$ sudo nano /etc/dhcpcd.conf
interface wlan0
static ip_address=192.168.11.10/24
static routers=192.168.11.1
static domain_name_servers=192.168.11.1

と編集しrebootする.
ifconfigでIPアドレス更新されているか確認し,

$ ssh pi@192.168.11.10

でアクセスできることを確認する

EuroHaptics2018で触覚提示用の振動を生成するモデルについて発表しました

趣味でやっている研究活動の一環で、
触覚に関する国際会議の1つのEuroHaptics2018 (2018/7/13-7/16) にて
ポスター発表しました。

内容は、 触覚提示向けにさまざまな素材に適合するような振動を自動生成するための、

  • モデル構築方法
  • そのモデルで生成した振動のユーザテスト

です。予稿はこちら
会場で使用した説明用ポスター。

f:id:yusuke_ujitoko:20190103000059p:plain

2018年3月のIEEE Haptics Symposiumに引き続いての触覚会議への参加です。