Приложение для iPhone, чтобы связать его с вашим роботом

Летом 2019 года я провела мероприятие по обучению робототехнике с помощью моделей LEGO EV3. Я планировал использовать образ ev3dev.org и обучать Python, что я и сделал.

Но… Мне нужно было развлечь младших школьников, и для этого я написал приложение для удаленного управления. Приложение, которое будет работать с ОС ev3dev.org, с помощью скрипта Python на стороне робота. Я писал об этом здесь, на медиуме, по этой ссылке.

Продвигаясь вперед, летний курс прошел успешно, но заставил меня думать, что я могу сделать больше. Что если вместо того, чтобы использовать свой смартфон в качестве пульта дистанционного управления, я встроил его в самого своего робота, сделав его умнее.

Так появился SensorCode — приложение для Apple iPhone, которое делает вашего робота умнее. Приложение, которое вы можете скачать по этой ссылке.

Теперь в ваш средний iPhone встроено более полудюжины датчиков. Он знает, где он находится в мире, GPS. Он знает, в каком направлении он указывает, азимут. Он знает, когда он движется, а когда нет, движение. Некоторые из более новых моделей даже знают, как высоко они находятся в мире, на высоте. Действительно, у него есть еще более продвинутые датчики, а именно камера и микрофон.

Мой план состоял в том, чтобы сделать как можно больше из них доступными. Переходя к делу, я создал сенсорный код с шестью чувствами, на одно больше, чем у обычного человека :). Азимут, движение, местоположение, близость, разговор и прослушивание, а также добавлена ​​​​возможность включать свет вашего iPhone с помощью голоса или команд.

Я использовал тот же протокол, что и с удаленным кодом, а именно TCP. Но коллега, которого мне удалось втянуть в проект, Антон Ванхуке, известный по https://antonsmindstorms.com, вскоре убедил меня, что нужно переходить на UDP.

В течение следующих месяцев я создал три доказательства концепции, которые Антон Холлуэй протестировал для меня, помогая мне в придачу с кодом Python. Это подводит меня к первому байту кода в этой статье, короткому скрипту на Python, состоящему всего из 11 строк.

#!/usr/bin/python
import random
import socket
port = random.randint(1024,31766)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('', port))
s.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 1500)
print("listening on port ",port)
while True:
    compressed_data, server = s.recvfrom(1500)
    print(compressed_data)

Легко эм. Вам нужно всего 11 строк, чтобы связать робота со смартфоном. Этот скрипт показывает вам данные, которые отправляет ваш iphone.

Но подождите… стоп, я должен признаться, что начал бегать здесь прежде, чем научился ходить, или, вернее, говорил вам, как бегать, прежде чем вы научились ходить. Чтобы использовать этот скрипт, вам, конечно, нужно сначала загрузить приложение.

Вы найдете его в магазине приложений по этой ссылке. Загрузите его, установите и нажмите три вступительных текста. Нажмите кнопку Подключиться и заполните два поля, которые она запрашивает.

IP-адрес вашего робота и номер порта, который он должен был показать вам при запуске скрипта. Введите данные, и вы должны получить сообщение, появившееся на консоли вашего робота.

('listening on port ', 32766)
{"iphone":"192.168.1.123:49720"}

Первая строка сообщает вам, на каком порту вы слушаете, а вторая — откуда приходит это сообщение.

Прокрутите список датчиков, близости, местоположения и разговоров, которые вы получаете даром. Остальные четыре — это одноразовые покупки в приложении, осмелюсь сказать, очень недорогие покупки в приложении.

Попробуйте местоположение, оно сообщит о трех очень длинных числах. Ваша широта, долгота и высота. Перейдите на карты Google, скопируйте и вставьте первые две цифры, разделив их запятой, в поле местоположения. Карта, которую вы получите обратно, должна быть на вашем месте!

Он сообщит об этом вместе со всеми другими датчиками, с которых вы сможете получить данные. Вывод по умолчанию представляет собой строку JSON.

{"word":"","id":"5e34595b","movement":{"roll":"","pitch":"","yaw":""},"proximity":"","position":{"altitude":"1240.9608154276879","longitude":"7.009915412385487","latitude":"46.33890448515321"},"direction":{"magneticNorth":"","trueNorth":""}}

Вы можете выполнять синтаксический анализ непосредственно в Python, если хотите, вы должны использовать для этого код, который выглядит следующим образом. Он проанализирует данные о местоположении, которые вы видите выше, в словарь значений.

#!/usr/bin/python
import random
import socket
import json
port = 32000
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('', port))
s.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 1500)
print("listening on port ",port)
while True:
 compressed_data, server = s.recvfrom(1500)
 print("raw ---> ",compressed_data)
 dictionary = json.loads(compressed_data)
 print("json --> ",dictionary['position']['latitude']," ",dictionary['position']['longitude'])

Должен признаться, во время испытаний некоторые коллеги были обеспокоены тем, что если вы попросите свой телефон предоставить вам больше данных, например, о движении, у вашего робота не хватит ресурсов процессора, пытающегося его проанализировать, поэтому я добавил еще несколько опций.

Вы можете, если хотите, через настройки приложения и отключить JSON, и в этот момент вы получите что-то вроде этого. Это полная запись, но без каких-либо ярлыков, показывающих, что к чему. Конечно, это всегда одинаковая длина, вам просто нужно решить, какой столбец какой.

,1580489456,,,,,1240.9608154296875,7.009915412385487,46.33890448515321,,

Однако имейте в виду, что это работает путем удаления буквенных символов, поэтому при выборе этой опции могут быть потеряны некоторые функции, например, голос, который вы можете использовать, чтобы заставить вашего робота реагировать на ваши голосовые команды.

Средний путь — запросить уменьшенный вывод JSON, который будет включать только датчики, генерирующие данные. Так что в данном случае это.

{"id":"5e345bfe","position":{"altitude":"1240.9608154296875","longitude":"7.009915412385487","latitude":"46.33890448515321"}}

Сказано достаточно, если вы дочитали до этого места… вам обязательно нужно скачать приложение прямо сейчас. Эта ссылка".