/**ぶろぐ*/

コメントアウトしたくなるブログ

wsl2のデバイスサポート

以前wslでシリアル通信に関してまとめた.

matsuneko22.hateblo.jp

あれ以来シリアル通信でwslを使うことはなかったけど,ほかのアプリケーション開発などでは利用していた(管理者権限ないPCでかなり役に立った).

この記事書いて1年以上たったが,その間にhyper-vのサブセット?を利用した実装に切り替えたwsl2が発表され,IOが早くなるとかならないとかで期待が膨らんでる.

ところで実装を大きく変わるwsl2ではデバイスのアクセスはどのようになるのか,公式をのぞいてみた.

docs.microsoft.com

WSL 2 ハードウェアアクセスサポートの初回リリースでは、GPU、serial、USBs にアクセスできなくなる場合があります。

できないのか.そのあとの文は機械翻訳の癖満載で読みにくいのだけれども,将来的にはサポートするつもりでその間はwsl1を利用してとのこと.僕の解釈があってれば.

ところでhyper-vでusbデバイス仮想マシンにマウントできたっけ.windowsはできた気がするけど,linuxに関してはドキュメントも見つからなのでサポートされていないのかな.そうだとするとwsl2でデバイスの操作ができるようになるの,結構先なのかもしれない?

m5stackの開発環境構築(arduino ide編)

m5stack fireを勢いで買って開発環境を作ってハローワールドした話を書きます.

m5stack fireとは

m5stack basicと比べてPSRAMが搭載されていたり,MPU6050,マイクとかが付いていたりする.

構築環境

手順

1. ドライバの導入

公式からCP210X Driverを落としてインストールする. www.m5stack.com インストールしてm5stackを接続するとSilicon Labs CP210x USB to UART Bridgeとして認識されるようになるはず.

ちなみにteratermなどでボーレートを115200に設定し接続するとm5stack内部のmicro pythonインタプリタで簡単なプログラムが書けるようになる.

f:id:matsuneko22:20190413020647j:plain

2. arduino ideの設定

  1. 環境設定から追加のボードマネージャのURLに https://dl.espressif.com/dl/package_esp32_index.json を追加.
  2. ツール→ボード→ボードマネージャからesp32をインストール.
  3. スケッチ→ライブラリのインクルード→ライブラリの管理でm5stackを検索してインストール.

ハローワールドしてみる

新しくsketchを作成してLCDに適当な文字を表示するプログラムを書く.

#include <M5Stack.h>

void setup() {
  M5.begin();
}

void loop() {
  M5.Lcd.println("Hello World");
  return;
}

で下記の設定で書き込む.

  • ボード: M5Stack-Core-ESP32
  • Upload speed: 115200
  • Flash Frequency: 80MHz
  • Flash mode: QIO

書き込みが終わるとLCDに何か表示されるはず. f:id:matsuneko22:20190413172341j:plain なんかループしてる...なんで...

おわりに

公式にも手順が載っていなくてまとめてみたけど,思っていたよりやること少なかったです. arduino ideのボードの追加も調べた限り以前より簡単になっているみたい.

とりあえず今日はここまで.せっかくMPU6050載っているし何か作りたいけど,思いつかないので当分放置しそう.

おしまい

Firefox Screenshotsのオンラインに保存する機能を無効化する方法

ここ最近Firefox Screenshotsをスクショとるために使うことが多くなったけど,オンラインに保存する機能だけは全く使わないので無効化する方法を探ってみた. f:id:matsuneko22:20180619233548p:plain

  1. about:configにアクセスする.
  2. 動作保証対象外になります!の画面で危険性を承知して使用するを押下する.
  3. 検索のところにextensions.screenshots.upload-disabledを入力する.
  4. ヒットした項目をtrueに変更する.

f:id:matsuneko22:20180619234010p:plain

設定が終わればオンラインに保存するボタンが非表示になるはず. f:id:matsuneko22:20180619234235p:plain

おわり

windows10のユーザフォルダにある見えないシンボリックリンクの正体

WSLで作業しているとき, /mnt/c/Users/User/ 内で ls を実行するとアクセス権限のメッセージが出ることに気が付いた.

