2017/09/04(月) [n年前の日記]
#1 [python][pi3d] pi3dでハローワールド
せっかく Windows上でも pi3d が動くようになったので、少し使い方を調べてみたり。
◎ 球を出す。 :
_pi3dの公式ドキュメント
に従って、ウインドウを生成して球を出してみたり。こんな感じに。
一応、ESCキーを押したら終了するようにしてある。じゃないとスクリプトを簡単に終了させられないので。
ソースは以下。
_helloworld.py
python helloworld.py で実行できる。
Windows10 x64上だけではなく、以下の環境でも同じように表示された。
一応、ESCキーを押したら終了するようにしてある。じゃないとスクリプトを簡単に終了させられないので。
ソースは以下。
_helloworld.py
u""" pi3d Hello World. 球を生成して描画するサンプル。 ESCキーで終了する。 Windows10 x64 + Python 2.7.12 32bit + pi3d 2.20 """ from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals import pi3d # ウインドウ生成 display = pi3d.Display.create(w=640, h=480, frames_per_second=60) # 球を生成 ball = pi3d.Sphere(z=5.0) # キーボード取得用クラスを生成 keys = pi3d.Keyboard() # メインループ while display.loop_running(): # 球を描画 ball.draw() if keys.read() == 27: # ESCキーが押されたらループを抜けて終了 keys.close() display.destroy() break
python helloworld.py で実行できる。
Windows10 x64上だけではなく、以下の環境でも同じように表示された。
- Ubuntu 16.04 + Python 2.7.12
- Raspberry Pi3 + raspbian stretch + Python 2.7.13
◎ 少し解説。 :
pi3d を使うときは、import pi3d を最初のあたりに書いて、「このスクリプトはpi3dを使うよ」とPythonに教えてやる。
上記スクリプトの最初のほうに、from __future__ import なんたら、みたいな行が列挙されてるけど。これは、Python 2.7を使いつつも Python 3.x っぽく動かすための指定らしい。コレを入れとけば Python 2.7 と Python 3.x の両方で動くスクリプトが書けるのだろう。たぶん。Pythonってよく知らないから自信ないけど。
display = pi3d.Display.create(w=640, h=480, frames_per_second=60) で、ウインドウを生成。w,h が、ウインドウ横幅と縦幅の指定。frames_per_second で最大フレームレートを指定。この場合、640x480ドット、60FPSのウインドウを作れ、と指定してる。
フレームレートを指定しないと、CPUが全力でループを回す状態になって、その分、他の処理がおろそかになるのだとか。バックグラウンドで音楽を鳴らしつつ、みたいなことをしたいときはフレームレートを指定したほうがいいよ、とドキュメントには書いてあった。
ball = pi3d.Sphere(z=5.0) で、球を生成。pi3d.Sphere(x=0.0, y=0.0, z=0.0) といった感じの指定で、位置を設定できるらしい。
if keys.read() == 27: は、ESCキーが押されたかチェックしてる。…いきなり直接数値を書いて比較してるあたりがなんだか引っ掛かるなあ。
そのままいきなりスクリプトを終了させると、キー入力関係の不具合が発生する時があるらしいので、keys.close() を呼んでから終了したほうがいいかも、みたいなことが公式ドキュメントに書いてあった。pi3d_demos のサンプルスクリプト群も大体そんな感じの記述になってるっぽい。
display.destroy() でウインドウを破棄、してるのかな。たぶん。
上記スクリプトの最初のほうに、from __future__ import なんたら、みたいな行が列挙されてるけど。これは、Python 2.7を使いつつも Python 3.x っぽく動かすための指定らしい。コレを入れとけば Python 2.7 と Python 3.x の両方で動くスクリプトが書けるのだろう。たぶん。Pythonってよく知らないから自信ないけど。
display = pi3d.Display.create(w=640, h=480, frames_per_second=60) で、ウインドウを生成。w,h が、ウインドウ横幅と縦幅の指定。frames_per_second で最大フレームレートを指定。この場合、640x480ドット、60FPSのウインドウを作れ、と指定してる。
フレームレートを指定しないと、CPUが全力でループを回す状態になって、その分、他の処理がおろそかになるのだとか。バックグラウンドで音楽を鳴らしつつ、みたいなことをしたいときはフレームレートを指定したほうがいいよ、とドキュメントには書いてあった。
ball = pi3d.Sphere(z=5.0) で、球を生成。pi3d.Sphere(x=0.0, y=0.0, z=0.0) といった感じの指定で、位置を設定できるらしい。
if keys.read() == 27: は、ESCキーが押されたかチェックしてる。…いきなり直接数値を書いて比較してるあたりがなんだか引っ掛かるなあ。
そのままいきなりスクリプトを終了させると、キー入力関係の不具合が発生する時があるらしいので、keys.close() を呼んでから終了したほうがいいかも、みたいなことが公式ドキュメントに書いてあった。pi3d_demos のサンプルスクリプト群も大体そんな感じの記述になってるっぽい。
display.destroy() でウインドウを破棄、してるのかな。たぶん。
◎ 球を動かしてみる。 :
静止画ではつまらないので、球を動かしてみたい。sinカーブで位置を変えてみる。
これも、Windows10 x64、Ubuntu 16.04、Raspberry Pi3上で同じように動いた。
ソースは以下。
_helloworld2.py
python helloworld2.py で実行できる。
これも、Windows10 x64、Ubuntu 16.04、Raspberry Pi3上で同じように動いた。
ソースは以下。
_helloworld2.py
u""" pi3d Hello World. 球を生成して描画するサンプル。位置を動かしてみる。 ESCキーで終了する。 Windows10 x64 + Python 2.7.12 32bit + pi3d 2.20 """ from __future__ import absolute_import from __future__ import division from __future__ import print_function from __future__ import unicode_literals import math import pi3d # ウインドウ生成 display = pi3d.Display.create(w=640, h=480, frames_per_second=60) x, y, z = 0.0, 0.0, 15.0 x_ang, y_ang, z_ang = 0.0, 0.0, 0.0 # 球を生成 ball = pi3d.Sphere(x=x, y=y, z=z) # キーボード取得用クラスを生成 keys = pi3d.Keyboard() # メインループ while display.loop_running(): # sinカーブで位置を動かす x_ang += 3.0 y_ang += 4.5 z_ang += 0.8 x = 5.0 * math.sin(math.radians(x_ang)) y = 3.0 * math.sin(math.radians(y_ang)) z = 7.0 * math.sin(math.radians(z_ang)) + 15.0 # 球の位置を設定 ball.position(x, y, z) # 球を描画 ball.draw() if keys.read() == 27: # ESCキーが押されたらループを抜けて終了 keys.close() display.destroy() break
python helloworld2.py で実行できる。
[ ツッコむ ]
#2 [ubuntu] x11vncを使うとテンキーが送れない
Windows10 x64 + VNC viewer から、Ubuntu 16.04 + x11vnc にアクセスして、デスクトップ画面を表示して操作してたのだけど。Windows側でテンキーを押しても正常に送られてないことに気づいたり。ちなみに Windows側の VNC viewer は UltraVNC同梱の Viewer。
Ubuntu側で vncserver を立ち上げて、そこにアクセスした場合は、テンキーもちゃんと送れる…。ということは VNC viewer の設定がおかしいわけではなく、x11vnc のほうで設定が必要なのかな…? ググってみたけど解決策が見つからず。
まあ、テンキーが使えなくても、どうにかなるかな…。
Ubuntu側で vncserver を立ち上げて、そこにアクセスした場合は、テンキーもちゃんと送れる…。ということは VNC viewer の設定がおかしいわけではなく、x11vnc のほうで設定が必要なのかな…? ググってみたけど解決策が見つからず。
まあ、テンキーが使えなくても、どうにかなるかな…。
◎ TigerVNCをアンインストール。 :
どうも時々 VNC viewer が落ちてしまう。もしかして、Ubuntu側で TigerVNC を使ってるのがよろしくないのかな。公式リポジトリに入ってないパッケージだし、ちょっと不安定だったりする可能性がありそうな。や、どこが原因で落ちてるのか分からないので、濡れ衣かもしれんけど。
とりあえず TigerVNC をアンインストールして、代わりに vnc4server をインストールしてみたり。後者で安定動作してくれたらいいのだけど、さて。
元々 TigerVNC をインストールしたのは、x0vncserver を試してみたかったから、だけど。vnc4server にも、x0vnc4server が入っていて、インストールすると x0vncserver として割り当ててくれるので、x0vncserver を使いたくなった時も困ったりはしないだろう…。
とりあえず TigerVNC をアンインストールして、代わりに vnc4server をインストールしてみたり。後者で安定動作してくれたらいいのだけど、さて。
sudo aptitude purge tigervncserver sudo aptitude install vnc4server
元々 TigerVNC をインストールしたのは、x0vncserver を試してみたかったから、だけど。vnc4server にも、x0vnc4server が入っていて、インストールすると x0vncserver として割り当ててくれるので、x0vncserver を使いたくなった時も困ったりはしないだろう…。
[ ツッコむ ]
#3 [ubuntu] Ubuntu機に winbind をインストール
Ubuntu 16.04機からWindows10 x64機のホスト名が見えない。winbind をインストーすることで解決、という事例を見かけたので試してみたり。
ping Windows機ホスト名、が通るようになった。
以下、参考ページ。
_Winbind をインストールしたのに NetBIOS nameでアクセスできない on Ubuntu 13.10 | 穀風
_まさおのブログ (表): Ubuntu で wins の設定
sudo aptitude install winbind libnss-winbind
sudo vi /etc/nsswitch.conf
hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname ↓ hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname mdns4 wins
sudo service winbind restart
ping Windows機ホスト名、が通るようになった。
以下、参考ページ。
_Winbind をインストールしたのに NetBIOS nameでアクセスできない on Ubuntu 13.10 | 穀風
_まさおのブログ (表): Ubuntu で wins の設定
◎ Ubuntu側からWindowsの共有フォルダにアクセス。 :
Ubuntu 16.04側から、Windows10 x64上の共有フォルダにアクセスしたい。cifs-utils なるパッケージをインストールすればマウントできるらしい。試してみたり。
以下でマウント。パスワード指定は省略可能で、その場合コマンドを実行した段階で尋ねてくるのだとか。
これで実際にマウントできた。
上記の場合、所有者が root:root になる。変更した状態でマウントしたいなら、uidとgidを指定すればいいらしい。
以下、参考ページ。
_Ubuntu から Windows の共有フォルダをマウントして利用する - Qiita
_【cifs-1】UbuntuからWindowsの共有フォルダを手動マウントする | インフラエンジニアのメモ
sudo aptitude install cifs-utils sudo mkdir /mnt/windows
以下でマウント。パスワード指定は省略可能で、その場合コマンドを実行した段階で尋ねてくるのだとか。
sudo mount -t cifs -o username=Windowsユーザ名,password=Windowsパスワード //Windowsホスト名/共有フォルダ名 /mnt/windows or sudo mount.cifs -o username=Windowsユーザー名 //Windowsホスト名/共有フォルダ名 /mnt/windows
これで実際にマウントできた。
上記の場合、所有者が root:root になる。変更した状態でマウントしたいなら、uidとgidを指定すればいいらしい。
sudo mount.cifs -o username=Windowsユーザー名,uid=ubuntu,gid=ubuntu //Windowsホスト名/共有フォルダ名 /mnt/windows
以下、参考ページ。
_Ubuntu から Windows の共有フォルダをマウントして利用する - Qiita
_【cifs-1】UbuntuからWindowsの共有フォルダを手動マウントする | インフラエンジニアのメモ
[ ツッコむ ]
#4 [pc] Bluetooth接続のキーボードが欲しいのだけど
Raspberry Pi3 に一々ワイヤレスキーボードの子機を差すのが面倒臭くなってきた…。Raspberry Pi3はBluetoothを内蔵してることだし、Bluetooth接続のキーボードが欲しくなってきた…。
しかし…。
いっそ、仮想キーボードを使うという選択肢は…どうだろう…。Bluetooth でマウスだけを接続して…。
_Raspberry Pi の仮想キーボード | Raspberry Pi
しかし…。
- どうせなら接続先を複数台登録=マルチペアリング機能があるとありがたい。サブPC群でも使えたら便利だし。
- カーソルキーの配置がまともじゃないと困る。自分はカーソルキーの打鍵数が実測でダントツなので。
- Insert(Ins)キーは必須。コレがないと貼り付け作業ができない。
- ファンクションキーはファンクションキーとして働いてほしい。叩くとまずはマルチメディアキーとして働く、とかふざけてるのかな。
- Linuxで使いたいので設定ユーティリティがWindows専用、とか困る。キー割り当ての設定等しなくてもそこそこ使えないと。
- できれば…小さいと嬉しい…。できれば、だけど。
いっそ、仮想キーボードを使うという選択肢は…どうだろう…。Bluetooth でマウスだけを接続して…。
_Raspberry Pi の仮想キーボード | Raspberry Pi
[ ツッコむ ]
以上、1 日分です。