MyEnigma

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

海外ではタクシー配車サービスUberとLyftが日本人にとってすごく便利という話

目次

  • 目次
  • はじめに
  • UberとLyftとは?
  • スマホアプリのインストール方法
    • Uber
    • Lyft
  • アプリの使い方
    • 1. 配車位置の指定
    • 2. 目的地を設定する
    • 3. 車種を選択する
    • 4. 配車を決定して車が来るのを待つ
    • 5. 車に乗り込んで、目的地で降りるだけ
  • タクシーと比べて、UberやLyftの何が日本人にとって良いのか?
    • 1. 英語を話す必要がほとんど無い
    • 2. 料金が安い
    • 3. タクシー配車の前に事前に目的地までの値段がわかる
    • 3. たまに水のボトルがもらえる
    • 4. 普通のタクシーを探すより、大抵早くタクシーに乗ることができる
    • 5. 領収書が自動でメールで送られてくる
    • 6. 英会話の練習にもなる
    • 7. ライドシェアを使うともっと安くなる
  • ドライバーの人の経験談
  • 最後に
  • 参考資料
  • MyEnigma Supporters

はじめに

アメリカに住みはじめて、

UberとLyftというタクシー配車サービスを

頻繁に使い始めました。

 

はじめはなんとなく利用するのを躊躇していたのですが、

一度使い始めると、

便利過ぎて今では最低週一回は利用しています。

 

UberやLyftのようなシステムは、

タクシーの規制のため、

日本では普及していませんが、

海外旅行をする時など、

事前に準備しておき、現地で利用すると

するとかなり便利ですので、

使い方等をまとめておきたいと思います。

 

続きを読む

pybind11を使ってPythonからC++コードを実行する方法

目次

  • 目次
  • はじめに
  • pybind11とは?
  • シンプルなサンプルコードの実行方法
    • 1. pybind11をDL
    • 2. c++のコードを書く
    • 3. pybind11のバインドc++コードを書く。
    • 4. C++コードをコンパイルする。
      • Macの場合
      • ubuntuの場合
    • 5. pythonコードで読み込ませる
  • デフォルト引数
  • C++コードの変数をpython側で利用する
  • C++クラスのバインディング
  • 継承
  • 関数のオーバーロード
  • Enum
  • STLのコンテナのやり取り
  • pybind11がサポートしているコンパイラ
  • サンプルコード
  • より詳しいPythonとCコードの連携方法を学びたい人は
  • 参考資料
  • MyEnigma Supporters

はじめに

Python Advent Calendar 2016の17日目の記事です。

 

何かのシステムを作る時に、

はじめはPythonでプロトタイプを作り、

pandasで入力データを流し込みつつ、

matplotlibで結果を確認しながら、

システムを作ることが多いです。

 

その後、そのシステムのより最適化するために、

C++に移植したりすることがあるのですが、

システムをいきなりPythonからC++に移植するのではなく、

システムの一部をC++に移植して、

残りのPythonシステムはそのままで実行したい時があります。

これにより、元のシステムからの移植の際に

バグが混入していないかが、確認しやすくなったり、

どの部分をC++に変えることで計算が早くなるのかが

わかりやすくなります。

 

そこで今回は

C++11のコードをPythonから利用できるようにする

pybind11というツールの概要と、

いくつかのサンプルを紹介したいと思います。

 

続きを読む

2011年からのVimのアドベントカレンダーの記事約600件の中のおすすめの記事

目次

  • 目次
  • はじめに
  • Big Sky :: モテる男のVim script短期集中講座
  • Vimステッカーを作ったお話 - Self Reference
  • vim-jpがつないだVimプラグイン開発者とVimパッチ職人、もしくはなぜ最近Vimコミュニティが活発になったのか - Humanity
  • 「Vimを使い始めようと思うんですけど、おすすめを教えてください」 - ぼっち勉強会
  • Macを購入したら絶対に導入したい!私が3年間で厳選した超オススメアプリ10選! - かなりすごいブログ
  • vimrc アンチパターンを自動でチェックする
  • 【Vim入門】ノーマルVimで使えると便利かもなコマンド10つ
  • あんまり見かけない気がする Vim の Tips 11 + 1 選
  • 『実践Vim』を読んで学んだ、おすすめVimデフォルト機能33個
  • 参考資料
  • MyEnigma Supporters

はじめに

Vim Advent Calendar 2016 の 10 日目の記事です。

 

年末になると、

Vimのアドベントカレンダーの記事を読んで、

