SlideShare a Scribd company logo
1 of 80
Download to read offline
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 早稲⽥田⼤大学総合機械⼯工学科助⼿手 (菅野研) 
3 
http://ysuga.net 
http://sugarsweetrobotics.com
! 
• 2007〜~2010 早稲⽥田⼤大学総合機械⼯工学科助⼿手 
SUGAR SWEET ROBOTICS CO., LTD. 
林業機械支援システム 
学習適応する 
コミュニケーション 
ロボット 
4 
http://www.sugano.mech.waseda.ac.jp 
正面ステレオ 
カメラ 
収穫マニピュレータ 
下方カメラ走行台車 
車いす搭載型 
ロボットアーム 
いちご収穫ロボット 
岐阜県・早稲田大学WABOT-­‐HOUSE 
研究所による 
前川製作所との共同研究
SUGAR SWEET ROBOTICS CO., LTD. 
• 2010〜~2012 株式会社リバスト 
5 
アメリカMobile 
スイス 
Robot社 
移動台車 
Pioneerシリーズ 
Neuronics社 
Katana 
ロボットアーム 
カナダ 
Inuktun社 
探索ロボット 
フランス 
Aldebaran 
Robotics社 
NAO 
http://revast.co.jp
SUGAR SWEET ROBOTICS CO., LTD. 
• 2012〜~ 株式会社SUGAR SWEET ROBOTICS 
• http://sugarsweetrobotics.com 
– ロボットの受託開発・コンサルティング 
– RTミドルウエアに関する開発 
– ロボット⽤用ミドルウエアに関する講演 
6
SUGAR SWEET ROBOTICS CO., LTD. 
コンテンツ 
• 通信とは何か? 
• プロトコルとは何か? 
• TCP/IPとは何か? 
• TCP通信の実際 
• ソケット通信ライブラリ 
• Winsock2 
• 実習 
7
SUGAR SWEET ROBOTICS CO., LTD. 
通信とは何か 
8
SUGAR SWEET ROBOTICS CO., LTD. 
通信とは何か 
• 通信(=Communication) 
• 2者(もしくはそれ以上)の間で情報を共有すること 
• 日常会話も通信 
• 壁画も通信 
• どうやって,何を媒介として通信するか,が問題 
9
SUGAR SWEET ROBOTICS CO., LTD. 
プロトコル(通信規約) 
• どのようなルール(フォーマット)で情報を伝達するか,の約束 
• 会話に用いられる言語もプロトコル 
• 通信速度や,データのアライメントもプロトコル 
• 電線を使った通信なら,電圧やケーブルの太さ,コネクタ形 
状もプロトコル 
10
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
SUGAR SWEET ROBOTICS CO., LTD. 
たとえば 
• CAN (Controller Area Network) 
• 2線式通信.2線間の電位差で”0”, “1”を決める 
• 最大1Mbps 
• バス型通信(複数台接続) 
• ID(アドレス)で機材の判別 
• 同時にバスにアクセスしようとするとハードウエアで自動的に判別可能 
12 
120Ω 
120Ω 
デバイスA 
! 
CANコントローラ 
デバイスB 
! 
CANコントローラ 
デバイスC 
! 
CANコントローラ
SUGAR SWEET ROBOTICS CO., LTD. 
データをどう解釈するか? 
• RS232Cならば,単純に8ビットのデータが一つ送られてくるのみ. 
連続してデータを送り続ければ良い 
• CANならば最大8バイトのデータに,送り手のアドレス情報も加わる 
• いずれにせよ,このデータをどう解釈するかは自由 
• その解釈のルールもプロトコル 
13
SUGAR SWEET ROBOTICS CO., LTD. 
• 文字列でデータを送受信 
• 改行コードが送られるまで受信 
• 1行の文字列によって動作をする 
• メリット 
• Tera Termなどのターミナルソフトウエアで確認できる 
• 注意点 
• データが長くなる 
• (125はデータで1バイトだが,文字列では3文字3バイト) 
• 文字列を数値に変換するコストがかかる 
• 文字コードの問題 (ASCII以外の場合) 
• 改行コードの問題 (CRかLFか,CRLFか) 
14 
キャラクタベースプロトコル
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で最大トル 
ク.最上位ビットが回転方向
SUGAR SWEET ROBOTICS CO., LTD. 
プロトコルの階層性 
• RS232CやCANで送ったデータを,上位のプロトコルでどう解釈するか 
• プロトコルには階層性がある 
• ちょうど封筒のようなモノ.封筒の中身がデータで,解釈は上位のプロトコル 
に任せる 
• たとえば・・・ 
16 
プロトコル1 
プロトコル2 
プロトコル2 
物理的プロトコル 
ネットワーク的 
アプリケーション的 
電圧 
通信速度 
どこから? 
何の命令か? 
どこへ?
SUGAR SWEET ROBOTICS CO., LTD. 
TCP/IPとは何か 
17
SUGAR SWEET ROBOTICS CO., LTD. 
OSI参照モデル 
アプリケーション層 
プレゼンテーション層 
セッション層 
トランスポート層 
• コンピュータの通信 
機能を階層構造に分 
割したモデル (ISO) 
ネットワーク層 
18 
データリンク層 
物理層
SUGAR SWEET ROBOTICS CO., LTD. 
Ethernet 
• イーサーネット 
• Ether = エーテル・・・ど 
こにでもある 
• 普段,有線LANと称している 
のはこれ 
• 物理層+データリンク層の通 
信 
• MACアドレス 
19 
アプリケーション層 
プレゼンテーション層 
セッション層 
トランスポート層 
ネットワーク層 
データリンク層 
物理層
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
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 
ウェブサーバ 
データベース
SUGAR SWEET ROBOTICS CO., LTD. 
TCP/IP通信を使うRT機器 
RT = Robotics Technologies 
(ロボット技術) 
22
SUGAR SWEET ROBOTICS CO., LTD. 
Ethernetとマイコン 
• マイクロコントローラの高性能化 
• EthernetとTCP/IPをサポートするコントロー 
ラが増えた 
• ドライバ不要 
• プラットフォーム依存性(言語・OS)が低い 
• IPアドレス等の設定が必要 
• サポートする技術がある (Bonjourなど) 
23
SUGAR SWEET ROBOTICS CO., LTD. 
市販の汎用マイコン等 
• arduinoやmbedなどのホビー向けマイコン 
製品 
• arduino, mbed, netduino, GR-SAKURA… 
• Raspberry-PiやBeagle Boardなどの小型組 
み込みLinuxボード 
• Raspberry-Pi, Armadillo, Beagle Bone 
Black 
24
SUGAR SWEET ROBOTICS CO., LTD. 
センサ,コントローラ等 
• レーザースキャナ 
• 北陽電機 
• UST-10LX, USB-20LX等 
• SICK株式会社 
• LMS500等 
• モータコントローラ 
• イクシスリサーチ 
• iMCs06等 
25
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シリーズ 
• 付属のサーバープログラムを実行するとTCP/IPを使った遠隔操 
作が可能 
• クライアントプログラムは変更不要
SUGAR SWEET ROBOTICS CO., LTD. 
ロボット機器 
28 
頭部 
RS485等サーバPC 
コントローラ 
(マイコン) 
センサ等モータ 
クライアント 
• Aldebaran Robotics NAO 
• 頭部でLinuxサーバープログラムが自動実行される 
• ロボットのIPアドレスの設定等は,ブラウザで可能 
ウェブサーバ 
IE等ブラウザ
SUGAR SWEET ROBOTICS CO., LTD. 
TCP通信の実際 
29
SUGAR SWEET ROBOTICS CO., LTD. 
ソケット通信 
• TCP/IP通信のエンドポイントを「ソケッ 
ト」と呼ぶ 
• OSごとに実装が違うが大きな流れは一緒 
• UNIX, Linux (POSIXライブラリ) 
• Windows (Winsockライブラリ) 
• 様々な言語でソケット通信が可能 
• C++, Python, Java, C#, VB, MATLAB… 30
SUGAR SWEET ROBOTICS CO., LTD. 
サーバ側 
1.ソケット生成(socket) 
2.ソケット登録(bind) 
3.ソケット接続準備(listen) 
4.ソケット接続待機(accept) 
5.受信・送信(recv / send) 
6.ソケット切断(close) 
31
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.1 
3306 ! 
アプリ 
クライアント 
0.0.1.2
SUGAR SWEET ROBOTICS CO., LTD. 
34 
サーバー側クライアント側 
ソケット作成 
socket 
ソケット登録 
bind 
ソケット接続準備 
listen 
ソケット接続待機 
accept ソケット作成 
socket 
ソケット接続要求 
connect 
通信用ソケット 
送受信 
(send 
/ 
recv) 
ソケット切断 
close 
切断
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 
// 
ソケットライブラリを使うためのヘッダー 
#include 
<winsock2.h> 
#include 
<ws2tcpip.h> 
#include 
<tchar.h> 
// 
ソケットライブラリを使うためのライブラリのリンク 
#pragma 
comment 
(lib, 
"Ws2_32.lib") 
! 
// 
標準的なC言語のヘッダー 
#include 
<stdio.h> 
#include 
<stdlib.h>
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; 
}
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関数でソケットを作成する
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; 
}
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; 
}
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); 
}
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); 
// 
送信成功なら表示する。
SUGAR SWEET ROBOTICS CO., LTD. 
クライアント側 
44
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>
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; 
}
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のポート番号
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
SUGAR SWEET ROBOTICS CO., LTD. 
TCP/IP通信設定 
• サーバ側のIPアドレス・ポート番号を知る 
• サーバ側でのipconfig / ifconfigコマンド 
• 説明書をよく読む 
• そもそも相手のPCや機器と通信が可能か? 
• pingコマンドで確認する 
• ファイアーウォールの設定を確認する 
49
SUGAR SWEET ROBOTICS CO., LTD. 
実習 
50
SUGAR SWEET ROBOTICS CO., LTD. 
実習内容 
• サーバー&クライアントのプログラム 
• サーバー側 
• 27015番のTCPポートで待機 
• 命令によって異なる音声をならす 
• クライアント側 
• サーバーに接続する 
• サーバは自マシンで動く (IPアドレスは127.0.0.1固定) 
• キーボード入力によって異なる命令を送信 
51
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
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 .
SUGAR SWEET ROBOTICS CO., LTD. 
実習手順 
1.データを受信し表示するプログラムを作る 
• 一般的なターミナルソフトからデータを送信する 
2.受け取ったデータによって処理を変える 
• これもターミナルソフトでテスト 
3.データを送信するプログラムを作る 
• 2つのプログラムを統合する 
54
SUGAR SWEET ROBOTICS CO., LTD. 
Visual Studioの基本的操作 
55
SUGAR SWEET ROBOTICS CO., LTD. 
Visual Studio 2013 
• Visual Studio 2013 for Windows 
Desktopを開く 
• 初めて起動する人は登録が必要 
• ファイル>新しいプロジェクトを 
選択 
• テンプレート>Visual C++を選択 
• Win32 コンソール アプリケー 
ションを選択 
• 名前を「TelnetServer」とする 
56
SUGAR SWEET ROBOTICS CO., LTD. 
アプリケーションの設定 
• 左のメニューからアプリ 
ケーションの設定を選ぶ 
• 追加のオプション>空の 
プロジェクトをチェック 
• SDLチェックを外す 
• 「完了」を押す 
57
SUGAR SWEET ROBOTICS CO., LTD. 
ファイルの追加 
• 画面右の「ソリューショ 
ンエクスプローラ」の 
「ソースファイル」を 
右クリック 
• 追加>新しい項目 
• C++ファイルを選択 
• 名前を「main.cpp」と 
する 
58
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と打ってリターン 
• 実行中のプログラムに3バイト受信と表示される 
63
SUGAR SWEET ROBOTICS CO., LTD. 
Tera Termの使い方 
• ホストを127.0.0.1 
(サーバーのアドレスに) 
• TCPポートを27015に 
• サービスをTelnetに 
64
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
SUGAR SWEET ROBOTICS CO., LTD. 
サーバー側 
受信したデータによって分岐する 
66
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
SUGAR SWEET ROBOTICS CO., LTD. 
サーバー側 
snd*に対応させる 
68
SUGAR SWEET ROBOTICS CO., LTD. 
「snd*」に対応させる 
• もしsndから始まらないならエラー 
• 数字は1ケタと仮定 
• 4文字目のデータは数字 
• 数字の文字コードから48を引くと数値に 
なる 
69
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
SUGAR SWEET ROBOTICS CO., LTD. 
クライアント側 
71
SUGAR SWEET ROBOTICS CO., LTD. 
テスト方法 
• kadai3プログラムをビルドして実行(サーバーが起動) 
• kadai4プログラムをビルドして実行(自作クライアントが起動) 
• IPアドレス「127.0.0.1」の27015番ポートに接続する 
• プログラムは自動的にsnd1と送信する. 
• ok.の3文字が返ってくれば成功 
72
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.0.1」の27015番ポートに接続する 
• クライアント側の黒いウィンドウをアクティブにし,「1」と打ってEnter 
すると,クライアント側はsnd1と送信するので,音声がなる. 
• 同様に1から9まで試す. 
75
SUGAR SWEET ROBOTICS CO., LTD. 
発展編 
76
SUGAR SWEET ROBOTICS CO., LTD. 
発展編 
• ソフトウエアのメンテナンス性を良くする 
• サーバー側 
• フレームワーク化する 
• クライアント側 
• ライブラリ化する 
• ヘッダーとDLLを配布すれば誰でも使えるように 
• 複数の言語に対応させる 
• GUI作成,ウェブやDBとの連携,数値計算など,言語ごと 
に向き不向きがある 
• 複数の開発者に使ってもらうなら複数の言語対応を 
• C++, Python, Java, C#, MATLAB, LabVIEW 
77
SUGAR SWEET ROBOTICS CO., LTD. 
発展編 
• 複数のプラットフォームに対応させる 
• Windows 
• Linux (OSX) 
! 
• 移植性の高いコードにする 
• ソケット通信用ミドルウエアを使う 
• boost, ACEなど 
• OS依存性の低い言語を使う 
• .NET Framework, Java, Pythonなど 
78
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
SUGAR SWEET ROBOTICS CO., LTD. 
おわりに 
• 質問等・サポートページ 
• http://sugarsweetrobotics.com/ネットワーク通信の基礎/ 
80

