admin

ИЗУЧАЕМ СЕРВЫ – РУКА

Манипулятор кормит рыбок

РЕДКАЯ ТЕРМИНАЛЬНАЯ ПРОГРАММА: Htem.zip (с кнопкой RTS) !!!

Внимание. На старте контроллер пребывает в готовности загрузить программу (в режиме загрузчика). Для перевода в режим управления (см. ниже) нужно выставить сигнал RTS. Далеко не все COM-порт программы имеют галочку это делать. При переключении контроллер высылает [RP6BOOT][READY]. В описании об этом ни-гугу, народ помучается. Оболочка RACS умеет посылать такой сигнал.

АЛЮМИНИЕВЫЙ КАРКАС [2] | СЕРВЫ

Ручное управление довольно быстро надоедает. Самое разумное употребление манипулятора – написание сервисных переборных программ нижнего уровня для воспроизведения последовательностей действий (RACS позволяет записать матрицу положений суставов). База таких матриц задает технологические цепочки – покормить рыбок, переложить предмет и т.п. Через интернет несложно включать желаемые цепочки. На эту тему написаны пара-тройка студенческих дипломов, с использованием вебкамеры для контроля.

Возможно и реальное применение – размещение на крышке аквариума с заданием кормить рыбок кормом из чашки (проще – с MINI версией манипулятора).

Усиленный вариант: DAGU 6 Servo robot ARM BIG или PRO (около 10 тыс. руб, 3мм. алюминий) не путать с DAGU 6 Servo robot ARM MINI моделью из пластика (около 5 тыс. руб.), см. DEMO. Назван как Robot Arm RA1 Pro (Rolling Ball).

Производители DAGU и Arexx.com алюминиевого манипулятора. СПб магазин Мегаэлектроника (Б.П. Васильевского Острова, здание Андреевского рынка, вход сзади, 2-й этаж) продает такой манипулятор. Имеет связь с интернет-магазином, где видно, что микроконтроллер еще старый, с com-портом. В Москве на складе такой большой манипулятор есть. Из Москвы поставка идет около недели. Магазин имеет договор с DAGU, не с Arexx.com. Отличия контроллеров есть, у DAGU, малая версия MINI, на заднике контроллера - две колодки, под COM-USB (переходник в комплект прилагается). На фото этих колодок нет.


Инженер-консультант магазина Мегаэлектроника

Шарайко Михаил - +7(812)327-32-71 В.О. Большой пр. 18 В.О. 

Вход с Буговского переулка info@megachip.ru (для Шарайко Михаила) 

сайт megachip.ru

Вот 6 Servo robot ARM в перечне товаров Терраэлектроники (Мегаэлектроника, Москва). Цена около 10 тыс. рублей (внизу).

ПРОГРАММА МАНИПУЛЯТОРА, ЧТО КОРМИТ РЫБОК

VISUAL MATLAB позволяет нарисовать виртуальный кнопочный интерфейс манипуляторов фирмы DAGU (Arexx.com) ARM и управлять рукой в зависимости от нажатия на кнопки, можно обратиться к серверу, к вебкамере и т.п. Это универсальная программа, ее ограниченная некоммерческая версия скачивается с MathSciNet.ru (C).

Пример программы кормления рыбок манипулятором Arexx (DAGU) из чашки с кормом. Первая и последняя кнопки нарисованного интерфейса связаны с командами включения и выключения сервоприводов манипулятора, по средней кнопке манипулятор управляется перебором строк матрицы суставных углов.


open miniarm, show

% COM-PORT

e=write(0,'com38400'), e=read('com4'), 

% MATRIX OF ANGLES

open matrix A, A=?

% INTITIAL VARIABLES

M=0, N=50, R=one(N), I=0

open timer support

open mouse support



DO 

for T=1:size(A)

P=R, J=I, if J>0, echo, end 

if M>0,

 for K=1:6, [T K]=?

 S=[20+K;A(T,K)], send(S), end

pause 2

end 

end

END 

 

function: timer 1

% READ COM-PORT CODES (TO R)

close timer support 

s=read('com'), if s>0, I=I+1, if I>N, I=1, end, R(I)=s, end 

open timer support



