Программа для самоходных роботов пауков на ардуино. Собираем роботов-самоходов на Arduino. Готовый робот, готовый корпус или создание Arduino робота с нуля

Для Андроид 14.03.2019
Для Андроид

Полный текст статьи и исходники программы доступны только зарегистрированным участникам сайта.

Стоимость регистрации - символические 340 рублей.

Для регистрации сначала необходимо пополнить Яндекс.Кошелек на указанную сумму (или Webmoney-кошелек R390884954122 или QIWI - 9055113963 (кошелек, не на счёт телефона!)), а затем прислать письмо на адрес [email protected] с указанием, на какой кошелек вы делали оплату и реквизиты, по которым можно вас определить (не прикрепляйте к письму картинки или файлы). Учитывайте комиссию при переводах.

Не присылайте в письме мои номера кошельков - поверьте, я их знаю и без вас.

В ответном письме вы получите учётные данные для чтения статей из закрытой зоны за второй курс.

Доступ к третьему курсу обучения доступен только после оплаты второго курса и составляет 340 руб.

Доступ к чётвертому курсу обучения доступен после оплаты третьего курса и составляет 340 руб. и т.д.

При оплате сразу всех курсов одновременно (2-9) цена составит 2700 руб.

Доступ даётся как минимум на один год. Для тех, кто оплатил третий и другие курсы, сроки доступа увеличиваются.

Знакомство с классом HttpURLConnection

Для соединения с веб-серверами Android предлагает несколько способов взаимодействия. В новых проектах для современных устройств рекомендуется использовать класс HttpURLConnection , который мы с вами рассмотрим на примерах.

Класс java.net.HttpURLConnection является подклассом java.net.URLConnection и позволяет реализовать работу по отправке и получении данных из сети по протоколу HTTP. Данные могут быть любого типа и длины. Данный класс следует использовать для отправки и получения потоковых данных, размеры которых нельзя заранее определить. Используя данный класс, вам не нужно думать о сокетах и реализовывать собственные способы общения между клиентом и сервером.

Алгоритм использования следующий:

  • Получить объект HttpURLConnection через вызов URL.openConnection() и привести результат к HttpURLConnection
  • Подготовить необходимый запрос. Основное в запросе - сам сетевой адрес. Также в запросе можно указать различные метаданные: учётные данные, тип контента, куки сессии и т.п.
  • Опционально загрузить тело запроса. В этом случае используется метод setDoOutput(true) . Передача данных, записанных в поток, возвращается через метод getOutputStream()
  • Прочитать ответ. Заголовок ответа обычно включает метаданные, такие как тип и длина контента, даты изменения, куки сессии. Прочитать данные из потока можно через метод getInputStream() . Если у ответа нет тела, то метод возвращает пустой поток.
  • Разорвать соединение. После прочтения ответа от сервера HttpURLConnection следует закрыть через вызов метода disconnect() . Тем самым вы освобождаете ресурсы, занимаемые соединением.

Например, для получения страницы по адресу http://сайт/android/ можно использовать такой код:

URL url = new URL("http://сайт/android/"); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); try { InputStream in = new BufferedInputStream(urlConnection.getInputStream()); readStream(in); finally { urlConnection.disconnect(); } }

По умолчанию HttpURLConnection использует метод GET . Для использования POST вызывайте setDoOutput(true) и посылайте данные через openOutputStream() . Другие HTTP-методы (OPTIONS, HEAD, PUT, DELETE and TRACE) настраиваются через метод setRequestMethod(String) .

Для работы через прокси-сервер используйте URL.openConnection(Proxy) при создании соединения.

Каждый экземпляр HttpURLConnection может использоваться только для одной пары запроса/ответа. Операции с соединениями следует проводить в отдельном потоке.

Вы вошли на сайт, как гость.
, чтобы прочитать статью

At a high level, you use Volley by creating a RequestQueue and passing it Request objects. The RequestQueue manages worker threads for running the network operations, reading from and writing to the cache, and parsing responses. Requests do the parsing of raw responses and Volley takes care of dispatching the parsed response back to the main thread for delivery.

