MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

Rear wheel position feedbackによる経路追従とPythonサンプルコード

エンジニアのためのフィードバック制御入門

エンジニアのためのフィードバック制御入門

目次

  • 目次
  • はじめに
  • Rear wheel position feedbackによる経路追従
  • Pythonシミュレーションコード
  • 参考資料
  • MyEnigma Supporters

はじめに

先日、

Pure pursuitアルゴリズムによる、

経路追従アルゴリズムを紹介しましたが、

myenigma.hatenablog.com

このアルゴリズムは、下記のような問題があります。

  • コース曲率を考慮してない

  • 車両の現在の速度を考慮していない。

そのためパラメータのチューニングが難しかったり、

複雑なコースで、制御が不安定になるという問題があります。

 

今回は、Pure pursuitアルゴリズムの問題を解決することができる、

Rear wheel position feedbackというアルゴリズムを紹介し、

そのPythonシミュレーションコードを紹介したいと思います。

 

続きを読む

Macでの生産性向上のためにクリップボード管理アプリClipyが便利という話

生産性―――マッキンゼーが組織と人材に求め続けるもの

生産性―――マッキンゼーが組織と人材に求め続けるもの

目次

  • 目次
  • はじめに
  • Clipyとは
  • インストール
  • 使い方
  • 参考資料
  • MyEnigma Supporters

はじめに

これまでMacのクリップボード管理は、

ClipMenuを使ってきたのですが、

最近急にアプリが暴走することがありました。

 

そこで調べてみた所、

Clipyという新しいアプリが開発されていたので、

そちらに乗り換えてみた所、非常に便利だったので、

概要をまとめておきたいと思います。

 

続きを読む

PythonによるClosed Loop RRT*パスプランニングサンプルプログラム

The DARPA Urban Challenge: Autonomous Vehicles in City Traffic (Springer Tracts in Advanced Robotics)

The DARPA Urban Challenge: Autonomous Vehicles in City Traffic (Springer Tracts in Advanced Robotics)

目次

  • 目次
  • はじめに
  • Closed Loop RRTとは
  • PythonによるClosed Loop RRT*パスプランニングサンプルプログラム
  • 参考資料
  • MyEnigma Supporters

はじめに

先日、RRT*とReed Sheppパスを使った

パスプランニングアルゴリズムを紹介しましたが、

myenigma.hatenablog.com

myenigma.hatenablog.com

このアルゴリズムには一つ問題があります。

 

それはReed Sheppパスが

実際の車両のモデルを忠実に表現していないことです。

Reed Sheppパスは、最大曲率(旋回半径)の条件は満たしたパスは作ってくれますが、

円弧と直線を繋ぐだけなので、曲率の不連続点があり、

ステアリングの切り角に制限があるロボットでは、

正確にトラッキングできません。

加えて、前後進の運動モデルを考慮していないため、

アクセルやブレーキの応答性が悪い車両では、

生成されたパスに追従できなくなります。

 

そこで今回はこの問題を解決するために

Closed Loop RRT*という

アルゴリズムを紹介したいと思います。

続きを読む

Pure pursuit アルゴリズムによる経路追従とPythonサンプルプログラム

Fractional Order Differentiation and Robust Control Design: CRONE, H-infinity and Motion Control (Intelligent Systems, Control and Automation: Science and Engineering)

Fractional Order Differentiation and Robust Control Design: CRONE, H-infinity and Motion Control (Intelligent Systems, Control and Automation: Science and Engineering)

目次

  • 目次
  • はじめに
  • Pure pursuitアルゴリズム
  • Pythonサンプルコード
  • 参考資料

はじめに

経路追従は、

経路生成アルゴリズムによって生成されたコースに対して、

できるだけずれ量が小さくなるように

リアルタイム制御する技術です。

myenigma.hatenablog.com

 

経路追従アルゴリズムには、

いくつかありますが、

その中でも最も基本的なものが、

