MyEnigma

とある自律移動システムエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

ROSのbagファイルの圧縮・解凍方法と便利ツールの紹介

目次

  • 目次
  • はじめに
  • bagファイルの圧縮と解凍方法
    • rosbag recordでbagファイルに保存しながら圧縮
    • 指定したbagファイルを圧縮
    • 指定したbagファイルを解凍
  • 指定したディレクトリ以下のbagファイルを一括で圧縮・解凍するPythonスクリプト
    • 使い方
  • 参考資料
  • MyEnigma Supporters

はじめに

ROSのbagファイルは

ロボットの開発において非常に重要ですが、

画像データや、点群データなどを

保存していると、

データ量が非常に多くなりがちです。

 

ROSのデフォルトツールであるrosbagには、

実はbagファイルの圧縮・解凍の機能がついています。

rosbag/Commandline - ROS Wiki

この機能を使うと普通にbagファイルを保存した時よりも、

約半分から1/5になりました。

(bagファイルのデータによります)

 

今回は、このrosbagによるbagファイルの圧縮と解凍方法と、

それを利用した便利ツールを紹介したいと思います。

 

続きを読む

PythonのGUIライブラリKivyによるクロスプラットフォームGUIアプリ作成入門

目次

  • 目次
  • はじめに
  • Windowを作る
  • アクションバーを作る
  • テキスト入力ボックスを作る
  • ボタンのUIを作る
  • スライダーUIを作る
  • チェックボックスのUIを作る
  • matplotlibのグラフをkivyの一部として利用する
  • 二次元の地図データを埋め込む
  • 参考資料
  • MyEnigma Supporters

はじめに

先日、

PythonのマルチプラットフォームGUIライブラリである

Kivyを紹介しましたが、

myenigma.hatenablog.com

myenigma.hatenablog.com

今回は、Kivyによる基本的なGUIシステムの

作り方を紹介したいと思います。

 

また、この記事で紹介するすべてのサンプルコードは

下記のGitHubリポジトリでも公開されています。

github.com

 

また、下記のそれぞれのサンプルコードを、

Mac, Ubuntu, Windows, iOS(iPhone)で実行した

スクリーンショットも貼りました。

 

続きを読む

PythonでiOSアプリを作ることができるKivy for iosの使い方と注意点

目次

  • 目次
  • はじめに
  • インストール方法と注意点
    • 注意点1: kivy for iosはPython2.7.xしか対応していない。
    • 注意点2: build_all.shを使う方法は廃止
  • kivy for iosで簡単なiOSアプリを作って、端末にインストールする方法
  • kivy for iosのtoolchain.pyの使い方
    • recipes: kivy for ios用のビルドされたライブラリの一覧を表示
    • status: kivy for ios用のレシピとビルド状態の表示
    • build: 指定したレシピをビルド
    • clean: 指定したレシピをクリーン
    • create: xcodeのプロジェクトを作成
    • update: 既存のxcodeプロジェクトを更新
    • launchimage: 画像データからアプリのLaunch画像をxcodeのプロジェクトに登録
    • icon: 画像データからアプリのアイコン画像をxcodeのプロジェクトに登録
  • 最後に
  • 参考資料
  • MyEnigma Supporters

はじめに

先日、Kivyを使った、

マルチプラットフォームにおける

Hello world GUIアプリの作り方を説明しました。

myenigma.hatenablog.com

 

今回はその中でもiOSアプリを作成できる、

kivy for iOSによるアプリの作り方の注意点や、

ツール群の使い方の説明をしたいと思います。

github.com

 

ネットで調べると、

いくつかkivy for iOSでモバイルアプリを作る記事を見かけますが、

build_all.shを使う古いバージョンの説明が多いため、

新しいバージョンの説明をしたいと思います。

 

続きを読む

PythonのマルチプラットフォームGUIライブラリkivyを使ってMac, Ubuntu, iOS用のGUIアプリを作る方法

目次

はじめに

先日、

PythonのGUIライブラリPyQtの使い方を紹介しました。

myenigma.hatenablog.com

 

PyQtは使いやすいですし、

綺麗なGUIが作れるので良いのですが、

2つ問題があります。

 

1. iOS,AndroidのGUIを作ることはできない。

PyQtは基本的にWindows, Mac, Linuxなどの

コンピューター上のみの対応で、

スマホや、タブレットには対応していません。

(swiftやPythonista for iOSを使えば良いという声も聞こえてきそうですが、

Pythonで無料&単一ソースコードが理想です。)

 

2. ライセンスが微妙

PyQtはGPL or 商用ライセンスのライセンス形態なので、