More Related Content

What's hot

データセンターネットワークの構成について
データセンターネットワークの構成についてデータセンターネットワークの構成について
データセンターネットワークの構成についてMicroAd, Inc.(Engineer)
 
IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向Yuya Rin
 
Wakamonog6 “ISPのネットワーク”って どんなネットワーク?
Wakamonog6 “ISPのネットワーク”って どんなネットワーク?Wakamonog6 “ISPのネットワーク”って どんなネットワーク?
Wakamonog6 “ISPのネットワーク”って どんなネットワーク?Satoshi Matsumoto
 
SDCCオープンネットワークのご紹介【2021/01版】
SDCCオープンネットワークのご紹介【2021/01版】SDCCオープンネットワークのご紹介【2021/01版】
SDCCオープンネットワークのご紹介【2021/01版】ProjectDC-01
 
さくらのVPS で IPv4 over IPv6ルータの構築
さくらのVPS で IPv4 over IPv6ルータの構築さくらのVPS で IPv4 over IPv6ルータの構築
さくらのVPS で IPv4 over IPv6ルータの構築Tomocha Potter
 
545人のインフラを支えたNOCチーム!
545人のインフラを支えたNOCチーム!545人のインフラを支えたNOCチーム!
545人のインフラを支えたNOCチーム!Masayuki Kobayashi
 
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜Akira Nakagawa
 
