読者です 読者をやめる 読者になる 読者になる

memoメモ

最近はGo言語関連で。φ(..)メモメモ

Raspberry Piに挿せるモータードライバを試す

Device

raspberry pi に直接挿せるデュアルモータードライバを試したのでメモ。

Pololu DRV8835 Dual Motor Driver Kit for Raspberry Pi

f:id:atotto:20161204180602j:plain image: https://www.pololu.com/product/2753

ザクッと挿せてDCモータを2つ扱えるので楽です。

用意するもの

ドライバのセットアップ

https://github.com/pololu/drv8835-motor-driver-rpi を見ながら:

sudo apt-get update
sudo apt-get install -y python-dev python-pip
sudo pip install wiringpi
git clone https://github.com/pololu/drv8835-motor-driver-rpi.git --depth 1
pushd drv8835-motor-driver-rpi
sudo python setup.py install
popd

で完了。

動作確認

sudo python example.py

でモータの動作確認をしておきましょう。

HTML5 CONFERENCE 2016

リモートで参加しました→ https://www.youtube.com/watch?v=0L0zsaOUKMs

f:id:atotto:20160903111636p:plain

ライブ配信ありがとうございます。

基調講演のメモを雑記↓

Webという分散OS

W3C/KEIO Site Manager 中村 修さん

紙などの既存の表現に縛られている。 新しいデータの表現をWebでユーザに提供できるようになる。

Webはバズワード(IoT、ビッグデータ、etc)の基盤。

Webは分散システム。分散OS。 Webのエコシステムは分散OSを開発しているということ。 IoTでセンサも入ってくる

すべてのUIがhtml、Webの表現になる。

WoT

  • バイスを抽象化してWebから使えるようにする、とか

地球を包み込むOS

みんなが使えるようにする セキュリティも大事

HTML5 Couference 2016

インクリメンツ 及川さん

  • Googlechromeマネージャ
  • MSで実はie7もかかわったことが

html5とはwebそのもの。 アプリ、メディア、基盤としてのWebがある。

アプリとしてのWeb

  • Webで動くWebAssembly
  • C、C++でかけるようになった時、Webってなんなんだろう。

メディアとしてのWeb

  • ニュースキュレーションの台頭→メディアとしてのWebとは?
  • バイルWebのUXは最悪。広告やクリックの嵐。←ニュースキュレーションに負ける原因

基盤、プラットフォームとしてのWeb

  • 安心、安全につかえる技術
  • http2
  • https

第8回ROS勉強会へ行ってきました

第8回ROS勉強会@DMM.make AKIBA https://ros-users.doorkeeper.jp/events/46407

ROS勉強会へ行ってきました。初参加です。 NAISTに居た学生の頃、移動ロボットでSLAMをやってたこともあり、今現在のロボットのソフトウェア開発に興味があったのでROSを軽く触っているところです。

以下、ちょっとメモ。

発表

Raspberry-poでMouse

nakagawa-san

raspberry-piが使える:

  • 教材として圧倒的(数、ノウハウ、ソフトウェア)
  • 下回り(ドライバ)からネットワークまわりまで手軽

https://github.com/ryuichiueda/raspimouse_ros

comment:

  • 研究、学習でつかえそうなロボット。raspberry-piだと教育や開発でノウハウがたまっているので扱いやすそう。

ROS

@OTL san

  • 通信、ツール、ROSエコシステム
  • pub/sub通信
  • roscore/rosmasterでNameServerの役割を果たしている(IPアドレス知らなくてもOK)

ROSでやりたいことって?

  • インストール大変
  • catkinなぞ
  • メッセージ定義めんどい

→ つくった: https://github.com/OTL/jps

comment:

  • ROSじゃなくてもやれることがたくさんある。適材適所、なのかな。

ROS multimaster

@longjie0723 san

  • ROSは基本single master
  • 複数のmasterを使いたい
  • 独立したシステム、ロボットとの連携
  • multimaster_fkie
  • https://github.com/longjie/learn_ros_multimaster
  • dockerつかって独立した環境を作って複数の独立したmasterを簡単に試せる
  • ROS2だとmultiで使える?

comment:

  • docker便利ですよね!
  • ROS2ってなんだろう。詳細希望..

ROS

@k_yone san

  • image_pipeline
  • .ros/log/latest に最新ログがある

ROSのメリット

  • 変更料が少ない
  • .rosinstall のコピーで環境コピーができる

デメリット

  • セキュリティ

機材の話とか。ノウハウたくさん

comment:

  • ROSのセキュリティは気になっていた所。みんなどうしてる(どうする)んだろう?
  • 移動ロボットやってた頃は、Thinkpadのトラベルキーボードをよく使ってました