pure pursuitと呼ばれるアルゴリズムで、

今でも広くロボティクスの世界で使われれています。

 

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

Pythonサンプルプログラムについて

説明したいと思います。

 

続きを読む

PythonによるReeds Sheppパスプランニングサンプルプログラム

Planning Algorithms

Planning Algorithms

目次

  • 目次
  • はじめに
  • Reeds Shepp Pathとは?
  • Reeds-SheppパスプランニングPythonサンプルプログラム
  • 参考資料

はじめに

先日、Dubinsパスを利用した

パスプランニングの概要とPythonサンプルコードを紹介しましたが、

myenigma.hatenablog.com

Dubinsパスは後進するコースを生成できないため、

目的の位置と姿勢に到達するパスを生成するのに、

大回りのパスを生成したり、

障害物により、コースが生成できないことがありました。

 

そこで、Dubinsパスを拡張し、

後進コースも生成できるようにした

Reeds Sheppパスというアルゴリズムの概要と、

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

 

続きを読む

Python/C++/MATLABユーザのための高速科学計算言語Julia入門

Julia: High Performance Programming

Julia: High Performance Programming

目次

はじめに

最近、

数値計算や最適化の技術を調べていると、

Pythonではなく、

Juliaという新しいプログラミング言語を

使っているのをよく見るようになりました。

The Julia Language

 

そこで自分のような

Python/C++/MATLABユーザの視点から見た、

Juliaの基本的な使い方をまとめてみたので、

紹介したいと思います。

 

Juliaとは?

Juliaとは、

2009年からMITの研究者を中心に開発が始まった

スクリプト言語です。

 

MATLABやPythonなどが得意な

科学技術計算を得意とする言語で、

様々な科学技術計算用のライブラリがデフォルトで内包されています。

 

それ以外にも、下記のような特徵があります。

 

特徴1: 計算が高速

Juliaの大きな特徵として、LLVMのフレームを使った

Just in Time(JIT) コンパイラの技術を使うことで、

非常に高速に計算を実施することができます。

 

下記はjuliaのホームページに掲載されている、

各言語におけるい計算速度のベンチマークです。

C言語の処理を1とし、各言語の比率を計算しています。

下記の結果を見ると分かる通り、

Pythonと比べて、約10倍弱早く、

C言語と比べても2倍ほどしか遅くなっていないことがわかります。

f:id:meison_amsl:20170521064426p:plain

 

特徴2: 動的型付けのスクリプト言語

言語の特徵としては、

前述のように高速でありながら、

Pythonと同じ動的型付け言語です。

ですのでプロトタイプを作るのも簡単です。

 

特徵3: 型を指定することもできる

しかし、複雑なシステムを作る時は、

どうしても型が欲しくなります。

最近PythonでもType Hintが追加されました。

qiita.com

 

Juliaでは、関数の引数における型チェックが、

デフォルト機能として追加されています。

また、型を使ったC++で言う所の関数のオーバロードもサポートしています。

 

特徵4: 数式に近い表現でソースコードが書ける

Juliaは科学技術計算に強いため、

実際の数式に近い表現でソースコードを書くことができます。

例えばほとんどの言語は掛け算の*を省略できませんが、

Juliaの場合は下記のように書くことができます。

Julia> x2 + 2x - 1

 

特徵5: C, C++, Fortran との親和性の高さ

Juliaは十分計算速度が早いのですが、

既存のCやC++,Fortranのコードを使いたい時があります。

 

Juliaは言語の機能として、

CやC++, Fortranのコードの呼び出しをサポートしています。

これはJuliaがLLVMを利用しているため、

CやC++, Fortranのバイトコードと共通性があるためのようです。

 

特徵6: Pythonとも親和性がある

こちらは言語の機能ではないですが、

JuliaからPythonのコードを呼ぶパッケージも公開されています。

github.com

 

個人的にはPythonからJuliaコードを呼ぶライブラリが欲しいですが。。。

 