閉域網接続の技術入門
閉域網接続の技術入門閉域網接続の技術入門
閉域網接続の技術入門Masayuki Kobayashi
 
ルータコンフィグのGit管理のススメ 〜Git管理以外を自動化してみた〜
ルータコンフィグのGit管理のススメ 〜Git管理以外を自動化してみた〜ルータコンフィグのGit管理のススメ 〜Git管理以外を自動化してみた〜
ルータコンフィグのGit管理のススメ 〜Git管理以外を自動化してみた〜Taiji Tsuchiya
 
ISPの向こう側、どうなってますか
ISPの向こう側、どうなってますかISPの向こう側、どうなってますか
ISPの向こう側、どうなってますかAkira Nakagawa
 
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)Kentaro Ebisawa
 
スイッチ・ルータのしくみ
スイッチ・ルータのしくみスイッチ・ルータのしくみ
スイッチ・ルータのしくみogatay
 
インターネットの舞台裏
インターネットの舞台裏インターネットの舞台裏
インターネットの舞台裏Taiji Tsuchiya
 
大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌LINE Corporation
 
【EX/QFX】JUNOS ハンズオントレーニング資料 EX/QFX シリーズ サービス ゲートウェイ コース
【EX/QFX】JUNOS ハンズオントレーニング資料 EX/QFX シリーズ サービス ゲートウェイ コース 【EX/QFX】JUNOS ハンズオントレーニング資料 EX/QFX シリーズ サービス ゲートウェイ コース
【EX/QFX】JUNOS ハンズオントレーニング資料 EX/QFX シリーズ サービス ゲートウェイ コース Juniper Networks (日本)
 
