docs: restore info on led ros node in nti2019

This commit is contained in:
Oleg Kalachev
2019-04-10 14:29:43 +03:00
parent 9ac980f278
commit bd8b17a51d

View File

@@ -135,3 +135,69 @@ rosservice call /navigate "{x: 0.0, y: 0.0, z: 2, yaw: 0.0, yaw_rate: 0.0, speed
Сигнальный провод ленты подключен к GPIO-пину 18.
Про работу с LED-лентой можно прочитать [в соответствующей статье](leds.md).
### Работа с LED-лентой через ROS
В образ Клевера для Олимпиады НТИ включена нода ROS, работающая со светодиодной подсветкой. С её помощью можно управлять светодиодами, не запуская свою программу из-под `sudo`. По умолчанию эта нода выключена, но её можно включить, если в файле `/home/pi/catkin_ws/src/ros_ws281x/launch/clever4.launch` изменить строку
```xml
<arg name="enable" default="false"/>
```
на
```xml
<arg name="enable" default="true"/>
```
и перезапустить службу `rosled`:
```bash
sudo systemctl restart rosled
```
Пример работы со светодиодной лентой:
```python
import rospy
# Загружаем из ноды LED-ленты описание сервиса SetLeds...
from ros_ws281x.srv import SetLeds
# ...и сообщений LEDState и LEDStateArray. Сообщение LEDState
# содержит номер светодиода и его цвет, LEDStateArray - массив
# сообщений LEDState
from ros_ws281x.msg import LEDState, LEDStateArray
# Для задания цвета используется стандартное сообщение ColorRGBA
from std_msgs.msg import ColorRGBA
# Количество светодиодов в ленте
NUM_LEDS = 60
# Прокси к сервису установки состояния светодиодов
set_leds = rospy.ServiceProxy("/led/set_leds", SetLeds, persistent=True)
# Вспомогательная функция заполнения всей ленты указанным цветом.
# red, green, blue - интенсивность красного, зелёного, синего цвета
# (задаётся числом от 0 до 255)
def fill_strip(red, green, blue):
# Создаём сообщение для setLeds
ledMsg = LEDStateArray()
ledMsg.leds = []
# Для каждого светодиода указываем его новое состояние
for i in range(NUM_LEDS):
led = LEDState(i, ColorRGBA(red, green, blue, 0))
# Записываем состояние светодиода в сообщение
ledMsg.leds.append(led)
# Вызываем сервис. После этого вся лента должна стать указанного цвета
set_leds(ledMsg)
# Заполняем ленту разными цветами
fill_strip(255, 0, 0)
rospy.sleep(2.0)
fill_strip(0, 255, 0)
rospy.sleep(2.0)
fill_strip(0, 0, 255)
rospy.sleep(2.0)
# Выключение ленты
fill_strip(0, 0, 0)
```