特徵7: 並行・並列処理に強い

最近の言語であるgoなどは、

マルチコア時代に対応するためか、

並列、並行処理に特化した機能を言語そのものが有していますが、

Juliaも言語のデフォルト機能として、

並行・並列処理のAPIを有しています。

 

Pythonでも並行処理は可能ですが、

GIPがあるためかなり無理が多いです。。

myenigma.hatenablog.com

 

インストール

各プラットフォームでのJuliaのインストール方法です。

Mac

Homebrewでインストールできます

$ brew update

$ brew tap staticfloat/

$ brew install julia

bicycle1885.hatenablog.com

 

JupyterでJuliaを使えるようにする

続いて、Pythonで便利すぎるJupyterが、

Juliaでも対応しているため、

Jupyter用のカーネルをインストールします。

 

juliaのコマンドラインから、

Pkg.add(“IJulia”)

とするだけでインストールされるはずです。

 

自分の環境では、julia0.5.0を使っていたのですが、

上記のコマンドでインストールしようとした所、

gitのエラーがでました。

そこで、

>$ brew update julia

として0.5.1にアップデートした所、

エラーが消えて、無事インストールできました。

 

あとは、普通にjupyterを立ち上げると、

選べるカーネルとしてJuliaが追加されているはずです。

f:id:meison_amsl:20170517081248p:plain

 

これでPythonと同じ感じでJuliaを使えますね。

qiita.com

 

Juliaの外部パッケージの管理

Pythonのpipやcondaのように、

外部パッケージをインストールしたり、

管理したりする時は、

デフォルトのPkgというパッケージを使います。

外部パッケージのインストール

hogeというパッケージをインストールする場合は、

下記の通りです。

julia> Pkg.add(“hoge”)

 

インストールパッケージの確認

Pkg.installed()

 

Juliaを学ぶための資料

下記の資料が分かりやすかったです。

 

参考資料

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

Julia: High Performance Programming

Julia: High Performance Programming

自動車制御のための車両モデル入門

Vehicle Dynamics and Control (Mechanical Engineering Series)

Vehicle Dynamics and Control (Mechanical Engineering Series)

目次

  • 目次
  • はじめに
  • 自動車の代表的なステアリングモデル
    • Kinematic Model
    • Dynamic Bicycle Model
  • 2つのモデルの軌跡比較
  • 直線コースにおけるBicycle Modelの線形ステアリングモデル
  • 目標コース座標系における線形Dynamic Bicycle Model
  • 車両の進行方向モデル
    • 空気抵抗
    • タイヤの推進力
    • 転がり抵抗力
  • より詳しく学びたい方は
  • 参考資料

はじめに

以前、

車両ダイナミクスの基礎という記事を書きましたが、

myenigma.hatenablog.com

myenigma.hatenablog.com

 

今回は自動車制御のための、

様々な車両モデリングの方法と

その特徴について説明したいと思います。

 

続きを読む

さくらVPS上にSoftEtherを使ってVPNサーバ(L2TP/IPSec and OpenVPN)を立てる方法

クラウドVPS入門 運用・構築から高度な利用まで (静岡学術出版理工学ブックス)

クラウドVPS入門 運用・構築から高度な利用まで (静岡学術出版理工学ブックス)

  • 作者: JACC,水野信也,永田正樹,坂田智之,長谷川孝博,井上春樹
  • 出版社/メーカー: 静岡学術出版
  • 発売日: 2010/09/10
  • メディア: 単行本(ソフトカバー)
  • 購入: 1人 クリック: 58回
  • この商品を含むブログ (7件) を見る

