mirror of
https://github.com/CopterExpress/clover.git
synced 2026-05-26 21:19:35 +00:00
docs: restore info on led ros node in nti2019
This commit is contained in:
@@ -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)
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user