Fibre Channel 基礎講座
Fibre Channel 基礎講座Fibre Channel 基礎講座
Fibre Channel 基礎講座Brocade
 
Geekなぺーじ ネットワーク技術者ではない方々向けIPv6セミナー2
Geekなぺーじ ネットワーク技術者ではない方々向けIPv6セミナー2Geekなぺーじ ネットワーク技術者ではない方々向けIPv6セミナー2
Geekなぺーじ ネットワーク技術者ではない方々向けIPv6セミナー2Kiyotaka Doumae
 

What's hot (20)

データセンターネットワークの構成について
データセンターネットワークの構成についてデータセンターネットワークの構成について
データセンターネットワークの構成について
 
IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向IPv4/IPv6 移行・共存技術の動向
IPv4/IPv6 移行・共存技術の動向
 
Wakamonog6 “ISPのネットワーク”って どんなネットワーク?
Wakamonog6 “ISPのネットワーク”って どんなネットワーク?Wakamonog6 “ISPのネットワーク”って どんなネットワーク?
Wakamonog6 “ISPのネットワーク”って どんなネットワーク?
 
SDCCオープンネットワークのご紹介【2021/01版】
SDCCオープンネットワークのご紹介【2021/01版】SDCCオープンネットワークのご紹介【2021/01版】
SDCCオープンネットワークのご紹介【2021/01版】
 
さくらのVPS で IPv4 over IPv6ルータの構築
さくらのVPS で IPv4 over IPv6ルータの構築さくらのVPS で IPv4 over IPv6ルータの構築
さくらのVPS で IPv4 over IPv6ルータの構築
 
545人のインフラを支えたNOCチーム!
545人のインフラを支えたNOCチーム!545人のインフラを支えたNOCチーム!
545人のインフラを支えたNOCチーム!
 
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
IPv6 最新動向 〜世界共通語で最適化が進むインターネット〜
 
閉域網接続の技術入門
閉域網接続の技術入門閉域網接続の技術入門
閉域網接続の技術入門
 
ルータコンフィグのGit管理のススメ 〜Git管理以外を自動化してみた〜
ルータコンフィグのGit管理のススメ 〜Git管理以外を自動化してみた〜ルータコンフィグのGit管理のススメ 〜Git管理以外を自動化してみた〜
ルータコンフィグのGit管理のススメ 〜Git管理以外を自動化してみた〜
 
あなたのところに専用線が届くまで
あなたのところに専用線が届くまであなたのところに専用線が届くまで
あなたのところに専用線が届くまで
 
ネットワーク構築訓練 入門
ネットワーク構築訓練 入門ネットワーク構築訓練 入門
ネットワーク構築訓練 入門
 
ISPの向こう側、どうなってますか
ISPの向こう側、どうなってますかISPの向こう側、どうなってますか
ISPの向こう側、どうなってますか
 
「ネットワーク超入門 IPsec VPN編」
「ネットワーク超入門 IPsec VPN編」「ネットワーク超入門 IPsec VPN編」
「ネットワーク超入門 IPsec VPN編」
 
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)ネットワーク機器のAPIあれこれ入門(NetOpsCoding#2)
ネットワーク機器のAPIあれこれ入門 (NetOpsCoding#2)
 
スイッチ・ルータのしくみ
スイッチ・ルータのしくみスイッチ・ルータのしくみ
スイッチ・ルータのしくみ
 
インターネットの舞台裏
インターネットの舞台裏インターネットの舞台裏
インターネットの舞台裏
 
大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌大規模サービスを支えるネットワークインフラの全貌
大規模サービスを支えるネットワークインフラの全貌
 
【EX/QFX】JUNOS ハンズオントレーニング資料 EX/QFX シリーズ サービス ゲートウェイ コース
【EX/QFX】JUNOS ハンズオントレーニング資料 EX/QFX シリーズ サービス ゲートウェイ コース 【EX/QFX】JUNOS ハンズオントレーニング資料 EX/QFX シリーズ サービス ゲートウェイ コース
【EX/QFX】JUNOS ハンズオントレーニング資料 EX/QFX シリーズ サービス ゲートウェイ コース
 
Fibre Channel 基礎講座
Fibre Channel 基礎講座Fibre Channel 基礎講座
Fibre Channel 基礎講座
 
Geekなぺーじ ネットワーク技術者ではない方々向けIPv6セミナー2
Geekなぺーじ ネットワーク技術者ではない方々向けIPv6セミナー2Geekなぺーじ ネットワーク技術者ではない方々向けIPv6セミナー2
Geekなぺーじ ネットワーク技術者ではない方々向けIPv6セミナー2
 

Similar to ネットワーク通信入門

組み込み入門
組み込み入門組み込み入門
組み込み入門Yuki Suga
 
組み込み入門
組み込み入門組み込み入門
組み込み入門Yuki Suga
 
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015Toru Yamaguchi
 
OpenRTM-aist入門
OpenRTM-aist入門OpenRTM-aist入門
OpenRTM-aist入門Yuki Suga
 
20180704 soracom discovery_ug#11
20180704 soracom discovery_ug#1120180704 soracom discovery_ug#11
20180704 soracom discovery_ug#11Haruka Yamashita
 
リアルタイムゲームサーバーの ベンチマークをとる方法
リアルタイムゲームサーバーの ベンチマークをとる方法リアルタイムゲームサーバーの ベンチマークをとる方法
リアルタイムゲームサーバーの ベンチマークをとる方法モノビット エンジン
 
法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用
法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用
法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用Ruo Ando
 
中小規模サービスのApacheチューニング
中小規模サービスのApacheチューニング中小規模サービスのApacheチューニング
中小規模サービスのApacheチューニング勲 國府田
 
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)Tomoya Hibi
 
RTミドルウエア講習会2015
RTミドルウエア講習会2015RTミドルウエア講習会2015
RTミドルウエア講習会2015Yuki Suga
 
SORACOM UG 九州 #2 | SORACOM アップデート!! since 2017/5/27
SORACOM UG 九州 #2 | SORACOM アップデート!! since 2017/5/27SORACOM UG 九州 #2 | SORACOM アップデート!! since 2017/5/27
SORACOM UG 九州 #2 | SORACOM アップデート!! since 2017/5/27SORACOM,INC
 
20150715 xflow kikuta_final
20150715 xflow kikuta_final20150715 xflow kikuta_final
20150715 xflow kikuta_finalKazumasa Ikuta
 
JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係
JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係
JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係SORACOM,INC
 
Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)Tomoya Hibi
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 
RouterBOARD with OpenFlow
RouterBOARD with OpenFlowRouterBOARD with OpenFlow
RouterBOARD with OpenFlowToshiki Tsuboi
 
