docs: Add ros_ws281x example

This commit is contained in:
sfalexrog
2019-04-10 02:03:20 +03:00
parent 74f84a22d9
commit 4746f3181d

View File

@@ -127,3 +127,69 @@ rosservice call /navigate "{x: 0.0, y: 0.0, z: 2, yaw: 0.0, yaw_rate: 0.0, speed
```
Для более подробной информации и описания других команд смотрите [API simple_offboard](simple_offboard.md) и [примеры кода](snippets.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
# Прокси к сервису установки состояния светодиодов
setLeds = rospy.ServiceProxy("/led/set_leds", SetLeds, persistent=True)
# Вспомогательная функция заполнения всей ленты указанным цветом.
# red, green, blue - интенсивность красного, зелёного, синего цвета
# (задаётся числом от 0 до 255)
def fillStrip(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)
# Вызываем сервис. После этого вся лента должна стать указанного цвета
setLeds(ledMsg)
# Заполняем ленту разными цветами
fillStrip(255, 0, 0)
rospy.sleep(2.0)
fillStrip(0, 255, 0)
rospy.sleep(2.0)
fillStrip(0, 0, 255)
rospy.sleep(2.0)
# Выключение ленты
fillStrip(0, 0, 0)
```