Closed ytoi closed 4 years ago
現状EV3RTl側でbusyループを行うと、Unity側に10msec通知ではなく、PCの速度によって通知に数百msecかかってしまう。 Unity側を止める場合でも、時間での差が大きくなるため、一定時間EV3RTトリガの通知がない場合には、athrill側に用意した通知補完用スレッドにて通知を行うようにする。 送られるデータセットはEV3RT側の時間軸で10msec毎に設定されるため、補完される通知ではしばらく同じ内容(シミュレーション時間含む)のデータが送信されることになる。Unity側では通知に対して時間が進んでいないことを検出してタイムスケールを調整することでBusyループでも時間差の補完を少なくすることができる。
本機能はdevice_configで有効化できる。 以下の指定が必要。これらの指定がない場合は従来の動作で動作する。
DEVICE_CONFIG_COMPLEMENTAL_TX_SENDING 1 DEVICE_CONFIG_RESET_AREA_OFFSET 68 DEVICE_CONFIG_RESET_AREA_SIZE 20
DEVICE_CONFIG_COMPLEMENTAL_TX_SENDING 1
DEVICE_CONFIG_RESET_AREA_OFFSET 68
DEVICE_CONFIG_RESET_AREA_SIZE 20
DEVICE_CONFIG_COMPLEMENTAL_TX_SENDING これを1にした場合、補完タスクによる実時間の通信が送出される
DEVICE_CONFIG_RESET_AREA_OFFSET RESET_ANGLE_A〜DやRESET_GYROなど、一度送出したら0にクリアするデータの先頭オフセットを指定する。これは現状EV3RT側から行なっているが、athrill側でクリアできるようにした。RESET系の領域は連続しているようにすること。この指定を使えばEV3RTで行っているクリア処理は不要となる(まだ残している)。通信仕様のオフセット値をそのまま入れること。現状の仕様では68(= RESET_ANGLE_A)のオフセットを指定する
DEVICE_CONFIG_RESET_AREA_SIZE DEVICE_CONFIG_RESET_AREA_OFFSETに対してクリアする領域のサイズをbyteで指定する。現状ではRESET_ANGLE_A〜DとRESET_GYROの5つなので、4byte x 5 = 20byteを指定する。
従来モードでCPU Busyにした場合の通信。ひしがたのマークがathrill側からUnityへの通信回数。1秒間に2回くらいしか通信できていない。
今回の動作モードでCPU Busyにした場合の通信。CPU Busyでも1秒間に90回くらいの通信ができるようになっている。
--
以下でマージしておりますので,クローズします. https://github.com/toppers/athrill-target-v850e2m/pulls?q=is%3Apr+is%3Aclosed
現状EV3RTl側でbusyループを行うと、Unity側に10msec通知ではなく、PCの速度によって通知に数百msecかかってしまう。 Unity側を止める場合でも、時間での差が大きくなるため、一定時間EV3RTトリガの通知がない場合には、athrill側に用意した通知補完用スレッドにて通知を行うようにする。 送られるデータセットはEV3RT側の時間軸で10msec毎に設定されるため、補完される通知ではしばらく同じ内容(シミュレーション時間含む)のデータが送信されることになる。Unity側では通知に対して時間が進んでいないことを検出してタイムスケールを調整することでBusyループでも時間差の補完を少なくすることができる。
本機能はdevice_configで有効化できる。 以下の指定が必要。これらの指定がない場合は従来の動作で動作する。
DEVICE_CONFIG_COMPLEMENTAL_TX_SENDING 1
DEVICE_CONFIG_RESET_AREA_OFFSET 68
DEVICE_CONFIG_RESET_AREA_SIZE 20
DEVICE_CONFIG_COMPLEMENTAL_TX_SENDING これを1にした場合、補完タスクによる実時間の通信が送出される
DEVICE_CONFIG_RESET_AREA_OFFSET RESET_ANGLE_A〜DやRESET_GYROなど、一度送出したら0にクリアするデータの先頭オフセットを指定する。これは現状EV3RT側から行なっているが、athrill側でクリアできるようにした。RESET系の領域は連続しているようにすること。この指定を使えばEV3RTで行っているクリア処理は不要となる(まだ残している)。通信仕様のオフセット値をそのまま入れること。現状の仕様では68(= RESET_ANGLE_A)のオフセットを指定する
DEVICE_CONFIG_RESET_AREA_SIZE DEVICE_CONFIG_RESET_AREA_OFFSETに対してクリアする領域のサイズをbyteで指定する。現状ではRESET_ANGLE_A〜DとRESET_GYROの5つなので、4byte x 5 = 20byteを指定する。
従来モードでCPU Busyにした場合の通信。ひしがたのマークがathrill側からUnityへの通信回数。1秒間に2回くらいしか通信できていない。
今回の動作モードでCPU Busyにした場合の通信。CPU Busyでも1秒間に90回くらいの通信ができるようになっている。
--