* Clover Blockly: add first blocks set * Adjust Blockly settings * Fix get_position output type * Add screenshot * Rename readme.md to README.md * Resize screenshot * Add package.xml * Little change * Fixes * Add python_compressed to blockly * Implement some of the Clover blocks in Python * Make Python indentation 4 spaces * Fixes to Python blocks implementation * Implement set_velocity block in Python * Implement wait_arrival block in Python * Fix indentation in Python implementation of blocks * Fix * Fix land_wait template * Set reserved words in Python * Change default frame_id to aruco_map in get_position block * Fix * Move blocks definitions to blocks.js * Get rid of missing favicon error * Simplify navigate * Rearrange layout, add tabs * Generate Python code * Small style change * -console.log * Code style * Use modules * Move modules to the header * Correct order for ROS definitions + generating "backend" code * Fix rangefinder_distance block * simple_offboard: commands to change only yaw and yaw rate * Implement set_yaw block * Start working on Blockly documentation * Implement print block with a topic * Unneeded code * Little fixes * Fix indentation * Fixes * Fix wait_arival, get_distance * Implement running Blockly programs, implement prompt block, fixes * Add land button * Little change * Fix reserved words + little fixes * +x for main.py * Simplify run button * Auto-save and load workspace * Make land button work * Handle exceptions * Minor change * Add help URL for blocks * Fix * Implement arrived block * Mark blockly and highlight.js as linguist-vendored * Add forgotten CMakeLists.txt * Add wait checkbox to set_yaw block * Disable run button when disconnected * Add message and service files * Add some comments * Add tooltip to some blocks * Implement GPIO blocks * Don’t latch print message to prevent duplication * Prevent duplication prompts * Add ROS init code to backend code anyways * Make GPIO blocks color a constant * Minor fix * More correctly update blocks on input value changes * Minor fixes * Remove unneeded readonly attribute * Add marker ID shadow blocks to toolbox * Add lacking reserved words * Fix frame id generation for complex marker id expressions * Consider frame_id in set_yaw block * Shorten ros module import * Implement stop service * Disable and enable run button correctly * Don’t print KeyboardInterrupt exceptions * Put notifications to notifications element * Add 'running' mark * Disable signal in backend python code * Sleep a little bit to let rospy initialize publishers * Remove accidental code * Make ROS namespace and private namespace constants * editorconfig-lint: don’t check Blockly code * Use private namespace constant in Python generator * Implement ~running topic to display current program status more robustly * Make navigate tolerance and sleep time constants * Make set_leds and and set_effect services proxies persistent * Replace a number with constant * Limit ~block topic publishing rate Otherwise messages get queued making the frontend to freeze * Improve internal documentation * Append 'map' to frames list * Return degrees in get_attitude block * Move getting yaw in a separate block * Improve block tooltips * Add some more files to editorconfig-lint excludes * Add get_yaw block to toolbox * Implement get_time block * Implement ~store and ~load services for storing user programs * Set auto_arm only in take_off block * Minor CSS fixes * Make 'Python' tab textarea-like * Implement saving and loading programs * Adjust styles * Retrieve only .xml files in load service * Forgotten code * Documentation on store and load services * Add some examples * Add blocks programming arg to launch file * Update docs * Add package’s dependencies * Add dependency * Add title to select * Fix syntax * Minor fix in docs * Add forgotten roslib.js * Run user program in the same process * Use print function for print block in Python 2 * Add variables example * Fix url * Add functions example * Fix set_servo block * Fix gpio_read block * Update blocks screenshot * Update docs * Update docs * Fix set_effect block * Minor fix in example * Add setpoint block, remove set_velocity from toolbox * Remove unused modules * Unused variable * Add English article skeleton * Clarify backend node link error * Remove unused variable * Update documentation * Fix link to documentation * Add Blockly logo * Update English article * Add Blocks programming link to the main page * Minor change * Add catkin_install_python to CMakeLists.txt * Make navigate tolerance and sleep time configurable * Add minor todo * Add blockly examples directory to editorconfig-lint excludes * Rename main node to clover_blocks * Add a warning to the old blocks programming article * Fix editorconfig-lint exclude
9.0 KiB
Работа со светодиодной лентой
Note
Документация для версий образа, начиная с 0.20. Для более ранних версий см. документацию для версии 0.19.
Адресуемая RGB-светодиодная лента типа ws281x, которая входит в наборы "Клевер", позволяет выставлять произвольные 24-битные цвета на каждый из отдельных светодиодов. Это позволяет сделать полет Клевера более ярким, а также визуально получать информацию о полетных режимах, этапе выполнения пользовательской программы и других событиях.
На образе для RPi предустановлены необходимые модули для работы с лентой. Они позволяют:
- управлять эффектами/анимациями на ленте;
- управлять лентой на низком уровне (переключением цветов отдельных светодиодов);
- настраивать реакцию ленты на полетные события.
Caution
Обратите внимание, что светодиодную ленту нужно питать от стабильного источника энергии. Если вы подключите питание напрямую к Raspberry, то это создаст слишком большую нагрузку на ваш микрокомпьютер. Для снятия нагрузки с Raspberry можно подключить питание к преобразователю BEC.
Высокоуровневое управление лентой
-
Для работы с лентой подключите ее к питанию +5v – 5v, земле GND – GND и сигнальному порту DIN – GPIO21. Обратитесь к инструкции по сборке для подробностей.
-
Включите поддержку LED-ленты в файле
~/catkin_ws/src/clever/clever/launch/clever.launch:<arg name="led" default="true"/> -
Настройте параметры подключения ленты ws281x в файле
~/catkin_ws/src/clover/clover/launch/led.launch. Необходимо ввести верное количество светодиодов в ленте и GPIO-пин, использованный для подключения (если он отличается от GPIO21):<param name="led_count" value="30"/> <!-- количество светодиодов в ленте --> <param name="gpio_pin" value="21"/> <!-- GPIO-пин для подключения -->
Высокоуровневое управления лентой позволяет управлять текущим эффектом (анимацией) на ленте. Для этого используется ROS-сервис /led/set_effect. Параметры сервиса:
effect– название необходимого эффекта.r,g,b– цвет эффекта в формате RGB. Значения изменяются от 0 до 255.
Список доступных эффектов:
fill(или пустая строка) – залить всю ленту цветом;blink– мигание цветом;blink_fast– ускоренное мигание цветом;fade– плавное перетекание в цвет;wipe– "надвигание" нового цвета;flash– быстро мигнуть цветом 2 раза и вернуться к предыдущему эффекту;rainbow– переливание ленты цветами радуги;rainbow_fill– переливать заливку по цветам радуги.
Пример работы с сервисом из Python:
import rospy
from clover.srv import SetLEDEffect
rospy.init_node('flight')
set_effect = rospy.ServiceProxy('led/set_effect', SetLEDEffect) # define proxy to ROS-service
set_effect(r=255, g=0, b=0) # fill strip with red color
rospy.sleep(2)
set_effect(r=0, g=100, b=0) # fill strip with green color
rospy.sleep(2)
set_effect(effect='fade', r=0, g=0, b=255) # fade to blue color
rospy.sleep(2)
set_effect(effect='flash', r=255, g=0, b=0) # flash twice with red color
rospy.sleep(5)
set_effect(effect='blink', r=255, g=255, b=255) # blink with white color
rospy.sleep(5)
set_effect(effect='rainbow') # show rainbow
Также лентой можно управлять из командной сроки (Bash):
rosservice call /led/set_effect "{effect: 'fade', r: 0, g: 0, b: 255}"
rosservice call /led/set_effect "{effect: 'rainbow'}"
Настройка реакции ленты на события
Клевер умеет показывать LED-лентой текущее состояние полетного контроллера и сигнализировать о событиях. Данная функция настраивается в файле ~/catkin_ws/src/clover/clover/launch/led.launch в разделе events effects table. Пример настройки:
startup: { r: 255, g: 255, b: 255 }
connected: { effect: rainbow }
disconnected: { effect: blink, r: 255, g: 50, b: 50 }
<!-- ... -->
В левой части таблицы указывается событие, на которая лента должна среагировать. В правой части указывается эффект (анимация), который необходимо включить при возникновении события. Список поддерживаемых событий:
startup– запуск всех систем Клевера;connected– успешное подключение к полетному контроллеру;disconnected– разрыв связи с полетным контроллером;armed– переключение полетного контроллера в состояние Armed;disarmed– переключение полетного контроллера в состояние Disarmed;stabilized,acro,rattitude,altctl,posctl,offboard,mission,rtl,land– переключение полетных режимов;error– возникновение ошибки в ROS-нодах или полетном контроллере (ERROR-сообщение в топике/rosout);low_battery– низкий заряд батареи (порог настраивается в параметреthreshold).
Note
Для корректной работы сигнализации LED-лентой о низком заряде батареи необходимо корректная калибровка электропитания.
Для того, чтобы отключить реакцию светодиодной ленты на события, установите аргумент led_notify в файле ~/catkin_ws/src/clover/clover/launch/led.launch в значение false:
<arg name="led_notify" default="false"/>
Низкоуровневое управление лентой
Для управления отдельными светодиодами используется ROS-сервис /led/set_leds. В параметрах задается массив номеров и RGB-цветов светодиодов, которые необходимо переключить.
Пример работы с сервисом из Python:
import rospy
from led_msgs.srv import SetLEDs
from led_msgs.msg import LEDStateArray, LEDState
rospy.init_node('flight')
set_leds = rospy.ServiceProxy('led/set_leds', SetLEDs) # define proxy to ROS service
# switch LEDs number 0, 1 and 2 to red, green and blue color:
set_leds([LEDState(0, 255, 0, 0), LEDState(1, 0, 255, 0), LEDState(2, 0, 0, 255)])
Сервис можно использовать из командной строки:
rosservice call /led/set_leds "leds:
- index: 0
r: 50
g: 100
b: 200"
При использовании ленты в ROS-топике /led/state публикуется текущие цвета светодиодов. Просмотр топика из командной строки:
rostopic echo /led/state