This lesson describes how to send a request using the Volley.newRequestQueue convenience method, which sets up a RequestQueue for you. See the next lesson, for information on how to set up a RequestQueue yourself.

This lesson also describes how to add a request to a RequestQueue and cancel a request.

Add the INTERNET permission

To use Volley, you must add the permission to your app"s manifest. Without this, your app won"t be able to connect to the network.

Use newRequestQueue

Volley provides a convenience method Volley.newRequestQueue that sets up a RequestQueue for you, using default values, and starts the queue. For example:

Kotlin

val textView = findViewById(R.id.text) // ... // Instantiate the RequestQueue. val queue = Volley.newRequestQueue(this) val url = "http://www.google.com" // Request a string response from the provided URL. val stringRequest = StringRequest(Request.Method.GET, url, Response.Listener { response -> // Display the first 500 characters of the response string. textView.text = "Response is: ${response.substring(0, 500)}" }, Response.ErrorListener { textView.text = "That didn"t work!" }) // Add the request to the RequestQueue. queue.add(stringRequest)

Java

final TextView textView = (TextView) findViewById(R.id.text); // ... // Instantiate the RequestQueue. RequestQueue queue = Volley.newRequestQueue(this); String url ="http://www.google.com"; // Request a string response from the provided URL. StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener() { @Override public void onResponse(String response) { // Display the first 500 characters of the response string. textView.setText("Response is: "+ response.substring(0,500)); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { textView.setText("That didn"t work!"); } }); // Add the request to the RequestQueue. queue.add(stringRequest);

Volley always delivers parsed responses on the main thread. Running on the main thread is convenient for populating UI controls with received data, as you can freely modify UI controls directly from your response handler, but it"s especially critical to many of the important semantics provided by the library, particularly related to canceling requests.

See for a description of how to set up a RequestQueue yourself, instead of using the Volley.newRequestQueue convenience method.

Send a request

To send a request, you simply construct one and add it to the RequestQueue with add() , as shown above. Once you add the request it moves through the pipeline, gets serviced, and has its raw response parsed and delivered.

When you call add() , Volley runs one cache processing thread and a pool of network dispatch threads. When you add a request to the queue, it is picked up by the cache thread and triaged: if the request can be serviced from cache, the cached response is parsed on the cache thread and the parsed response is delivered on the main thread. If the request cannot be serviced from cache, it is placed on the network queue. The first available network thread takes the request from the queue, performs the HTTP transaction, parses the response on the worker thread, writes the response to cache, and posts the parsed response back to the main thread for delivery.

Note that expensive operations like blocking I/O and parsing/decoding are done on worker threads. You can add a request from any thread, but responses are always delivered on the main thread.

Figure 1 illustrates the life of a request:

Figure 1. Life of a request.

Cancel a request

To cancel a request, call cancel() on your Request object. Once cancelled, Volley guarantees that your response handler will never be called. What this means in practice is that you can cancel all of your pending requests in your activity"s method and you don"t have to litter your response handlers with checks for getActivity() == null , whether onSaveInstanceState() has been called already, or other defensive boilerplate.

To take advantage of this behavior, you would typically have to track all in-flight requests in order to be able to cancel them at the appropriate time. There is an easier way: you can associate a tag object with each request. You can then use this tag to provide a scope of requests to cancel. For example, you can tag all of your requests with the they are being made on behalf of, and call requestQueue.cancelAll(this) from . Similarly, you could tag all thumbnail image requests in a tab with their respective tabs and cancel on swipe to make sure that the new tab isn"t being held up by requests from another one.