個人的に遊ぶ分には問題無いと思いますが、

もしかしたら仕事で使うかもしれないと思うと、

色々悩ましいと思います。

(PySideというLPGLの実装形態もありますが、

こちらは実装が古いようです。)

 

そこで、上記の問題を解決するような

PythonのマルチプラットフォームGUIライブラリを探した所、

KivyというOSS GUIライブラリを見つけました。

kivy.org

github.com

 

kivyは、

Windows, OS X, Linuxだけでなく、

iOSやAndroidにも対応しています。

またライセンスもMITで安心です。

 

今回の記事では、

kivyの概要とインストール方法、

そして、kivyを使ってMac, ubuntu, Windows, iOS上で

非常に簡単なGUIアプリを作成する方法について

説明したいと思います。

(Androidに関しては、

後日追記したいと思います。)

 

kivyとは?

Kivyはオープンソースで

クロスプラットフォームな

Python GUIフレームワークです。

マルチタッチなどのユーザインターフェイスを簡単に実装できます。

github.com

 

KivyはPythonとCythonで作成されており、

OpenGL ES 2をベースにしています。

これにより、GPUによるスムーズなレンダリングが可能になっています。

 

加えて、

Windows, OS X, Linux, Android iOS, そして、RasberryPI上で、

単一の同じコードで利用することができるのも特徴です。

 

また、

前述の通り、KivyのライセンスはMITなので、

商用、非商用の両方で使いやすい形になっています。

 

各プラットフォームへのインストール方法

各プラットフォームへのインストール方法は下記の通りです。

Macへのインストール

公式マニュアル通り、

brewとpipを使った方法でインストールできました。

$ brew install sdl2 sdl2_image sdl2_ttf sdl2_mixer gstreamer

$ pip install -I Cython==0.23

$ USE_OSX_FRAMEWORKS=0 pip install kivy

 

Macへのインストール(for iOS)

iOS用にkivyを使う場合は、

色々準備が必要です。

基本的には、下記のREADMEにある通りに

ソフトのインストールとビルドを実施します。

 

初めに、下記をインストールします。

$ xcode-select --install

$ brew install autoconf automake libtool pkg-config

$ brew link libtool

$ pip install cython==0.21

cythonのバージョンが先ほどと違うような気がしますが。。。

 

続いて、kivy-iosのソースコードをクローンして、

kivy-iosをビルドします。

$ git clone https://github.com/kivy/kivy-ios.git

$ cd kivy-ios

$ ./toolchain.py build kivy

上記のビルドは結構時間がかかりました。

(自分の場合は15分ほど)

 

あとは、下記のコマンドでtoolchain.pyを起動して、

使い方の説明が表示されたら、インストールは完了です。

$ ./toolchain.py

f:id:meison_amsl:20160506140918p:plain

 

Ubuntuへのインストール

公式のドキュメント通りでOKでした。

$ sudo add-apt-repository ppa:kivy-team/kivy

$ sudo apt-get update

$ sudo apt-get install python-kivy

 

Windowのインストール

公式のドキュメント通り、pipでインストールしました。

 

$ python -m pip install --upgrade pip wheel setuptools

$ python -m pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew

$ python -m pip install kivy.deps.gstreamer --extra-index-url https://kivy.org/downloads/packages/simple/

$ python -m pip install kivy

 

各プラットフォームでHello world GUIを表示する方法

続いて、

各プラットフォームにおいて、

Hello worldを表示させる

GUI Windowを作る方法について説明します。

 

まず初めに、下記のpythonコードを

適当な名前(今回はhelloworld.py)で保存します。

from kivy.app import App
from kivy.uix.button import Button

class TestApp(App):
    def build(self):
        return Button(text='Hello World')

TestApp().run()

上記のpythonコードを

各プラットフォームで実行させる方法は下記の通りです。

 

MacでのHello world GUI

上記のpythonスクリプトを起動しただけで、

Hello world GUIアプリが表示されました。

$ python ./helloworld.py

f:id:meison_amsl:20160212144051p:plain

 

UbuntuでのHello world GUI

Ubuntuも、上記のスクリプトを起動しただけで

アプリが表示されました

$ python ./helloworld.py

f:id:meison_amsl:20160212144136p:plain

 

WindowsでのHello world GUI

Windowsも、上記のスクリプトを起動しただけで

アプリが表示されましたが、

なぜかGit for Windowsについている

git bashを使った場合、

アプリがエラーで落ちてしまいました。

標準のコマンドプロンプトから起動すると

ちゃんと実行できました。

f:id:meison_amsl:20160511184747j:plain

 

