Создайте сообщение команды MAVLink
возвращает пустой cmdMsg
= createcmd(dialect
,cmdSetting
,cmdType
)COMMAND_INT
или COMMAND_LONG
передайте структуру на основе установки команды и типа. Определения команды содержатся в mavlinkdialect
объект, dialect
.
В этом примере показано, как проанализировать XML-файл MAVLink и создать сообщения и команды из определений.
ПРИМЕЧАНИЕ: Этот пример требует, чтобы вы установили Библиотеку UAV для Robotics System Toolbox®. Вызовите roboticsAddons
открыть Проводник Дополнений и установить библиотеку.
Проанализируйте и сохраните диалект MAVLink XML. Задайте путь XML. "common.xml"
по умолчанию диалект обеспечивается. Этот XML-файл содержит все сообщение и перечислимые определения.
dialect = mavlinkdialect("common.xml");
Создайте команду MAVLink из MAV_CMD
перечисление, которое является перечислением команд MAVLink, чтобы отправить к UAV. Задайте установку как "int"
или "long"
, и тип как целое число или строка.
cmdMsg = createcmd(dialect,"long",22)
cmdMsg = struct with fields:
MsgID: 76
Payload: [1x1 struct]
Проверьте название команды с помощью num2enum
. Команда 22 является командой взлета для UAV. Можно преобразовать назад в ID с помощью enum2num
. Ваш диалект может содержать много различных перечислений с различными именами и идентификаторами.
cmdName = num2enum(dialect,"MAV_CMD",22)
cmdName = "MAV_CMD_NAV_TAKEOFF"
cmdID = enum2num(dialect,"MAV_CMD",cmdName)
cmdID = 22
Используйте enuminfo
просмотреть таблицу MAV_CMD
перечислимые записи.
info = enuminfo(dialect,"MAV_CMD");
info.Entries{:}
ans=133×3 table
Name Value Description
_____________________________________ _____ _______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
"MAV_CMD_NAV_WAYPOINT" 16 "Navigate to waypoint."
"MAV_CMD_NAV_LOITER_UNLIM" 17 "Loiter around this waypoint an unlimited amount of time"
"MAV_CMD_NAV_LOITER_TURNS" 18 "Loiter around this waypoint for X turns"
"MAV_CMD_NAV_LOITER_TIME" 19 "Loiter around this waypoint for X seconds"
"MAV_CMD_NAV_RETURN_TO_LAUNCH" 20 "Return to launch location"
"MAV_CMD_NAV_LAND" 21 "Land at location"
"MAV_CMD_NAV_TAKEOFF" 22 "Takeoff from ground / hand"
"MAV_CMD_NAV_LAND_LOCAL" 23 "Land at local position (local frame only)"
"MAV_CMD_NAV_TAKEOFF_LOCAL" 24 "Takeoff from local position (local frame only)"
"MAV_CMD_NAV_FOLLOW" 25 "Vehicle following, i.e. this waypoint represents the position of a moving vehicle"
"MAV_CMD_NAV_CONTINUE_AND_CHANGE_ALT" 30 "Continue on the current course and climb/descend to specified altitude. When the altitude is reached continue to the next command (i.e., don't proceed to the next command until the desired altitude is reached."
"MAV_CMD_NAV_LOITER_TO_ALT" 31 "Begin loiter at the specified Latitude and Longitude. If Lat=Lon=0, then loiter at the current position. Don't consider the navigation command complete (don't leave loiter) until the altitude has been reached. Additionally, if the Heading Required parameter is non-zero the aircraft will not leave the loiter until heading toward the next waypoint. "
"MAV_CMD_DO_FOLLOW" 32 "Being following a target"
"MAV_CMD_DO_FOLLOW_REPOSITION" 33 "Reposition the MAV after a follow target command has been sent"
"MAV_CMD_DO_ORBIT" 34 "Start orbiting on the circumference of a circle defined by the parameters. Setting any value NaN results in using defaults."
"MAV_CMD_NAV_ROI" 80 "Sets the region of interest (ROI) for a sensor set or the vehicle itself. This can then be used by the vehicles control system to control the vehicle attitude and the attitude of various sensors such as cameras."
⋮
Запросите диалект для определенного идентификатора сообщения. Создайте пустое сообщение MAVLink с помощью идентификатора сообщения.
info = msginfo(dialect,"HEARTBEAT")
info=1×4 table
MessageID MessageName Description Fields
_________ ___________ ___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________ ___________
0 "HEARTBEAT" "The heartbeat message shows that a system is present and responding. The type of the MAV and Autopilot hardware allow the receiving system to treat further messages from this system appropriate (e.g. by laying out the user interface based on the autopilot)." {6x6 table}
msg = createmsg(dialect,info.MessageID);
dialect
— Диалект MAVLinkmavlinkdialect
объектДиалект MAVLink в виде mavlinkdialect
объект. Диалект задает структуру сообщения для протокола MAVLink.
cmdSetting
— Установка Command"int"
| "long"
Установка Command в виде любого "int"
или "long"
для любого COMMAND_INT
или COMMAND_LONG
команда.
cmdType
— Тип командыТип команды или в виде положительного целого числа или в виде строки. Если задано как целое число, определение команды с соответствующим ID от MAV_CMD
перечисление в dialect
возвращен. Если задано как строка, команда с соответствующим именем возвращена.
Получить типы команды для MAV_CMD
перечисление, использовать enuminfo
:
enumTable = enuminfo(dialect,"MAV_CMD") enumTable.Entries{1}
cmdMsg
— Сообщение команды MAVLink Сообщение команды MAVLink, возвращенное как структура с полями:
MsgID
: Положительное целое число для идентификатора сообщения.
Payload
: Структура, содержащая поля для определенного определения сообщения.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.