目次

  • 目次
  • はじめに
  • VPNの接続方式
  • SoftEtherサーバ(L2TP/IPSec) の立て方
    • 1. さくらVPSの申し込みと設定
    • 2. OS (ubuntu) の初期設定
    • 3. SoftEtherのインストールと起動設定
    • 4. vpnサーバの自動起動設定
    • 5. VPNサーバのアカウント作成
    • 6. SoftEther用のポート設定
    • 7. Mac, iPhone等からVPNに接続する。
  • L2TP/IPSecのサーバに同じLANから複数台同時にVPNサーバに繋げない場合
  • SoftEtherを使ってOpenVPNのサーバも同時に立てる
  • MacからOpenVPNでVPNサーバに接続する
  • iOSからOpenVPNでVPNサーバに接続する
  • Interlink, さくらVPS上のSoftEther(L2TP/IPSec), さくらVPS上のSoftEther(OpenVPN)の速度比較
  • MyEnigma Supporters
  • 参考資料

 

はじめに

VPNが使用したくて、

インターリンクvpnという有名な

月額1000円のVPNサービスを利用していたのですが、

あまりにも通信のスループットが出ずに困っていました。

(300M超えの回線で、vpnを使うと平均5Mぐらい)

 

そこで、先日、Raspberry Piに

無料のVPNソフトを使って、

VPNサーバを立てる方法を説明しました。

myenigma.hatenablog.com

 

今回は、

同じVPNソフトウェアSoftEtherを使って、

さくらVPSのサーバ上に

VPNサーバ(L2TP/IPSecとOpenVPNの二種類)を

立ててみたので、

その方法を説明したいと思います。

SoftEther VPN プロジェクト - SoftEther VPN プロジェクト

 

続きを読む

モデル予測制御(Model Predictive Control:MPC)の応用例

Model Predictive Control System Design and Implementation Using MATLAB® (Advances in Industrial Control)

Model Predictive Control System Design and Implementation Using MATLAB® (Advances in Industrial Control)

目次

  • 目次
  • はじめに
  • Space Xのロケット自動着陸システム
  • 戦闘機の制御
  • ドローンの精密制御
  • ミニチュアレーシングカーの制御
  • 自動運転車両の経路追従システム
  • すべりやすい環境における自動車のステアリング制御システム
  • ヒューマノイドの全身運動制御
  • 参考資料

はじめに

先日、モデル予測制御

(Model Predictive Control:MPC)の技術的概要を紹介しましたが、

myenigma.hatenablog.com

myenigma.hatenablog.com

今回は、自分用のメモとして、

MPCを使った実際の応用例について

まとめておきたいと思います。

 

応用例を見つけ次第、追記していきます。

 

続きを読む

PythonによるRRT*パスプランニングサンプルコード

Rapidly-Exploring Random Tree

Rapidly-Exploring Random Tree

  • 作者: Lambert M. Surhone,Mariam T. Tennoe,Susan F. Henssonow
  • 出版社/メーカー: Betascript Publishing
  • 発売日: 2011/02/23
  • メディア: ペーパーバック
  • この商品を含むブログを見る

目次

  • 目次
  • はじめに
  • RRT* アルゴリズムの概要
    • 1. 隣接ノード間での連結判定
    • 2. ノード間の再接続
  • RRT*の利点と欠点
    • 利点
    • 欠点
  • シンプルな経路生成Python サンプルプログラム
  • Dubinsパスを使った車両ロボットのためのRRT*プランニングPythonサンプルプログラム
  • Reeds Sheppパスを使った車両ロボットのためのRRT*プランニングPythonサンプルプログラム
  • 参考資料

はじめに

以前、Rapidly exploring Random Tree (RRT)を使った、

パスプランニングのサンプルコードを紹介しましたが、

myenigma.hatenablog.com

このRRTの問題として、

サンプリングするノードの数を増やしても、

コースが最適になる可能性はかなり少ないということが上げられます。

これはRRTの論文でも証明されています。

 

そこでRRTのアルゴリズムをベースにして、

ノードが増える度に、

コースが最適値に近づくように改良したものが、

RRT* (スター)です。

 

今回はこのRRT*の概要と

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

 

続きを読む