Программирование приложений на android
Создана: 31 Октября 2011 Пон 13:25:33.
Раздел: "Компьютерный раздел"
Сообщений в теме: 223, просмотров: 35173
-
извините что не в тему, но не нашел то чего надо.
достался мне samsung с android 2.1, теперь вот пытаюсь разобраться и вас прошу подсказать. на сколько мне известно это последняя официальная прошивка под samsung i5700? но есть более новые, так вот вопрос какая из них устойчивая и без косяков? и кто её может поставить потому что самому времени нет разбираться.
И еще вопрос: Все приложения устанавливаются только в память телефона, и она быстро забивается и не дает больше устанавливать. как то это можно изменить? чтоб устанавливалось на карту памяти. но при этом работало все. -
Еще одна идея относительно того как обеспечить условия для правильной работы команды AT*PCMD - использовать для задания идентификатора команды AT*CONFIG команду AT*CONFIG_IDS
Summary : Identifiers for the next AT*CONFIG command
Corresponding API function : ardrone_at_set_toy_configuration
Syntax : AT*CONFIG_IDS=%d,%s,%s,%s<CR>
Argument 1 : the sequence number
Argument 2 : Current session id
Argument 3 : Current user id
Argument 4 : Current application id
Description :
While in multiconfiguration, you must send this command before every AT*CONFIG. The config will only be applied if the ids must match the current ids on the AR.Drone.
ARDroneTool does this automatically. -
Обсуждение алгоритмов drone
Вернемся к алгоритмам которые помогают drone летать.
1. ультразвуковой датчик и барометр. Тут все понятно. Точно так же как корабль измеряет расстояние до дна. Скорость звука в воздухе известна. Есть излучатель и приемник. Создаем направленный импульс звуковой, затем ловим отраженный импульс и засекаем время между двумя событиями. Умножаем скорость на время получаем расстояние и длим пополам
С барометром тоже понятно, чем выше аппарат тем меньше давление. Есть наверное формула для расчета высоты от давления атмосферного.
2. Еще есть акселерометры и гироскопы трехмерные. С ними вроде бы все понятно, измеряют ускорения линейные и угловые.
3. Камеры видео. Их две. Фронтальная и вертикальная. Вертикальная камера измеряет скорость движения drone. Алгоритм по моему такой. Анализируется изображение, на нем выделяются точки неподвижные. Точка это типа яркое пятно с четкими границами с малым угловым размером. Вместе с расстоянием до Земли изменение положения точки на снимке дает скорость движения. -
Конфигурирование (настройка) drone
1. У drone компьютер с linux на борту. Для хранения настроек используется файл config.ini в папке data
Код: # cat config.ini
[general]
num_version_config = 1
num_version_mb = 33
num_version_soft = 2.2.9
drone_serial = PS721000AE2F046163
soft_build_date = 2012-09-14 17:42
motor1_soft = 1.43
motor1_hard = 6.0
motor1_supplier = 1.1
motor2_soft = 1.43
motor2_hard = 6.0
motor2_supplier = 1.1
motor3_soft = 1.43
motor3_hard = 6.0
motor3_supplier = 1.1
motor4_soft = 1.43
motor4_hard = 6.0
motor4_supplier = 1.1
ardrone_name = My ARDrone
flying_time = 59342
navdata_demo = TRUE
com_watchdog = 2
video_enable = TRUE
vision_enable = TRUE
vbat_min = 9000
[control]
accs_offset = { -3.9752036e+03 4.0814775e+03 4.2152520e+03 }
accs_gains = { 1.9780525e+00 5.4767070e-04 -3.0504869e-02 -5.7449499e-03 -1.9599000e+00 -2.9091097e-02 -4.8198797e-02 -8.0456100e-03 -1.9978486e+00 }
gyros_offset = { 3.1888750e+01 -6.2437501e+00 -6.2125001e+00 }
gyros_gains = { 1.0669013e-03 -1.0693741e-03 -1.0746175e-03 }
gyros110_offset = { 1.6625000e+03 1.6625000e+03 }
gyros110_gains = { 1.5271631e-03 -1.5271631e-03 }
magneto_offset = { 1.8604543e+02 -1.1058002e+02 -7.9044165e+02 }
magneto_radius = 1.8013339e+02
gyro_offset_thr_x = 4.0000000e+00
gyro_offset_thr_y = 4.0000000e+00
gyro_offset_thr_z = 5.0000000e-01
pwm_ref_gyros = 500
osctun_value = 63
osctun_test = TRUE
altitude_max = 2000
altitude_min = 50
outdoor = FALSE
flight_without_shell = FALSE
autonomous_flight = FALSE
control_level = 0
euler_angle_max = 5.0000001e-02
control_iphone_tilt = 3.4906584e-01
control_vz_max = 6.0000000e+02
control_yaw = 2.0000000e+00
manual_trim = FALSE
indoor_euler_angle_max = 5.0000001e-02
indoor_control_vz_max = 6.0000000e+02
indoor_control_yaw = 2.0000000e+00
outdoor_euler_angle_max = 3.4906584e-01
outdoor_control_vz_max = 1.0000000e+03
outdoor_control_yaw = 3.4906585e+00
travelling_mode = 0,10,1500,0,1000
[network]
ssid_single_player = ardrone2_046163
ssid_multi_player = ardrone2_046163
wifi_mode = 0
owner_mac = 00:00:00:00:00:00
[pic]
ultrasound_freq = 8
ultrasound_watchdog = 3
pic_version = 184877090
[video]
camif_fps = 30
camif_buffers = 2
num_trackers = 12
video_on_usb = FALSE
video_file_index = 2
codec_fps = 30
[leds]
[detect]
enemy_colors = 2
enemy_without_shell = 0
groundstripe_colors = 16
detect_type = 3
detections_select_h = 0
detections_select_v_hsync = 0
detections_select_v = 0
[syslog]
output = 7
max_size = 102400
nb_files = 5
[custom]
application_desc = Default application configuration
profile_desc = Default profile configuration
session_desc = Default session configuration
[userbox]
[gps]
latitude = 5.0000000000000000e+02
longitude = 5.0000000000000000e+02
altitude = 0.0000000000000000e+00
Это config.ini моего drone.
Структура в общем понятна. Раздел, ключ, значение. Можно таким образом сформулировать синтаксис для таких команд. Допустим я хочу задать значение для минимальной высоты полета - altitude_min
Ищем этот ключ в файле, определяем раздел в котором он находится и создаем инструкцию
AT*CONFIG= seq,"control:altitude_min","500"
Высота задается в миллиметрах, то есть минимальная высота полета 50 см -
Разобрался как можно понизить прошивку drone с помощью программы DroneControl HD 2.1
1. Устанавливаем соединение с internet
2. Входим в программу
3. Выбираем Tools Firmware
4. Выбираем Firmwate Manager
5. Выбираем Downloader
6. Затем выбираем нужную прошивку для AR.Drone 2
Затем подключаемся к сети AR.Drone и устанавливаем нужную прошивку -
Вопросы от Arman
Вот я установил eclipse дальше что надо делать? чтобы программировать дрона?
Ответ
Для создания консольного приложения:
File -> New -> Java Project
Появляется диалог. Пишем имя проекта , например, arman
Создается папка arman, в ней есть пустая папка src, в ней хранятся тексты программ
Выбираем ее мышкой и вызываем контекстное меню, правой кнопкой мыши, в меню выбираем New-> Class, вводим имя класса и так далее.
Если нет опыта программирования в java, спрашивайте -
О механизме стабилизации drone.
про снег:
-свежий снег - это проблема
дрон не стабилизируется по горизонтали
кстати солнышко - не мешает а помогает)
также помогают любые контрастные детали на снегу, напр трава, даже следы)
[внешняя ссылка] -
Диалоги с Arman
----------------
Ага. Папка arman уже есть как я понял. В ней папка src и ссылка на библиотечный файл - JRE System Library. В этой библиотеке находятся описания базовых классов Java.
Теперь собственно создаем программу. Структура такая - сверху используемые классы, потом название класса и потом метод main, которому передается управление автоматически при создании экземпляра класса.
Чтобы создать шаблон для создаваемого класса.
1. Выбираем мышью папку src и щелкаем правой кнопкой мыши. Появляется контекстное меню
2. В контекстном меню выбираем команду New -> Class
3. В диалоге определяем имя класса и ставим галочку напротив опции public static void main
4. Нажимаем Ok. Создается файл в папке src с заданным именем.
5. Открываем его и в методе main пишем программу на языке Java -
Когда мне надоедает разбираться с проблемами в программировании drone я читаю тему про multiwii
[внешняя ссылка]
Вот это настоящая мутота и сильно вдохновляюсь -
Сброс к заводским настройкам
[внешняя ссылка]
SSID вертолета (точки доступа) меняется
Теперь понял, что происходит в результате нажатия на кнопку RESET расположенную под аккумулятором вертолета.
Просто удаляется файл config.ini в папке /data -
Проблема управляемости drone
Направление вертолет берет у датчиков - гироскопа, магнитометра и акселерометра
Нуль у датчиков плывет в определенных пределах, то есть если вчера это был нуль, то сегодня это может быть плюс/минус 10 градусов. Кроме того что нуль плывет этот нуль еще и смещен относительно настоящего нуля -
Пусть нам надо передать видео по сети (с вертолета на ipad). Чтобы видео не "тормозило" надо "сжать" его
Пусть надо передать квадрат пикселов 2*2. Каждый пиксел имеет три цветовые координаты R,G,B. Информацию необходимую для передачи цвета 4 пикселов можно представить в виде трех массивов
R1, R2, R3, R4
G1...G4
B1...B4
Пусть каждое значение имеет размер один байт, т.е.для передачи информации о цвете пикселов нужно 12 байтов
Более экономно передавать цветовую информацию с помощью цветового пространства YCrCb
Структура дискретизации описывается соотношением x:a:b
где x - частота дискретизации яркостного канала, a - число выборок каналов Cr, Cb в вертикальном направлении в первой строке, b - то же самое во второй строке
Если используется схема 4:2:0 , то для кодирования пикселов нужно 6 байт
Экономия в 2 раза -
С помощью цветового пространства можно уменьшить количество байтов необходимых для кодирования цвета пиксела.
Кроме того если формально подойти к передаваемой информации то можно заметить, что некоторые символы в сообщении повторяются. Число повторяющихся символов может быть значительным
Например
WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWW
WWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW
Если мы применим простое кодирование длин серий к этой строке, то получим следующее:
12W1B12W3B24W1B14W
[внешняя ссылка]
Отлично. Надо только найти схему преобразования кодов пикселов к форме где много повторяющихся символов. И такая форма есть, так называемое дискретно-косинусное преобразование
[внешняя ссылка]
[внешняя ссылка]
В результате получаем матрицу коэффициентов в которой после квантования нули скапливаются в правом нижнем углу
Теперь надо найти способ записи элементов матрицы в строку. Для этого используется Zigzag-упорядочение.
Довольно существенное сокращение длины блока