Pythonでのモータ制御に関心をもっている理由

[「RaspberryPi でPythonでモータ制御するための情報」](http://qiita.com/nonbiri15/items/82de785a84236f7c833f)
を既に書いた。

Pythonでのモータ制御に関心をもっている理由を以下に示します。
モーター制御のプログラムを書ける人を増やして、楽しい組み込みをしましょう。
(以下の記述の中で、この記事の著者は、C++のライブラリを十分に知っていないので、誤解している可能性があります。)

Pythonでは、シリアルポート、socketベースでのネットワーク、スレッドなどの制御にかかわりやすいライブラリが、Windows、Linux/Unixで共通のライブラリが使えるようになっており、開発の楽なマシンで開発をある程度進めておいてから、ターゲットマシンに移植することが容易に行いやすい。


## 主張: **RaspberryPiで、しかもPythonベースで制御できることは、モータ制御をできる人の層を増やします。**

###従来：
「C/C++でLinux(あるいはTRON、あるいはOSレス)プログラムが書ける人」
かつ「LinuxのIOのデバイスドライバが書ける人」
かつ「モーター制御の電気系がわかる人」
かつ「駆動対象の物体に働く力、外乱などのメカニクスがわかる人」
という条件が必要になってしまう。

##現在：
「C/C++なんて知らないよ。コンパイルなんてやったことがないよ。」という人々にサンプルスクリプトを実行してまねてみることができます。
インタプリタ上で、スクリプトを動作させると、正常に動作できる範囲まで、スクリプトが実行できます。
完全に出来ていない状況でも少しずつ開発することができます。
そのプログラムの実行中のスコープでの変数の値を、Spyder(Python統合環境の１つ)で、[Variable explorer]でデータの値を見ることができます。
結果を保存し、それをSpyderなどでMATLAB並みのデータ解析・グラフの作成をするのが、LinuxやWindowsの種類によらずできます。

---
##主張： **RaspberryPi、Pythonでシリアルインタフェースのプログラムを書けば、windows,Linuxの違いを少なくしてプログラミングの開発ができる。**
###従来のC/C++: 
　WindowsとUnix/Linuxで共通性の高いコーディングをする標準的な方法はなかった。
Windows [3. Windows でのシリアル通信 [3-5]](http://www.ee.fukui-nct.ac.jp/~yoneda/data/C/a_06.htm)
Linux [Linux一般でのシリアルプログラミングについて](http://armadillo.atmark-techno.com/faq/serial-programming)


###Python:
[pyserial 3.0](https://pypi.python.org/pypi/pyserial)
記事 [「Pythonとハードウェア　ー　PythonでRS232Cを利用する　－」](http://qiita.com/nonbiri15/items/2211547da4dc9abcc321)

###現在のC++：
Boost [Serial Ports](http://www.boost.org/doc/libs/1_60_0/doc/html/boost_asio/overview/serial_ports.html)
記事 [Boost.Asioでシリアル通信してみる](https://blog.myon.info/blog/2015-04-19/boost-asio-serial/)
　
---
##主張： **RaspberryPi、Pythonでsocketプログラムを書けば、Windows,Linuxの違いを少なくしてプログラミングの開発ができる。**


###従来のC/C++：
　LinuxとWindowsで基本となるライブラリに大きな違いがあり、LinuxとWindowsで共通に動作するプログラムを作りにくかった。
　Unix,LinuxのSocketのライブラリは、IPv6以前、マルチスレッド時代以前、unicode以前の太古の時代からのライブラリであり、使用しているUnix,Linuxでのライブラリがどうなっているのかは、私は理解していない。

Unix [ [C言語]Socket間通信 echoサーバを作る](http://blog.majide.com/2009/02/socket-programming-server/)
Windows [winsockを使ってTCPによる通信をする方法](http://www.geekpage.jp/programming/winsock/tcp.php)

###Python：
　Pythonのsocketライブラリは、Pythonの標準ライブラリにあるので、OSの種類によらず共通のプログラムが書ける。Pythonのネットワークライブラリはwebサーバーを書けるほど充実している。
Python 標準ライブラリ　[7.2. socket — 低レベルネットワークインターフェース](http://docs.python.jp/2.7/library/socket.html)
記事 [python で echo サーバ作ってみた](http://d.hatena.ne.jp/haru_ton/20100420/1271768523)

SocketServer というライブラリがあるので、使ってみた。
[Python初心者がScikit-imageの例題を自分用に使うためのヒント5　ネットワークアプリに組み込む](http://qiita.com/nonbiri15/items/5fd0c8b789ba9857dbed)


###現在のC++の場合：
 BoostのAsioライブラリがWindows,Linuxで共通性の高いソースコードが書ける。
  [Boost.Asio] (http://www.boost.org/doc/libs/1_60_0/doc/html/boost_asio.html)
  Boost.Asio [A collection of simple clients and servers](http://www.boost.org/doc/libs/1_60_0/doc/html/boost_asio/examples/cpp11_examples.html)
　SlideShare [Asioを使おう！](http://www.slideshare.net/chichimotsu/asio)

---
##主張： **RaspberryPi、Pythonでマルチスレッドプログラムを書けば、Windows,Linuxの違いを少なくしてプログラミングの開発ができる。**

###従来のC/C++：
　従来のC/C++のマルチスレッドは、OSの種類によらない記述方法がなかった。マルチスレッドでプログラムを書き出したときに、その関数の中で使用している関数が、スレッドセーフであるかどうかは、必ずしも容易な確認はできない。

###Python：
　Pythonにはマルチスレッドが標準のライブラリに含まれている。

Python標準ライブラリ [16.2. threading — 高水準のスレッドインタフェース](http://docs.python.jp/2.7/library/threading.html)

記事 [「Pythonでマルチスレッド処理」](http://qiita.com/konnyakmannan/items/2f0e3f00137db10f56a7)
記事 [画像の読み込みを別スレッドにしてみる(OpenCV-Python)](http://qiita.com/nonbiri15/items/89238c03b672c8f0579f)

###現在のC++：
　C++11では、マルチスレッドのライブラリが標準化されているので、OS依存性のないマルチスレッドのプログラムが書きやすくなっているらしい。
記事 [画像の読み込みを別スレッドにしてみる(C++版)](http://qiita.com/nonbiri15/items/016bb38eb42a219e98e2)

参考したURL
1:C++で簡単非同期処理(std::thread,std::async)
http://qiita.com/termoshtt/items/d3cb7fe226cdd498d2ef
2:C++入門 std::async
http://kaworu.jpn.org/cpp/std::async

---
##主張： **Pythonでプログラムを書けば、特定のOSに固有の機能を使うことが少なくなり、Windows,Linuxで共通に動くプログラムが作りやすい。**

---
##主張：**Pythonでも書き方次第で、昔より速く動作する。**
###従来のPython：
　動的な型チェック、配列の範囲外へのチェックのため、遅くなる。
###従来のPythonへの拡張：
　標準ドキュメンテーションの和訳[「C や C++ による Python の拡張」] (http://docs.python.jp/2/extending/extending.html)

###現在のPython(Cython)：
　記事 [Pythonを高速化するCythonを使ってみた](http://kesin.hatenablog.com/entry/20120306/1331043675)


>Cythonの基本的な使用方法は公式のドキュメントをご覧下さい
http://docs.cython.org/
日本語版
http://docscythonja.zouri.jp/