четверг, 20 сентября 2012 г.

Как узнать заряд батареи в программе?

Во второй половине лета в одной из веток форума MindBoards обсуждали зависимость предсказуемости работы программ NXT робота от заряда батареи. Когда начали обсуждать программные средства, с помощью которых можно было бы узнавать состояние источника питания, один из участников сделал полезное напоминание, что для NXT-G тоже есть уже созданный блок Battery Level, созданный NXT экспертом Guy Ziv.

В общем случае, блок позволяет получить заряд источника питания в NXT блоке в милливольтах, вне зависимости от того, используются ли стандартные NXT аккумуляторы или обычные пальчиковые батарейки.
Помимо этого можно также выполнить сразу сравнение с каким-то заданным зарядом, указанным также в милливольтах и даже узнать перезаряжаемая ли батарея установлена в текущий момент.
Какого же может быть применение данного блока?

Например, робот может в ходе своей работы проверять заряд и если он меньше определенного, то останавливать свою работу.

Другой же способ предлагается для уже "продвинутых" робототехников. Как насчет того, чтобы динамически регулировать алгоритмы исполняющиеся на роботе в зависимости от текущего состояния батареи? Если при маленьком заряде, показания датчиков начинали быть не предсказуемыми, давайте перепроверять их (но только при маленьком заряде). Или пусть скорость движения робота автоматически компенсируется, если источник питания не может дать достаточно энергии, чтобы продолжать корректно двигать узлы робота с прежней силой.

В последнем случае, это можно реализовать с помощью простейшего пропорционального регулятора: чем меньше заряд, тем больше должна быть подаваемая энергия и наоборот. Для этого надо выбрать какое-то среднее показание заряда и соответствующую ему ожидаемую скорость, а также диапазоны в которых программа предполагает могут изменяться и те и другие.

В программе ниже минимальный допустимый заряд 7.5 вольта, а максимальный 8.7 вольта - середина 8.1 вольта, которому соответствует мощность 80%. В итоге, когда у робота свежие батареи - мотор будет двигаться с мощностью в районе 60%, а с разряженными батареями программа будет направлять на мотор все 100% доступной энергии.


Конечно же, это просто демонстрационный пример. В реальной жизни может оказаться, что зависимость мощности моторов от заряда может оказаться нелинейная. При этом не забывайте, в ходе работы программы заряд может изменяться (например при длительном движении), поэтому замер проводить нужно не один раз в начале работы алгоритма, а несколько - в ключевых точках.

Скачать блок Battery Level можно на Google Drive.

P.S. Для других языков и сред программирования есть свои средства получения информации о заряде источника питания. Например, в Not Exactly C есть функция BatteryLevel() , а в RobotC переменная nImmediateBatteryLevel.

Комментариев нет:

Отправить комментарий

Related Posts Plugin for WordPress, Blogger...