最新の機能を試してみたり、

使っていないvimrcの機能を削除したりするのが、

自分の中で恒例の年末行事になっています。

 

調べてみたところ、

2011年からVimのアドベントカレンダーが始まっており、

(2012年には、アドベントカレンダーなのに、

何故か一年間記事のリレーが行われています笑)

下記が2015年までのVim Advent Calenderのリンクです。

 

今回、自分のVimの復習のために、

2011年から2015年までのアドベントカレンダーの記事を

流し読みし、その中で新たな発見があった記事を紹介したいと思います。

 

自分のようにVimの基礎から再復習したい人の参考になれば幸いです。

 

続きを読む

制御初心者のための線形・非線形, 連続・離散システム入門

目次

  • 目次
  • はじめに
  • 非線形システムの線形化
  • 連続システムから離散システムへの変換
    • オイラー法
    • Zero-Order Hold: ZOH法
    • Pythonによる連続システムから離散システム変換関数
  • システムの安定性
    • 線形システムの安定性
    • 非線形システムの安定性
  • 参考資料
  • MyEnigma Supporters

はじめに

個人的な感覚ですが、

制御技術を学んでいると、

線形・非線形、連続・離散というのは、

なんとなく理解できますが、

実際に制御システムを設計したい時に、

具体的にどのようにすればいいかというのは、

わかりにくいと感じていました。

 

今回、

実際に制御システムを設計する上で必要な、

線形、非線形、連続・離散システム関連の

基礎的な内容をまとめておきたいと思います。

 

続きを読む

車両モデリングのためのタイヤの力学とスタビリティファクタの基礎

目次

  • 目次
  • はじめに
  • 車両のスリップを表す値
  • スリップ率 (すべり率)
  • スリップ角 (すべり角)
  • タイヤ特性
  • タイヤモデル: 線形モデルとMagic Formula
  • ステアリング旋回時の力学とステアリング性能
  • ステアリングファクタの見積もり
  • 参考資料
  • MyEnigma Supporters

はじめに

以前書いた記事の内容が長くなってしまったので、

myenigma.hatenablog.com

タイヤの力学関係と、

スタビリティファクタ関連の内容をこちらに移動しました。

続きを読む

Python製凸最適化モデリングツールCVXPYの使い方

目次

  • 目次
  • はじめに
  • CVXPYとは?
  • インストール方法
  • CVXPYによる最小二乗法のサンプルコード
  • シンプルな最適化問題を解いてみる(その2)
  • ナップサック問題をCVXPYで解いてみる
  • シンプルなモデル予測制御をCVXPYで解いてみる
  • CVXPYを使う時の基礎
    • 名前空間
    • 最適問題の変更
    • 最適化問題が解けない場合の状態管理
    • ベクトルと行列
    • 制約条件
    • パラメータ
  • CVXPYにおける関数
    • 演算子
    • インデクシングとスライシング
    • 転置
    • べき乗
    • スカラー関数
    • 要素関数
    • ベクター/行列関数
  • travis CIでCVXPYを利用する時の設定
  • 参考資料
  • MyEnigma Supporters

はじめに

先日、最適化技術の一つである

線形計画法や二次計画法の紹介をしましたが、

myenigma.hatenablog.com

myenigma.hatenablog.com

最適化の式が、そこで紹介した標準形と同じでないと

最適化が実現できないという問題があります。

 

実はかなりの数の最適化の問題は、

上手く数式変換することで

上記の標準形に変換することができます。

このような変換を自動的に実施するソフトを

最適化モデリングツールと呼ぶのですが、

今回はこの最適化モデリングツールの一つであり、

Python製のCVXPYというツールの紹介をしたいと思います。

 

続きを読む

線形二次レギュレータ(Linear-Quadratic Regulator:LQR)の概要とPythonサンプルコード

目次

  • 目次
  • はじめに
  • LQRの概要
  • PythonによるLQRの制御シミュレーション
  • Githubリポジトリ
  • LQRのパラメータのチューニング方法
    •  チューニング方法1
    • チューニング方法2
    • チューニング方法3
  • 参考資料
  • MyEnigma Supporters

はじめに

最近、ロボットの制御や経路生成の勉強をしているのですが、

しばしば出てくる技術として、

線形二次レギュレータ(Linear-Quadratic Regulator:LQR)があります。

今回はこのLQRの概要とLQRによる

簡単なPython制御シミュレーションコードを紹介したいと思います。

続きを読む

