MyEnigma

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

Pythonにおける並列処理プログラミング入門

目次

  • 目次
  • はじめに
  • subprocessによる複数子プロセス処理
  • concurrent.futuresによるマルチプロセス処理
  • Queueによる並行プログラミング
  • 最後に
  • 参考資料
  • MyEnigma Supporters

はじめに

元々Pythonは、

そこまで処理速度が早い言語ではないので、

システムの処理速度を最適化したい場合は、

C++などで書き直した方が良いのかもしれませんが、

Pythonシステムをあと少し早くしたい時には、

並行処理プログラミングをしてみると、

効果があるかもしれません。

 

最近のコンピューターはマルチコアで、

かつハイパースレッディングなどに対応しているため、

複数の処理を同時並行で処理させることで、

処理時間を早くすることはできます。

 

他の言語では、スレッドなどを使って

比較的カンタンに並列処理を実現することができますが、

実はPythonはグローバルインタープリタロック(GIL)という仕組みがあるので、

普通にマルチスレッドのプログラミングをしても、

一つのスレッドづつしか実行されず、

処理が早くならないことが多いようです。

 

そこで、そんなPythonにおいても

上手く並行処理を実施する方法がいくつかあるので、

これらの手法について

簡単にまとめようと思います。

 

詳しいPythonにおける

並行処理のプログラミングについては、

下記の書籍が詳しいため参照下さい。

 

続きを読む

Effective Pythonを読んで心に響いたこと

目次

  • 目次
  • はじめに
  • Pythonのランタイムの種類
  • プライベート属性はアンダーバーを2つ先頭におく
  • リストや文字列の空判定にlenなどは使わない
  • mapやfilterよりもリスト内包表記を使う
  • rangeよりはenumarateを使う
  • オプションのキーワード引数は、位置ではなくキーワードで与えるとコードが読みやすい
  • どんなクラスオブジェクトでも__dict__ですべてのフィールド辞書にアクセスできる
  • Pythonコードのプロファイルを取るにはcProfileを使うと便利
  • 参考資料
  • MyEnigma Supporters

はじめに

以前、C++の名著Effective C++を読んで

心に響いたことを記事にまとめました。

myenigma.hatenablog.com

 

実はこのEffectiveシリーズは、

様々なプログラミング言語で発売されており、

PythonバージョンのEffective Pythonも発売されています。

Effective Python ―Pythonプログラムを改良する59項目

Effective Python ―Pythonプログラムを改良する59項目

 

今回もこのEffective Pythonを読んで、

心に響いたことをメモとして

残しておきたいと思います。

続きを読む

PythonによるRapidly-Exploring Random Trees (RRT)パスプランニングサンプルプログラム

animation.gif (640×480)

目次

  • 目次
  • はじめに
  • Rapidly exploring random tree:RRTとは?
  • RRTの利点と欠点
    • 利点
    • 欠点
  • RRTによるパスプランニングPythonサンプルプログラム
    • シンプルなRRTパスプランニング (Goal biased sampling)
    • パスのスムージング後処理付きRRTプランニング
    • 車両ロボット用RRTプランニング
  • RRTのパス収束の高速化の手法
    • Goal Bias Sampling
    • Goal Zone Sampling
  • RRTの問題点
  • 参考資料
  • MyEnigma Supporters

はじめに

以前、A*やダイクストラ法、Dynamic Window Approachによる

パスプランニングシステムのサンプルプログラムを公開しましたが、

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

ロボティクスの分野で、

よく使用されるパスプランニングアルゴリズムとして、

Rapidly exploring random tree (RRT)

というアルゴリズムがあります。

今回は、このRRTのアルゴリズムの概要と、

PythonによるRRTパスプランニングの

サンプルプログラムを紹介したいと思います。

 

続きを読む

一週間イタリアを旅行して、事前に知っておくと便利だと思ったこと

目次

  • 目次
  • はじめに
  • 複数の都市を回るなら、電車がいい
  • ベネチアから空港に行く場合は直通の水上バスが便利
  • 英語がどこでも通じる
  • ベネチアは水上バスを使わなくても、十分歩きで回れる
  • 街のそこら中でネットが使える
  • 水は圧倒的にスーパーが安い
  • イタリアにおける免税(税金の払い戻し, Tax Refund,Tax Free)
    • 1 購入店で免税書類をもらう
    • 2 空港の税関でスタンプをもらう
    • 3. 払い戻しをする。
  • イタリアへの旅行パック
  • 参考資料
  • MyEnigma Supporters

はじめに

先日、イタリアを一週間旅行してきたのですが、

事前に知っていたら、

もっと充実した旅行になっていたなと思ったことが

いくつかあったので、メモとして残しておこうと思います。

(ローマ→フィレンチェ→ベネチアというコース)

 

ちなみにイタリアは、

食事も旨いし、

交通機関も整備されているし、

英語も通じるし、非常に旅行しやすかったのでおすすめです。

 

コロッセオに来た。事前にグラディエーター見てくればよかった。

フィレンツェの街並みを見下ろして

ゴンドラも乗ってみた

本場のピザうまい。生地に味がある気がした。

ダビンチの絵も初めてこの目で見た

 

続きを読む

Python製のフィルタリングツールpercolを使って、bashとROS生活を快適にする方法

目次

  • 目次
  • はじめに
  • 初期設定の方法
  • bashのhistoryをインタラクティブに検索して、入力する
  • rostopic listからpercolで選んで、rostopic echoする方法
  • 参考資料
  • MyEnigma Supporters

はじめに

Pythonにはpercolという、

標準出力のデータを、

簡単に選択してフィルタリングできるツールがあります。

github.com

 

このツールを使うと、

bashでの開発や、

ROSのCUIツールを便利にすることができたので、

