Работа с Arduino
На плате размещен микроконтроллер ATMega 2560 с обвязкой, идентичной плате Arduino Mega. Контроллер поставляется с прошитым бутлоадером Arduino. Таким образом, микроконтроллер полностью готов к запуску скетчей Arduino IDE и работе со стандартными шилдами для Ардуино.
Для работы с МК необходимо скачать и запустить Arduino IDE с сайта arduino.cc. В настройках IDE выбрать плату Arduino Mega 2560.

Библиотека Arduino ros_lib

Для работы с Arduino через ROS необходимо установить библиотеку ros_lib:<ros.h>.
Скачать библиотеку необходимо с вашего робота файл /home/pi/ros_lib_noetic.tar.gz
Вам необходимо распаковать архив, зайти в распакованную директорию и внутри нее должна находиться папка с названием ros_lib. Она должна содержать большое количество файлов, необходимых для компиляции программ содержащих вызовы <ros.h>. После этого необходимо скопировать папку ros_lib в папку libraries, которая находится внутри той директории, куда Arduino IDE сохраняет новые скетчи. Там же должны находиться и те библиотеки, которые вы загружали стандартным способом - через менеджер библиотек Arduino IDE https://www.arduino.cc/en/guide/libraries
Но если вы используете собственные сообщения или у вас появляются ошибки при сборке скетчей, вам необходимо "пересобрать" библиотеку ros_lib самостоятельно с помощью команды (выполнив ее на роботе)
1
rosrun rosserial_arduino make_libraries.py .
Copied!
Вызванная утилита rosserial_arduino соберет новую библиотеку на основе настроек ROS вашего робота и положит ее в корневую директорию пользователя /home/pi/. Дальше вам надо переписать ros_lib с робота на ваш компьютер и поместить его в директорию библиотек Arduino в соответствии с инструкцией по установке библиотек для Arduino IDE.

Взаимодействие с ROS

Arduino Mega подключена к Raspberry через порт Serial1. Со стороны ROS запущен сервис rosserial который организует взаимодействие МК и ROS.
Для подключения к ROS со стороны Arduino необходимо инициализировать библиотеку ros_lib <ros.h> отвечающую за коммуникацию между Arduino и ROS, указав параметры Serial1 и скорость 115200, как показано ниже.
1
#include <ros.h>
2
3
class NewHardware : public ArduinoHardware
4
{
5
public:
6
NewHardware():ArduinoHardware(&Serial1, 115200){};
7
};
8
9
ros::NodeHandle_<NewHardware> nh;
Copied!
Примеры можно посмотреть в официальной документации rosserial http://wiki.ros.org/rosserial_arduino/Tutorials

Дополнительные возможности Arduino

В передней части системной платы робота расположены две кнопки, подключенные к ножкам D24 и D23 МК Arduino и два переключателя, подключенные соответственно к D22 и D25. При нажатии кнопки или переключателя на пине Arduino будет сигнал HIGH Для чтения значения необходимо использовать Arduino функцию digitalRead(pin)
С левой стороны системной платы находятся пины D44 D45 D46, которые можно использовать для подключения сервомашинок.
ВНИМАНИЕ: на сервомашинки подается напряжение 5В от отдельного источника питания! Ни в коем случае нельзя соединять пины питания сервомашинок с пинами питания, выведенными на колодку Ардуино.
Перед лидаром расположены 4 светодиода, подключенные к пинам D26, D27, D28, D29.

Общение с Arduino через Serial

Внимание! Для прямого общения с Arduino необходимо соединить usb-порт Raspberry и microusb порт контроллера кабелем.
В некоторых случаях необходимо получать данные от встроенного микроконтроллера без применения ROS. Для этого можно применять консольные утилиты типа minicom (https://linux.die.net/man/1/minicom). Для чтения данных от Ардуино можно применить следующую команду:
1
minicom -b 9600 -o -D /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0
Copied!
для завершения чтения следует нажать Ctrl-A и затем X. Скорость и параметры подключения следует указать такими же, как при инициализации Serial в скетче Arduino.
Еще одна возможность для получения данных от Arduino это применении библиотеки Serial языка Python https://pyserial.readthedocs.io/en/latest/shortintro.html
Пример простого скрипта для чтения данных от Arduino:
1
#!/usr/bin/env python3
2
3
import serial
4
if __name__ == '__main__':
5
ser = serial.Serial('/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0', 9600, timeout=1)
6
ser.flush()
7
while True:
8
if ser.in_waiting > 0:
9
line = ser.readline().decode('utf-8').rstrip()
10
print(line)
Copied!

Работа со светодиодной лентой

Под платой расположено 24 RGB светодиода модели WS2812. https://cdn-shop.adafruit.com/datasheets/WS2812.pdf
WS2812 - это три 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
Для тестирования работоспособности светодиодной ленты, можно воспользоваться тестовым скетчем
ws-sro/Turtlebro-tester at main · voltbro/ws-sro
GitHub

Удаленная загрузка скетча Arduino

Если есть необходимость удаленно (без доступа к роботу) обновить прошивку Arduino, то это возможно сделать имея только удаленный доступ.
Подготовить скетч к загрузке
  1. 1.
    В Arduino IDE выбрать МК Arduino/Genuino Mega or Mega 2560
  2. 2.
    Скомпилировать программу (кнопка Проверить)
  3. 3.
    В меню выбрать Скетч→Экспорт Бинарного файла
  4. 4.
    В директории где находиться файл скетча, будут созданы два файла с бинарными данными вида (sketch_mar24a.ino.mega.hex sketch_mar24a.ino.with_bootloader.mega.hex)
  5. 5.
    Мы должны использовать файл sketch_mar24a.ino.mega.hex
Загрузить бинарный файл на Arduino:
  1. 1.
    Скопировать файлы .hex на робота, например командой linux scp
  2. 2.
    На роботе выполнить команду "прошивки" платы Arduino
1
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
Copied!
Где sketch_mar24a.ino.mega.hex имя файла с прошивкой. Для возможности удаленной прошивки платы, необходимо чтобы Arduino разъем на плате Turtlebro был подключен к RaspberryPi через Micro-USB.
Last modified 5d ago