MATLABの凸最適化ライブラリCVXの使い方とサンプルコード

目次

  • 目次
  • はじめに
  • CVX: MATLAB Software for Disciplined Convex Programming
  • インストール
    • 1. ソフトをzipで落としてきて、解凍
    • 2. CVXを起動する
  • シンプルな凸最適化を解く
  • 変数がベクトルの場合の凸最適化
  • 参考資料
  • MyEnigma Supporters

はじめに

先日、最適化技術の一つである凸最適化の基礎に関する

記事を書きましたが、

myenigma.hatenablog.com

この凸最適化を実際に解くライブラリの中で最も有名なのが、

CVXというライブラリです。

今回はこのライブラリの概要と実際に凸最適化を解くための

サンプルコードについて説明したいと思います。

 

続きを読む

凸最適化(Convex Optimization)の基礎

 

目次

  • 目次
  • はじめに
  • 凸最適化の概要と種類
    • 線形計画法 (Linear programming)
    • 二次計画法 (Quadratic programming)
    • 二次錐計画問題(Second-order cone programming, SOCP)
    • 整数計画問題 (Mixed Integer programming)
  • 凸最適化の専門用語
    • unbounded
    • infeasible
    • active, inactive
    • redundunt
  • 凸集合と凸関数
    • Convex Set (凸集合)
    • Convex function(凸関数)
  • 凸最適化の利点
    • 1. 大域的な最適値を得ることができる。
    • 2. 最適化の計算が早い
  • 関数の凸性の判定
  • 制約付き最適化の判定法(KKT条件)
  • 凸最適化の解法アルゴリズム
    • 逆行列、反復無しニュートン法(制約条件が無い二次計画問題)
    • Active set method: 有効制約法
    • Interior point method: 内点法
  • 凸最適化用ツール
    • 最適化モデリングツール
      • CVXPY
      • CVX
      • YALMIP
      • AMPL
      • cvxgen
      • JuMP
      • GAMS
      • Pyomo
    • PC向け凸最適化ソルバー
      • cvxopt
      • Ipopt
      • SeDuMi
      • SDPT3
      • IBM CPLEX
      • Gurobi
      • MOSEK
    • 組み込み用凸最適化ソルバー
      • qpOASES
      • OOQP
      • ECOS
      • CVXGEN
      • FiOrdOs
      • FORCES or (FORCES PRO)
  • 凸最適化の応用例
    • 線形計画法の応用例
    • ポートフォリオ最適化
    • 画像復元
    • サポートベクターマシン
    • 線形MPC(モデル予測制御)
  • より詳しく凸最適化を学びたい人は
  • 参考資料
  • MyEnigma Supporters

はじめに

先日、最適化技術の概要について説明しましたが、

myenigma.hatenablog.com

今回は、最適化技術の一つである凸最適化(Convex Optimization)の

基礎について説明したいと思います。

 

続きを読む

ロボット工学のための最適化技術入門

 

目次

  • 目次
  • はじめに
  • 最適化とは?
  • 最適化の応用例
    • ポートフォリオ最適化
    • 電子回路における部品サイズの最適化
    • データフィッティング
    • ロボット工学
  • 最適化問題の解き方
    • 最小二乗法問題
    • 制約無し最適化
    • 線形計画法問題
    • 二次計画法問題
    • 凸最適化
  • 最適化ツール群
    • C++製非線形最適化ライブラリCeres Solver
    • MATLAB製 凸最適化モデリングライブラリ CVX
    • Python製 凸最適化モデリングライブラリ CVXpy
    • 凸最適化Cコードジェネレータ cvxgen
  • 参考資料
  • MyEnigma Supporters

はじめに

最新のロボット技術の重要な技術として、

確率・統計の技術も重要ですが、

もう一つよく利用されるのが最適化技術です。

 

特に、パスプランニングや制御などでよく利用されます。

近年は様々なプラットフォームで利用可能な、

最適化ツール(ソルバー)が気軽に利用できるので、

ソルバーにデータを入れれば

求めている答えを得ることができることも多いです。

 

しかし、やはりそのようなツールを使うとしても、

背景にある技術を知ることも重要だと思うので、

自分で少し勉強した内容をまとめておきたいと思います。

 

下記で述べる内容は基本的に下記の資料を参考にまとめました。

いずれも素晴らしい資料ですので、

より詳しく学びたい方は下記の資料を参考にしてもらえると良いと思います。

Convex Optimization

Convex Optimization

 

続きを読む