ふくおかクラウドアライアンス5周年記念セミナー | SORACOMが実現する簡単でセキュアなIoTシステム
ふくおかクラウドアライアンス5周年記念セミナー | SORACOMが実現する簡単でセキュアなIoTシステムふくおかクラウドアライアンス5周年記念セミナー | SORACOMが実現する簡単でセキュアなIoTシステム
ふくおかクラウドアライアンス5周年記念セミナー | SORACOMが実現する簡単でセキュアなIoTシステムSORACOM,INC
 
Lagopus workshop@Internet weekのそば
Lagopus workshop@Internet weekのそばLagopus workshop@Internet weekのそば
Lagopus workshop@Internet weekのそばYoshihiro Nakajima
 

Similar to ネットワーク通信入門 (20)

組み込み入門
組み込み入門組み込み入門
組み込み入門
 
組み込み入門
組み込み入門組み込み入門
組み込み入門
 
P2Pって何?
P2Pって何?P2Pって何?
P2Pって何?
 
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
 
OpenRTM-aist入門
OpenRTM-aist入門OpenRTM-aist入門
OpenRTM-aist入門
 
20180704 soracom discovery_ug#11
20180704 soracom discovery_ug#1120180704 soracom discovery_ug#11
20180704 soracom discovery_ug#11
 
リアルタイムゲームサーバーの ベンチマークをとる方法
リアルタイムゲームサーバーの ベンチマークをとる方法リアルタイムゲームサーバーの ベンチマークをとる方法
リアルタイムゲームサーバーの ベンチマークをとる方法
 
法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用
法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用
法政大学情報科学部 2012年度コンピュータネットワーク-第11回授業-Web公開用
 
中小規模サービスのApacheチューニング
中小規模サービスのApacheチューニング中小規模サービスのApacheチューニング
中小規模サービスのApacheチューニング
 
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
Lagopusで試すL3ルーティング + α (Lagopusの設定方法いろいろ)
 
RTミドルウエア講習会2015
RTミドルウエア講習会2015RTミドルウエア講習会2015
RTミドルウエア講習会2015
 
SORACOM UG 九州 #2 | SORACOM アップデート!! since 2017/5/27
SORACOM UG 九州 #2 | SORACOM アップデート!! since 2017/5/27SORACOM UG 九州 #2 | SORACOM アップデート!! since 2017/5/27
SORACOM UG 九州 #2 | SORACOM アップデート!! since 2017/5/27
 
20150715 xflow kikuta_final
20150715 xflow kikuta_final20150715 xflow kikuta_final
20150715 xflow kikuta_final
 
JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係
JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係
JAWS DAYS 2018 | IoT時代におけるデバイスのファームウェアとクラウドのいい関係
 
Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)Lagopus & NFV with Vhost (Tremaday#9)
Lagopus & NFV with Vhost (Tremaday#9)
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
RouterBOARD with OpenFlow
RouterBOARD with OpenFlowRouterBOARD with OpenFlow
RouterBOARD with OpenFlow
 
ふくおかクラウドアライアンス5周年記念セミナー | SORACOMが実現する簡単でセキュアなIoTシステム
ふくおかクラウドアライアンス5周年記念セミナー | SORACOMが実現する簡単でセキュアなIoTシステムふくおかクラウドアライアンス5周年記念セミナー | SORACOMが実現する簡単でセキュアなIoTシステム
ふくおかクラウドアライアンス5周年記念セミナー | SORACOMが実現する簡単でセキュアなIoTシステム
 
Lagopus workshop@Internet weekのそば
Lagopus workshop@Internet weekのそばLagopus workshop@Internet weekのそば
Lagopus workshop@Internet weekのそば
 
Fluentd meetup #2
Fluentd meetup #2Fluentd meetup #2
Fluentd meetup #2
 

More from Yuki Suga

ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)
ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)
ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)Yuki Suga
 
機械図面の基礎
機械図面の基礎機械図面の基礎
機械図面の基礎Yuki Suga
 
適応アルゴリズムとコミュニケーションロボット
適応アルゴリズムとコミュニケーションロボット適応アルゴリズムとコミュニケーションロボット
適応アルゴリズムとコミュニケーションロボットYuki Suga
 
RTミドルウエア活用について
RTミドルウエア活用についてRTミドルウエア活用について
RTミドルウエア活用についてYuki Suga
 