Here is an example that uses a string value for the tag:

  1. Define your tag and add it to your requests.

    Kotlin

    val TAG = "MyTag" val stringRequest: StringRequest // Assume this exists. val requestQueue: RequestQueue? // Assume this exists. // Set the tag on the request. stringRequest.tag = TAG // Add the request to the RequestQueue. requestQueue?.add(stringRequest)

    Java

    public static final String TAG = "MyTag"; StringRequest stringRequest; // Assume this exists. RequestQueue requestQueue; // Assume this exists. // Set the tag on the request. stringRequest.setTag(TAG); // Add the request to the RequestQueue. requestQueue.add(stringRequest);
  2. In your activity"s method, cancel all requests that have this tag.

    Kotlin

    protected fun onStop() { super.onStop() requestQueue?.cancelAll(TAG) }

    Java

    @Override protected void onStop () { super.onStop(); if (requestQueue != null) { requestQueue.cancelAll(TAG); } }

    Take care when canceling requests. If you are depending on your response handler to advance a state or kick off another process, you need to account for this. Again, the response handler will not be called.

Всем Привет!

Год назад заинтересовался микроконтроллерами "arduino" и постройкой четырехногово робота-паука на Arduino Uno R3. Интерес возник после чтения различных статей, просмотра видео на портале youtube. Больше всего впечатлили роботы "PhantomX hexapod" и муравей "A-pod", которые переработал парень под ником Zenta (Коре Халворсен) . Первый его робот создан на сервомашинках "dynamixel AX-18" от компании "Robotis", а второй на сервомашинках "Hitec". Эти сервомашинки одни из дорогих. Создавать пробную модель, которую запланировал на базе этих машинок, мне будет не по силам. В качестве сервомашинок выбор пал на "Tunigy TGY-S9010" (13 кг.), заказал шилд dfrobot i/o expansio v 5.0, в дальнейшем будет установлен модуль bluetooth xbee, батарея 7,4v 5100mah, и SBEC на 20A сила тока при ходьбе будет скорее всего превышать 12А, поэтому заказал с запасом. После просмотра множества картинок и фото, я решил создать робота по своему дизайну. Сделал эскизы. Эти рисунки перенес в чертежи, делал в компасе, что то в солидворксе.

Чертежи -

После выполнения чертежей создал примерную 3d модель. Анимация получилась корявая видео выкладывать не буду.

Все запчасти на робота заказывал на паркфлаере. Первая часть деталей пришла в течении 1,5 месяца, а последующие 2 посылки в общем пришли в течение 7-8 месяцев. Задержка в доставке была из-за сбоя в работе hobbyking и российской таможни. В углу слева на фото предварительная сборка робота.

Перечень деталей робота:

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

Постепенно доделывал детали и собирал робота. Болтики имбусы м3, гайки колпачковые все нержавейка. На фото подготовка к сборке соединения сервомашинки корпуса и бедра.

Вот так выглядит в собранном виде -

Полностью лапка паука. Болтики имбусы крепления м2

Корпус, соединения бедра и лапки укреплены. Все трубки из телевизионной антенны. Контроллер установлен на нейлоновых стойках и прикручен нейлоновыми винтами. Под контроллером будет установлен аккумулятор ниже sbec 20A. Получилось все компактно и доступно. Высота от пола до нижней части 4 см.

Планировал вес до 1,5 кг, но получилось с аккумулятором 1,6 кг. На фото ниже вес без акб.

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

Еще фото -

Вид сверху -

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

Список ссылок на статьи и инструкции необходимые для сборки и настройки шестиногого робота паука Hexapod RKP-RCS-2013B-KIT

На этом изображении (см. Рис. 1) показан пример собранного шестиногого робота паука с установленным на верхней плате дополнительным оборудованием в виде модуля Bluetooth для беспроводного внешнего управления.

Набор для сборки шасси шестиногого робота паука RKP-RCS-2013B-KIT это мобильная платформа шестиногого робота повышенной проходимости и маневренности. Шасси разработано и предназначено для робототехнических проектов, обучения конструированию различных систем мехатроники и программированию, а также для разнообразных конструкторских хобби. Мобильная платформа шестиногого робота паука (RKP-RCS-2013B-KIT) имеет в составе поставки платформу предназначенную для установки различных датчиков и сенсоров, а также плат управления роботом и систем питания.
Hexapod RKP-RCS-2013B-KIT - это набор в виде конструктора для самостоятельной сборки паукообразного шестиногого робота. Все детали несущей рамы корпуса и шести конечностей робота паука изготовлены из прочного и легкого алюминия. Детали конструкции шасси шестиногого робота паука (Hexapod) уже имеют все просверленные и фрезерованные элементы конструкции.

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

