telegamochka: (Default)
[personal profile] telegamochka
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>
#include <sys/types.h>
#include <sys/stat.h>

int fd;
char buf[512];

int main(void) {
port_set:
  fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
  if (fd == -1) {
    printf("Error opening port.\n");
  } else {
    // Настроим порт
    struct termios options;
    tcgetattr(fd, &options);
    cfsetispeed(&options, B57600);
    cfsetospeed(&options, B57600);
    options.c_cflag &= ~PARENB;
    options.c_cflag &= ~PARODD;
    options.c_cflag |= CS8;
    options.c_cflag &= ~HUPCL;
    options.c_cflag &= ~CSTOPB;
    options.c_cflag |= CLOCAL;
    tcsetattr(fd, TCSANOW, &options);

    // Переведем Румбу в режим "полного послушания"   
    buf[0]=0x80;
    write(fd, buf, 1);
    sleep(1);
    buf[0]=0x82;
    write(fd, buf, 1);
   sleep(1);

/*
// Эта последовательность скомандует Румбе ехать вперед и вперед
    buf[0]=0x89;
    buf[1]=0x00;
    buf[2]=0xC8;
    buf[3]=0x80;
    buf[4]=0x00;
    write(fd, buf, 5);
*/

// Эта последовательность команд заставит Румбу бегать по периметру квадрата со стороной примерно в полметра
    for(;;) {
      buf[0]=0x89;
      buf[1]=0x01;
      buf[2]=0x2C;
      buf[3]=0x80;
      buf[4]=0x00;
      buf[5]=0x9C;
      buf[6]=0x01;
      buf[7]=0x90;
      buf[8]=0x89;
      buf[9]=0x01;
      buf[10]=0x2C;
      buf[11]=0x00;
      buf[12]=0x01;
      buf[13]=0x9D;
      buf[14]=0x00;
      buf[15]=0x5A;
      write(fd, buf, 16);
      sleep(1);
    }
  }
}

Откомпилировать программу можно командой
$ gcc roomba.c -o roomba

Date: 2011-04-29 09:48 am (UTC)
From: [identity profile] mandrykin.livejournal.com
Может быть имеет смысл направление робота брать из *argv[]?
Тогда роботом можно будет управлять скриптами. А то каждый раз пере-компилировать сырцы, чтобы задать маршрут, как-то некрасиво.

Date: 2011-04-29 10:27 am (UTC)
From: [identity profile] telegamochka.livejournal.com
Исходник - просто чтобы показать, как настроить порт и как слать команды для работы с румбой. Ну а откуда брать команды - дело автора проекта :) Или управлять роботом скриптами (у меня такой задачи не стояло), или брать управление с джойстика. У меня робот будет управляться командами, подаваемыми через интернет. Ну и попробую будет написать вариант, когда компьютер сам генерит последовательность команд для достижения нужной цели.

Например, если использовать робот для присмотра за домом, то можно рулить им через инет. Но удобнее, введя карту своей квартиры, указать роботу точку, куда ему нужно прибыть - и пусть сам едет туда.

Profile

telegamochka: (Default)
telegamochka

April 2017

S M T W T F S
      1
234 567 8
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 21st, 2025 11:31 pm
Powered by Dreamwidth Studios