ROS Node

hayashi-san

comment:

サーボ+距離センサでSLAM

@n_sugiura san / takahashi-san

  • LRF高い → つくろう(サーボ+距離センサ)
  • 距離センサでSLAM
  • 近々発売

comment:

  • HokuyoのURGをNAISTで使っていて、高いのはよく知ってます・・
  • 安価なLRFを自作してそこそこ自己位置推定できているのはすごい

Turtlereal2

saito san

趣味ロボット

SLAM

comment:

  • ROSで自分のロボットのモデルを作ってSLAMをシミュレータ上で動かしていた
  • 結構時間が掛かりそう

ROSCRAFT

@akio san

comment:

  • NAISTで作ったA棟5Fの3次元地図をminecraft上で表現できたら面白そうだな、とか思った

LT

豆蔵

ookuni-san

comment:

  • 意外なところもロボット関連をやっていた
  • ちゃんとシミュレータを作って開発に役立てているのはすごい(テスト駆動になるかな?)

ros_cython

@longjie0723 san

強化学習

@mabonki0725 san

  • Sarsa法
  • 馬力不足の車の登り学習(mountain car)
  • 壁の障害を避ける学習
  • 90lineくらいのプログラム

comment:

  • もしかしたら昔やった、かもしれないけど、Sarsaを軽く実装してみても面白いかも?

ROS TensorFlow

comment:

  • TensorFlow自体試してないから試したい

catkin tool

@__akio__ san

  • 便利

nodelet

@marona77 san

  • node(プロセス)をたくさん立ち上げているとリソース食う
  • → nodelet(スレッド)
  • データコピーが発生しない(画像などで効いてくる)
  • pythonだとnodeletのしくみがない

comment:

  • nodeとnodeletの違いがわかった

最後に

ありがとうございました!

Tex Yodaをメンテナンス

年末の掃除もかねてメンテナンス。

キーの効きが悪いところがあったので調査。 Tex Yodaのmassdropの掲示板を見てみると、ハンダクラックしている疑惑。

f:id:atotto:20151213091456p:plain:w480

https://www.massdrop.com/buy/tex-yoda/talk/169782

f:id:atotto:20151211223923j:plain:w480

ダイオードをハンダしなおしたらちゃんとキーの効きが元通りになりました

関連記事: atotto.hatenadiary.jp

関連情報:

ビルドしたバイナリからビルドに利用したGoのバージョン情報を読む

golang

なにができる?

  • goでビルド済みのバイナリからgoのバージョン情報が取得できます。

なにがうれしいの?

  • 配布した(された)バイナリはどのgoのバージョンでビルドされたのかわかります。ので、goの本体にセキュリティ修正などが行われた際、もし古いバージョンだと困るのであれば調べることができます。

やってみよう

適当な実行ファイルをビルドする。とりあえずhelloworldレベルで。

$ cd hello
$ cat main.go
package main

import "fmt"

func main() {
    fmt.Println("Hello, 世界")
}
$ go build

go tool nmコマンドで、変数buildVersionのアドレスが特定できる(ちなみに、buildVersion$GOROOT/src/runtime/zversion.goにある変数):

$ go tool nm hello | grep buildVersion
  258ec0 D runtime.buildVersion

これをgdbで見てみると:

$ gdb hello
GNU gdb (GDB) 7.9.1
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin13.4.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from hello...done.
Loading Go Runtime support.
(gdb) x/s *0x258ec0
0x18f110 <go.string.*+8176>:    "go1.5.1"
(gdb) 

で読めます。なお、以前go getしたコンパイル済みのバイナリからもGoのバージョン情報を引き出すことができます。

簡単にバージョンを調べたい

gdbで見るのは面倒なので、objdumpでバージョン情報を取得できるようにしてみました(Linux):

使い方:

$ ./goversion.bash hello
go1.5.1

さらに簡単に・・

動かなくなるかもしれませんが単純にgrepしてもいいかもしれません。

力技:

$ objdump -s hello | grep -E "go[0-9]" | sed -e 's/.*\(go.*\).*/\1/' -e 's/\.\.\+//g'
go1.5.1

他にいい方法があれば教えて下さい!

Binary Hacks ―ハッカー秘伝のテクニック100選

Binary Hacks ―ハッカー秘伝のテクニック100選

よく使う電源タップ

モノ

昔から愛用しているタップについて調べてみた。

背景

買おうと思ったら

f:id:atotto:20151017170931p:plain

取り扱いがなくなっていたorz

一人暮らしの時からこれを3つくらい使って少しづつ増やしてきた。おもちゃや家電が増えるとコンセントですぐに増やせるこれが役に立つ。壁からはみ出ないし、片側に2つ出ているのでコードを逃がしやすく、拡張性が高い。