Robotech2012講習会v01最終版v2
Robotech2012講習会v01最終版v2Robotech2012講習会v01最終版v2
Robotech2012講習会v01最終版v2Yuki Suga
 
SI2008 RT-middleware Contest
SI2008 RT-middleware ContestSI2008 RT-middleware Contest
SI2008 RT-middleware ContestYuki Suga
 
Wasanbonの開発
Wasanbonの開発Wasanbonの開発
Wasanbonの開発Yuki Suga
 
RTミドルウエアコンテスト2011応募作品「RTno」
RTミドルウエアコンテスト2011応募作品「RTno」RTミドルウエアコンテスト2011応募作品「RTno」
RTミドルウエアコンテスト2011応募作品「RTno」Yuki Suga
 

More from Yuki Suga (9)

ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)
ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)
ロボットについて (ロボットのソフトウェア的側面と分散モジュール開発)
 
機械図面の基礎
機械図面の基礎機械図面の基礎
機械図面の基礎
 
適応アルゴリズムとコミュニケーションロボット
適応アルゴリズムとコミュニケーションロボット適応アルゴリズムとコミュニケーションロボット
適応アルゴリズムとコミュニケーションロボット
 
RTミドルウエア活用について
RTミドルウエア活用についてRTミドルウエア活用について
RTミドルウエア活用について
 
Robotech2012講習会v01最終版v2
Robotech2012講習会v01最終版v2Robotech2012講習会v01最終版v2
Robotech2012講習会v01最終版v2
 
SI2008 RT-middleware Contest
SI2008 RT-middleware ContestSI2008 RT-middleware Contest
SI2008 RT-middleware Contest
 
RTC-scilab
RTC-scilabRTC-scilab
RTC-scilab
 
Wasanbonの開発
Wasanbonの開発Wasanbonの開発
Wasanbonの開発
 
RTミドルウエアコンテスト2011応募作品「RTno」
RTミドルウエアコンテスト2011応募作品「RTno」RTミドルウエアコンテスト2011応募作品「RTno」
RTミドルウエアコンテスト2011応募作品「RTno」
 

Recently uploaded

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Recently uploaded (7)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