ls: cannot read symbolic link 'Application Data': Permission denied
ls: cannot read symbolic link 'Cookies': Permission denied
ls: cannot read symbolic link 'Local Settings': Permission denied
ls: cannot read symbolic link 'My Documents': Permission denied
ls: cannot read symbolic link 'NetHood': Permission denied
ls: cannot read symbolic link 'PrintHood': Permission denied
ls: cannot read symbolic link 'Recent': Permission denied
ls: cannot read symbolic link 'SendTo': Permission denied
ls: cannot read symbolic link 'Templates': Permission denied
ls: cannot read symbolic link 'スタート メニュー': Permission denied

こんな感じで身に覚えのないファイルが表示されるので,どうにか消せないものか調べてみた.

まずpowershellでアクセスできるか確認してみる.

PS C:\Users\User> ls


    ディレクトリ: C:\Users\User


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       2017/11/12     18:33                .dlv
d-----       2017/11/16     14:53                .ssh
d-----       2017/12/15     16:31                .texlive2017
d-----       2017/10/18     22:52                .vscode
d-r---       2018/01/07      3:08                3D Objects
d-r---       2018/01/07      3:08                Contacts
d-r---       2018/01/16     16:13                Desktop
d-r---       2018/01/18     15:05                Documents
d-r---       2018/01/15     15:30                Downloads
d-r---       2018/01/07      3:08                Favorites
d-----       2017/11/04      1:11                go
d-r---       2018/01/07      3:08                Links
d-r---       2018/01/13     17:52                Music
d-r---       2017/12/08     14:21                OneDrive
d-r---       2018/01/15     18:13                Pictures
d-----       2017/10/13     10:51                Roaming
d-r---       2018/01/07      3:08                Saved Games
d-r---       2018/01/07      3:08                Searches
d-----       2017/10/20     12:22                source
d-r---       2018/01/07     14:35                Videos
d-----       2017/10/30      0:10                Workspace
-a----       2018/01/19     23:45             13 .bash_history
-a----       2017/12/15     17:20             59 .gitconfig
-a----       2017/12/26     15:00           1060 .viminfo

My Documentsなんてないじゃん.と思ったけど隠しディレクトリ表示されていないので -Hidden 使って表示してみた.

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d--h--       2017/10/20     16:04                AppData
d--hsl       2017/10/20     16:04                Application Data
d--hsl       2017/10/20     16:04                Cookies
d--hs-       2018/01/18     18:27                IntelGraphicsProfiles
d--hsl       2017/10/20     16:04                Local Settings
d--h--       2017/10/20     16:10                MicrosoftEdgeBackups
d--hsl       2017/10/20     16:04                My Documents
d--hsl       2017/10/20     16:04                NetHood
d--hsl       2017/10/20     16:04                PrintHood
d--hsl       2017/10/20     16:04                Recent
d--hsl       2017/10/20     16:04                SendTo
d--hsl       2017/10/20     16:04                Templates
d--hsl       2017/10/20     16:04                スタート メニュー

で,中を見てみる.

PS C:\Users\User> cd '.\My Documents\'
PS C:\Users\User\My Documents> ls
ls : パス 'C:\Users\User\My Documents' へのアクセスが拒否されました。
発生場所 行:1 文字:1
+ ls
+ ~~
    + CategoryInfo          : PermissionDenied: (C:\Users\User\My Documents:String) [Get-ChildItem], UnauthorizedAcc
   essException
    + FullyQualifiedErrorId : DirUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand

わからん.

ということで,謎のディレクトリの名前だけで調べてたぶんこれだろうと考えているものがwindowsの特殊フォルダ.

Special folder - Wikipedia

名前は一致しているからたぶんそう. わからん.


ここから追記

この記事を投稿してから,有力な情報をいただいたので書き残しておきます.

上記の隠しシンボリックリンクだと思っていたものは以前のwindowsで使われていたフォルダジャンクションだったようで,後方互換のために残っているらしい(たしかにxpでc:\My Documentsでアクセスで来ていた気がする).

なので,消せないのではという結論に至った.


また追記

WSL関係なかったので改題しました.

WSLでシリアル通信をする

windows10のFall creators updateからWSLからCOMポートのデバイスとシリアル通信ができるようになった。

Serial Support on the Windows Subsystem for Linux – Windows Subsystem for Linux

と言ってもあまり解説記事がないので試してみる。

WSLでのシリアル通信方法

WindowsのCOM Portは1~256まであるが、Linuxのシリアルデバイス/dev/ 以下のの任意の名前で管理されるため /dev/ttyS* の1~191でマッピングしているとのこと。
即ちデバイスのポートが COM1 の時、WSLでは /dev/ttyS1 になる。