さて、どうするか。

同じもの?似たものがあるみたい

ELECOM 電源タップ 片面+下方向 3個口 ホワイト T-TR4WH

ELECOM 電源タップ 片面+下方向 3個口 ホワイト T-TR4WH

サイドコーナータップ 3個口 白 [HS-AS315/W-G]

サイドコーナータップ 3個口 白 [HS-AS315/W-G]

安く手に入れるにはどうしましょうかね。。

LinuxからUSB HUBの電源のON/OFFを制御してみる

Device Linux

はじめに

USBの規格上、各ポートの電源の制御ができる(Per-port power switchingというらしい?)そうですが、その機能を実装しているデバイスがあまり無いようです。 いろいろを探してみるとSUGOI HUBがその機能を実装しているということなので買って試してみました。

システムトークス SUGOI HUB4Xシリーズ ブラック アダプタ付 電力供給安定型 USB2-HUB4XA-BK

システムトークス SUGOI HUB4Xシリーズ ブラック アダプタ付 電力供給安定型 USB2-HUB4XA-BK

システムトークス SUGOI HUB4Xシリーズ ホワイト アダプタ付 電力供給安定型 USB2-HUB4XA-WH

システムトークス SUGOI HUB4Xシリーズ ホワイト アダプタ付 電力供給安定型 USB2-HUB4XA-WH

lsusbコマンドで確認する

Linuxならなんでもいいですが、とりあえずraspberry pi 2で。

lsusbで確認してみます:

pi@raspberrypi ~ $ sudo lsusb 
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. 
Bus 001 Device 004: ID 0409:005a NEC Corp. HighSpeed Hub

このなかのNEC Corp.製のチップのデバイスがSUGOI HUBです。BUS=1, Device=4であることがわかります。

hub-ctrlを使って制御する

portの電源制御が簡単にできるようになるので利用してみます:

http://www.gniibe.org/development/ac-power-control-by-USB-hub/index.html

hub-ctrlをコンパイル

$ wget http://www.gniibe.org/oitoite/ac-power-control-by-USB-hub/hub-ctrl.c
$ gcc -O2 -o hub-ctrl hub-ctrl.c -lusb

-vで各portの状態が確認できます:

pi@raspberrypi ~ $ sudo ./hub-ctrl -v
Hub #0 at 001:004
 INFO: individual power switching.
 Hub Port Status:
   Port 1: 0000.0100 power
   Port 2: 0000.0100 power
   Port 3: 0000.0100 power
   Port 4: 0000.0100 power
*snip*

Hub #0 at 001:004が先にlsusbで確認したBUS=1, Device=4のSUGOI HUBです。

操作してみる

portはSUGOI HUBの左から1,2,3,4の順で指定できます。

$ sudo ./hub-ctrl -b 1 -d 4 -P 1 -p 0 # port 1のpower off
$ sudo ./hub-ctrl -b 1 -d 4 -P 1 -p 1 # port 1のpower on
$ sudo ./hub-ctrl -b 1 -d 4 -P 2 -p 0 # port 2のpower off
$ sudo ./hub-ctrl -b 1 -d 4 -P 2 -p 1 # port 2のpower on

なお、port 3,4は操作できませんでした。

これでUSBファンなどが自在に操作できます! USB電源連動のタップを使えば、安全に電化製品を制御できそうですね。

https://gist.github.com/atotto/5c1d55a2cb99ced9f7c7

raspberry piでやっていて気になったこと

hub-ctrl -vで確認するとBUS=1, Device=2にも何か見えています。 これはraspberry piのものです。

Hub #1 at 001:002
 INFO: individual power switching.
 WARN: Port indicators are NOT supported.
 Hub Port Status:
   Port 1: 0000.0503 highspeed power enable connect
   Port 2: 0000.0100 power
   Port 3: 0000.0100 power
   Port 4: 0000.0503 highspeed power enable connect
   Port 5: 0000.0100 power
Hub #2 at 001:001
 INFO: ganged switching.
 WARN: Port indicators are NOT supported.
 Hub Port Status:
   Port 1: 0000.0503 highspeed power enable connect

ためしに、raspberry piのportを操作してみました。 port 1の電源を落とすとLANが落ちました:

$ sudo ./hub-ctrl -b 1 -d 2 -P 1 -p 0

port 2、または、port 4を操作するとraspberry piのUSBの電源がすべて落ちました:

$ sudo ./hub-ctrl -b 1 -d 2 -P 2 -p 0
$ sudo ./hub-ctrl -b 1 -d 2 -P 4 -p 0

残りのport 3,5はよくわかりません。 #どこの資料をみればいいのでしょう。。