iOSでのHello world GUI

iOSでGUIアプリを起動させるのは

アプリとしてiOS端末にソフトをインストールする必要があるため、

すこし手順が必要です。

また、いくつかハマり所があるので注意しましょう。

 

1. アプリのディレクトリを作成

helloworldというディレクトリを作って、

先ほどのhelloworld.pyを

main.pyという名前で、

そのディレクトリの中に保存します。

 

kivyの場合、

メインのpythonスクリプトは、

main.pyという名前である必要があるようです。

 

2. xcodeのプロジェクトを作成

下記のコマンドで

先ほどのアプリのディレクトリを元に、

xcodeのプロジェクトファイルを作成します。

$ ./toolchain.py create helloworld ../helloworld

すると、helloworld-iosというディレクトリが出来ているはずです。

 

3. xcodeのプロジェクトファイルを開く

下記のコマンドでxcodeのプロジェクトファイルを

ターミナルから開きます。

$ open open helloworld-ios/helloworld.xcodeproj

するど自動的にxcodeでプロジェクトが開きます。

 

4. xcodeでビルド

続いて、xcodeで先ほどのアプリをビルドします。

基本的には、インストールしたい端末を

Macにつなぎ、左上のデバイスの部分から端末を選び、

より左側にある三角のマークを押すと

ソフトのビルド&インストールが実行されます。

f:id:meison_amsl:20160506144206p:plain

 

しかし、自分の環境 Xcode7.3では色々エラーが発生しました。

まず初めに、

ビルドした時に

An App ID with Identifier 'org.kivy.helloworld' is not available. Please enter a different string.

というようなエラーが出た時は、

kivy-iosが自動生成するBundle Identifierという設定がおかしいので、

下記の、xcodeのGeneralのIdentityの部分の

Bundle Identifierの部分を変更します。

f:id:meison_amsl:20160506144855p:plain

今回の場合は、

helloworld201605としました。

 

続いて、ビルドした時に、

clang: error: linker command failed with exit code 1 (use -v to see invocation)

というエラーが出る時は、

下記の記事にある通り、

Bitcodeという設定がONになっているのが問題なので、

qiita.com

Build Settingの検索バーでBitcodeと検索して、

Enable BitcodeをNoにしましょう。

f:id:meison_amsl:20160506164956p:plain

 

自分の場合、

これでビルドが成功し、

端末にアプリがインストールされました。

 

5. iOSの端末でアプリを実行する

無事インストールできた場合は、

kivyのアイコンのアプリがiOS端末に

インストールされているはずなので、

そのアプリをタップすれば、

アプリが起動します。

f:id:meison_amsl:20160506170252p:plain

 

ちなみに、

インストールされたアプリをクリックしても、

開発元が信頼されていないと言われた場合は、

設定->一般->プロファイルとデバイス管理

でデベロッパAPPをクリックして

認証する必要があります。

 

下記のように、

iPhone 6SでもHello worldが表示されましたし、

f:id:meison_amsl:20160506144715j:plain

iPad miniでもHello worldが表示されました。

f:id:meison_amsl:20160506170342j:plain

 

より詳しいkivy for iOSの使い方は

下記の記事を参照下さい。

myenigma.hatenablog.com

 

kivyによるGUIの作り方

こちらを参照下さい。

myenigma.hatenablog.com

 

最後に

これでPythonでiOSアプリが作れますね(^^)。

よりPythonが好きになりそうです。

 

参考資料

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

 

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com

ラグランジュの未定乗数法による等式制約付き非線形最適化の概要と例題


数学で考える経済学 いかにして問題を処理するか

 

目次

  • 目次
  • はじめに
  • ラグランジュの未定乗数法
  • 例題
  • 参考資料
  • MyEnigma Supporters

はじめに

非線形最適化は、

機械学習や、ロボット工学などで

非常に広く利用されますが、

単純な非線形最適化だけでなく、

変数などに制約を与えたい場合に

よく使用されるのが、

ラグランジュの未定乗数法です。

 

機械学習などでよく使用される

SVMなどにも使用されています。

 

今回は、

このラグランジュの未定乗数法の概要と、

具体的にラグランジュの未定乗数法で

最適化問題を解くPythonサンプルコードを紹介したいと思います。

 

続きを読む

準ニュートン法による最適化Pythonサンプルコード

目次

  • 目次
  • はじめに
  • 準ニュートン法
  • Pythonサンプルコード
  • 参考資料
  • MyEnigma Supporters

はじめに

以前、

ニュートン法による最適化サンプルコードの記事を書きました。

myenigma.hatenablog.com

 

