Model CRを動かせるライブラリたち

前回の続きのWHILL Advent Calendar 2019の記事です。(お仕事系投稿)


WHILL Model CRは外部コンピュータから制御可能な研究開発用のパーソナルモビリティです。前回はそのModel CRのケーブルの扱い方について説明しました。今回はその続きで、ケーブル繋いだ後、接続先のPCからどうやって制御するかというお話です。

通信仕様が公開されているのでこれを読み解くことも可能ですが、なかなか手間なのでWHILLのライブラリ(SDK)の主なものについていくつか簡単に紹介します。

WHILLで公開しているライブラリ

主にこの3つがあります。(他にもあるので興味があればgithubみてください。)

python : pywhill

ROS : ros_whill

Arduino : whill-sdk-arduino

各々githubのリポジトリのリンクを貼ってあります。この3つについて簡単に説明します。

python: pywhill

その名の通り、pythonで動かせるライブラリです。

サクッと動かせるpythonで動作するので、Web系のサービスなどの連携もやりやすいかもしれないです。

サンプルコード:電源ON/OFF

まずCOMポートを指定します。Model CRからのケーブルのUSB抜き差しして追加されるポートが対象です。

例:Linux:'ttyUSB0', Windows:'COM5'など

import time
from whill import ComWHILL

def main():
    whill = ComWHILL(port='ttyUSB0')
    while True:
        time.sleep(3)
        whill.send_power_off()
        time.sleep(3)
        whill.send_power_on()

if __name__ == "__main__":
   main()

電源ONはwhill.send_power_on()、

電源OFFはwhill.send_power_off()を呼ぶだけです。

サンプルのソースコードはこちら

Model CRからのデータを受信する場合

Model CRからは機体の情報が定常的に送信されます。最初に送信開始の指令を外部から設定する必要があります。(pywhillの場合は、whill.start_data_stream())

CRからデータを受信して表示するサンプルはこちらです。

import time
from whill import ComWHILL

request_speed_mode = 0
whill = ComWHILL(port='COM4')


def callback1():
   global request_speed_mode, whill
   print('callback 1')
   level, current = whill.battery.values()
   print(whill.accelerometer)
   print(whill.gyro)
   print(whill.joy)
   print('Battery Status: remaining capacity {level}%, current draiwng {current}mA'.format(level=level,
                                                                                           current=current))
   print('Motor Status')
   request_speed_mode = (request_speed_mode + 1) % 6
   whill.start_data_stream(1000, 0, request_speed_mode)


def main():
   whill.register_callback('data_set_1', callback1)
   whill.start_data_stream(1000, 0, request_speed_mode)
   while True:
       time.sleep(0.1)
       whill.refresh()


if __name__ == "__main__":
   main()

PC側がCRからのシリアルデータを受信すると、callback1が呼ばれます。これで受信したデータをprintしています。

サンプルコードはこちら

ROS: ros_whill

ROSはRobot operation systemの略で、ロボット系の処理が扱いやすくなるように用意されたmiddleware frameworkです。

例えば外界をセンシングするHokuyo製のLiDARをROS上で使いたい場合はurg_nodeというros package(つまりはセンサーと通信するDriver)を利用することで、簡単にLiDARが扱えます。

今回のros_whillはWHILLをROS上で動かすためのros packageになります。

詳しくはgithubリポジトリのREADMEを見ていただきたいですが、簡単にいくつか設定や使い方を紹介します。ROSなので下記の説明はLinux環境での利用を想定しています。

事前設定:port設定

pywhill同様にUSBのportの環境変数の設定が必要です。(この例では'ttyUSB0')

$ export TTY_WHILL=/dev/ttyUSB0

ros_whillのlaunch

ROSではlaunchファイルでnodeを立ち上げます。Default設定ではこのlaunchを実行するだけで、Model CRの電源を自動でONします。

$ roslaunch ros_whill ros_whill.launch

Model CRが電源ONできると定常的にModel CRから情報を取得して、publishしています。

publishしている情報はこちら参照。


Arduino : whill-sdk-arduino

whill-sdk-arduinoはArduino IDEで動作するライブラリです。

画像1

Arudino IDEで動くM5Stackでもこちらのライブラリで動作します。

画像2

こちらは以前書いた記事(M5Stackで通信するもの)があるのでそちらを参照してください。

さいごに

Model CRを動かすために用意されたライブラリのうち、python, ROS, Arduinoで使えるものの使い方を簡単に紹介しました。

あまり通信ケーブルで制御するイメージが湧かない人は参考にしてみてください。

あと、あらゆる言語のライブラリを社員だけで用意するのは厳しいので、jsとかもし有志で作ってくれる人がいたらどしどし公開してもらえると嬉しいです。


この記事が気に入ったらサポートをしてみませんか?