Comment on page
Работа с Arduino
На плате размещен микроконтроллер ATMega 2560 с обвязкой, идентичной плате Arduino Mega. Контроллер поставляется с прошитым бутлоадером Arduino. Таким образом, микроконтроллер полностью готов к запуску скетчей Arduino IDE и работе со стандартными шилдами для Ардуино.
Для работы с МК необходимо скачать и запустить Arduino IDE с сайта arduino.cc. В настройках IDE выбрать плату Arduino Mega 2560.
Для работы с Arduino через ROS необходимо установить библиотеку ros_lib:
<ros.h>
.Скачать библиотеку необходимо с вашего робота. Для этого можно воспользоваться утилитой копирования файлов между компьютерами SCP:
scp [email protected]:/home/pi/ros_lib_noetic.tar.gz /home/<USERNAME>/
Вам необходимо распаковать архив, зайти в распакованную директорию и внутри нее должна находиться папка с названием
ros_lib
. Она должна содержать большое количество файлов, необходимых для компиляции программ содержащих вызовы <ros.h>
.
После этого необходимо скопировать папку ros_lib
в папку libraries
, которая находится внутри той директории, куда Arduino IDE сохраняет новые скетчи. Там же должны находиться и те библиотеки, которые вы загружали стандартным способом - через менеджер библиотек Arduino IDE https://www.arduino.cc/en/guide/librariesНо если вы используете собственные сообщения или у вас появляются ошибки при сборке скетчей, вам необходимо "пересобрать" библиотеку
ros_lib
самостоятельно с помощью команды (выполнив ее на роботе)rosrun rosserial_arduino make_libraries.py .
Вызванная утилита
rosserial_arduino
соберет новую библ иотеку на основе настроек ROS вашего робота и положит ее в корневую директорию пользователя /home/pi/
. Дальше вам надо переписать ros_lib с робота на ваш компьютер и поместить его в директорию библиотек Arduino в соответствии с инструкцией по установке библиотек для Arduino IDE.Arduino Mega подключена к Raspberry через порт Serial1. Со стороны ROS запущен сервис
rosserial
который организует взаимодействие МК и ROS.Для подключения к ROS со стороны Arduino необходимо инициализировать библиотеку ros_lib
<ros.h>
отвечающую за коммуникацию между Arduino и ROS, указав параметры Serial1 и скорость 115200, как показано ниже.#include <ros.h>
class NewHardware : public ArduinoHardware
{
public:
NewHardware():ArduinoHardware(&Serial1, 115200){};
};
ros::NodeHandle_<NewHardware> nh;
Примеры можно посмотреть в официальной документации rosserial http://wiki.ros.org/rosserial_arduino/Tutorials
В передней части системной платы робота расположены две кнопки, подключенные к ножкам
D24
и D23
МК Arduino и два переключателя, подключенные соответственно к D22
и D25
. При нажатии кнопки или переключателя на пине Arduino будет сигнал HIGH
Для чтения значения необходимо использовать Arduino функцию digitalRead(pin)
С левой стороны системной платы находятся пины
D44 D45 D46
, которые можно использовать для подключения сервомашинок. ВНИМАНИЕ: на сервомашинки подается напряжение 5В от отдельного источника питания! Ни в коем случае нельзя соединять пины питания сервомашинок с пин ами питания, выведенными на колодку Ардуино.
Перед лидаром расположены 4 светодиода, подключенные к пинам
D26, D27, D28, D29.
Внимание! Для прямого общения с Arduino необходимо соединить usb-порт Raspberry и microusb порт контроллера кабелем.
В некоторых случаях необходимо получать данные от встроенного микроконтроллера без применения ROS. Для этого можно применять консольные утилиты типа minicom (https://linux.die.net/man/1/minicom).
Для чтения данных от Ардуино можно применить следующую команду:
minicom -b 9600 -o -D /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0
для завершения чтения следует нажать
Ctrl-A
и затем X
. Скорость и параметры подключения следует указать такими же, как при инициализации Serial в скетче Arduino.
Еще одна возможность для получения данных от Arduino это применении библиотеки Serial языка Python https://pyserial.readthedocs.io/en/latest/shortintro.html
Пример простого скрипта для чтения данных от Arduino:
#!/usr/bin/env python3
import serial
if __name__ == '__main__':
ser = serial.Serial('/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0', 9600, timeout=1)
ser.flush()
while True:
if ser.in_waiting > 0:
line = ser.readline().decode('utf-8').rstrip()
print(line)
Под платой расположено 24 RGB светодиода модели
WS2812
.
https://cdn-shop.adafruit.com/datasheets/WS2812.pdfWS2812
- это три RGB-светодиода и микросхема-драйвер для управления этими светодиодами, собранные в одном SMD корпусе. Корпус каждого светодиода имеет 4 вывода: два вывода данных и два вывода питания. Выводы данных предыдущих светодиодов соединены со входами следующих, создавая цепочку светодиодов, управляемых через один пин микроконтроллера.Лента подключена к пину
D30
встроенного контроллера Аrduino. Число светодиодов - 24. Для управления светодиодами мы рекомендуем использовать библиотеку FastLed.
https://github.com/FastLED/FastLEDПример управления светодиодной лентой из Аrduino-скетча:
https://randomnerdtutorials.com/guide-for-ws2812b-addressable-rgb-led-strip-with-arduino/
https://github.com/FastLED/FastLED/tree/master/examples
Для тестирования работоспособности светодиодной ленты, можно воспользоваться тестовым скетчем
Если есть необходимость удаленно (без доступа к роботу) обновить прошивку Arduino, то это возможно сделать имея только удаленный доступ.
Подготовить скетч к загрузке
- 1.В Arduino IDE выбрать МК Arduino/Genuino Mega or Mega 2560
- 2.Скомпилировать программу (кнопка Проверить)
- 3.В меню выбрать Скетч→Экспорт Бинарного файла
- 4.В директории где находиться файл скетча, будут созданы два файла с бинарными данными вида (sketch_mar24a.ino.mega.hex sketch_mar24a.ino.with_bootloader.mega.hex)
- 5.Мы должны использовать файл
sketch_mar24a.ino.mega.hex
Загрузить бинарный файл на Arduino:
- 1.Скопировать файлы
.hex
на робота, например командой linux scp - 2.На роботе выполнить команду "прошивки" платы Arduino
avrdude -v -v -p atmega2560 -c wiring -P /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0 -b 115200 -D -U flash:w:sketch_mar24a.ino.mega.hex:i
Где
sketch_mar24a.ino.mega.hex
имя файла с прошивкой.
Для возможности удаленной прошивки платы, необходимо чтобы Arduino разъем на плате Turtlebro был подключен к RaspberryPi через Micro-USB.Last modified 11mo ago