がちもとさんのブログ

co-founder #KumaMCN / @KnowComInc R&D戦略チーム / #Azure #HoloLens #MRPP / #AWS #ML / #CV #SLAM #Python / #WHILL #自動運転 / #メタバース #XR / #Databricks / お仕事のご依頼はDMで✉️

WHILLでカヌー体験みたいなやつ作った

WHILLアドベントカレンダー2019の7日目の記事です。 WHILLでカヌー体験みたいなものを作りました。

www.instagram.com

開発環境

  • Unity JoyCon操作用
  • Python 3.6.9 JoyConの値受信とWHILL制御用
  • WHILL Model CR
  • RS232C->USBケーブル
  • JoyCon
  • 傘w

システム概要

1.UnityでJoyConの傾きを取得する

すみません、プログラムはあとで載せます。

2.TCP通信でJoyConの値を送信

JoyConの傾き具合によって、WHILLを旋回させます。

すみません、プログラムはあとで載せます。

3.JoyConの値を受信し、WHILLを操作する

from whill import ComWHILL
import socket
import time

def main():
    whill = ComWHILL(port='COM5')
    host = "127.0.0.1"
    port = 4000
    buffer_size = 4096
    acc = 50
    while True:
        serversock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        serversock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        serversock.bind((host,port))
        serversock.listen(10)
        print('Waiting for connections...')
        clientsock, client_address = serversock.accept()
        print("Succeeded in Connection!")
        while True:
            try:
                data = clientsock.recv(buffer_size)
                if b'exit' in data:
                    break
                data_ = data.decode('utf-8').split("\n")
                [direction, speed] = data_[0].split(",")
                print(int(float(speed)*acc), int(float(direction)*acc))
                whill.send_joystick(int(float(speed)*acc), int(float(direction)*acc))
                time.sleep(0.01)
            except clientsock.error:
                whill.send_joystick(0, 0)
                clientsock.close()
                break
        whill.send_joystick(0, 0)
        serversock.close()

if __name__ == '__main__':
    main()

まとめ

WHILLを用いてカヌーみたいな体験ができるものを作りました。 Unityからシリアル通信でWHILLを動かせるようにしたので、今度はその記事を書きたいと思います。 お楽しみに!