Гексапод - шестиногий робот паук может управляется при помощи беспроводного джойстика от PS2 или PS3 через модуль Bluetooth (в комплект поставки не входит, а приобретается отдельно) или с помощью программируемого контроллера Ардуино с разъемом USB. Через специальное компьютерное приложение для программирования сервоконтроллера можно настраивать ползунками команды установленных в ноги робота сервоприводов и изменять скорость срабатывания каждого из них.

Плата сервоконтроллера Servo Controller Board 32 Channel USB (RKP-SCB-32C) приобретается отдельно.

Сервоконтроллер для робота паука Arduino RKP-SCB-32C имеет возможность подключения дополнительных компонентов для Arduino. ()

Для передвижения всех шести ног робот паук использует 18 микро сервомоторов, которые также приобретаются отдельно. Например, рулевая машинка класса суб-микро 9 Gram TowerPro SG90 Micro Servo (TPSG90S) или аналогичная по параметрам и размерам.

В комплект конструктора для самостоятельной сборки робота паука RKP-RCS-2013B-KIT входит:
- Комплект алюминиевых запчастей черного цвета для сборки корпуса робота паука.
- Комплект механических захватов ("жвала" робота паука). Устанавливается опционально. Для работы захватов необходимо установить 2 дополнительные рулевые машинки.
- Комплект болтов, шурупов, гаек, шайб, переходников, латунных втулок и стоек.
- Электронные компоненты для сборки: провода для подачи питания к включателю, диодный мост для питания сервоконтроллера и плат управления, выключатель для подачи питания на управляющий блок.

Для окончательной сборки и настройки робота паука необходимы следующие комплектующие (приобретаются отдельно):
- 18 сервоприводов класса суб-микро
- USB servocontroller на 32 сервопривода RKP-SCB-32C
- Беспроводной приемник управления команд получаемых от оператора (при необходимости)
- Беспроводной джойстик PS2 Wireless Gamepad V2.0 for Arduino (при необходимости)
- Аккумулятор Li-Po (2S) 7,4V
-

Один из вариантов создания роботов на основе Arduino и других компьютерных плат — использование готовых корпусов и разработка собственной начинки. На рынке можно найти достаточное количество таких каркасов, которые включают также механическую базу (колеса, гусеницы, шарниры и т.п.). Взяв готовый корпус, вы сможете целиком сосредоточиться на программировании робота. Предлагаем небольшой обзор таких корпусов-скелетов роботов.

Почему нужны корпусы и скелеты роботов?

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

Тем, кому процесс проектирования механики дается с трудом, и больше заводит именно процесс подбора различных датчиков и проектирование логики робота, стоит обратить внимание на различные механические базы для построения роботов. Они продаются без электроники, по сути это корпус или скелет будущего робота. Осталось только добавить им «мозг» (например, плату Arduino ), нервы и мышцы (датчики и приводы) и оживить их (запрограммировать). Иногда такие корпуса даже содержат моторы или датчики.

Платформы на 4 колесах — основа машинки Arduino

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

Платформа для создания робота на Arduino, выполненная из алюминиевого сплава. Платформа оснащена 4 колесами, к каждому из которых подключен отдельный мотор. Моторы идут в комплекте. Платформа может использоваться как основа автомобиля или любого другого ездящего робота. Размер платформы около 20 на 20 см. Винты, гайки и провода для подключения моторов также в комплекте.

Такое основание для вашего будущего робота можно купить примерно за $75 на сайте интернет-магазина DX.com .

Еще одна четырехколесная платформа для создания робота на базе Arduino привлекает внимание своими колесами. Они имеют диаметр 80 мм, ширину 60 мм, выглядят элегантно и надежно. У этой платформы акриловое основание толщиной 1,5 мм. Корпус имеет хорошую устойчивость и подходит для создания быстро передвигающегося робота. Aliexpress продает этот робот-скелет за $60. Комплектация аналогичная предыдущей — колеса, двигатели, провода и винты уже есть в наборе.