上記のニュートン法は、

収束が非常に早いという特徴がありますが、

ヘッセ行列を計算しないといけないという問題があります。

 

複雑なモデルの場合、

各変数で二次微分した

ヘッセ行列を計算するのは

数式が複雑で難しかったり、正則でない場合は、

逆行列を計算することができず、

そもそもヘッセ行列も計算できないという問題があります。

また、計算したヘッセ行列が正定値でない場合は、

そもそも勾配方向が正確に計算できない場合もあります。

 

そこで、

最適化手法の一つである、

ヘッセ行列を近似的に逐次計算する

準ニュートン法を使うことで、

ヘッセ行列が計算できないモデルにおいても、

高速な最適化が可能になります。

 

今回の記事では、

この準ニュートン法の概要と、

Pythonのサンプルコードを紹介したいと思います。

 

続きを読む

オンライン英会話でよく使う表現まとめ

目次

  • 目次
  • はじめに
  • もう一度おっしゃっていただけますか?
  • その単語を書いてくれませんか?
  • *はなんという意味ですか?
  • 辞書で調べさせてください。
  • *はどのように発音するのですか?
  • 今日は大変勉強になりました。ありがとうございました。
  • 声が聞こえません。
  • 映像が見えません。
  • 今日はインターネットが不安定です。
  • スカイプを再起動していいですか?
  • 雑音がすごいです。
  • わからないです。
  • そのとおり
  • ちょっと考えさせて下さい。
  • 今のわかりましたか?
  • それはいいですね。
  • 読書が好きです。
  • 今の会社には5年勤めています。
  • ちょっとまって下さい
  • 何ページですか?
  • 参考資料
  • MyEnigma Supporters

はじめに

最近、

オンライン英会話をしているのですが、

授業を円滑にすすめるために、

いくつか便利な表現を覚えておくと、

授業が円滑に進むと思うので、

ここでよく使用するものをまとめておきたいと思います。

 

続きを読む

Point Cloud Library(PCL)の各プラットフォームへのインストール方法とサンプルコードを動かす方法

目次

  • 目次
  • はじめに
  • PCLのインストール方法
    • Mac (Homebrewを使う場合)
    • Ubuntu
  • PCLのサンプルコードを動かす方法
    • 1. PCLのサンプルコードを書く
    • 2. CMakeLists.txtを書く
    • 3. ソフトのビルドする
  • 参考資料
  • MyEnigma Supporters

はじめに

先日、

Point Cloud Libraryの基本的なモジュールの説明をしたので、

myenigma.hatenablog.com

今回は、各種OSのインストール方法と、

最も単純なPCLコードを

動かす方法について説明します。

 

続きを読む

Point Cloud Library (PCL)の各モジュールの概要

目次

  • 目次
  • はじめに
  • Filters
  • Features
  • Keypoints
  • Registration
  • KdTree
  • Octree
  • Segmentation
  • Sample Consensus
  • Surface
  • Range Image
  • I/O
  • Visualization
  • Common
  • Search
  • 参考資料
  • MyEnigma Supporters

はじめに

ロボティクスにおいて、

三次元点群処理は非常に重要です。

 

Point Cloud Library(PCL)は

ROSからスピンアウトした

三次元点群処理用ライブラリで、

ロボティクスにおいて、

広く利用されています。

PCL - Point Cloud Library (PCL)

  

今回は、

PCLの各モジュールの概要について説明したいと思います。

基本的には下記のオフィシャルドキュメントを意訳したものになります。

 

続きを読む

ネットワーク初心者のためのネットワーク調査ツールnmapの使い方

目次

  • 目次
  • はじめに
  • インストール
    • Mac
    • Ubuntu
    • Windows
  • nmapの使い方
    • 指定したIPのコンピューターの使用ポートを調べる
    • 指定したネットワークの使用されているIPを一覧にする
    • 指定したIPアドレスのコンピューターのOSの確認
  • nmapのGUIソフトzenmapの使い方
  • 参考資料
  • MyEnigma Supporters

はじめに

nmapはフリーのネットワーク調査ツールです。

nmap - Wikipedia

Nmap: the Network Mapper - Free Security Scanner

 

このnmapを使うことで、

あるIPアドレスのコンピューターの使用中のポートを調べたり、

ローカルネットワークに繋がっている

コンピューターの一覧を作ったりすることができます。

 

映画のマトリックスで、

トリニティがハッキングする時に使った

ツールとしても有名になりました。

10hm-matrix.jpg (JPEG 画像, 640x388 px)

 

今回は、

このnmapの使い方についてまとめておこうと思います。

 

続きを読む