Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
SUGAR SWEET ROBOTICS CO., LTD. 
ネットワークを用いた通信 
株式会社SUGAR SWEET 
ROBOTICS 
菅 佑樹 
1
SUGAR SWEET ROBOTICS CO., LTD. 
自己紹介 
2
SUGAR SWEET ROBOTICS CO., LTD. 
自己紹介 
• 菅 佑樹 (Yuki Suga) 
• 2012〜~ 株式会社SUGAR SWEET ROBOTICS代表取締役 
• 2010〜~2012 株式会社リバスト 
•...
! 
• 2007〜~2010 早稲⽥田⼤大学総合機械⼯工学科助⼿手 
SUGAR SWEET ROBOTICS CO., LTD. 
林業機械支援システム 
学習適応する 
コミュニケーション 
ロボット 
4 
http://www.sug...
SUGAR SWEET ROBOTICS CO., LTD. 
• 2010〜~2012 株式会社リバスト 
5 
アメリカMobile 
スイス 
Robot社 
移動台車 
Pioneerシリーズ 
Neuronics社 
Katana 
...
SUGAR SWEET ROBOTICS CO., LTD. 
• 2012〜~ 株式会社SUGAR SWEET ROBOTICS 
• http://sugarsweetrobotics.com 
– ロボットの受託開発・コンサルティング 
...
SUGAR SWEET ROBOTICS CO., LTD. 
コンテンツ 
• 通信とは何か? 
• プロトコルとは何か? 
• TCP/IPとは何か? 
• TCP通信の実際 
• ソケット通信ライブラリ 
• Winsock2 
• 実習...
SUGAR SWEET ROBOTICS CO., LTD. 
通信とは何か 
8
SUGAR SWEET ROBOTICS CO., LTD. 
通信とは何か 
• 通信(=Communication) 
• 2者(もしくはそれ以上)の間で情報を共有すること 
• 日常会話も通信 
• 壁画も通信 
• どうやって,何を媒介...
SUGAR SWEET ROBOTICS CO., LTD. 
プロトコル(通信規約) 
• どのようなルール(フォーマット)で情報を伝達するか,の約束 
• 会話に用いられる言語もプロトコル 
• 通信速度や,データのアライメントもプロトコル...
SUGAR SWEET ROBOTICS CO., LTD. 
たとえば 
• RS232C 
• D Sub 9pin, 25pinコネクタ 
• PCとターゲットの1対1を想定 
• 調歩同期式通信なら3線で通信(入力と出力とコモン端子) ...
SUGAR SWEET ROBOTICS CO., LTD. 
たとえば 
• CAN (Controller Area Network) 
• 2線式通信.2線間の電位差で”0”, “1”を決める 
• 最大1Mbps 
• バス型通信(複数...
SUGAR SWEET ROBOTICS CO., LTD. 
データをどう解釈するか? 
• RS232Cならば,単純に8ビットのデータが一つ送られてくるのみ. 
連続してデータを送り続ければ良い 
• CANならば最大8バイトのデータに,送...
SUGAR SWEET ROBOTICS CO., LTD. 
• 文字列でデータを送受信 
• 改行コードが送られるまで受信 
• 1行の文字列によって動作をする 
• メリット 
• Tera Termなどのターミナルソフトウエアで確認でき...
SUGAR SWEET ROBOTICS CO., LTD. 
バイナリプロトコル 
• サーボモータのコントローラのプロトコル 
• CAN想定 
• 1バイト目:ロボットへの指令の種類 
• 2バイト目以降:指令に必要なデータ 
• メリッ...
SUGAR SWEET ROBOTICS CO., LTD. 
プロトコルの階層性 
• RS232CやCANで送ったデータを,上位のプロトコルでどう解釈するか 
• プロトコルには階層性がある 
• ちょうど封筒のようなモノ.封筒の中身がデー...
SUGAR SWEET ROBOTICS CO., LTD. 
TCP/IPとは何か 
17
SUGAR SWEET ROBOTICS CO., LTD. 
OSI参照モデル 
アプリケーション層 
プレゼンテーション層 
セッション層 
トランスポート層 
• コンピュータの通信 
機能を階層構造に分 
割したモデル (ISO) 
ネ...
SUGAR SWEET ROBOTICS CO., LTD. 
Ethernet 
• イーサーネット 
• Ether = エーテル・・・ど 
こにでもある 
• 普段,有線LANと称している 
のはこれ 
• 物理層+データリンク層の通 
...
SUGAR SWEET ROBOTICS CO., LTD. 
IPとは何か 
• IP (インターネットプロトコル) 
ルータ0.1.1 
• IPアドレス 
• パケットのルーティング 
ルータ0.0.1 
20 
アプリケーション層 
プ...
SUGAR SWEET ROBOTICS CO., LTD. 
TCPとは何か 
• TCP (Transmission Control Protocol) 
• 到達確認と誤り訂正,順序訂正 
• ポート番号 
! 
! 
! 
! 
! 
...
SUGAR SWEET ROBOTICS CO., LTD. 
TCP/IP通信を使うRT機器 
RT = Robotics Technologies 
(ロボット技術) 
22
SUGAR SWEET ROBOTICS CO., LTD. 
Ethernetとマイコン 
• マイクロコントローラの高性能化 
• EthernetとTCP/IPをサポートするコントロー 
ラが増えた 
• ドライバ不要 
• プラットフォ...
SUGAR SWEET ROBOTICS CO., LTD. 
市販の汎用マイコン等 
• arduinoやmbedなどのホビー向けマイコン 
製品 
• arduino, mbed, netduino, GR-SAKURA… 
• Raspb...
SUGAR SWEET ROBOTICS CO., LTD. 
センサ,コントローラ等 
• レーザースキャナ 
• 北陽電機 
• UST-10LX, USB-20LX等 
• SICK株式会社 
• LMS500等 
• モータコントローラ...
SUGAR SWEET ROBOTICS CO., LTD. 
PC 
ロボット機器 
• Mobile Robot Pioneerシリーズ 
• RS232CでPCと通信 
• クライアント用ライブラリが充実 
26 
RS232C クライア...
SUGAR SWEET ROBOTICS CO., LTD. 
ロボット機器 
27 
コントローラ 
(マイコン) 
PC 
センサ等モータ 
RS232C 
PC 
サーバ 
クライアント 
• Mobile Robot Pioneerシリ...
SUGAR SWEET ROBOTICS CO., LTD. 
ロボット機器 
28 
頭部 
RS485等サーバPC 
コントローラ 
(マイコン) 
センサ等モータ 
クライアント 
• Aldebaran Robotics NAO 
• ...
SUGAR SWEET ROBOTICS CO., LTD. 
TCP通信の実際 
29
SUGAR SWEET ROBOTICS CO., LTD. 
ソケット通信 
• TCP/IP通信のエンドポイントを「ソケッ 
ト」と呼ぶ 
• OSごとに実装が違うが大きな流れは一緒 
• UNIX, Linux (POSIXライブラリ) ...
SUGAR SWEET ROBOTICS CO., LTD. 
サーバ側 
1.ソケット生成(socket) 
2.ソケット登録(bind) 
3.ソケット接続準備(listen) 
4.ソケット接続待機(accept) 
5.受信・送信(re...
SUGAR SWEET ROBOTICS CO., LTD. 
クライアント側 
32 
1.ソケット生成(socket) 
2.ソケット接続要求(connect) 
3.受信・送信(recv / send) 
4.ソケット切断(close)
SUGAR SWEET ROBOTICS CO., LTD. 
TCP 
• TCPソケットに必要な情報 
• サーバー側 
• ポート番号 
• クライアント側 
• ポート番号 
• サーバーのIPアドレス 
33 
サーバー 
0.1.1...
SUGAR SWEET ROBOTICS CO., LTD. 
34 
サーバー側クライアント側 
ソケット作成 
socket 
ソケット登録 
bind 
ソケット接続準備 
listen 
ソケット接続待機 
accept ソケット作成 ...
SUGAR SWEET ROBOTICS CO., LTD. 
Winsock2 
35
SUGAR SWEET ROBOTICS CO., LTD. 
サーバ側 
36
SUGAR SWEET ROBOTICS CO., LTD. 
ヘッダーファイル 
• winsock2.hやws2tcpip.hをインクルードする 
• ws2_32.libをリンクする 
37 
// 
ソケットライブラリを使うためのヘッダ...
SUGAR SWEET ROBOTICS CO., LTD. 
WSAStartup 
38 
• WSAStartupを実行する必要がある. 
• 終了時はWSACleanupを実行する 
// 
#1. 
WSAStartup関数を呼び出し...
SUGAR SWEET ROBOTICS CO., LTD. 
// 
#2.3 
ソケットの作成 
listenSocket 
= 
socket(AF_INET, 
SOCK_STREAM, 
0); 
if 
(listenSocket ...
SUGAR SWEET ROBOTICS CO., LTD. 
40 
• サーバーが待機するソケットの設定を初期化する 
• 重要なのはTCPのポート番号 
! 
struct 
sockaddr_in 
addr; 
! 
addr.sin...
SUGAR SWEET ROBOTICS CO., LTD. 
• listen関数で接続の準備 
• accept関数で接続待機 
41 
// 
#2.5 
Listen 
result 
= 
listen(listenSocket, 
...
SUGAR SWEET ROBOTICS CO., LTD. 
• recv関数でデータを受信する 
42 
int 
numReceived; 
char 
receiveBuffer[DEFAULT_BUFFER_LEN]; 
int 
r...
SUGAR SWEET ROBOTICS CO., LTD. 
• send関数でデータの送信 
43 
int 
numReceived; 
char 
receiveBuffer[DEFAULT_BUFFER_LEN]; 
int 
rec...
SUGAR SWEET ROBOTICS CO., LTD. 
クライアント側 
44
SUGAR SWEET ROBOTICS CO., LTD. 
ヘッダーファイル 
• winsock2.hやws2tcpip.hをインクルードする 
• ws2_32.libをリンクする 
45 
// 
ソケットライブラリを使うためのヘッダ...
SUGAR SWEET ROBOTICS CO., LTD. 
WSAStartup 
46 
• WSAStartupを実行する必要がある. 
• 終了時はWSACleanupを実行する 
// 
#1. 
WSAStartup関数を呼び出し...
SUGAR SWEET ROBOTICS CO., LTD. 
struct 
sockaddr_in 
addr; 
! 
server.sin_family 
= 
AF_INET; 
server.sin_port 
= 
htons(2...
SUGAR SWEET ROBOTICS CO., LTD. 
• サーバーが待機するソケットの設定を初期化する 
• 重要なのはTCPのポート番号 
// 
#3 
ソケットの接続 
result 
= 
connect(clientSock...
SUGAR SWEET ROBOTICS CO., LTD. 
TCP/IP通信設定 
• サーバ側のIPアドレス・ポート番号を知る 
• サーバ側でのipconfig / ifconfigコマンド 
• 説明書をよく読む 
• そもそも相手の...
SUGAR SWEET ROBOTICS CO., LTD. 
実習 
50
SUGAR SWEET ROBOTICS CO., LTD. 
実習内容 
• サーバー&クライアントのプログラム 
• サーバー側 
• 27015番のTCPポートで待機 
• 命令によって異なる音声をならす 
• クライアント側 
• サー...
SUGAR SWEET ROBOTICS CO., LTD. 
これをインストールして下さい 
• Visual Studio 2013 Express Edition for 
Windows Desktop 
• http://www.vi...
SUGAR SWEET ROBOTICS CO., LTD. 
キーボード入力 
数値1~9 
受信確認 
プロトコル 
• テキストベースのプロトコル 
• SND*の4バイト「*」には数値が入る 
53 
S N D 1.... 
S N ...
SUGAR SWEET ROBOTICS CO., LTD. 
実習手順 
1.データを受信し表示するプログラムを作る 
• 一般的なターミナルソフトからデータを送信する 
2.受け取ったデータによって処理を変える 
• これもターミナルソフト...
SUGAR SWEET ROBOTICS CO., LTD. 
Visual Studioの基本的操作 
55
SUGAR SWEET ROBOTICS CO., LTD. 
Visual Studio 2013 
• Visual Studio 2013 for Windows 
Desktopを開く 
• 初めて起動する人は登録が必要 
• ファイル...
SUGAR SWEET ROBOTICS CO., LTD. 
アプリケーションの設定 
• 左のメニューからアプリ 
ケーションの設定を選ぶ 
• 追加のオプション>空の 
プロジェクトをチェック 
• SDLチェックを外す 
• 「完了」を...
SUGAR SWEET ROBOTICS CO., LTD. 
ファイルの追加 
• 画面右の「ソリューショ 
ンエクスプローラ」の 
「ソースファイル」を 
右クリック 
• 追加>新しい項目 
• C++ファイルを選択 
• 名前を「mai...
SUGAR SWEET ROBOTICS CO., LTD. 
main.cppを書く 
• 追加資料を元にmain.cppを編集する. 
59
SUGAR SWEET ROBOTICS CO., LTD. 
ビルド 
• メニュー>ソリューションのビルド 
60
SUGAR SWEET ROBOTICS CO., LTD. 
実行 
• メニュー>デバッグ>デバッグ開始 
61
SUGAR SWEET ROBOTICS CO., LTD. 
サーバー側のプログラム 
62
SUGAR SWEET ROBOTICS CO., LTD. 
テスト方法 
• kadai1プログラムをビルドして実行 
• Tera TermでIPアドレス「127.0.0.1」の27015番ポー 
トに接続する 
• キーボードでabcと...
SUGAR SWEET ROBOTICS CO., LTD. 
Tera Termの使い方 
• ホストを127.0.0.1 
(サーバーのアドレスに) 
• TCPポートを27015に 
• サービスをTelnetに 
64
SUGAR SWEET ROBOTICS CO., LTD. 
どうしてもうまくいかない 
• ファイアーウォールをOFFにして試してみ 
ましょう(インターネットに繋いだままだ 
とやや危険です.自己責任でお願いします) 
• http://...
SUGAR SWEET ROBOTICS CO., LTD. 
サーバー側 
受信したデータによって分岐する 
66
SUGAR SWEET ROBOTICS CO., LTD. 
テスト方法 
• kadai2プログラムをビルドして実行 
• Tera TermでIPアドレス「127.0.0.1」の27015番ポートに 
接続する 
• キーボードでsnd1...
SUGAR SWEET ROBOTICS CO., LTD. 
サーバー側 
snd*に対応させる 
68
SUGAR SWEET ROBOTICS CO., LTD. 
「snd*」に対応させる 
• もしsndから始まらないならエラー 
• 数字は1ケタと仮定 
• 4文字目のデータは数字 
• 数字の文字コードから48を引くと数値に 
なる 
...
SUGAR SWEET ROBOTICS CO., LTD. 
テスト方法 
• kadai3プログラムをビルドして実行 
• Tera TermでIPアドレス「127.0.0.1」の27015番ポートに接続す 
る 
• キーボードでsnd1...
SUGAR SWEET ROBOTICS CO., LTD. 
クライアント側 
71
SUGAR SWEET ROBOTICS CO., LTD. 
テスト方法 
• kadai3プログラムをビルドして実行(サーバーが起動) 
• kadai4プログラムをビルドして実行(自作クライアントが起動) 
• IPアドレス「127.0....
SUGAR SWEET ROBOTICS CO., LTD. 
クライアント側 
キーボード入力で分岐 
73
SUGAR SWEET ROBOTICS CO., LTD. 
課題 
• キーボード入力の数値を判別 
• 0から9ならばsnd*として送信 
• qならば終了 
74
SUGAR SWEET ROBOTICS CO., LTD. 
テスト方法 
• kadai3プログラムをビルドして実行(サーバーが起動) 
• kadai5プログラムをビルドして実行(自作クライアントが起動) 
• IPアドレス「127.0....
SUGAR SWEET ROBOTICS CO., LTD. 
発展編 
76
SUGAR SWEET ROBOTICS CO., LTD. 
発展編 
• ソフトウエアのメンテナンス性を良くする 
• サーバー側 
• フレームワーク化する 
• クライアント側 
• ライブラリ化する 
• ヘッダーとDLLを配布すれば...
SUGAR SWEET ROBOTICS CO., LTD. 
発展編 
• 複数のプラットフォームに対応させる 
• Windows 
• Linux (OSX) 
! 
• 移植性の高いコードにする 
• ソケット通信用ミドルウエアを使う ...
SUGAR SWEET ROBOTICS CO., LTD. 発展編 
• オープンなプロトコルに対応させる 
• 独自プロトコル開発は車輪の再発明 
• プロトコルの慎重な設計は難しく,問題が発覚した後の変更が困難 
• オープンな規格への対...
SUGAR SWEET ROBOTICS CO., LTD. 
おわりに 
• 質問等・サポートページ 
• http://sugarsweetrobotics.com/ネットワーク通信の基礎/ 
80
Upcoming SlideShare
Loading in …5
×

ネットワーク通信入門

5,264 views

Published on

ネットワーク (TCP/IP) 入門.ソケット通信について入門します.

Published in: Technology
  • Be the first to comment

ネットワーク通信入門

  1. 1. SUGAR SWEET ROBOTICS CO., LTD. ネットワークを用いた通信 株式会社SUGAR SWEET ROBOTICS 菅 佑樹 1
  2. 2. SUGAR SWEET ROBOTICS CO., LTD. 自己紹介 2
  3. 3. SUGAR SWEET ROBOTICS CO., LTD. 自己紹介 • 菅 佑樹 (Yuki Suga) • 2012〜~ 株式会社SUGAR SWEET ROBOTICS代表取締役 • 2010〜~2012 株式会社リバスト • 2007〜~2010 早稲⽥田⼤大学総合機械⼯工学科助⼿手 (菅野研) 3 http://ysuga.net http://sugarsweetrobotics.com
  4. 4. ! • 2007〜~2010 早稲⽥田⼤大学総合機械⼯工学科助⼿手 SUGAR SWEET ROBOTICS CO., LTD. 林業機械支援システム 学習適応する コミュニケーション ロボット 4 http://www.sugano.mech.waseda.ac.jp 正面ステレオ カメラ 収穫マニピュレータ 下方カメラ走行台車 車いす搭載型 ロボットアーム いちご収穫ロボット 岐阜県・早稲田大学WABOT-­‐HOUSE 研究所による 前川製作所との共同研究
  5. 5. SUGAR SWEET ROBOTICS CO., LTD. • 2010〜~2012 株式会社リバスト 5 アメリカMobile スイス Robot社 移動台車 Pioneerシリーズ Neuronics社 Katana ロボットアーム カナダ Inuktun社 探索ロボット フランス Aldebaran Robotics社 NAO http://revast.co.jp
  6. 6. SUGAR SWEET ROBOTICS CO., LTD. • 2012〜~ 株式会社SUGAR SWEET ROBOTICS • http://sugarsweetrobotics.com – ロボットの受託開発・コンサルティング – RTミドルウエアに関する開発 – ロボット⽤用ミドルウエアに関する講演 6
  7. 7. SUGAR SWEET ROBOTICS CO., LTD. コンテンツ • 通信とは何か? • プロトコルとは何か? • TCP/IPとは何か? • TCP通信の実際 • ソケット通信ライブラリ • Winsock2 • 実習 7
  8. 8. SUGAR SWEET ROBOTICS CO., LTD. 通信とは何か 8
  9. 9. SUGAR SWEET ROBOTICS CO., LTD. 通信とは何か • 通信(=Communication) • 2者(もしくはそれ以上)の間で情報を共有すること • 日常会話も通信 • 壁画も通信 • どうやって,何を媒介として通信するか,が問題 9
  10. 10. SUGAR SWEET ROBOTICS CO., LTD. プロトコル(通信規約) • どのようなルール(フォーマット)で情報を伝達するか,の約束 • 会話に用いられる言語もプロトコル • 通信速度や,データのアライメントもプロトコル • 電線を使った通信なら,電圧やケーブルの太さ,コネクタ形 状もプロトコル 10
  11. 11. SUGAR SWEET ROBOTICS CO., LTD. たとえば • RS232C • D Sub 9pin, 25pinコネクタ • PCとターゲットの1対1を想定 • 調歩同期式通信なら3線で通信(入力と出力とコモン端子) • +3Vから+15Vで0(スペース) • -3Vから-15Vで1(マーク) • 通信速度は9600bps, 19200bps, 38400bps, 115200bpsなどから選択 • スタートビット幅,ストップビット幅,データ長,パリティチェック,通 信制御線の有無 11
  12. 12. SUGAR SWEET ROBOTICS CO., LTD. たとえば • CAN (Controller Area Network) • 2線式通信.2線間の電位差で”0”, “1”を決める • 最大1Mbps • バス型通信(複数台接続) • ID(アドレス)で機材の判別 • 同時にバスにアクセスしようとするとハードウエアで自動的に判別可能 12 120Ω 120Ω デバイスA ! CANコントローラ デバイスB ! CANコントローラ デバイスC ! CANコントローラ
  13. 13. SUGAR SWEET ROBOTICS CO., LTD. データをどう解釈するか? • RS232Cならば,単純に8ビットのデータが一つ送られてくるのみ. 連続してデータを送り続ければ良い • CANならば最大8バイトのデータに,送り手のアドレス情報も加わる • いずれにせよ,このデータをどう解釈するかは自由 • その解釈のルールもプロトコル 13
  14. 14. SUGAR SWEET ROBOTICS CO., LTD. • 文字列でデータを送受信 • 改行コードが送られるまで受信 • 1行の文字列によって動作をする • メリット • Tera Termなどのターミナルソフトウエアで確認できる • 注意点 • データが長くなる • (125はデータで1バイトだが,文字列では3文字3バイト) • 文字列を数値に変換するコストがかかる • 文字コードの問題 (ASCII以外の場合) • 改行コードの問題 (CRかLFか,CRLFか) 14 キャラクタベースプロトコル
  15. 15. SUGAR SWEET ROBOTICS CO., LTD. バイナリプロトコル • サーボモータのコントローラのプロトコル • CAN想定 • 1バイト目:ロボットへの指令の種類 • 2バイト目以降:指令に必要なデータ • メリット • データが短く,効率的 • 注意点 • デバッグがしづらい(ツールを作れば問題無し) • エンディアン(バイトオーダー) 15 D0 (命令) D1以降のデータ 1 (サーボON/OFF) D1が1ならON,D1が0ならOFF 2 (目標速度指令) D1, D2で2バイト(16bit)の指令値.ビッグエンディアン.1023で最大 速度.最上位ビットが回転方向 3 (目標位置指令) D1, D2, D3, D4で4バイト(32bit)の指令値.ビッグエンディアン. 4 (トルク指令) D1, D2で2バイトの指令値.ビッグエンディアン.1023で最大トル ク.最上位ビットが回転方向
  16. 16. SUGAR SWEET ROBOTICS CO., LTD. プロトコルの階層性 • RS232CやCANで送ったデータを,上位のプロトコルでどう解釈するか • プロトコルには階層性がある • ちょうど封筒のようなモノ.封筒の中身がデータで,解釈は上位のプロトコル に任せる • たとえば・・・ 16 プロトコル1 プロトコル2 プロトコル2 物理的プロトコル ネットワーク的 アプリケーション的 電圧 通信速度 どこから? 何の命令か? どこへ?
  17. 17. SUGAR SWEET ROBOTICS CO., LTD. TCP/IPとは何か 17
  18. 18. SUGAR SWEET ROBOTICS CO., LTD. OSI参照モデル アプリケーション層 プレゼンテーション層 セッション層 トランスポート層 • コンピュータの通信 機能を階層構造に分 割したモデル (ISO) ネットワーク層 18 データリンク層 物理層
  19. 19. SUGAR SWEET ROBOTICS CO., LTD. Ethernet • イーサーネット • Ether = エーテル・・・ど こにでもある • 普段,有線LANと称している のはこれ • 物理層+データリンク層の通 信 • MACアドレス 19 アプリケーション層 プレゼンテーション層 セッション層 トランスポート層 ネットワーク層 データリンク層 物理層
  20. 20. SUGAR SWEET ROBOTICS CO., LTD. IPとは何か • IP (インターネットプロトコル) ルータ0.1.1 • IPアドレス • パケットのルーティング ルータ0.0.1 20 アプリケーション層 プレゼンテーション層 セッション層 トランスポート層 ネットワーク層 データリンク層 物理層 ホスト1 0.0.1.1 ホスト2 0.0.1.2 ホスト3 0.0.1.3 0.0.1.4 0.1.1.2 ホスト5 0.1.1.4 0.1.1.1
  21. 21. SUGAR SWEET ROBOTICS CO., LTD. TCPとは何か • TCP (Transmission Control Protocol) • 到達確認と誤り訂正,順序訂正 • ポート番号 ! ! ! ! ! ! ! • TCP/IPを使えば高信頼かつ柔軟な ホスト間の通信が可能になる 21 アプリケーション層 プレゼンテーション層 セッション層 トランスポート層 ネットワーク層 データリンク層 物理層 ホスト1 0.0.1.4 ホスト2 0.0.1.2 ホスト5 0.1.1.1 80 3306 ウェブサーバ データベース
  22. 22. SUGAR SWEET ROBOTICS CO., LTD. TCP/IP通信を使うRT機器 RT = Robotics Technologies (ロボット技術) 22
  23. 23. SUGAR SWEET ROBOTICS CO., LTD. Ethernetとマイコン • マイクロコントローラの高性能化 • EthernetとTCP/IPをサポートするコントロー ラが増えた • ドライバ不要 • プラットフォーム依存性(言語・OS)が低い • IPアドレス等の設定が必要 • サポートする技術がある (Bonjourなど) 23
  24. 24. SUGAR SWEET ROBOTICS CO., LTD. 市販の汎用マイコン等 • arduinoやmbedなどのホビー向けマイコン 製品 • arduino, mbed, netduino, GR-SAKURA… • Raspberry-PiやBeagle Boardなどの小型組 み込みLinuxボード • Raspberry-Pi, Armadillo, Beagle Bone Black 24
  25. 25. SUGAR SWEET ROBOTICS CO., LTD. センサ,コントローラ等 • レーザースキャナ • 北陽電機 • UST-10LX, USB-20LX等 • SICK株式会社 • LMS500等 • モータコントローラ • イクシスリサーチ • iMCs06等 25
  26. 26. SUGAR SWEET ROBOTICS CO., LTD. PC ロボット機器 • Mobile Robot Pioneerシリーズ • RS232CでPCと通信 • クライアント用ライブラリが充実 26 RS232C クライアント コントローラ (マイコン) センサ等モータ
  27. 27. SUGAR SWEET ROBOTICS CO., LTD. ロボット機器 27 コントローラ (マイコン) PC センサ等モータ RS232C PC サーバ クライアント • Mobile Robot Pioneerシリーズ • 付属のサーバープログラムを実行するとTCP/IPを使った遠隔操 作が可能 • クライアントプログラムは変更不要
  28. 28. SUGAR SWEET ROBOTICS CO., LTD. ロボット機器 28 頭部 RS485等サーバPC コントローラ (マイコン) センサ等モータ クライアント • Aldebaran Robotics NAO • 頭部でLinuxサーバープログラムが自動実行される • ロボットのIPアドレスの設定等は,ブラウザで可能 ウェブサーバ IE等ブラウザ
  29. 29. SUGAR SWEET ROBOTICS CO., LTD. TCP通信の実際 29
  30. 30. SUGAR SWEET ROBOTICS CO., LTD. ソケット通信 • TCP/IP通信のエンドポイントを「ソケッ ト」と呼ぶ • OSごとに実装が違うが大きな流れは一緒 • UNIX, Linux (POSIXライブラリ) • Windows (Winsockライブラリ) • 様々な言語でソケット通信が可能 • C++, Python, Java, C#, VB, MATLAB… 30
  31. 31. SUGAR SWEET ROBOTICS CO., LTD. サーバ側 1.ソケット生成(socket) 2.ソケット登録(bind) 3.ソケット接続準備(listen) 4.ソケット接続待機(accept) 5.受信・送信(recv / send) 6.ソケット切断(close) 31
  32. 32. SUGAR SWEET ROBOTICS CO., LTD. クライアント側 32 1.ソケット生成(socket) 2.ソケット接続要求(connect) 3.受信・送信(recv / send) 4.ソケット切断(close)
  33. 33. SUGAR SWEET ROBOTICS CO., LTD. TCP • TCPソケットに必要な情報 • サーバー側 • ポート番号 • クライアント側 • ポート番号 • サーバーのIPアドレス 33 サーバー 0.1.1.1 3306 ! アプリ クライアント 0.0.1.2
  34. 34. SUGAR SWEET ROBOTICS CO., LTD. 34 サーバー側クライアント側 ソケット作成 socket ソケット登録 bind ソケット接続準備 listen ソケット接続待機 accept ソケット作成 socket ソケット接続要求 connect 通信用ソケット 送受信 (send / recv) ソケット切断 close 切断
  35. 35. SUGAR SWEET ROBOTICS CO., LTD. Winsock2 35
  36. 36. SUGAR SWEET ROBOTICS CO., LTD. サーバ側 36
  37. 37. SUGAR SWEET ROBOTICS CO., LTD. ヘッダーファイル • winsock2.hやws2tcpip.hをインクルードする • ws2_32.libをリンクする 37 // ソケットライブラリを使うためのヘッダー #include <winsock2.h> #include <ws2tcpip.h> #include <tchar.h> // ソケットライブラリを使うためのライブラリのリンク #pragma comment (lib, "Ws2_32.lib") ! // 標準的なC言語のヘッダー #include <stdio.h> #include <stdlib.h>
  38. 38. SUGAR SWEET ROBOTICS CO., LTD. WSAStartup 38 • WSAStartupを実行する必要がある. • 終了時はWSACleanupを実行する // #1. WSAStartup関数を呼び出し、ソケット通信を開始する // この関数を読んだ場合、プログラムはWSACleanup関数を // 呼んで終了する必要がある。 WSADATA wsaData; result = WSAStartup(MAKEWORD(2, 2), &wsaData); if (result != 0) { // 失敗するとゼロ以外の値が返る printf(" # WSAStartup failed with error: %dn", result); return INVALID_SOCKET; }
  39. 39. SUGAR SWEET ROBOTICS CO., LTD. // #2.3 ソケットの作成 listenSocket = socket(AF_INET, SOCK_STREAM, 0); if (listenSocket == INVALID_SOCKET) { printf("socket failed with error: %ldn", WSAGetLastError()); WSACleanup(); return INVALID_SOCKET; } 39 • socket関数でソケットを作成する
  40. 40. SUGAR SWEET ROBOTICS CO., LTD. 40 • サーバーが待機するソケットの設定を初期化する • 重要なのはTCPのポート番号 ! struct sockaddr_in addr; ! addr.sin_family = AF_INET; addr.sin_port = htons(27015); addr.sin_addr.S_un.S_addr = INADDR_ANY; ! // #2.4 Bind result = bind(listenSocket, (struct sockaddr *)&addr, sizeof(addr)); if (result == SOCKET_ERROR) { printf("bind failed with error: %dn", WSAGetLastError()); closesocket(listenSocket); WSACleanup(); return INVALID_SOCKET; }
  41. 41. SUGAR SWEET ROBOTICS CO., LTD. • listen関数で接続の準備 • accept関数で接続待機 41 // #2.5 Listen result = listen(listenSocket, SOMAXCONN); if (result == SOCKET_ERROR) { printf("listen failed with error: %dn", WSAGetLastError()); closesocket(listenSocket); WSACleanup(); return INVALID_SOCKET; } ! // #2.6 Accept clientSocket = accept(listenSocket, NULL, NULL); if (clientSocket == INVALID_SOCKET) { printf("accept failed with error: %dn", WSAGetLastError()); closesocket(listenSocket); WSACleanup(); return INVALID_SOCKET; }
  42. 42. SUGAR SWEET ROBOTICS CO., LTD. • recv関数でデータを受信する 42 int numReceived; char receiveBuffer[DEFAULT_BUFFER_LEN]; int receiveBufferLength = DEFAULT_BUFFER_LEN; ! // データを受信する。numReceivedには受信したデータのバイト数が入る。 receiveBufferには受信データが入る。 numReceived = recv(clientSocket, receiveBuffer, receiveBufferLength, 0); if (numReceived > 0) { // 正常に受信したなら表示する。 printf(" # Bytes received: %dn", numReceived); }
  43. 43. SUGAR SWEET ROBOTICS CO., LTD. • send関数でデータの送信 43 int numReceived; char receiveBuffer[DEFAULT_BUFFER_LEN]; int receiveBufferLength = DEFAULT_BUFFER_LEN; ! sendResult = send(clientSocket, receiveBuffer, numReceived, 0); if (sendResult == SOCKET_ERROR) { // 送信失敗なら終了する。 printf(" # Send failed with error: %dn", WSAGetLastError()); closesocket(clientSocket); WSACleanup(); return 1; } printf(" # Bytes sent: %dn", sendResult); // 送信成功なら表示する。
  44. 44. SUGAR SWEET ROBOTICS CO., LTD. クライアント側 44
  45. 45. SUGAR SWEET ROBOTICS CO., LTD. ヘッダーファイル • winsock2.hやws2tcpip.hをインクルードする • ws2_32.libをリンクする 45 // ソケットライブラリを使うためのヘッダー #include <winsock2.h> #include <ws2tcpip.h> #include <tchar.h> // ソケットライブラリを使うためのライブラリのリンク #pragma comment (lib, "Ws2_32.lib") ! // 標準的なC言語のヘッダー #include <stdio.h>
  46. 46. SUGAR SWEET ROBOTICS CO., LTD. WSAStartup 46 • WSAStartupを実行する必要がある. • 終了時はWSACleanupを実行する // #1. WSAStartup関数を呼び出し、ソケット通信を開始する // この関数を読んだ場合、プログラムはWSACleanup関数を // 呼んで終了する必要がある。 WSADATA wsaData; result = WSAStartup(MAKEWORD(2, 2), &wsaData); if (result != 0) { // 失敗するとゼロ以外の値が返る printf(" # WSAStartup failed with error: %dn", result); return INVALID_SOCKET; }
  47. 47. SUGAR SWEET ROBOTICS CO., LTD. struct sockaddr_in addr; ! server.sin_family = AF_INET; server.sin_port = htons(27015); server.sin_addr.S_un.S_addr = inet_addr(“127.0.0.1”); ! // #2 ソケットの作成 clientSocket = socket(AF_INET, SOCK_STREAM, 0); if (clientSocket == INVALID_SOCKET) { printf("socket failed with error: %ldn", WSAGetLastError()); WSACleanup(); return INVALID_SOCKET; } 47 • ソケットの設定を初期化する • 接続先のアドレスとTCPのポート番号
  48. 48. SUGAR SWEET ROBOTICS CO., LTD. • サーバーが待機するソケットの設定を初期化する • 重要なのはTCPのポート番号 // #3 ソケットの接続 result = connect(clientSocket, (struct sockaddr *)&server, sizeof(server)); if (result != 0) { printf("socket failed with error: %ldn", WSAGetLastError()); WSACleanup(); return INVALID_SOCKET; } 48
  49. 49. SUGAR SWEET ROBOTICS CO., LTD. TCP/IP通信設定 • サーバ側のIPアドレス・ポート番号を知る • サーバ側でのipconfig / ifconfigコマンド • 説明書をよく読む • そもそも相手のPCや機器と通信が可能か? • pingコマンドで確認する • ファイアーウォールの設定を確認する 49
  50. 50. SUGAR SWEET ROBOTICS CO., LTD. 実習 50
  51. 51. SUGAR SWEET ROBOTICS CO., LTD. 実習内容 • サーバー&クライアントのプログラム • サーバー側 • 27015番のTCPポートで待機 • 命令によって異なる音声をならす • クライアント側 • サーバーに接続する • サーバは自マシンで動く (IPアドレスは127.0.0.1固定) • キーボード入力によって異なる命令を送信 51
  52. 52. SUGAR SWEET ROBOTICS CO., LTD. これをインストールして下さい • Visual Studio 2013 Express Edition for Windows Desktop • http://www.visualstudio.com/ downloads/download-visual-studio-vs# d-express-windows-desktop • Tera Term (ターミナルソフト) 52
  53. 53. SUGAR SWEET ROBOTICS CO., LTD. キーボード入力 数値1~9 受信確認 プロトコル • テキストベースのプロトコル • SND*の4バイト「*」には数値が入る 53 S N D 1.... S N D 9 C:WindowsMedia o 再生 .... Ring01.wav C:WindowsMedia Ring09.wav k .
  54. 54. SUGAR SWEET ROBOTICS CO., LTD. 実習手順 1.データを受信し表示するプログラムを作る • 一般的なターミナルソフトからデータを送信する 2.受け取ったデータによって処理を変える • これもターミナルソフトでテスト 3.データを送信するプログラムを作る • 2つのプログラムを統合する 54
  55. 55. SUGAR SWEET ROBOTICS CO., LTD. Visual Studioの基本的操作 55
  56. 56. SUGAR SWEET ROBOTICS CO., LTD. Visual Studio 2013 • Visual Studio 2013 for Windows Desktopを開く • 初めて起動する人は登録が必要 • ファイル>新しいプロジェクトを 選択 • テンプレート>Visual C++を選択 • Win32 コンソール アプリケー ションを選択 • 名前を「TelnetServer」とする 56
  57. 57. SUGAR SWEET ROBOTICS CO., LTD. アプリケーションの設定 • 左のメニューからアプリ ケーションの設定を選ぶ • 追加のオプション>空の プロジェクトをチェック • SDLチェックを外す • 「完了」を押す 57
  58. 58. SUGAR SWEET ROBOTICS CO., LTD. ファイルの追加 • 画面右の「ソリューショ ンエクスプローラ」の 「ソースファイル」を 右クリック • 追加>新しい項目 • C++ファイルを選択 • 名前を「main.cpp」と する 58
  59. 59. SUGAR SWEET ROBOTICS CO., LTD. main.cppを書く • 追加資料を元にmain.cppを編集する. 59
  60. 60. SUGAR SWEET ROBOTICS CO., LTD. ビルド • メニュー>ソリューションのビルド 60
  61. 61. SUGAR SWEET ROBOTICS CO., LTD. 実行 • メニュー>デバッグ>デバッグ開始 61
  62. 62. SUGAR SWEET ROBOTICS CO., LTD. サーバー側のプログラム 62
  63. 63. SUGAR SWEET ROBOTICS CO., LTD. テスト方法 • kadai1プログラムをビルドして実行 • Tera TermでIPアドレス「127.0.0.1」の27015番ポー トに接続する • キーボードでabcと打ってリターン • 実行中のプログラムに3バイト受信と表示される 63
  64. 64. SUGAR SWEET ROBOTICS CO., LTD. Tera Termの使い方 • ホストを127.0.0.1 (サーバーのアドレスに) • TCPポートを27015に • サービスをTelnetに 64
  65. 65. SUGAR SWEET ROBOTICS CO., LTD. どうしてもうまくいかない • ファイアーウォールをOFFにして試してみ ましょう(インターネットに繋いだままだ とやや危険です.自己責任でお願いします) • http://windows.microsoft.com/ja-jp/ windows/turn-windows-firewall-on- off#turn-windows-firewall-on-off= windows-7 65
  66. 66. SUGAR SWEET ROBOTICS CO., LTD. サーバー側 受信したデータによって分岐する 66
  67. 67. SUGAR SWEET ROBOTICS CO., LTD. テスト方法 • kadai2プログラムをビルドして実行 • Tera TermでIPアドレス「127.0.0.1」の27015番ポートに 接続する • キーボードでsnd1と打ってリターン • C:Windowsmediaring01.wavが再生される • キーボードでsnd2と打ってリターン • C:Windowsmediaring02.wavが再生される • キーボードでsnd3と打ってリターン • C:Windowsmediaring03.wavが再生される 67
  68. 68. SUGAR SWEET ROBOTICS CO., LTD. サーバー側 snd*に対応させる 68
  69. 69. SUGAR SWEET ROBOTICS CO., LTD. 「snd*」に対応させる • もしsndから始まらないならエラー • 数字は1ケタと仮定 • 4文字目のデータは数字 • 数字の文字コードから48を引くと数値に なる 69
  70. 70. SUGAR SWEET ROBOTICS CO., LTD. テスト方法 • kadai3プログラムをビルドして実行 • Tera TermでIPアドレス「127.0.0.1」の27015番ポートに接続す る • キーボードでsnd1と打ってリターン • C:Windowsmediaring01.wavが再生される • キーボードでsnd2と打ってリターン • C:Windowsmediaring02.wavが再生される • キーボードでsnd3と打ってリターン • C:Windowsmediaring03.wavが再生される • ・・・snd9まで試す 70
  71. 71. SUGAR SWEET ROBOTICS CO., LTD. クライアント側 71
  72. 72. SUGAR SWEET ROBOTICS CO., LTD. テスト方法 • kadai3プログラムをビルドして実行(サーバーが起動) • kadai4プログラムをビルドして実行(自作クライアントが起動) • IPアドレス「127.0.0.1」の27015番ポートに接続する • プログラムは自動的にsnd1と送信する. • ok.の3文字が返ってくれば成功 72
  73. 73. SUGAR SWEET ROBOTICS CO., LTD. クライアント側 キーボード入力で分岐 73
  74. 74. SUGAR SWEET ROBOTICS CO., LTD. 課題 • キーボード入力の数値を判別 • 0から9ならばsnd*として送信 • qならば終了 74
  75. 75. SUGAR SWEET ROBOTICS CO., LTD. テスト方法 • kadai3プログラムをビルドして実行(サーバーが起動) • kadai5プログラムをビルドして実行(自作クライアントが起動) • IPアドレス「127.0.0.1」の27015番ポートに接続する • クライアント側の黒いウィンドウをアクティブにし,「1」と打ってEnter すると,クライアント側はsnd1と送信するので,音声がなる. • 同様に1から9まで試す. 75
  76. 76. SUGAR SWEET ROBOTICS CO., LTD. 発展編 76
  77. 77. SUGAR SWEET ROBOTICS CO., LTD. 発展編 • ソフトウエアのメンテナンス性を良くする • サーバー側 • フレームワーク化する • クライアント側 • ライブラリ化する • ヘッダーとDLLを配布すれば誰でも使えるように • 複数の言語に対応させる • GUI作成,ウェブやDBとの連携,数値計算など,言語ごと に向き不向きがある • 複数の開発者に使ってもらうなら複数の言語対応を • C++, Python, Java, C#, MATLAB, LabVIEW 77
  78. 78. SUGAR SWEET ROBOTICS CO., LTD. 発展編 • 複数のプラットフォームに対応させる • Windows • Linux (OSX) ! • 移植性の高いコードにする • ソケット通信用ミドルウエアを使う • boost, ACEなど • OS依存性の低い言語を使う • .NET Framework, Java, Pythonなど 78
  79. 79. SUGAR SWEET ROBOTICS CO., LTD. 発展編 • オープンなプロトコルに対応させる • 独自プロトコル開発は車輪の再発明 • プロトコルの慎重な設計は難しく,問題が発覚した後の変更が困難 • オープンな規格への対応で複数の言語・OS対応になる • ロボット系で一般的に使われるインターネット上での分散制御用プロトコル • XML-RPC, JSON-RPC • CORBA, DDS • ロボット用ミドルウエア • OpenRTM-aist • Win, Linux, OSX • C++, Python, Java, C# • ROS • Linux, OSX • C++, Python, Java, C#, Haskell • ORiN • Win, Linux • .NET framework対応 (C++, C#, VB, Python, Java,…) 79
  80. 80. SUGAR SWEET ROBOTICS CO., LTD. おわりに • 質問等・サポートページ • http://sugarsweetrobotics.com/ネットワーク通信の基礎/ 80

×