◯こちらのサンプルコードは指導等にご自由にお使いください。
【サンプルコードの使い方】
◯サンプルコードを写す時はコピペをしないようにしましょう。
◯▶を押すと出力が表示されます。
◯Geminiボタンを押すとGemini(AI)による解説が表示されます。間違っていることもあるので、疑問に思った場合はご質問ください。
◯本マークを押すとカテゴリーの解説が見られます。
◯サンプルコードを写す時はコピペをしないようにしましょう。
◯▶を押すと出力が表示されます。
◯Geminiボタンを押すとGemini(AI)による解説が表示されます。間違っていることもあるので、疑問に思った場合はご質問ください。
◯本マークを押すとカテゴリーの解説が見られます。
【カテゴリーごとのページへ移動】
【Code List】
CODE: k-1 (ソケット通信)
import socket import time def main(): server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server_socket.bind(('localhost', 50005)) print("ハガキ受付中...") start_time = time.time() end_time = start_time + 20 while ( time.time()<end_time ): (data, address) = server_socket.recvfrom(1024) message = data.decode() print(f"【届いたハガキ】送り主: {address}") print(f"【内容】{message}") if ( message=="終了" ): break server_socket.close() return(0) main()

- ソケット通信とは、コンピュータ同士、もしくはコンピュータとロボットなどで通信する方法の一つ。
- このコードだけだとハガキを受け付けるだけで何も起こらない。このコードを実行しながら、k-2のコードも実行してみよう。
- 20秒間だけ通信を受け付けるようにしている。whileループは無限ループに陥りやすいので、このような防御装置が必要。
- 今更ながらソケット通信に入門する - Qiita
- TCPとUDPという通信方法があるが、このコードはUDPを採用している。
CODE: k-2 (ソケット通信)
import socket def main(): client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) address = ("localhost", 50005) message = "こんにちは! お元気ですか?" client_socket.sendto(message.encode(), address) message = "終了" client_socket.sendto(message.encode(), address) client_socket.close() return(0) main()
CODE: k-3 (ソケット通信)
import socket import time def send_command(sock, addr, cmd): sock.sendto(cmd.encode(), addr) (res, _) = sock.recvfrom(1024) res = res.decode() time.sleep(1) return(res) def main(): addr = ("localhost", 50007) client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) cmd_list = [ "command", "takeoff", "forward 100", "right 100", "back 100", "left 100", "land" ] for cmd in cmd_list: res = send_command(client_socket, addr, cmd) if ( res!="ok" ): print("Error") break client_socket.close() return(0) main()

- サンプルコードの実行時には、サーバ側ファイルをダウンロードして実行しておくこと。pip install pygame が必要。
- サーバ側ファイルは、実際のドローンに近い命令形態で動作するシミュレータ。着陸状態のとき赤色、離陸状態のとき緑色となる。
- "command"を送ることで、「今から通信をはじめるよ」という合図になる。
- "takeoff"で離陸、"land"で着陸する。方向+数値(cm)で、その方向に動く。(例: "forward 100", "left 50", "back 90")
- 離陸状態でなければ動作しないので注意!
- コマンド一覧の例はPythonでTelloドローンを操作するを参照。
- いろいろとコマンドを変えてみよう! (このシミュレーションはcw, up, downは対応していないので注意)
CODE: k-4 (ソケット通信)
import socket import time def send_command(sock, addr, cmd): sock.sendto(cmd.encode(), addr) (res, _) = sock.recvfrom(1024) res = res.decode() time.sleep(1) return(res) def main(): addr = ("localhost", 50007) client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) cmd_list = [ "command", "takeoff", "cw 30", "forward 100", "ccw 60", "forward 100", "land" ] for cmd in cmd_list: res = send_command(client_socket, addr, cmd) if ( res!="ok" ): print("Error") break client_socket.close() return(0) main()

- k-3とは異なるサーバ側ファイルサーバ側ファイルをダウンロードして実行しておくこと。画面上の小さい赤点は正面を表している。
- cwは時計回り、ccwは反時計回りを指す。"cw 30"で30度時計回りに回転する。
- 実際のドローンの制御では三角関数の知識が多少必要となる。