いくつか紹介したいと思います。

 

続きを読む

ロボティクスのためのGoogle TestによるC++コードユニットテスト

目次

  • 目次
  • はじめに
  • Google Test
  • Google Testのインストール方法と実行方法(Linux, Mac)
  • Google Testによるテストコードの書き方
    • 二種類のアサーション
    • アサーションコード
  • 最も簡単なテストコード
  • 複数のテストで共通のコードを使う方法
  • 再帰的にテストコードを検索し、テストを実行するPythonスクリプト
  • モックとスタブ
  • 参考資料
  • MyEnigma Supporters

はじめに

下記のツイートのように、

最先端のロボットのシステムは非常に複雑なので、

きちんとソースコードのユニットテストを作成し、

CI(Continuous Integration)で自動テストをすることが、

当たり前になっているようです。

 

自分も、複雑なシステムですが、

きちんと機能するロボットシステムを構築したいので、

ユニットテストをきちんとかけるように、

勉強をすることにしました。

 

今のところ、自分はC++とPythonを使用しているので、

今回は、ROSでも採用されている

C++のテストフレームワークである

Google Testを使ったC++コードのテスト方法について

説明しようと思います。

github.com

 

Pythonにおけるユニットテストの作成方法は、

下記の記事を参考にしてください。

myenigma.hatenablog.com

 

続きを読む

ROSユーザのための便利でよく使うC++11の機能まとめ

 

目次

  • 目次
  • はじめに
  • コンパイル時にC++11の機能をONする
  • ROSでc++11を使えるようにする方法
  • STLのコンテナの初期化
  • Foreach
  • autoによる型推論
  • タプル
  • 文字列と数値の変換
  • Enumの最後にカンマをつけても良い
  • 型指定enum
  • クラスメンバの初期化
  • コンテナへのデータ追加を高速化するemplace
  • 乱数発生標準ライブラリ
  • 時刻関連標準ライブラリ
  • vectorなどから、最小値、最大値、ソートなどを実施する
  • ラムダ式による構造体データベースの抽出やソート、条件カウント
  • 参考資料
  • MyEnigma Supporters

はじめに

Pythonなどでコードを書いていると、

久しぶりにROSでC++でコードを書こうとすると、

その冗長性にいやになる時があります。

 

しかし、C++11という

2011年に制定されたISO基準の機能を利用すると、

C++でもかなり簡潔にコードを書くことができます。

 

C++11には非常に多くの追加機能がありますが、

その中でもC++のライトユーザーに便利で、

自分が良く使用する機能をピックアップして紹介したいと思います。

 

続きを読む

Jupyter (iPython) Notebookを使って技術ノート環境を構築する方法

目次

  • 目次
  • はじめに
  • Jupyter Notebook (iPython Notebook)とは?
  • インストール
  • Notebookデータのバックアップ&マルチアカウントアクセスする設定
  • Jupyter Notebookのショートカット
    • コマンドモードのショートカット
    • Editモードのショートカット
  • セルを上から全部実行する
  • Markdownで文章を入力する
  • 数式を入力する
  • 数式の計算をする
  • 画像をドロップアンドドラッグで挿入できるようにする
  • 目次を見出し情報から自動生成する
  • レポートタイトルを入力する方法
  • PDFに出力する
    • Macの場合
  • Jupyterでプレゼン資料を作る方法
  • JupyterのサーバをHerokuの無料枠で構築する方法
  • Jupyter Markdown数式の入力テンプレート
    • 行列
    • 数式参考リンク
  • できれば改善してもらいたい部分
  • vimユーザのためのJupyterプラグイン
  • Jupyter Notebook上でコードの処理時間や消費メモリを計測する
  • Jupyter上でモジュールや関数のdocstringを確認する
  • Jupyter notebookを使う時に気をつけるべきこと
  • 更にJupyterを学びたい人は
  • 参考資料
  • MyEnigma Supporters

はじめに

これまで、

技術的なメモはWordやPowerPointで書いていましたが、

数式の書きにくさと、Markdownが使えないことで、

下記のような特徴を持つ

技術メモツールを探していました。

  • Markdown記法が使える

  • 数式をTex形式で入力できる

  • 画像をドラッグ&ドロップできる

  • できれば、無料でオープンソース

 

そこで色々調べた所、

Jupyter (iPython) Notebookというツールを使うことで、

上記の目的を達成した、

快適な技術ノート環境を立ち上げることができたので紹介します。

 

続きを読む

カーソルの下の数値を簡単に進数変換できるVimスクリプト

目次

  • 目次
  • はじめに
  • 進数変換用Vimスクリプト
  • 使い方
  • 最後に
  • 参考資料
  • MyEnigma Supporters

はじめに

テキストファイルや、

コード内の数値を

即座に進数変換したい時がかなりあるので、

Vimでカーソルの下に数値がある時に、

その値を即座に進数変換して表示する

Vimスクリプトを作りました。

続きを読む

ROSのbagファイル内のトピックデータを簡単にCSVファイルに変換するGUIツールを作った

目次

  • 目次
  • はじめに
  • ソフトウェアリポジトリ
  • インストール
  • 使い方
    • ノードを起動する
    • ファイル選択ウインドウでbagファイルを選択する
    • CSVに変換したいトピック名を選択する
    • 変換されるので、少し待ちます
    • 変換終了
  • 参考資料
  • MyEnigma Supporters

はじめに

ROSのbagファイルのデータは

シミュレーションなどには非常に使いやすいですが、

オフラインでグラフを書いたりする場合には、

少し使いづらいと思っていました。

 

そこで、

ROSのbagファイルを選択し、

その中の任意のトピックデータを

CSVに保存するGUIツールrosbag_to_csvを

作ったので紹介します。

続きを読む