用意するもの

  • Windows10 v1709が入ったPC
  • シリアル通信するデバイス

今回は研究室に落ちていたLPC1768を使用する。*1

f:id:matsuneko22:20171209144329j:plain
けんきゅうしつにいっぱいある(いっぱいはない

入っているプログラムの仕様は把握していないが、 Nothing worked... と配信されているのは確認している。
ちなみにwindowsにmbedのシリアルドライバーは既に導入済み。

接続ポートの確認

lpc1768がどのポートに接続しているか確認する。 デバイスマネージャーからポートの項目を参照。

f:id:matsuneko22:20171208185236p:plain

WSLの設定

WSLを起動し、接続する /dev/ttyS3のアクセス権限を変更する。

sudo chmod 666 /dev/ttyS3

シリアル通信の表示

次にscreenで /dev/ttyS3 に接続する。

screen /dev/ttyS3

するとターミナルにlpc1768から流れてくるメッセージが表示される。 f:id:matsuneko22:20171209143706j:plain

結構簡単だった。

*1:LPC1768以外でもできると思う。ラズパイとかのほうが手軽に試せるんじゃないかな

docker for windowsを使ってlaravelの開発環境を作る

about

インターンでlaravelを使った案件があって,とりあえず勉強にと自宅のwindowsに開発環境を作ることにした. しかしwindowsでのphpの開発環境構築は面倒くさい印象を持っていたので,dockerとlaradockでサクッと作る.

構築する環境

  • windows10 pro

dockerをいれる

windows用のdockerが,docker for windowsという名で公式から出ている.

docs.docker.com

これはhyper-vを利用しているので,windows10 homeは使用できない.その場合はVirtualBoxを使用するdocker Toolboxを使用してみるといいかも.

www.docker.com 今回はdocker for windowsを使用する.

手順

  1. インストーラーをダウンロード・実行する.
  2. インストール完了後ログアウトされるのでログインする.(hyper-vを無効化していた場合は再起動になるかもしれない)
  3. dockerの設定からshard drivesにCドライブをあてる.(どのドライブをあてるかはお好みで) f:id:matsuneko22:20170908003648j:plain

ネットワークの設定はインストーラがやってくれるので必要ない.

laradockの導入

laradockはlarabelの開発環境をdocker上に作成するためのツールである.

github.com これを使うとDBやwebサーバのコンテナを簡単にそろえることができる.

手順

プロジェクトのフォルダの作成

  1. shard drives内の任意の場所にプロジェクトのフォルダを作成する.
  2. そのフォルダ内にlaradockをダウンロードする. ディレクトリ構造はこんな感じになる.
project
|
|_laradock

laradockの設定ファイルの編集

laradockのフォルダ内にenv-exampleがあるので,それを.envとしてコピーする. .envでは使用するコンテナの設定パラメータがあり,書き換えることでコンテナを制御することができる. 今回はNginx,postgres,redisのコンテナを利用する*1. 編集箇所は以下の通り.

1.ホストIPの設定

windowsIPアドレスに書き換える

// DOCKER_HOST_IP=10.0.75.1
DOCKER_HOST_IP=169.254.80.80

2.xdebugのインストール設定

WORKSPACE_INSTALL_XDEBUG=true
PHP_FPM_INSTALL_XDEBUG=true

3.Nginxのポート設定

windowsがすでに使用しているポートと被らないように変更.

// NGINX_HOST_HTTP_PORT=80
NGINX_HOST_HTTP_PORT=8080

コンテナの起動

コンテナの起動は一つのコマンドでできる.

  1. powershellを起動し,laradockのフォルダまで移動.
  2. docker up -d nginx postgres redisを実行*2

完了すると起動しているコンテナの一覧はこうなる.

PS C:\略\project\laradock> docker-compose ps
         Name                        Command               State                      Ports
-------------------------------------------------------------------------------------------
laradock_applications_1   /true                            Exit 0
laradock_nginx_1          nginx                            Up       0.0.0.0:443->443/tcp, 0
laradock_php-fpm_1        docker-php-entrypoint php-fpm    Up       9000/tcp
laradock_postgres_1       docker-entrypoint.sh postgres    Exit 1
laradock_redis_1          docker-entrypoint.sh redis ...   Up       0.0.0.0:6379->6379/tcp
laradock_workspace_1      /sbin/my_init                    Up       0.0.0.0:2222->22/tcp

laravelのプロジェクトの作成

コンテナを作成したあと,コンテナ内に入りlaravelのプロジェクトを作成する. 前項に引き続きlaradockのディレクトリ内でdocker-compose exec workspace bashを実行. 無事には入れたら,composerを使って作成.

PS C:\略\project\laradock> docker-compose exec workspace bash
root@d9443b2831a8:/var/www# composer create-project --prefer-dist laravel/laravel my_app

作成したらexitでコンテナから抜ける. 次に.envファイルのAPPLICATIONのパスを設定.

// APPLICATION=../
APPLICATION=../my_app/

そしたら docker up -d nginx postgres redisをもう一回実行*3. 完了したらhttp://localhost:8080にアクセス. こんな画面が出てきたら成功. f:id:matsuneko22:20170908015438j:plain プロジェクトフォルダの最終的な構造はこんな感じ.

project
|
|_ laradock
|
|_ my_app

ホストのwindowsの方にもmy_appのフォルダが作成されており,これを編集すると逐次コンテナのほうに反映されるらしい.

おわりに

laradock入れてlaravelのプロジェクトを作成するのはそんなに難しくはなかったけど,xdebugの設定だけがよくわからなかった. xdebugを使いたい場合は以下の記事を参考にするといいかも.

qiita.com

rosの記事はいつかまた書きます. おわり

参考

Frequently asked questions (FAQ) | Docker Documentation

Laravel開発環境をLaradockで構築する | Tips Note by TAM

Laradock

*1:ほかにもapache2やmysqlもつかえるらしいので公式見てほしい

*2:コンテナのbuildと起動を同時にやってくれる

*3:またか・・・

ubuntu16.04にROSの開発環境構築

目的

ROSを入れて、turtlebot simulatorを動かす。

ROSってなに?

Robot Operating System
Real Time OSと勘違いしていた。
本人も理解できていないので公式のドキュメントを見てほしい。

ROSを使うことになった経緯

研究室で使うから(なぜこうなった)。
とりあえず、やるぞー!(やけくそ)

環境詳細

OS:ubuntu 16.04 LTS
ROS:Kinetic Kame

ROSの導入

このチュートリアルを参考に導入する。

rosのインストール

まず、ppaの追加。

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
sudo apt update

次にROSのインストール。今回はturtlebotのシミュレータをしたいのでGazeboも含まれるdesktop-full版を入れる。

sudo apt install ros-kinetic-desktop-full

rosdepの初期化

rosdepとは、rosの依存関係を管理するソフト。rosdepの初期化しておく。

sudo rosdep init
rosdep update

rosの環境変数を読み込む

rosを実行するためにはrosの環境変数を読み込む必要がある。その環境変数を読み込むスクリプトが用意されているので事前に実行しておく。

source /opt/ros/kinetic/setup.bash

ちなみに、bashrcに書いておくことで実行忘れを防げておすすめ。

echo "source /opt/ros/kinetic/setup.bash" >> .bashrc

rosinstall

開発で使うrosinstallを導入。(これ何?)

sudo apt install python-rosintall

python3-rosinstallもあるが、依存関係を解決していく過程でrosが削除されたので断念した。

"Hello World!"する

へろーわーるど(疲れたので次回に回します・・・)

turtlebotのツール導入

turtlebot開発に必要なツールを一気に入れる。

sudo apt install ros-kinetic-kobuki* ros-kinetic-rocon* ros-kinetic-ar*

turtlebotシミュレータを動かす

まず、以下のコマンドでgazeboを起動。

roslaunch turtlebot_gazebo turtlebot_world.launch

gazeboの起動が遅いので、その間にコーヒーを入れてくる。
次に、新しいターミナルを開いて、次のコマンドを実行。

roslaunch turtlebot_teleop keyboard_teleop.launch 

turtlebotの操作コマンドの一覧が出てくる。操作するときはこのターミナルから行う。
最後にこのコマンドを実行。

roslaunch turtlebot_bringup minimal.launch 

そうすると、一つ前の手順で実行したターミナルで操作ができるようになるはず。 (turtlebotのお散歩を楽しむ) f:id:matsuneko22:20161203221047p:plain

最後に

あまり日本語資料がなかったので、自分で試したことをまとめてみました。おかしなところがあったらコメントお願いします。 あと、すごくまじめな内容になってしまったので、いつもの変な内容を期待していた人たちには申し訳ないです。

今回参考にした資料

demura.net | ロボットプログラミングⅡ:第4週 シミュレータを動かそう!

kinetic/Installation/Ubuntu - ROS Wiki