Содержание
Движки, системы управления контентом (CMC) для Вашего сайта. Обзор и советы
- Системы управления контентом CMS и движки для сайта
- Родственные темы
Пришлось убедиться на собственном опыте, что программы по созданию сайтов и хостинг-провайдеры — вещи взаимосвязанные. Причем это касается не только облегченных бесплатных версий, но и солидных платных пакетов.
Какой бы замечательной ни была используемая вами система управления контентом сайта (CMS), у вас будет меньше всего забот, если вы изначально разместите сделанную на ее основе страничку на каком-то хостинге, дружественном разработчикам программы.
Тенденция на рынке хостинговых услуг идет к тому, что хостеры предлагают тарифы, где та или иная система управления сайтом уже размещена или — другой вариант — на любом продвинутом тарифе предлагается возможность автоматически установить из панели управления одну из нескольких таких систем.
Так что прежде чем заказывать и оплачивать хостинг, лучше заранее определиться с тем, какую систему управления контентом вы собираетесь использовать.
Как сделать профессиональный сайт — системы управления контентом CMS — движки для Вашего сайта
Система управления сайтом —
www.finest.ru
Система управления сайтом — обязательный элемент
современного web ресурса, нацеленного на эффективность.
web-mastery.info — Как создать
сайт — шаблоны сайтов, учебники и программы
Webtag.ru — Как сделать сайт
самостоятельно | Бесплатные скрипты, руководства, графика
Инструменты фриланса —
www.leo-star.ru
Программы для создания сайта, редакторы html и многое
другое
CMS List — российский
портал о системах управления сайтами (CMS) — один из ведущих порталов,
посвященных системам управления сайтами. Каталог русскоязычных CMS — бесплатных
и коммерческих.
Движки сайтов — Форум web
мастеров — Devil Art
CMS
Magazine — www.cmsmagazine.ru — аналитический портал рынка
веб-разработок. Каталог и рейтинг веб-студий
Сравнительный тест
семи популярных CMS-систем для малого корпоративного сайта —
cmslist.ru
Мир CMS — cmsworld.ru
— обзор CMS, лучшие CMS, каталог, сравнение CMS, все об управлении
сайтом
Поисковый сервис по CMS —
cms.it-forge.net
The CMS
Matrix — cmsmatrix.org — Сравнение огромного количества CMS по многим
параметрам
The Content Management Comparison Tool (на англ.языке)
Системы
управления контентом (CMS) — Web-Extrime PHP
Nucleus CMS (nucleus.net.ru) — бесплатная
(OpenSource) система управления контентом (CMS — движок для сайта), работающая
на php и MySQL, предназначенная для создания новостных сайтов и блогов, легко
расширяемая за счёт плагинов. С её помощью и уже готовых бесплатных шаблонов,
можно в краткие создать свой сайт, будь то блог или новостной сайт. Управление
сайтом стало проще!
Скрипт каталога ссылок —
Скрипт для обмена ссылками Boundless Source
Wiki — идеальный инструмент
для построения домашних страниц без специальных знаний HTML!
Wiki — это
система, позволяющая создавать динамический web-сайт практически любой
сложности, страницы которого может редактировать любой посетитель, если Вы того
захотите.
Бесплатные протестированные
скрипты php и сервисы для веб-мастеров — php-ru.info
Каждый скрипт
сопровождается подробнейшим описанием и инструкцией по установке.
Поэтому
именно на этом сайте Вы не просто скачаете кучу скриптов для того, что бы потом
разбираться с ними всеми — нужен ли он Вам или нет, и как вообще он работает, а
найдёте именно тот скрипт, который Вам необходим для Вашего WEB-проекта зная что
и как этот скрипт делает.
WebNav.ru — Бесплатные скрипты, HTML
шаблоны дизайна и статьи для веб-мастера
Родственные темы
- Зачем переводчику сайт и как его быстро сделать
- Бесплатный хостинг и конструкторы сайтов
- Платный хостинг
Движок для сайта | Какой выбрать ?
Движок для сайта | Какой выбрать
CMS (Content Management System) –
«система управления содержанием» сайта.
В народе, CMS-ку называют проще и красивше – «движок»
- Статические и динамические сайты
- Что такое движок сайта
- Зачем сайту нужен движок
- Какой выбрать движок для своего сайта
- WordPress, Joomla и Drupal
- CMS DLE
- Типы сайтов и рекомендованные движки
- Движок «платный» или «бесплатный»?
- Осторожно! «Халява» для сайта
- Пробуем движок на Денвере
- Осваиваем Блоггер
Статические и динамические сайты
Как известно, сайт – это совокупность веб-страниц,
объединённых ссылками и тематикой содержания
Условно, все сайты можно разделить на две группы –
статические и динамические
- Статический сайт
- Статический сайт – это набор уже готовых веб-страниц, находящихся на веб-сервере. Обращаясь к адресу такой страницы, пользователь сразу открывает её в браузере и просматривает страницу в таком виде, в каком она хранится на сервере. Количество таких страниц неограниченно, но «клепать» и «кузнечить» каждую из них по-отдельности – исключительно тяжкое и накладное занятие. Поэтому, нынче, статический сайт – это большая редкость. В Сети полно бесплатных движков и сервисов, чтобы создать и обустроить нормальный динамический сайт с автоматическим созданием страниц.
- Динамический сайт
Динамический сайт – это совсем другое дело.
На динамическом сайте, веб-страниц в готовом виде – почти не бывает. Все веб-страницы динамического сайта генерируются движком сайта, непосредственно – по запросу пользователя сайта. И это – главное отличие динамического сайта от сайта статического.Таким образом экономится дисковое пространство на сервере, а самое главное – упрощается управление содержимым сайта (контентом), которого на современных сайтах может быть очень и очень много.
Обращаясь к адресу страницы динамического сайта, пользователь создаёт запрос, согласно которого движок сайта сгенерирует запрашиваемую страницу.
Что такое движок сайта
Движок сайта – это его операционная система, которая выполняет на сайте такие-же функции, что и обычная операционная система (ОС) на домашнем компьютере или КПК (наладоннике). Движки бывают только на динамических сайтах
Правильное и полное название статуса движка динамического сайта:
НЕ программа, НЕ приложение, а – скрипт! (англ. Script)
Правильное и полное название движка динамического сайта:
«система управления содержанием»
(англ. Content Management System), сокращённо – CMS
«CMS» произносится
- на английский манер, как «си-эм-эс»
- на русский лад, как «ка-эм-эс»
- на Сетевом русскоязычном сленге,
«CMS» звучит проще и красивше – «движок»
Зачем сайту нужен движок
Ответ, более чем прост – движок сайту нужен для нормальной его работы.
Движок сайта обеспечивает доступ пользователей к файлам сайта, формирует страницы сайта для просмотра, короче – осуществляет управление материалами сайта. Что, впрочем, и так понятно из одного его названия – «система управления содержанием».
Кроме этой (основной) задачи, движок может проделать на сайте ещё кучу другой полезной работы. Например, выполнить почтовую рассылку, обработать комментарий и переписку пользователя, прокрутить видеоролик и т.д.
Практически, все современные веб-ресурсы – это динамические сайты
И, стало быть – все они управляются различными CMS-скриптами (движками)
Какой выбрать движок для своего сайта
Каталоги предлагают огромное количество наименований различных CMS-скриптов. На сайте CMS Magazine есть обзор, наверное, всех движков (платных и бесплатных), которые существуют на сегодняшний день (а их – более 750). Там же, опубликованы ссылки для перехода на оф.сайты понравившихся CMS. Понятно, что в таком изобилии разобраться нелегко. Да оно и не надо. Поскольку есть статистика и жизненные наблюдения.
По статистике, на данный момент, в Рунете, наиболее популярны движки:
WordPress, Joomla, Drupal и CMS DLE
- все эти движки проверены временем
- они надёжны, универсальны и просты в эксплуатации
- хорошо русифицированы (а это не мало)
- имеют удобные административные панели
- имеют хорошие службы и форумы поддержки
- для этих CMS создано множество тем, шаблонов, плагинов, расширений и т.д.
- в Сети имеется много справочной и учебной информации по этим скриптам, практически все вопросы, связанные с их работой – уже широко освещены на форумах, поэтому, найти готовый ответ или решение – не составит труда.
Движки WordPress, Joomla, Drupal и DLE – давно облюбованы русскоязычными пользователями и хорошо обкатаны русскоязычной аудиторией на различных форумах. А это очень важно. Потому что, не радостно читать всякую чушь на инглиш в поисках грамотного ответа на поставленный вопрос.
WordPress, Joomla и Drupal
Какой из этих движков предпочтительней – даже крутые профессионалы не могут разобраться. Принципиально, бесплатные WordPress, Joomla и Drupal – это близнецы-братья (или сёстры) с практически одинаковым функционалом и набором дополнений.
По количеству расширений и дополнений – лидирует, как-бы WordPress
А, вот по популярности и юзабельности – впереди, вроде как Joomla
Платформы WordPress, Joomla и Drupal – заслуженные лидеры среди бесплатных движков. В основном, они используются для создания блогов (сайт-дневник), небольших тематических сайтов, PR-сайтов и promo-сайтов (сайтов для продвижения одного вида товара или услуги). Эти CMS-ки имеют очень много расширений и дополнений, что делает их весьма универсальными системами. Они легко и просто инсталлируются на хостинг. При желании можно добавить плагины, чтобы сделать интернет-магазин, фотогалерею, варезпортал и др.
Движки WordPress, Joomla и Drupal приглянулись нашим фрилансерам
Опять-же таки – из-за своей доступности и низкого порога вхождения
CMS DLE
Несмотря на своё пророссийское происхождение,
CMS DLE стоит особняком от своих русифицированных
зарубежных собратьев и со-сестёр
Во-первых – этот CMS-скрипт платный. А, во-вторых, DLE – это навороченный многопользовательский движок для контентных порталов и форумов. CMS DLE имеет такие расширенные возможности и функции, что даже искушённому пользователю-администратору стоит задуматься – нужны ли они ему в указанном объёме. Сдаётся мне, что очень немногие сайты используют CMS DLE на всю мощь.
Чем движок DLE действительно невероятно удобен, так это тем, что всё его добро поставляется в виде единого архива-дистрибутива и нет надобности рыскать по Сети в поисках сомнительных модулей и дополнений.
- Ода CMS DLE
CMS DLE – это уникальная система управления сайтом,
очень удобный движок, который подойдёт под любой проектОсобенно он хорош для контент-сайтов с высокой посещалкой тусующего люда.
Большинство крупных порталов в Сети – именно на DLE.Главное отличие DLE от своих бесплатных сородичей – это туева куча встроенных модулей, которые пишут профессионалы. Поэтому, все модули работают слаженно, движок не создаёт дополнительных нагрузок на сервер и без проблем выдерживает высокую посещаемость. Потенциал CMS DLE очень велик. На нём можно реализовать сайт любой сложности. Простота администрирования и модерации делает этот движок незаменимым инструментом в управлении крупными порталами, где народу – больше чем в метро.
- Админпанель CMS DLE
Что касается админпанели DLE, так это – просто какой-то административный рай. Здесь, и рассылка, и редактирование пользователей, и создание бесконечного числа пользовательских групп, также – добавление и проверка (модерирование) новостей, работа с изображениями, загрузка файлов на сервер, создание бекапов (резервных копий), модули антиспам и карта сайта, и ещё очень много разных вкусностей и полезностей, которые делают управление сайтом лёгким и приятным. Кроме всего прочего, в админпанели DLE имеется очень мощный модуль управления рекламой, который позволяет гибко интегрировать рекламные блоки прямо в тело новости и, в последствии – заменять их одним кликом. Это очень удобно при настройке контекстной рекламы, когда её нужно выводить на целевых страницах.
Скачайте триал-версию CMS DLE и загляните в её админпанель.
Такого изобилия Вы не увидите ни в одном движке!- Администрирование CMS DLE
Система DLE подкупает своей комплектностью, универсальностью и продуманностью. Все необходимые модули уже встроены в базовую комплектацию. Пользователю остаётся только включить/выключить нужные, да установить/выбрать подходящий шаблон. После установки на сервер, движок требует лишь минимальных настроек – он сразу готов к работе.
Защита DLE – так это вообще песня. Если админку DLE и ломают – так это бывает исключительно по лопоухости его администратора, раздающего пароли доступа налево и направо. По-умолчанию, скрипт DLE наглухо закрыт от несанкционированного доступа
- Обновление CMS DLE
Как и любой другой компьютерный продукт, скрипт CMS DLE регулярно обновляется. Однако, если у других движков обновление сводится к «латанию дыр», то CMS DLE – постоянно совершенствуется и развивается.
Каждый новый релиз CMS DLE – это настоящая бомба с добавлением новых модулей
- Стоимость CMS DLE
Вот она! Вот! В бочке мёда – ложка дёгтя!
Печаль моя велика, потому как, CMS DLE – платный скрипт, пусть и недорогой. Стоимость минимальной годовой подписки CMS DLE – 40 WMZ, а если попасть под регулярную Новогоднюю акцию, то за такие деньги можно купить подписку сразу на два домена. У DLE есть функция переадресации новой подписки на старый домен и многие ею пользуются для покупки и обновления файлов движка. Ибо, таким образом, годовая подписка на один домен будет составлять всего 20 WMZ. Не суперденьги :):):) :request: И, CMS DLE – того стоит.
При наличии денег, CMS DLE – лучшее решение для крупного проекта.Помимо всего, существует полнофункциональная демоверсия DLE с ограничением в 200 новостей, что может весьма неплохо прокатить для небольшого личного сайта или блога (чем я часто и пользуюсь). Вот, ежели взять DLE для личного сайта или блога – так это их ещё сделать нужно, 200 уникальных новостей :):):)
Типы сайтов и рекомендованные движки
Прежде чем приступить к выбору движка для своего сайта, нужно чётко определиться – что от него требуется и какие функции CMS-ка должна выполнять. Потому что, нагрузка на операционную систему сайта (движок) определяется двумя факторами – «посещалкой сайта» и типом сайта (так сказать, запрашиваемым функционалом).
И, если первое (посещалка) – это «на удачу»,
то второе (функционал) – можно и нужно предусмотреть заранее.
Таблица основных типов сайтов пользовательского уровня
и рекомендованные движки для их реализации:
Тип сайта | Характерное описание сайта | Рекомендованная CMS |
Сайт-визитка, блог, личная страница, промо-сайт, PR-сайт, тематический сайт, сайт-фотогалерея | Небольшие сайты для одностороннего контакта посетителей с материалами администратора, с приоритетом последних. Очень часто на таких сайтах есть возможность для многопользовательского общения, которая, впрочем, всё равно сводится к непосредственному якшанью с высокоприоритетным владельцем-администратором (комментирование, переписка, чат). Такие сайты, как правило, нетребовательны к ресурсам и используют только базовый функционал системы. Соответственно и движок сюда подойдёт любой | WordPress, Joomla, Drupal, CMS DLE (Demo) |
Сайт-каталог, интернет-витрина, интернет-магазин | При небольших объёмах наполнения, принципиально – эти сайты ничем не отличаются от предыдущей группы, с единственной разницей, что несут дополнительный функционал за счёт установленных дополнительных плагинов или расширений. Тем не менее, этот самый дополнительный функционал выдвигает и дополнительные требования к движку, например – на предмет совместимости. | WordPress+eCommerce,
Joomla+ VirtueMart
Drupal+Ubercart |
Сайт-каталог, интернет-витрина, интернет-магазин | При больших объёмах наполнения и торговли, для таких коммерческих сайтов лучше брать специализированные движки, модули которых адаптированы под торговые потребности. | PrestaShop, |
контент-сайты: — новостные — САР-ы — форумы, | Самая сложная и требовательная категория сайтов. Это 100%-многопользовательские сайты, как со стороны администрации, так и со стороны посетителей. Такие сайты создают очень большую нагрузку на движок. | CMS DLE,
При посещалке |
Движок «платный» или «бесплатный»
Выбирая движок для своего сайта, нужно определиться с бюджетом проекта.
Функционально, все движки – примерно одинаковы.
Остальное – зависит от владельца-администратора.
На всех CMS-скриптах можно создавать любые по сложности сайты (веб-ресурсы).
В случае с нашими CMS, «бесплатность» лицензии вовсе не означает ограниченность или ущербность системы. Любой бесплатный движок имеет тот же функционал, что и его коммерческий сородич.
Безусловно, бесплатные WordPress, Joomla и Drupal, представляют наибольший интерес при создании блогов (blog – сайт-журнал, дневник), сайтов-визиток, небольших корпоративных или информационных сайтов. Если преследуемая цель – это создание сайта с нуля при минимальных затратах денег и времени, то лучшим решением будет бесплатная система управления контентом. Но, если замахиваться на нечто грандиозное, с посещалкой в более 5000 уников (уникальных посетителей в сутки) – лучше сразу выбирать CMS DLE, что в конечном итоге будет дешевле.
Осторожно! «Халява» для сайта
Отдельно хочется предостеречь от размещения сайта на бесплатных хостингах и использования онлайн-конструкторов для размещения своего проекта и контента. Про бесплатный сыр известно всем. Поэтому, не сомневайтесь – рано или поздно «халява» обернётся, если не прямыми, то косвенными убытками и неудобствами.
Вот, далеко не полный перечень бесплатных «блюд»,
которые могут поджидать веб-мастера
на бесплатных угодьях хостингов и конструкторов сайтов:
- Наглая, навязчивая,
практически не убираемая реклама на пол-страницы сайта - Такую рекламу можно убрать только за деньги,
но, тогда вопрос – почему-бы сразу не пойти на платный хостинг? - Тайное пропихивание скрытых
коммерческих ссылок в тело и голову сайта - Это откровенное «поимение» автора сайта в глазах поисковой системы
- Закрытый доступ к файлам конфигурации сайта
- Это не даёт возможности делать бекапы,
перемещать собственный материал,
делать сетевую переадресацию (301 редирект),
продавать собственные статьи и многое другое - Уникальные структуры баз данных (БД) онлайн-конструкторов сайтов
- Это сильно затрудняет переход к другому хостеру,
чтобы, наконец, отказаться от такой «халявы»
Очень часто, эту самую БД – вообще невозможно выкачать
из бесплатного конструктора сайтов.
Делается это, якобы в целях защиты от злоумышленников,
а на самом деле – простое попадалово в зависимость от хостера
«Попалась, рыбка!» (Куды ты теперь денешься от меня) - Ущербное, устаревшее или ограниченное
серверное программное обеспечение - Из-за реальных или вымышленных ограничений хостера,
ни один, уважающий себя локальный движок,
не будет нормально работать на бесплатном хостинге - Заработок на своём сайте
- И, самое главное:
Сайты, расположенные на бесплатном хостинге –
крайне редко и очень неохотно берут в рекламные сети
Заработать на таких сайтах – весьма проблематично
(за исключением, разве что Блоггера)
Единственная приемлемая «халявная» вещь –
это скидки на пробный период у авторитетных хостеров и регистраторов.
Но это – уже совсем другая история…
Пробуем движок на Денвере
Перед установкой движка на хостинг
(дабы убедиться в правильности своего выбора) –
нужно пощупать CMS-скрипт своими руками.
Здесь выручит Денвер (локальный сервер)
Потребуется скачать и установить Денвер на домашний компьютер,
а на него – понравившийся движок.
После этого:
- погонять CMS-ку на своём локальном компьютере
- попытаться сделать сайт
- скачать (сделать) и установить шаблон
- добавить пару-тройку новостей
- посмотреть, что получилось, как это выглядит, как администрируется
Такого знакомства с движком будет вполне достаточно, чтобы определиться –
подходит понравившаяся CMS под данный проект, или нет
Осваиваем блоггер
Блоггер, он же Blogger, он же blogspot – бесплатная платформа от Google для ведения пользовательских блогов, сайтов-дневников, сайтов-журналов и прочих проявлений Сетевых малых форм широкого народного потребления…
Столкнувшись с платформой от Google для создания блогов и сайтов, я решил сразу (для себя) ответить на вопрос – а для чего, собственно он (Blogger) мне нужен?
Причина, откровенно материальная
Она называется Google AdSense
Google AdSense – это рекламная система Google, с которой я связал свои финансовые надежды и чаяния после того, как «меня ушли» из Яндекс Директа. В отличие от Яндекс Директа, Google AdSense – не в пример более демократичная рекламная система, с которой гораздо легче работать и от которой гораздо легче получить деньги. Сайт на Blogger, в Google AdSense принимают сразу после создания, без утомительной раскрутки и набора минимальной посещалки. Но, самое главное – у Google AdSense нет премодерации сайтов-площадок. А это значит, что, имея всего один аккаунт в рекламной системе Google AdSense, я могу развешивать свои рекламные блоки хоть по всему Интернету. И не важно, где этот рекламный блок будет находиться, главное – чтобы это место не нарушало правил Google AdSense.
При чём здесь Блоггер? А при том, что сайт (блог) на Блоггере отлично индексируется и признаётся Google AdSense. Ну, ещё-бы – не признавать собственное детище. К тому же, конструктор Blogger – абсолютно бесплатная весчь, в которую рекламная система Google AdSense уже заложена ещё на этапе её создания. Но, если это так, то почему бы не создать блог на Bloggerе и не навесить на него рекламных блоков в попытке заработать абсолютно на законных основаниях? В любом случае, юзер ничего не теряет, кроме собственного времени, а приобретает, как минимум – опыт общения с известной блогерской платформой.
Создавая сайт (блог) на Блоггере, я преследую исключительно меркантильные цели:
– продвигать основные свои сайты и зарабатывать при этом дополнительные деньги
Причина, явно жлобская
Имя ей – избыток авторского материала, который жалко выбрасывать. Как правило, после написания интернет-статьи остаются черновики, из которых очень легко состряпать ещё одну уникальную статью. Такую статейку можно «тиснуть» под другим поисковым запросом и сделать из неё прямую ссылку на основной материал. Из потраченного времени извлекается дополнительная выгода. Либо – в виде посторонней высококачественной ссылки на главный сайт-блог, либо – в виде финансового продвижения в Google AdSense. А, в идеале – и то, и другое.
Причина – SEO-несовместимость материала
Несовместимый SEO-материал – бич любого веб-ресурса. Заходя на сайт с несовместимым наполнением, поисковик начинает путаться в ключевых словах и тематических направлениях. Результат плачевный – низкие рейтинги сайта в SERP-е, даже при хорошем контенте. И, если Google ещё как-то терпит такое надругательство над SEO, то Яндекс невероятно не любит сайты «обо всём сразу». А, в Блоггере можно создать неограниченное количество блогов на любые темы, сортировать статьи и размесщать их в соответствующих тематиках. Благо, дело это – абсолютно бесплатное :):):)
Причина – записная книжка для себя, любимого
Записная книжка для себя самого – это то, собственно, зачем и придуманы блоги – делать записи для себя и для людей. А делать записи за деньги (рекламная кампания Google AdSense на сайте / в блоге) – это есть сплошной «гут», «тип-топ» и «OK!».
Причина, чисто личная
Нездоровый интерес к окружающей интернет-среде. Ужасно прикольноо по-дурковать в Сети в шаблоне Блоггера и посмотреть, что из этого получится. Писать ИНОГНИТО разную муть в личном блоге гораздо проще и удобнее, нежели на сайте. Сайты, они ведь создаются как способ общения – для совместного продвижения единой темы или идеи. На сайте угнетает атмосфера взаимной ответственности и круговой поруки, что заставляет автора публиковать не всегда приемлемый для себя материал и всегда быть готовым к нападкам инакомыслящих. А в личном ЛЕВОМ блоге излагается собственное мнение без опаски на репрессии Админа. Выражаясь фигурально, в личном-с блоге можно написать что угодно и как угодно. Никто особенно не осудит.
Записки алкоголика
Script Sandbox Configuration — документация CrafterCMS 3.1.28
При выполнении сценария весь код проверяется на соответствие черному списку небезопасных выражений, чтобы предотвратить код, который может
скомпрометировать систему. При попытке выполнить скрипт, содержащий небезопасные выражения, вы увидите ошибку
похоже на это:
UnsupportedOperationException: небезопасный вызов staticMethod java. lang.Runtime getRuntime ...
По возможности рекомендуется сохранить конфигурацию по умолчанию. Однако, если доступ к одному или нескольким выражениям из черного списка
требуется, можно переопределить конфигурацию черного списка. Конфигурация является глобальной и влияет на все сценарии на сервере.
Предупреждение
Когда вы разрешаете скрипту выполнять небезопасный вызов, вы должны убедиться, что он может выполняться только с известными
аргументы и и никогда с непроверенным пользовательским вводом.
Использование пользовательского черного списка
Crafter Engine включает черный список по умолчанию, который вы можете найти
здесь. Убедитесь, что вы просмотрели ветку/тег, который используете.
Чтобы использовать собственный черный список, выполните следующие действия:
Скопируйте файл черного списка по умолчанию в путь к классам, например:
CRAFTER_HOME/bin/apache-tomcat/shared/classes/crafter/engine/extension/groovy/blacklist
Удалите или прокомментируйте (добавив
#
в начале строки) выражения, которые требуются вашим сценариямОбновите файл конфигурации server-config. properties для загрузки пользовательского черного списка:
CRAFTER_HOME/bin/apache-tomcat/shared/classes/crafter/engine/extension/server-config.properties
# Расположение черного списка для использования на всех сайтах (это не будет иметь никакого эффекта, если песочница отключена ) crafter.engine.groovy.sandbox.blacklist.path=путь к классам:crafter/engine/groovy/черный список
Примечание
В CrafterCMS v3.1.14 и более ранних версиях имя свойства —
crafter.engine.groovy.sandbox.blacklist
Перезапустите CrafterCMS
Теперь вы можете выполнять тот же скрипт без проблем.
Добавление зависимостей с помощью Grapes
Если ваш код Groovy должен использовать внешние зависимости, вы можете использовать Grapes, однако при включенной песочнице Groovy
зависимости могут быть загружены только во время начальной компиляции, а не во время выполнения. По этой причине это
требуется добавить дополнительный параметр initClass=false
в аннотациях, чтобы предотвратить их копирование в классы:
Пример аннотации винограда
@Grab(group='org.apache.commons', module='commons-pool2', version='2.8 .0', initClass=false) @Grab(value='org.apache.commons:commons-pool2:2.8.0', initClass=false)
Отключение черного списка песочницы
Можно отключить черный список, чтобы разрешить выполнение большинства выражений, в
случае вам нужно использовать значительное количество выражений, включенных в черный список, сохраняя при этом некоторые основные
ограничения. Чтобы отключить черный список для всех сайтов, обновите файл конфигурации сервера.
сервер-config.properties:
CRAFTER_HOME/bin/apache-tomcat/shared/classes/crafter/engine/extension/server-config.properties
# Указывает, следует ли включить черный список для всех сайтов (это не будет иметь никакого эффекта, если песочница Отключено) crafter. engine.groovy.sandbox.blacklist.enable=false
Отключение песочницы Groovy
Можно полностью отключить песочницу Groovy для всех сценариев. Чтобы отключить песочницу для всех сайтов, обновите файл конфигурации сервера server-config.properties:
CRAFTER_HOME/bin/apache-tomcat/shared/classes/crafter/engine/extension/server-config.properties
# Указывает, включена ли песочница для всех сайтов crafter.engine.groovy.sandbox.enable=false
Важные примечания
Существуют некоторые ограничения, которые следует учитывать при работе с песочницей Groovy.
Одно из ограничений заключается в том, что во время выполнения возникает исключение, если класс Groovy имеет свойство и метод получения этого свойства. Вот пример кода, который генерирует исключение во время выполнения:
класс Тест { личное строковое сообщение публичная строка getMessage () { вернуть это сообщение } } def t = новый тест() t. message = "это тест" вернуть t.getMessage()
Вот ошибка, выданная в журналах приведенным выше кодом:
Причина: java.lang.StackOverflowError в groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:693) в groovy.lang.GroovyClassLoader$InnerLoader.loadClass(GroovyClassLoader.java:450) в groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:812) в groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:800) at sun.reflect.GeneratedMethodAccessor340.invoke (неизвестный источник) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke(Method.java:498) в org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:98) в groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) в groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:1845) в groovy.lang.MetaClassImpl.getProperty(MetaClassImpl.java:3773) в Test. getProperty(test.get.groovy) в org.codehaus.groovy.runtime.InvokerHelper.getProperty(InvokerHelper.java:190) в org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getProperty(ScriptBytecodeAdapter.java:469) на org.kohsuke.groovy.sandbox.impl.Checker$7.call(Checker.java:392) в org.kohsuke.groovy.sandbox.GroovyInterceptor.onGetProperty(GroovyInterceptor.java:68) на org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:297) на org.kohsuke.groovy.sandbox.impl.Checker$7.call(Checker.java:390) на org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:394) на org.kohsuke.groovy.sandbox.impl.Checker$checkedGetProperty$1.callStatic(неизвестный источник) в Test.getMessage(test.get.groovy:5)
Обходные пути
Есть несколько вещей, которые вы можете сделать, чтобы обойти выбрасываемое исключение:
Не используйте методы получения и вместо этого обращайтесь к свойству напрямую
Используя приведенный выше пример, мы получим доступ к недвижимость напрямую:класс Тест { личное строковое сообщение } def t = новый тест() t. message = "это тест" вернуть т.сообщение
Используйте другое имя для свойства и метода получения
Опять же, используя приведенный выше пример, мы будем использовать имя, отличное от свойства для метода получения:класс Тест { частная строка публичная строка getMessage () { вернуть это сообщение } } def t = новый тест() t.theMessage = "это тест" вернуть t.getMessage()
Lua Scripts — документация Copter
В ArduPilot появилась поддержка сценариев Lua.
Сценарии обеспечивают безопасную «песочницу» для добавления новых вариантов поведения в автопилот без изменения основного кода полета.
Скрипты хранятся на SD-карте и запускаются параллельно с полетным кодом.
На этой странице описывается, как настроить скрипты на автопилоте, скриптовый API, скриптовые апплеты и несколько примеров, которые помогут начать работу.
Хотя для написания сценариев обычно требуется как минимум некоторое программирование и редактирование LUA, существуют некоторые доступные апплеты, которые не требуют пользовательского редактирования и готовы к использованию. См. ссылки ниже.
Примечание
Поддержка сценариев Lua была выпущена с Copter-4.0, Rover-4.0 и Plane-3.9.11.
Начало работы
Убедитесь, что ваш автопилот имеет не менее 2 МБ флэш-памяти и 70 КБ памяти. Мощные автопилоты, такие как CubePilot Cube Orange и HolyBro Durandal, безусловно, будут работать хорошо, но проверьте характеристики своего автопилота.
Установите для параметра SCR_ENABLE значение 1, чтобы включить сценарии (обновите или перезагрузите компьютер, чтобы увидеть все параметры
SCR_
).Загрузить скрипты (файлы с расширением .lua) в папку
APM/scripts
SD-карты автопилота.Если эта папка не существует, вы можете создать ее, установив для SCR_ENABLE значение 1 и перезагрузив компьютер. Эту папку также можно создать вручную на SD-карте.
При использовании Планировщика миссий это можно сделать с помощью MAVFTP.
При использовании симулятора папка
scripts
находится в каталоге, из которого был запущен симулятор. MAVFTP будет работать и в этом случае.
Примеры сценариев можно найти здесь для стабильных самолетов, коптеров и вездеходов. Последние сценарии разработки можно найти здесь.
Апплеты , представляющие собой сценарии, не требующие редактирования пользователем перед использованием, можно найти здесь. У каждого из них есть файл .md с тем же именем, в котором подробно описаны его возможности, использование и настройка. Например, существует сценарий, позволяющий пользователю изменять уровень выходной мощности видеопередатчика с поддержкой SmartAudio из канала передатчика и устанавливать его значение включения через параметр.
Примечание
Чтобы загрузить из расположений github, сначала щелкните имя сценария, затем выберите «raw» в правом верхнем углу, затем щелкните правой кнопкой мыши, чтобы «Сохранить страницу как» текстовый файл с расширением «.lua»
До 8 каналов RC могут быть назначены в качестве входов/элементов управления сценарием с использованием опций «RCX_OPTION« = “300-307”. Кроме того, доступны четыре выделенных параметра сценария: от SCR_USER1 до SCR_USER4, доступ к которым осуществляется тем же методом, что и к любому другому параметру, но они зарезервированы для использования сценарием.
Когда автопилот включен, он загружает и запускает все сценарии.
Сообщения и ошибки отправляются на наземную станцию, и при использовании Планировщика заданий их можно просмотреть на вкладке «Сообщения» экрана данных.
SCR_HEAP_SIZE можно настроить для увеличения или уменьшения объема памяти, доступной для сценариев. Размер по умолчанию 43 КБ достаточен для небольших скриптов и подходит для большинства автопилотов. Свободная память автопилота сильно зависит от того, какие функции и периферийные устройства включены. Если для этого параметра задано слишком низкое значение, сценарии могут не запускаться. Если установлено слишком высокое значение, другие функции автопилота, такие как слежение за рельефом или даже EKF, могут не инициализироваться. На автопилотах с микроконтроллером STM32F4 функции Smart RTL (ровер, коптер) и слежение за рельефом (самолет, коптер) должны быть почти всегда отключены. Эти функции обычно включены по умолчанию, установите SRTL_POINTS = 0, TERRAIN_ENABLE = 0).
Что могут делать сценарии
Одновременно можно запускать несколько сценариев
Мониторинг состояния автомобиля
Начало управления состоянием автомобиля
Lua — императивный язык программирования со сборщиком мусора.
Сценарии выполняются в системе с низким приоритетом, что гарантирует, что основной код запуска будет продолжать выполняться, даже если обработка сценария занимает много времени.
Чтобы разрешить запуск нескольких сценариев, каждому сценарию выделяется фиксированный отрезок времени (измеряемый в инструкциях виртуальной машины), в течение которого ожидается завершение его обработки.
Сценарию разрешено указывать новую функцию обратного вызова и время, в которое она должна быть вызвана, что позволяет выполнять ее непрерывно.
Хотя это служит для безопасного ограничения времени выполнения в наихудшем случае, выполнение сценариев по надежному расписанию не гарантируется.
Каждый сценарий запускается в своей собственной изолированной среде.
Это позволяет каждому сценарию манипулировать любыми глобальными переменными, которые он хочет, не вызывая проблем у других сценариев, и позволяет сценарию сохранять состояние между вызовами обратного вызова.
Однако побочным эффектом этого является то, что интенсивное использование памяти в сценарии может привести к тому, что другим сценариям не хватит памяти.
Пример сценария
Следующий сценарий используется для изменения выходного сигнала сервопривода в зависимости от расстояния дрона от исходного положения.
1function update() -- периодическая функция, которая будет вызываться 2 local current_pos = ahrs:get_position() -- получить текущую позицию транспортного средства 3 local home = ahrs:get_home() -- получить исходное положение транспортного средства 4 если current_pos и home then -- убедитесь, что доступны как местоположение автомобиля, так и местоположение дома 5 local Distance = current_pos:get_distance(home) -- рассчитать расстояние от дома в метрах 6 если расстояние > 1000 то -- если больше 1000 метров 7 расстояние = 1000; -- зажим дистанции до 1000 метров 8 конец 9servo. set_output_pwm(96, 1000 + расстояние) -- установите назначенную сервоприводу функцию 96 (scripting3) на пропорциональное значение 10 конец 11 12 return update, 1000 -- запросить "обновление" для повторного запуска через 1000 миллисекунд (1 секунду) с этого момента 13конец 14 15return update, 1000 -- запросить "обновление" в первый раз через 1000 миллисекунд (1 секунду) после загрузки скрипта
Этот сценарий начинается с определения функции обновления, которая будет вызываться периодически.
Эта функция извлекает текущую позицию и домашнюю позицию транспортных средств и сохраняет их в локальных переменных current_pos и home.
Обе эти переменные теперь либо содержат пользовательские данные о местоположении, либо равны нулю, если информация в данный момент не была доступна из автомобиля.
Затем переменные проверяются, чтобы убедиться, что они действительно были предоставлены, прежде чем вычислять расстояние между местоположениями.
После проверки, чтобы убедиться, что расстояние никогда не измеряется более чем на 1 километр, расстояние используется для установки положения сервопривода.
Последняя строка в функции используется для повторного запуска этой функции через 1000 миллисекунд от текущего времени.
Последняя строка скрипта также используется для планирования первого запуска функции через 1000 миллисекунд с момента ее загрузки.
Сбои и ошибки сценариев
Если сценариям не хватает памяти (или происходит паника по какой-либо причине), все текущие сценарии завершаются, а механизм сценариев перезапускается и перезагружает все сценарии с диска.
Это разрешено на всех этапах полета, даже когда машина вооружена и находится в полете.
Сценарии и параметры
- Доступ/добавление параметров с помощью сценариев
Документация по API
Описанная здесь документация по API представляет собой не полный список, а несколько примеров. Для полный список доступных в настоящее время методов , автоматически сгенерированный файл документа LUA представляет собой полный список. Его можно найти здесь, в нем перечислены все доступные привязки и их параметры.
Примечание
Если вы используете VScode для своего редактора, установив это расширение lua (на данный момент только версия 2.4.1), вы можете интегрировать эту информацию в виде предложений и автозаполнения в редакторе.
Полную информацию о том, как работает привязка, можно найти в описании генератора привязки.
См. Binding Description Method Syntax для получения дополнительной информации о том, как декодировать показанные там методы. ArduPilot использует Lua версии 5.3.5.
Местоположение
Местоположение — это объект пользовательских данных, который содержит местоположения, выраженные в виде широты, долготы и высоты. Высота может быть в нескольких различных кадрах, относительно дома, абсолютной высоты над средним уровнем моря или относительно местности. Чтобы создать новые пользовательские данные Location, вы можете вызвать Location(), чтобы выделить пустой объект местоположения, или вызвать метод, который возвращает его вам.
Объект пользовательских данных Location поддерживает следующие вызовы:
lat( [new_lat] )
— при вызове без аргументов возвращает текущую широту в градусах * 1e7 в виде целого числа. При вызове с одним аргументом значение широты будет присвоено.lng( [new_lng] )
— При вызове без аргументов возвращает текущую долготу в градусах * 1e7 в виде целого числа. При вызове с одним аргументом значение будет присвоено долготе.alt( [new_alt] )
— При вызове без аргументов возвращает текущую высоту в см как целое число. При вызове с одним аргументом значение будет присвоено высоте.relative_alt( [is_relative] )
— При вызове без аргументов возвращает true, если местоположение запланировано относительно дома. При вызове с логическим значением будет установлена относительная высота.terrain_alt( [is_terrain] )
— При вызове без аргументов возвращает true, если местоположение запланировано относительно местности. Если вызывается с логическим значением, это пометит, должна ли высота быть относительно местности.origin_alt( [is_origin] )
— При вызове без аргументов возвращает true, если местоположение запланировано на абсолютной высоте относительно среднего уровня моря. При вызове с логическим значением это установит высоту относительно среднего уровня моря.loiter_xtrack( [should_xtrack] )
— Если местоположение используется для местоположения праздношатания, этот флаг указывает, должен ли дрон отслеживать от центральной точки или от места выхода праздношатающегося.get_distance(other_Location)
— Учитывая местоположение, вычисляет расстояние по горизонтали между двумя местоположениями в метрах.offset( offset_north , offset_east )
— смещает это местоположение на указанное количество метров.get_vector_from_origin_NEU()
— Возвращает nil или Vector3f, который содержит смещение от начала EKF до этого местоположения. Это вернет nil, если источник EKF не был доступен во время вызова.get_bearing(other_Location)
— Учитывая местоположение, вычисляет относительный азимут к местоположению в радианахget_distance_NED(other_Location)
— Возвращает nil или Vector3f, который содержит 3D-вектор в метрах к другому местоположению.get_distance_NE(other_Location)
— Возвращает nil или Vector2f, который содержит 2D-вектор в метрах к другому местоположению.
Vector2f
Vector2f — это объект пользовательских данных, содержащий двумерный вектор. Компоненты хранятся в виде чисел с плавающей запятой. Чтобы создать новый Vector2f, вы можете вызвать Vector2f(), чтобы выделить новый, или вызвать метод, который возвращает его вам.
Объект Vector2f поддерживает следующие вызовы:
x( [new_x] )
— При вызове без аргументов вернуть текущий установленный компонент X в виде числа с плавающей запятой. При вызове с одним аргументом значение будет присвоено компоненту X.y( [new_y] )
— При вызове без аргументов вернуть текущий установленный компонент Y в виде числа с плавающей запятой. При вызове с одним аргументом значение будет присвоено компоненту Y.length()
— Возвращает длину вектора в виде числа с плавающей запятой.normalize()
— нормализует вектор, чтобы он был единичным вектором.is_nan()
— Возвращает истину, если вектор содержит элементы NaN.is_inf()
— Возвращает значение true, если вектор содержит элементы бесконечности.is_zero()
— Возвращает true, если все векторные поля равны 0.
В Vector2f поддерживаются следующие операторы:
Vector3f
Vector3f — это объект пользовательских данных, содержащий трехмерный вектор. Компоненты хранятся в виде чисел с плавающей запятой. Чтобы создать новый Vector3f, вы можете вызвать Vector3f(), чтобы выделить новый, или вызвать метод, который возвращает его вам.
Объект Vector3f поддерживает следующие вызовы:
x( [new_x] )
— при вызове без аргументов возвращает текущий установленный компонент X в виде числа с плавающей запятой. При вызове с одним аргументом значение будет присвоено компоненту X.y( [new_y] )
— При вызове без аргументов вернуть текущий установленный компонент Y в виде числа с плавающей запятой. При вызове с одним аргументом значение будет присвоено компоненту Y.z( [new_z] )
— При вызове без аргументов вернуть текущий установленный компонент Z в виде числа с плавающей запятой. При вызове с одним аргументом значение будет присвоено компоненту Z.length()
— Возвращает длину вектора в виде числа с плавающей запятой.normalize()
— нормализует вектор, чтобы он был единичным вектором.is_nan()
— Возвращает истину, если вектор содержит элементы NaN.is_inf()
— Возвращает значение true, если вектор содержит элементы бесконечности.is_zero()
— Возвращает true, если все векторные поля равны 0.
В Vector3f поддерживаются следующие операторы:
AHRS (ahrs:)
Библиотека ahrs представляет собой справочную систему углового положения, вычисляемую автопилотом. Он обеспечивает оценки положения и положения транспортных средств.
get_roll()
— Возвращает текущий угол крена транспортного средства в радианах.get_pitch()
— Возвращает текущий угол тангажа транспортного средства в радианах.get_yaw()
— Возвращает текущий угол рыскания автомобиля в радианах.get_position()
— Возвращает nil или пользовательские данные местоположения, которые содержат текущую позицию транспортных средств. Примечание. Это вернет местоположение только в том случае, если система сочтет текущую оценку разумной.get_home()
— Возвращает местоположение, содержащее текущую домашнюю путевую точку транспортных средств.get_gyro()
— Возвращает Vector3f, содержащий текущие сглаженные и отфильтрованные скорости гироскопа (в радианах/секунду)get_hagl()
— Возвращает ноль или последнюю оценку высоты над уровнем земли в метрахwind_estimate()
— Возвращает Vector3f, содержащий текущую оценку ветра для транспортного средства.Groundspeed_vector()
— Возвращает Vector2f, содержащий скорость транспортных средств в метрах в секунду в северной и восточной компонентах.get_velocity_NED()
— Возвращает nil или Vector3f, содержащий текущую скорость транспортного средства NED в метрах/секунду в северной, восточной и нижней компонентах.get_velocity_NE()
— Возвращает nil или Vector2f, содержащий текущую скорость северо-восточного транспортного средства в метрах/секундах в северной и восточной компонентах.home_is_set()
— Возвращает истину, если исходная позиция была установлена.prearm_healthy()
— Возвращает истину, если текущие предварительные проверки проходят.airspeed_estimate()
— Возвращает текущую оценку воздушной скорости в метрах в секунду или ноль.
Постановка на охрану (постановка на охрану:)
Библиотека постановки на охрану предоставляет доступ к состоянию и командам постановки на охрану.
disarm()
— Снимает автомобиль с охраны во всех случаях. Возвращает false, только если уже снят с охраны.is_armed()
-Возвращает истину, если транспортное средство в данный момент поставлено на охрану.arm()
— Попытки поставить машину на охрану. Возвращает true в случае успеха.
Аккумулятор (аккумулятор:)
Библиотека аккумуляторов обеспечивает доступ к информации о подключенных в данный момент аккумуляторах автомобиля.
num_instances()
— Возвращает количество доступных на данный момент экземпляров батареи.Health( instance )
— возвращает true, если запрошенный экземпляр батареи исправен. Исправным считается ArduPilot, который на данный момент способен следить за батареей.voltage( instance )
— Возвращает напряжение выбранного экземпляра батареи.voltage_resting( instance )
— Возвращает расчетное напряжение батареи, если она не была под нагрузкой.current_amps( экземпляр )
— Возвращает ток (в амперах), который в настоящее время потребляет батарея, или ноль, если мониторинг тока недоступен.Consumer_mah( экземпляр )
— Возвращает емкость (в миллиампер-часах), использованную от батареи, или ноль, если мониторинг тока недоступен.serve_wh( instance )
— Возвращает использованные ватт-часы от батареи или ноль, если мониторинг энергии недоступен.capacity_remaining_pct( экземпляр )
— Возвращает процент оставшегося заряда батареи (от 0 до 100)pack_capacity_mah(экземпляр)
— Возвращает полную емкость аккумулятора (в миллиампер-часах).has_failsafed()
— Возвращает значение true, если какая-либо из контролируемых батарей сработала в режиме отказоустойчивости.overpower_detected( экземпляр )
— возвращает true, если от контролируемой батареи потребляется слишком много энергии.get_temperature( экземпляр )
— Возвращает температуру батареи в градусах Цельсия, если батарея поддерживает мониторинг температуры.get_cycle_count(экземпляр)
— Возвращает количество циклов батареи или ноль, если недоступно.
GPS (GPS:)
Библиотека GPS обеспечивает доступ к информации о GPS на транспортном средстве.
num_sensors()
— Возвращает количество подключенных устройств GPS. Если смешивание GPS включено, он будет отображаться как третий датчик, и о нем будет сообщено здесь.primary_sensor()
— Возвращает, какой GPS в настоящее время используется в качестве основного устройства GPS.статус(экземпляр)
— Возвращает статус фиксации GPS. Сравните это с одним из типов фиксации GPS (GPS.NO_GPS, GPS.GPS_OK_FIX_2D, GPS.GPS_OK_FIX_3D GPS.GPS_OK_FIX_3D_DGPS GPS.GPS_OK_FIX_3D_RTK_FLOAT GPS. GPS_OK_FIX_3D_RTK_FIXEDместоположение (экземпляр)
— Возвращает пользовательские данные местоположения для последней позиции GPS. Вы должны проверить статус, чтобы узнать, актуально ли местоположение, если оно NO_GPS или NO_FIX, то оно будет возвращать старые данные.speed_accuracy( экземпляр )
— возвращает ноль или точность скорости GPS в метрах в секунду, если информация доступна для экземпляра GPS.horizontal_accuracy(экземпляр)
— возвращает ноль или горизонтальную точность GPS в метрах, если информация доступна для экземпляра GPS.vertical_accuracy( instance )
— Возвращает ноль или вертикальную точность GPS в метрах, если информация доступна для экземпляра GPS.velocity( instance )
— Возвращает Vector3f, который содержит скорость, наблюдаемую GPS. Вы должны проверить статус, чтобы узнать, актуальна ли скорость.Ground_speed(экземпляр)
— Возвращает скорость транспортного средства относительно земли в метрах в секунду. Вы должны проверить статус, чтобы узнать, актуальна ли скорость хода.Ground_course(экземпляр)
— Возвращает курс транспортного средства в градусах. Вы должны проверить статус, чтобы узнать, актуален ли наземный курс.num_sats( instance )
— Возвращает количество спутников, которые GPS отслеживает в данный момент.time_week(экземпляр)
— Возвращает номер недели GPS.time_week_ms(экземпляр)
— Возвращает количество миллисекунд в текущей неделе.get_hdop( экземпляр )
— Возвращает горизонтальное снижение точности экземпляра GPS.get_vdop( экземпляр )
— Возвращает вертикальное снижение точности экземпляра GPS.last_fix_time_ms(экземпляр)
— Возвращает время последнего исправления в системных миллисекундах.have_vertical_velocity( instance )
— возвращает true, если экземпляр GPS может сообщать о вертикальной скорости.get_antenna_offset( экземпляр )
— Возвращает Vector3f, который содержит смещения GPS в метрах в кадре тела.first_unconfigured_gps()
— Возвращает nil или номер экземпляра первого не полностью настроенного GPS. Если все GPS были настроены, это возвращает 255, если все GPS были настроены.
GCS (gcs:)
Уровень серьезности | Тип |
0 | Аварийный |
1 | Оповещение |
2 | Критический |
3 | Ошибка |
4 | Предупреждение |
5 | Уведомление |
6 | Информация |
7 | Отладка |
set_message_interval(serial_channel, message_type, rate)
— устанавливает скорость обновления message_type на SERIAL(serial_channel). Например, gcs:set_message_interval(0, 30, 500000) устанавливает скорость SERIAL0 для потока сообщений ATTITUDE (30) на 2,0 Гц (500 000 микросекунд) 9.0010
Serial LED (serialLED:)
Эта библиотека позволяет управлять цепочками RGB-светодиодов WS8212B через выход, зарезервированный для сценариев и выбранный SERVOx_FUNCTION = 94–109 (Script Out 1–16)
set_numumbers, number_of_LEDs )
— Устанавливает number_of_LEDs в строке на выходе сервопривода. output_number — это номер выхода сервопривода 1-16, к которому присоединена строка с помощью строки, имеющей. set_RGB( output_number , LED_number , r , g , b )
– Установить данные для LED_number (1–32) на присоединенной строке выходного_номера сервопривода (1–16) к значениям r,g,b (0– 255)send()
— Отправляет данные в строки светодиодов
Транспортное средство (транспортное средство:)
set_mode(mode_number)
— Попытки изменить режим транспортного средства (в данном примере самолета) на mode_number. Возвращает true в случае успеха, false, если изменение режима не удалось.get_mode()
— Возвращает текущий режим автомобиля по номеру режима.
Номера режимов для каждого типа транспортных средств можно найти здесь
get_likely_flying()
— Возвращает true, если автопилот считает, что он летит. Точность не гарантируется.get_flying_time_ms()
— Возвращает время в миллисекундах с тех пор, как автопилот считает, что он начал полет, или ноль, если в данный момент он не летает.start_takeoff(altitude)
— Начинает автоматический взлет на заданную высоту над домом в метрах. Возвращает false, если недоступно.set_target_location(Location)
— Устанавливает целевое местоположение с помощью объекта Location. Возвращает false в случае неудачи.get_target_location()
— Возвращает объект местоположения текущего целевого местоположения. Возвращает false, если недоступно.set_target_velocity_NED()
— Устанавливает целевую скорость с помощью объекта Vector3f. Возвращает false, если недоступно.
Terrain (terrain:)
Библиотека рельефа обеспечивает доступ к проверке высот по базе данных рельефа.
enable()
— возвращает true, если рельеф включен.status()
— Возвращает текущий статус дальномера. Сравните это с одним из статусов ландшафта (terrain.TerrainStatusDisabled, Terrain.TerrainStatusUnhealthy, Terrain.TerrainStatusOK).height_amsl( Location )
— Возвращает высоту (в метрах) над средним уровнем моря в предоставленных пользовательских данных Location или возвращает ноль, если это недоступно.height_terrain_difference_home( Местоположение )
— Возвращает разницу в высоте (в метрах) между указанным местоположением и домом или возвращает ноль, если это недоступно.height_above_terrain()
— Возвращает высоту (в метрах), на которой транспортное средство в настоящее время находится над землей, или возвращает ноль, если это недоступно.
Реле (реле:)
Библиотека реле обеспечивает доступ к управлению релейными выходами.
on(relay_num)
— Включает запрошенное реле.off(relay_num)
— Выключает запрошенное реле.enable(relay_num)
— возвращает true, если запрошенное реле включено.toggle(relay_num)
— Включает или выключает запрошенное реле.
Каналы сервопривода (SRV_Channels:)
find_channel(output_function)
— Возвращает первый номер выхода сервопривода -1 для выхода, назначенного output_function (см. параметрыSERVOx_FUNCTION
). False, если ничего не назначено.get_output_pwm(output_function)
— Возвращает значение ШИМ первого выхода сервопривода, назначенное выходу output_function (см. параметрыSERVOx_FUNCTION
). False, если ничего не назначено.set_output_pwm_chan_timeout(channel, pwm, timeout)
— Устанавливает канал сервопривода на указанный ШИМ на время в мс. Это отменяет любые команды автопилота, пока не истечет время ожидания.
Каналы RC (rc:)
Последовательный/UART (serial:)
find_serial(instance)
— Возвращает экземпляр UART, который разрешает соединения из сценариев (сSERIALx_PROTOCOL = 3 9003). Для экземпляра
= 0
возвращает первый такой UART, второй дляinstance = 1
и так далее. Если такой экземпляр не найден, возвращаетnil
.UART:begin(baud)
- Начать последовательное соединение с заданной скоростью передачи.UART:read()
- Возвращает последовательность байтов из экземпляра UART.UART:write(number)
— Записывает последовательность байтов в экземпляр UART.UART: доступен ()
- Возвращает целое число доступных на данный момент байтов.UART:set_flow_control(flow_control)
— Устанавливает управление потоком для экземпляра UART.
Барометр (baro:)
get_pressure()
— Возвращает давление в Паскалях.get_temperature()
- Возвращает температуру в градусах Цельсия.get_external_temperature()
- Возвращает внешнюю температуру в градусах Цельсия.
Телеметрия ESC (esc_telem:)
Параметры (param:)
get(parameter_name)
— возвращает значение параметра, если оно доступно, или nil, если оно не найдено.set(имя_параметра)
— Устанавливает параметр по имени, если он доступен. Возвращает true, если параметр найден.set_and_save(имя_параметра)
Устанавливает и сохраняет параметр по имени, если оно доступно. Возвращает true, если параметр найден.
Об/мин (RPM:)
Кнопка (кнопка:)
Выход сервопривода
Этот метод является самостоятельным и вызывается напрямую, как показано ниже.
Примеры
См. папку с примерами кода
Как добавить новые привязки
Чтобы предоставить сценариям Lua доступ к дополнительным функциям ArduPilot, API можно расширить, создав новые привязки. Процесс выглядит следующим образом:
Найдите метод или функцию, которую вы хотите открыть для Lua. Например, если вы хотите предоставить дополнительную функцию AHRS, вы должны сначала найти метод в библиотеках/AP_AHRS/AP_AHRS.h. Это может быть уже существующий метод (функция) или вновь добавленный в код метод (функция).
Отредактируйте библиотеки/AP_Scripting/generator/description/bindings.desc и добавьте новую строку в соответствующий раздел для метода или добавьте новый раздел, если необходимо добавить новый класс, следуя примерам других разделов.