Двух- и трехколесные шасси для создания ездящих роботов

В следующей трехколесной платформе для создания робота на базе Arduino моторы подключены только к двум колесам и это снижает стоимость. В интернет магазине DX.com такое шасси продается за $20,5. Основание выполнено из прозрачного акрила. В комплекте 2 мотора, винты, гайки, провода, батарейный блок для 4 АА батарей. Размеры примерно 20 на 10 см.

Трехколесной платформе для робота Arduino. Фото dx.com

Двухколесное основание для робота. Фото dx.com

Гусеничные шасси для танков на Arduino

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

Гусеничное шасси для создания робота-танка на базе Arduino. В комплекте 2 мотора, гусеничная передача, винты, гайки. Размеры этого шасси 18,7 см х 11,5 см х 4,3 см. В интернет-магазине DX.com такое гусеничное шасси стоит $42.

Гусеничное шасси для робота. Фото dx.com

Корпус для робота-паука на Arduino

Паук — достаточно популярная форма роботов, поэтому в продаже имеются и такие корпуса-скелеты.Конструкция паука в отличие от роботов на колесах предусматривает движение в любую сторону.

Первый паук а в нашем обзоре стоит около $100 на Aliexpress .

Корпус для робота паука. Фото: aliexpress.com

В комплекте этого корпуса нет электроники, сервоприводов, их нужно покупать отдельно. С данной моделью паука рекомендовано использовать сервопривод MG 995 Servo. Забавно, что такой привод на сайте Aliexpress можно купить как за 33 доллара, так и за за 5 долларов (правда в этом случае придется купить 10 штук). Привод нужен под каждую лапу.

Кроме того для управления большим количеством сервоприводов потребуется многоканальный контроллер управления сервоприводами . Итоговая стоимость паука может получиться достаточно высокой.

Еще один скелет шестиногого робота-паука или даже робота-таракана привлек мое внимание своей ценой в $ 42,5. Робот на шести металлических лапах должен получиться пусть и не очень маневренный, зато устойчивый. Скелет этого таракана имеет длину 24 см, ширину — 18 см, высоту — 12 см. Приобрести этого черного таракана-робота можно на сайте интернет-магазина Aliexpress.

Корпус для робота таракана. Фото: aliexpress.com

Каркасы роботов гуманоидов

Достаточно интересной кажется модель робота-гуманоида стоимостью около $ 105. Здесь также нет электроники, зато много простора для творчества. Создание робота-гуманоида и программирование человеческой походки — непростые и интересные задачи. Начать пробовать свои силы в самостоятельном создании робота-гуманоида можно с покупки такого скелета на сайте интернет-магазина Aliexpress. Если верить описанию производителя, то на основе этого карскаса можно сделать даже танцующего робота.

Оболочка для робота гуманоида. Фото: aliexpress.com

Готовый робот, готовый корпус или создание Arduino робота с нуля?

Готовые полнокомплектые роботы на базе платы Arduino подойдут и для тех, кого электрические схемы не особо привлекают. Приобретая работающую модель робота, т.е. фактически готовую высокотехнологичную игрушку, можно разбудить интерес к самостоятельному проектированию и робототехнике. Открытость платформы Arduino позволяет из одних и тех же составных частей мастерить себе новые игрушки. Цена таких роботов колеблется в районе $ 100, что в общем относительно немного.

Готовые корпуса , которые мы рассмотрели в этом обзоре, предполагают бОльшую фантазию и бОльшее разнообразие получаемых роботов. В них вы не ограничены платами Arduino, можно использовать и другие «мозги». Преимущество этого способа перед созданием робота с нуля в том, что вы можете не отвлекаться на поиск материалов и разработку конструкций. Такой робот выглядит вполне серьезно и походит на промышленного.

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

Если вы только начинаете изучение Arduino робототехники, рекомендуем наш курс

Все цены приведены по состоянию на 22.05.14.



Рекомендуем почитать

Наверх