function: send(S)

% WRITE CODES TO COM-PORT 

for i=1:size(S) do, e=write(S(i),'com'), pause 0.1, end 



function: click 

% CONTROL SERVO 6 BY BUTTONS

play click.wav

  if near Button1 then Button1 lights, 

    e=write(1,'com') , else

  if near Button2 then Button2 lights, 

    ,  else

  if near Button3 then Button3 lights,

   M=1, else

  if near Button4 then Button4 lights, 

    ,  else

  if near Button5 then Button5 lights, 

   M=0, e=write(2,'com') , else

  if near Arm  then Button1 lights, 

   e=write(1,'com') , else

end, end, end, end, end, end



function: lights

subject Lamp paints red. pause 0.2

subject Lamp paints green. 



function: echo

% ECHO CODES FROM COM-PORT  

e=PutMatrix(P), e=PutLine(1,'window') 

Программа управления (старт цепочки действий по кнопке), использует рисунок кнопочного интерфейса miniarm.box.

Файл положений A.txt циклической программы


136 159 218 48 128 128

42 159 218 48 128 128

42 123 189 48 128 128

42 123 189 48 128 78

42 103 189 48 128 78

42 103 189 48 128 136

42 134 184 48 128 136

228 134 184 48 128 136

228 107 184 48 128 136

228 107 184 48 128 93

228 107 184 48 128 134

228 107 184 48 128 96

228 107 184 48 128 134

122 164 204 39 128 134

122 164 204 39 92 134

122 164 204 39 161 134

122 164 204 39 133 134

Матушку природу не обманешь. Для пары манипуляторов может оказаться полезным мозг на паре дешевых Foxconn, это дешевле мультиплексора: для пары вебкамер – бинокулярное зрение. Драйвера ходовых вебкамер не рассчитаны на подключение пар глаз, виде-поток большой. Foxconn как невыключаемый мозг робота работает в роболаборатории. Невыключаемость, очень интересный момент – это новый уровень. Любопытен вариант с твердотельным диском, допустим – в 4 гига, чтобы только Винды поставить, это обеспечит легкость программирования. Ибо для поворотоных вебкамер и прочих мелких штучек с сервами и, главное, интернет-связью потребуется мозги. Полезны вебкамеры с самофокусировкой, для стендов. Релейные модули, дистантно включать питание, щелк. Блоки питания на 5,9,12 вольт (12 потребляют реле). Манипуляторы продают без блоков питания (9 вольт).

Счет серв начинается от руки S1 до плеча S6. Манипулятор маломощный, сервы - пластиковые шестерни. В контроллер изначально установлена программа взаимодействия по USB с RACS - java-оболочкой, позволяющей сервы подергать и сформировать циклическую программу запоминанием позиций руки. Драйвер FTDI, возможно, нужен лишь для обеспечения режима загрузки, этот момент не проверялся. Программу контроллера, без особой на то нужды, можно не менять, поскольку она ориентирована на управление сервами, нужно лишь знать коды управления по com-порту.

На старте контроллер пребывает в готовности загрузить программу (в режиме загрузчика). Для ухода с режима нужно выставить уровень на пине RTS (reset RTS, ибо сигнал на шине инверсен): проще было бы поставить джампер, но его нет, придется лезть в заморочное ПРОГРАММНОЕ управление пином com-порта). Зеленый светодиод LED2 символизирует работу порта в программном режиме. При подключении контроллер высылает [RP6BOOT][READY]. До прихода сигнала готовности [READY] не стоит пытаться управлять рукой по таймеру, скажем, иначе обмен данными на старте зависнет.

Логи com-порта в процессе управления RACS-PM-MINI.exe следующие. Включить-выключить питание серв: HEX коды 01 и 02. Адреса серв S6-S1 в HEX: 15, 16, 17, 18, 19, 1a. Выставить среднее положение HEX S6: 15 80. Контроллер откликается на управление нулем – если не включено питание серв, иначе в ASCII @ (40) или Б – серва встречает препятствие.