ネットワーク通信入門

  • 1. SUGAR SWEET ROBOTICS CO., LTD. ネットワークを用いた通信 株式会社SUGAR SWEET ROBOTICS 菅 佑樹 1
  • 2. SUGAR SWEET ROBOTICS CO., LTD. 自己紹介 2
  • 3. SUGAR SWEET ROBOTICS CO., LTD. 自己紹介 • 菅 佑樹 (Yuki Suga) • 2012〜~ 株式会社SUGAR SWEET ROBOTICS代表取締役 • 2010〜~2012 株式会社リバスト • 2007〜~2010 早稲⽥田⼤大学総合機械⼯工学科助⼿手 (菅野研) 3 http://ysuga.net http://sugarsweetrobotics.com
  • 4. ! • 2007〜~2010 早稲⽥田⼤大学総合機械⼯工学科助⼿手 SUGAR SWEET ROBOTICS CO., LTD. 林業機械支援システム 学習適応する コミュニケーション ロボット 4 http://www.sugano.mech.waseda.ac.jp 正面ステレオ カメラ 収穫マニピュレータ 下方カメラ走行台車 車いす搭載型 ロボットアーム いちご収穫ロボット 岐阜県・早稲田大学WABOT-­‐HOUSE 研究所による 前川製作所との共同研究
  • 5. SUGAR SWEET ROBOTICS CO., LTD. • 2010〜~2012 株式会社リバスト 5 アメリカMobile スイス Robot社 移動台車 Pioneerシリーズ Neuronics社 Katana ロボットアーム カナダ Inuktun社 探索ロボット フランス Aldebaran Robotics社 NAO http://revast.co.jp
  • 6. SUGAR SWEET ROBOTICS CO., LTD. • 2012〜~ 株式会社SUGAR SWEET ROBOTICS • http://sugarsweetrobotics.com – ロボットの受託開発・コンサルティング – RTミドルウエアに関する開発 – ロボット⽤用ミドルウエアに関する講演 6
  • 7. SUGAR SWEET ROBOTICS CO., LTD. コンテンツ • 通信とは何か? • プロトコルとは何か? • TCP/IPとは何か? • TCP通信の実際 • ソケット通信ライブラリ • Winsock2 • 実習 7
  • 8. SUGAR SWEET ROBOTICS CO., LTD. 通信とは何か 8
  • 9. SUGAR SWEET ROBOTICS CO., LTD. 通信とは何か • 通信(=Communication) • 2者(もしくはそれ以上)の間で情報を共有すること • 日常会話も通信 • 壁画も通信 • どうやって,何を媒介として通信するか,が問題 9
  • 10. SUGAR SWEET ROBOTICS CO., LTD. プロトコル(通信規約) • どのようなルール(フォーマット)で情報を伝達するか,の約束 • 会話に用いられる言語もプロトコル • 通信速度や,データのアライメントもプロトコル • 電線を使った通信なら,電圧やケーブルの太さ,コネクタ形 状もプロトコル 10
  • 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. 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. SUGAR SWEET ROBOTICS CO., LTD. データをどう解釈するか? • RS232Cならば,単純に8ビットのデータが一つ送られてくるのみ. 連続してデータを送り続ければ良い • CANならば最大8バイトのデータに,送り手のアドレス情報も加わる • いずれにせよ,このデータをどう解釈するかは自由 • その解釈のルールもプロトコル 13
  • 14. SUGAR SWEET ROBOTICS CO., LTD. • 文字列でデータを送受信 • 改行コードが送られるまで受信 • 1行の文字列によって動作をする • メリット • Tera Termなどのターミナルソフトウエアで確認できる • 注意点 • データが長くなる • (125はデータで1バイトだが,文字列では3文字3バイト) • 文字列を数値に変換するコストがかかる • 文字コードの問題 (ASCII以外の場合) • 改行コードの問題 (CRかLFか,CRLFか) 14 キャラクタベースプロトコル
  • 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. SUGAR SWEET ROBOTICS CO., LTD. プロトコルの階層性 • RS232CやCANで送ったデータを,上位のプロトコルでどう解釈するか • プロトコルには階層性がある • ちょうど封筒のようなモノ.封筒の中身がデータで,解釈は上位のプロトコル に任せる • たとえば・・・ 16 プロトコル1 プロトコル2 プロトコル2 物理的プロトコル ネットワーク的 アプリケーション的 電圧 通信速度 どこから? 何の命令か? どこへ?
  • 17. SUGAR SWEET ROBOTICS CO., LTD. TCP/IPとは何か 17
  • 18. SUGAR SWEET ROBOTICS CO., LTD. OSI参照モデル アプリケーション層 プレゼンテーション層 セッション層 トランスポート層 • コンピュータの通信 機能を階層構造に分 割したモデル (ISO) ネットワーク層 18 データリンク層 物理層
  • 19. SUGAR SWEET ROBOTICS CO., LTD. Ethernet • イーサーネット • Ether = エーテル・・・ど こにでもある • 普段,有線LANと称している のはこれ • 物理層+データリンク層の通 信 • MACアドレス 19 アプリケーション層 プレゼンテーション層 セッション層 トランスポート層 ネットワーク層 データリンク層 物理層
  • 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. 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. SUGAR SWEET ROBOTICS CO., LTD. TCP/IP通信を使うRT機器 RT = Robotics Technologies (ロボット技術) 22
  • 23. SUGAR SWEET ROBOTICS CO., LTD. Ethernetとマイコン • マイクロコントローラの高性能化 • EthernetとTCP/IPをサポートするコントロー ラが増えた • ドライバ不要 • プラットフォーム依存性(言語・OS)が低い • IPアドレス等の設定が必要 • サポートする技術がある (Bonjourなど) 23
  • 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. SUGAR SWEET ROBOTICS CO., LTD. センサ,コントローラ等 • レーザースキャナ • 北陽電機 • UST-10LX, USB-20LX等 • SICK株式会社 • LMS500等 • モータコントローラ • イクシスリサーチ • iMCs06等 25
  • 26. SUGAR SWEET ROBOTICS CO., LTD. PC ロボット機器 • Mobile Robot Pioneerシリーズ • RS232CでPCと通信 • クライアント用ライブラリが充実 26 RS232C クライアント コントローラ (マイコン) センサ等モータ
  • 27. SUGAR SWEET ROBOTICS CO., LTD. ロボット機器 27 コントローラ (マイコン) PC センサ等モータ RS232C PC サーバ クライアント • Mobile Robot Pioneerシリーズ • 付属のサーバープログラムを実行するとTCP/IPを使った遠隔操 作が可能 • クライアントプログラムは変更不要
  • 28. SUGAR SWEET ROBOTICS CO., LTD. ロボット機器 28 頭部 RS485等サーバPC コントローラ (マイコン) センサ等モータ クライアント • Aldebaran Robotics NAO • 頭部でLinuxサーバープログラムが自動実行される • ロボットのIPアドレスの設定等は,ブラウザで可能 ウェブサーバ IE等ブラウザ
  • 29. SUGAR SWEET ROBOTICS CO., LTD. TCP通信の実際 29
  • 30. SUGAR SWEET ROBOTICS CO., LTD. ソケット通信 • TCP/IP通信のエンドポイントを「ソケッ ト」と呼ぶ • OSごとに実装が違うが大きな流れは一緒 • UNIX, Linux (POSIXライブラリ) • Windows (Winsockライブラリ) • 様々な言語でソケット通信が可能 • C++, Python, Java, C#, VB, MATLAB… 30
  • 31. SUGAR SWEET ROBOTICS CO., LTD. サーバ側 1.ソケット生成(socket) 2.ソケット登録(bind) 3.ソケット接続準備(listen) 4.ソケット接続待機(accept) 5.受信・送信(recv / send) 6.ソケット切断(close) 31
  • 32. SUGAR SWEET ROBOTICS CO., LTD. クライアント側 32 1.ソケット生成(socket) 2.ソケット接続要求(connect) 3.受信・送信(recv / send) 4.ソケット切断(close)
  • 33. SUGAR SWEET ROBOTICS CO., LTD. TCP • TCPソケットに必要な情報 • サーバー側 • ポート番号 • クライアント側 • ポート番号 • サーバーのIPアドレス 33 サーバー 0.1.1.1 3306 ! アプリ クライアント 0.0.1.2
  • 34. SUGAR SWEET ROBOTICS CO., LTD. 34 サーバー側クライアント側 ソケット作成 socket ソケット登録 bind ソケット接続準備 listen ソケット接続待機 accept ソケット作成 socket ソケット接続要求 connect 通信用ソケット 送受信 (send / recv) ソケット切断 close 切断
  • 35. SUGAR SWEET ROBOTICS CO., LTD. Winsock2 35
  • 36. SUGAR SWEET ROBOTICS CO., LTD. サーバ側 36
  • 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. 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. 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. 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. 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. 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. 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. SUGAR SWEET ROBOTICS CO., LTD. クライアント側 44
  • 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. 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. 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. 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. SUGAR SWEET ROBOTICS CO., LTD. TCP/IP通信設定 • サーバ側のIPアドレス・ポート番号を知る • サーバ側でのipconfig / ifconfigコマンド • 説明書をよく読む • そもそも相手のPCや機器と通信が可能か? • pingコマンドで確認する • ファイアーウォールの設定を確認する 49
  • 50. SUGAR SWEET ROBOTICS CO., LTD. 実習 50
  • 51. SUGAR SWEET ROBOTICS CO., LTD. 実習内容 • サーバー&クライアントのプログラム • サーバー側 • 27015番のTCPポートで待機 • 命令によって異なる音声をならす • クライアント側 • サーバーに接続する • サーバは自マシンで動く (IPアドレスは127.0.0.1固定) • キーボード入力によって異なる命令を送信 51
  • 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. 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. SUGAR SWEET ROBOTICS CO., LTD. 実習手順 1.データを受信し表示するプログラムを作る • 一般的なターミナルソフトからデータを送信する 2.受け取ったデータによって処理を変える • これもターミナルソフトでテスト 3.データを送信するプログラムを作る • 2つのプログラムを統合する 54
  • 55. SUGAR SWEET ROBOTICS CO., LTD. Visual Studioの基本的操作 55
  • 56. SUGAR SWEET ROBOTICS CO., LTD. Visual Studio 2013 • Visual Studio 2013 for Windows Desktopを開く • 初めて起動する人は登録が必要 • ファイル>新しいプロジェクトを 選択 • テンプレート>Visual C++を選択 • Win32 コンソール アプリケー ションを選択 • 名前を「TelnetServer」とする 56
  • 57. SUGAR SWEET ROBOTICS CO., LTD. アプリケーションの設定 • 左のメニューからアプリ ケーションの設定を選ぶ • 追加のオプション>空の プロジェクトをチェック • SDLチェックを外す • 「完了」を押す 57
  • 58. SUGAR SWEET ROBOTICS CO., LTD. ファイルの追加 • 画面右の「ソリューショ ンエクスプローラ」の 「ソースファイル」を 右クリック • 追加>新しい項目 • C++ファイルを選択 • 名前を「main.cpp」と する 58
  • 59. SUGAR SWEET ROBOTICS CO., LTD. main.cppを書く • 追加資料を元にmain.cppを編集する. 59
  • 60. SUGAR SWEET ROBOTICS CO., LTD. ビルド • メニュー>ソリューションのビルド 60
  • 61. SUGAR SWEET ROBOTICS CO., LTD. 実行 • メニュー>デバッグ>デバッグ開始 61
  • 62. SUGAR SWEET ROBOTICS CO., LTD. サーバー側のプログラム 62
  • 63. SUGAR SWEET ROBOTICS CO., LTD. テスト方法 • kadai1プログラムをビルドして実行 • Tera TermでIPアドレス「127.0.0.1」の27015番ポー トに接続する • キーボードでabcと打ってリターン • 実行中のプログラムに3バイト受信と表示される 63
  • 64. SUGAR SWEET ROBOTICS CO., LTD. Tera Termの使い方 • ホストを127.0.0.1 (サーバーのアドレスに) • TCPポートを27015に • サービスをTelnetに 64
  • 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. SUGAR SWEET ROBOTICS CO., LTD. サーバー側 受信したデータによって分岐する 66
  • 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. SUGAR SWEET ROBOTICS CO., LTD. サーバー側 snd*に対応させる 68
  • 69. SUGAR SWEET ROBOTICS CO., LTD. 「snd*」に対応させる • もしsndから始まらないならエラー • 数字は1ケタと仮定 • 4文字目のデータは数字 • 数字の文字コードから48を引くと数値に なる 69
  • 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. SUGAR SWEET ROBOTICS CO., LTD. クライアント側 71
  • 72. SUGAR SWEET ROBOTICS CO., LTD. テスト方法 • kadai3プログラムをビルドして実行(サーバーが起動) • kadai4プログラムをビルドして実行(自作クライアントが起動) • IPアドレス「127.0.0.1」の27015番ポートに接続する • プログラムは自動的にsnd1と送信する. • ok.の3文字が返ってくれば成功 72
  • 73. SUGAR SWEET ROBOTICS CO., LTD. クライアント側 キーボード入力で分岐 73
  • 74. SUGAR SWEET ROBOTICS CO., LTD. 課題 • キーボード入力の数値を判別 • 0から9ならばsnd*として送信 • qならば終了 74
  • 75. SUGAR SWEET ROBOTICS CO., LTD. テスト方法 • kadai3プログラムをビルドして実行(サーバーが起動) • kadai5プログラムをビルドして実行(自作クライアントが起動) • IPアドレス「127.0.0.1」の27015番ポートに接続する • クライアント側の黒いウィンドウをアクティブにし,「1」と打ってEnter すると,クライアント側はsnd1と送信するので,音声がなる. • 同様に1から9まで試す. 75
  • 76. SUGAR SWEET ROBOTICS CO., LTD. 発展編 76
  • 77. SUGAR SWEET ROBOTICS CO., LTD. 発展編 • ソフトウエアのメンテナンス性を良くする • サーバー側 • フレームワーク化する • クライアント側 • ライブラリ化する • ヘッダーとDLLを配布すれば誰でも使えるように • 複数の言語に対応させる • GUI作成,ウェブやDBとの連携,数値計算など,言語ごと に向き不向きがある • 複数の開発者に使ってもらうなら複数の言語対応を • C++, Python, Java, C#, MATLAB, LabVIEW 77
  • 78. SUGAR SWEET ROBOTICS CO., LTD. 発展編 • 複数のプラットフォームに対応させる • Windows • Linux (OSX) ! • 移植性の高いコードにする • ソケット通信用ミドルウエアを使う • boost, ACEなど • OS依存性の低い言語を使う • .NET Framework, Java, Pythonなど 78
  • 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. SUGAR SWEET ROBOTICS CO., LTD. おわりに • 質問等・サポートページ • http://sugarsweetrobotics.com/ネットワーク通信の基礎/ 80