DAGU robot ARM MINI. Особенности: ATMEGA64 процессор 6 сервоприводов. Пластиковая и металлическая рама. Напряжение питания: 6 - 12 В. В комплекте: рама, сервоприводы, USB-интерфейс с кабелем CD-ROM, программное обеспечение. Возможные неприятности: осторожнее вворачивать в основание стойки-шестигранники, могут лопнуть. Один из удлинительных проводов к серве не контачил, нашел иголкой неконтакт, перепаял штырь (отверткой разломав пластиковый переходник). Манипулятор может использоваться в качестве дополнения к роботу, построенному на базе шасси Wild Thumper 6WD. В комплекте поставляется популярная среда разработки WinAVR и программа для управления роботом с персонального компьютера.

ВИДЕО | АНАЛОГ | РОБОКАТАЛОГ | COM

AREXX.COM.CN

DAGU Hi-Tech Electronic Co., Ltd. Has compact cooperation with Arexx Engineering (Holland), Conrad Electronic GmbH (Germany), DLR (Germany), and Elekit Japan Co., Ltd. (Japan) regarding the R&D and distribution of Robot Kits, Electronic Gadgets, and other Educational items for over 5 years. We are keeping working hard on such products lines to make our life better with our unique technology and teamwork.

Робопродукция фирмы Arexx.com.cn, см. рука: ROBOT ARM Учебник на немецком, обещают перевести. Мегаэлектроника: РУКА.

УСТАНОВКА СИГНАЛА RTS В DELPHI

Обычная терминальная программа (Baud rate 38400 бит/c, рекомендация разработчиков) не цепляет контроллер, если не выставлен сигнал RTS. Зеленый светодиод при попытке соединиться гаснет! Необходимо корректно устанавливать RTS Pin - который переключает контроллер в режим загрузчика. The German Text means: "To start the Program, just enter an 's'!" Для установки RTS вручную используется расширенная hyper terminal программа HTerm.

Программируем в DELPHI: см. установка RTS [2].




  DCB.BaudRate:=CBR_38400;

  DCB.ByteSize:=8;

  DCB.Parity:=NOPARITY;

  DCB.StopBits:=ONESTOPBIT;

  // !!! we will manage RTS ourself !!!

  DCB.Flags:=(DCB.Flags And $FFFFC0FF) Or $00000100;

  // set comm state

  SetCommState(fHandle,DCB);

// Here we can manage

  // Reset RTS 

  EscapeCommFunction( fHandle, CLRRTS);

  // Set RTS (no need! here)

  // EscapeCommFunction( fHandle, SETRTS);

Структура DCB. Это вполне работоспособно Windows XP, Vista. В сети обсуждаются версии установки RTS | [2] | [3]. Тут нечто общее про RS-232_flow_control.


DCB.fOutxCtsFlow = 1;//сюда загоняем нужное 

DCB.fOutxDsrFlow = 1;//состояние пинов RTS, DTR (но это не pascal) 

ГОТОВАЯ ПРОГРАММА ДЛЯ ТЕСТИРОВАНИЯ RACS

RACS - Robot Arm Control Software Version 1.0.

Запоминает последовательные положения руки в виде вторичной программы, которую хранит в файле и может воспроизвести циклически. Это позволяет разрабатывать демонстрационные примеры, не используя иные инструменты программирования.

RACS - Robot Arm Control Software Version 1.0. This Windows Program allows you to control the Robot Arm via the USB Interface. With the Sliders in the Software and Keyboard entries you can control the position of each Servo. Additionally it is possible to program Movement Sequences.

КОЛОДКА ДЛЯ ПОДКЛЮЧЕНИЯ ПРОГРАММАТОРА ISP

Единичка на стороне ключа

ДРАЙВЕРЫ, ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ

USB Interface Driver. This is the FTDI USB Driver for Windows (you don't need a Driver for Linux as it is already included in modern Linux Kernels). The newest CDM Version is available for Win2k/XP/Vista/Win7 32 and 64 Bit. You can use the CDM_Setup to install the Driver BEFORE you attach the USB Interface for the first time! If you want to install it manually, you find the extracted drivers in the apropriate folders on the CD. The Installation is described in the Manual and there are also Installation Guides in the driver folders.

Attention: Windows 7 and Vista can contain a standard Driver for the USB Interface but this one is not complete! It does not have all required Features. So you HAVE TO install the correct Driver BEFORE you attach the USB Interface for the first time! If you did not do this, you have to manually upgrade the Driver with the Windows Device Manager. Newer Versions of the Drivers can be downloaded from our website or directly from FTDI.

Доступен софт. Загрузчик RobotLoader v.1.5h.

RobotLoader v.1.5h. This Program has been developed to allow easy and fast program upload to the Microcontrollers of the Robot Arm and some other Robots from AREXX (like RP6). It is written in Java and runs on Windows and Linux. You do not need to install it - you can simply extract it to a folder on your harddrive and start it from there. If you are using Windows, you have to install the USB driver before you can use this program!

Манипулятор Mini Robot Arm (тесты)

ТЕСТ: УПРАВЛЕНИЕ ПЛЕЧЕВЫМ СУСТАВОМ S6 (ФАЙЛЫ)


open miniarm, show

e=write(0,'com38400'), e=read('com20') 

% INTITIAL VARIABLES

N=120, R=one(N), I=0

open timer support

open mouse support

DO, P=R, J=I, if J>0,  

  % ECHO CODES FROM COM-PORT

  e=PutMatrix(P), e=PutLine(1,'window')

end 

pause 0.1

END 

 

function: timer 1

% READ COM-PORT CODES TO ARRAY R

close timer support 

s=read('com'), if s>0, I=I+1, if I>N, I=1, end, R(I)=s, end 

open timer support



function: send(S)

% WRITE CODES TO COM-PORT 

for i=1:size(S) do, e=write(S(i),'com'), pause 0.1, end 



function: click 

% CONTROL SERVO 6 BY BUTTONS

play click.wav

  if near Button1 then Button1 lights, 

    e=write(1,'com') , else

  if near Button2 then Button2 lights, 

    S=[21;128+30], send(S), else

  if near Button3 then Button3 lights,

    S=[21;128], send(S), else

  if near Button4 then Button4 lights, 

     S=[21;128-30], send(S),  else

  if near Button5 then Button5 lights, 

   e=write(2,'com') , else

  if near Arm  then Button1 lights, 

   e=write(1,'com') , else

end, end, end, end, end, end



function: lights

subject Lamp paints red. pause 0.2

subject Lamp paints green.

УПРАВЛЕНИЕ ВСЕМИ СЕРВАМИ


open miniarm2, show

e=write(0,'com38400'), e=read('com20') 

% INTITIAL VARIABLES

N=120, R=one(N), I=0, A=128

open timer support

open mouse support

DO, P=R, J=I, if J>0,  

  % ECHO CODES FROM COM-PORT

  e=PutMatrix(P), e=PutLine(1,'window')

end 

pause 0.1

END 

 

function: timer 1

% READ COM-PORT CODES TO ARRAY R

close timer support 

s=read('com'), if s>0, I=I+1, if I>N, I=1, end, R(I)=s, end 

open timer support



function: send(S)

% WRITE CODES TO COM-PORT 

for i=1:size(S) do, e=write(S(i),'com'), 

s=read('com'), if s>0, I=I+1, if I>N, I=1, end, R(I)=s, end 

pause 0.1, end 



function: click 

% CONTROL SERVO 6 BY BUTTONS

play click.wav

  if near Panel1 Button1 then 

    Panel1 Button1 Lamp paints red, Lightoff

    e=write(1,'com') , else

  if near Panel1 Button2 then 

    Panel1 Button2 Lamp paints red, Lightoff 

    A=A-10, S=[21;A], send(S), else

  if near Panel1 Button3 then 

    Panel1 Button3 Lamp paints red, Lightoff

    A=128, S=[21;A], send(S), else

  if near Panel1 Button4 then  

    Panel1 Button4 Lamp paints red, Lightoff

     A=A+10, S=[21;A], send(S),  else

  if near Panel1 Button5 then 

    Panel1 Button5 Lamp paints red, Lightoff

   e=write(2,'com'), else

  % ===========================

  if near Panel2 Button1 then 

    Panel2 Button1 Lamp paints red, Lightoff

    S=[22;128-60], send(S), else

  if near Panel2 Button2 then 

    Panel2 Button2 Lamp paints red, Lightoff 

    S=[22;128-30], send(S), else

  if near Panel2 Button3 then 

    Panel2 Button3 Lamp paints red, Lightoff

    S=[22;128], send(S), else

  if near Panel2 Button4 then  

    Panel2 Button4 Lamp paints red, Lightoff

     S=[22;128+30], send(S),  else

  if near Panel2 Button5 then 

    Panel2 Button5 Lamp paints red, Lightoff

      S=[22;128+60], send(S), else

  % ===========================

  if near Panel3 Button1 then 

    Panel3 Button1 Lamp paints red, Lightoff

    S=[23;128+60], send(S), else

  if near Panel3 Button2 then 

    Panel3 Button2 Lamp paints red, Lightoff 

    S=[23;128+30], send(S), else

  if near Panel3 Button3 then 

    Panel3 Button3 Lamp paints red, Lightoff

    S=[23;128], send(S), else

  if near Panel3 Button4 then  

    Panel3 Button4 Lamp paints red, Lightoff

     S=[23;128-30], send(S),  else

  if near Panel3 Button5 then 

    Panel3 Button5 Lamp paints red, Lightoff

     S=[23;128-60], send(S), else

  % ===========================

  if near Panel4 Button1 then 

    Panel4 Button1 Lamp paints red, Lightoff

    S=[24;128-60], send(S), else

  if near Panel4 Button2 then 

    Panel4 Button2 Lamp paints red, Lightoff 

    S=[24;128-30], send(S), else

  if near Panel4 Button3 then 

    Panel4 Button3 Lamp paints red, Lightoff

    S=[24;128], send(S), else

  if near Panel4 Button4 then  

    Panel4 Button4 Lamp paints red, Lightoff

     S=[24;128+30], send(S),  else

  if near Panel4 Button5 then 

    Panel4 Button5 Lamp paints red, Lightoff

     S=[24;128+60], send(S), else

 % ===========================

  if near Panel5 Button1 then 

    Panel5 Button1 Lamp paints red, Lightoff

    S=[25;128+60], send(S), else

  if near Panel5 Button2 then 

    Panel5 Button2 Lamp paints red, Lightoff 

    S=[25;128+30], send(S), else

  if near Panel5 Button3 then 

    Panel5 Button3 Lamp paints red, Lightoff

    S=[25;128], send(S), else

  if near Panel5 Button4 then  

    Panel5 Button4 Lamp paints red, Lightoff

     S=[25;128-30], send(S),  else

  if near Panel5 Button5 then 

    Panel5 Button5 Lamp paints red, Lightoff

    S=[25;128-60], send(S), else

 % ===========================

  if near Panel6 Button1 then 

    Panel6 Button1 Lamp paints red, Lightoff

    S=[26;128+60], send(S), else

  if near Panel6 Button2 then 

    Panel6 Button2 Lamp paints red, Lightoff 

    S=[26;128+30], send(S), else

  if near Panel6 Button3 then 

    Panel6 Button3 Lamp paints red, Lightoff

    S=[26;128], send(S), else

  if near Panel6 Button4 then  

    Panel6 Button4 Lamp paints red, Lightoff

     S=[26;128-30], send(S),  else

  if near Panel6 Button5 then 

    Panel6 Button5 Lamp paints red, Lightoff

   S=[26;128-60], send(S), else  

  if near Arm  then 

    Panel1 Button1 Lamp paints red, Lightoff 

   e=write(1,'com') , else

end, end, end, end, end, 

end, end, end, end, end, 

end, end, end, end, end, 

end, end, end, end, end, 

end, end, end, end, end, 

end, end, end, end, end, 

end



function: Lightoff

show, pause 0.2, it paints green.

АЛЬТЕРНАТИВНЫЙ ПРОЕКТ - ФУТБОЛИСТ

Мегаэлектроника: ФУТБОЛИСТ. Arduino-совместимый робот-футболист. Уровень сложности - для начинающих. Робот Mini Biped может управляться автономно или от прилагаемого универсального пульта управления, с помощью которого можете управлять ходьбой, ударами ног. Если робот обнаруживает во время ходьбы препятствия, он останавливается и ищет пути обхода. Микроконтроллер ATmega8A поставляется с предустановленной демонстрационной программой. На плате контроллера есть свободные порты ввода-выода, позволяющие подключать дополнительные сервомоторы и датчики. Требуется сборка модели, пайка не требуется.

 admin

МОДЕЛЬ УПРАВЛЕНИЯ СЕРВОЙ

Графическая интерпретация попрограмм на C написана с помощью продвинутого в графике iMatLab (нарисована сервомашинка и вебкамера на ее роторе). Демо позволяет познакомиться с подпрограммами управления сервоприводами.


#include <pololu/orangutan.h>

int main() {
clear(); int T=0; 
// Константы инициализации  
// const unsigned char demuxPins[] = {}; 
// servos_init(demuxPins, sizeof(demuxPins)); 

// Серва 0: скорость,
set_servo_speed(0,300); 
// Серва 0: стартовый угол 0 (1300), 
set_servo_target(0,1300); 

while(1){ 
// Логика управления,
switch (T){
case   0: set_servo_speed(0,150); 
          set_servo_target(0, 1800); break; 
case 100: set_servo_speed(0,500); 
          set_servo_target(0, 800);  break; 
case 200: set_servo_speed(0,150); 
          set_servo_target(0, 1300); break;
case 300: set_servo_speed(0,150); 
          set_servo_target(0, 1800); T=0; break;
}
clear(); 
print_long(get_servo_position(0)); 
delay_ms(50); 
T++;
}//while
}

%math, % ДИНАМИКА СЕРВЫ (ВИЗУАЛИЗАТОР iMATLAB),

if tick=0, Serva=0, Speed=150, a=1300, 
R=serva(40), moveXat(R 220), moveYat(R 140), 
end,

function: set_servo_speed(S V), 
Serva=S, Speed=V, 
end,

function: set_servo_target(S A),
Serva=S, Angle=A,  
end,

function: get_servo_position(S),
if a>=Angle, a=a-Speed/10, end,
if a<=Angle, a=a+Speed/10, end,
Q=(a-1300), if abs(Q)<50, Q=0, end,
turnat(R Q/700), show(R),
return a,
end,

function: print_long(a),
Q=100*round(a/100), [T Q]=?,  
end,

function: serva(L),
var t X Y C, C=iniFG(0 '#00aaaa' 0 0), 
t=time(2*PI 8), X=fun(5*sin(t)), Y=fun(5*cos(t)), 
addFG(C 'T' 'F' '#222222' [-L-40 -L-40 L+40 L+40] [-L-2 L+2 L+2 -L-2]), 
addFG(C 'T' 'T' '#ffbb55' [-L+20 -L+20 L-20 L-20] [-L L L -L]), 
addFG(C 'T' 'F' '#222222' X Y), 
moveX(C 220), moveY(C 140), 
return C, 
end,

Серва соединяется трехжильным кабелем с микроконтроллером: темный цвет - земля GND (грунт), красный средний - питание (Vcc), желтый - управляющий сигнал (Servo). Сигнал представляет собой повторяющуюся последовательность, в пределах периода T сигнал управления ступенчато переходит с 0 на 1, образуя подобие ГГГГГ..... От величины периода T зависит скорость вращения. А от доли верхней полочки Г - угол поворота. Тут неплохое описание с графиками сигналов СЕРВЫ.

Выходной вал мотора сервы намертво связан с валом переменного резистора обратной связи. Поэтому серва всегда знает в каком она положении в данный момент. Из минусов - невозможность сделать полный оборот. Например одна из них может крутить валом не больше, чем на 180 градусов.

ДРАЙВЕР УПРАВЛЕНИЯ СЕРВАМИ МАЭСТРО

Маэстро, 6-ти КАНАЛЬНЫЙ вариант | ДРАЙВЕР | ПРИМЕРЫ СЦЕНАРИЕВ

РУКОВОДСТВО

ГНЕЗДА ПОД ОБЖИМ, ШТЫРИ СОЕДИНЕНИЙ

Варианты гнезд BLS3, BLS2 c полоской контактов под обжим

Штыри PLS-40



Rambler's Top100