Subversion Repositories svnkaklik

Compare Revisions

Problem with comparison.

Ignore whitespace Rev HEAD → Rev 376

/roboti/Robotour/SW/i2c/main.cpp
0,0 → 1,155
/*****************************************************************************/
/*
* Zmena I2C adresy
*
* Copyright (C) 2007 KAKL
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
/*****************************************************************************/
 
#include <iostream>
#include <getopt.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "linux/i2c-dev.h"
#include "linux/i2c.h"
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
 
using namespace std;
 
 
#define BC_Addr 0x0B
#define US3_Addr 0x70 // 0xE0 in fact; Sonar na doprovod
#define CMPS_Addr 0x60 // 0xC0
#define M1 0x50 // 0xA0 in fact
#define M2 0x51 // 0xA2 in fact
 
 
int file;
 
void I2C_addr (int Addr)
{
if (ioctl(file, I2C_SLAVE, Addr) == -1)
{
fprintf(stderr, "Failed to set address to 0x%02x.\n", Addr);
exit(-5);
}
}
 
 
unsigned int echo(int Addr) // precte vzdalenost z US cidla
{
char Buf[3];
 
I2C_addr(Addr);
Buf[0]=0x0;
Buf[1]=0x51;
write(file, Buf, 2);
usleep(80000);
read(file, Buf, 3);
return (Buf[1]*256+Buf[2]);
}
 
unsigned char read_azimut_mag() // precte azimut z kompasu
{
char Buf[3]; // promena pro manipulaci s i2c
 
I2C_addr(CMPS_Addr);
Buf[0]=1;
write(file,Buf,1);
read(file, Buf,1);
return Buf[0];
}
 
void calib() // kalibrace kompasu
{
char Buf[3]; // promena pro manipulaci s i2c
 
I2C_addr(CMPS_Addr);
Buf[0]=15;
Buf[1]=0xFF;
write(file,Buf,2);
}
 
int i2c_init() // zinicializuje i2c
{
file = open("/dev/i2c-0", O_RDWR);
if (file < 0)
{
cerr << "Could not open /dev/i2c-0." << endl;
return -1;
}
return 0;
}
 
int main(int argc, char *argv[], char *envp[])
{
unsigned int OldAddress, NewAddress;
char Buf[10];
 
fprintf(stdout, "\n **** Change I2C Address **** \n \r");
 
if (argc<2)
{
printf("Use:\n%s OldAddress NewAddress - for change address\nOR\n%s Address - for echo\n\n\r",argv[0],argv[0]);
return 0;
}
 
i2c_init();
 
sscanf(argv[1],"%x",&OldAddress);
 
if (argc==2)
{
printf("Vzdalenost: %d\n", echo(OldAddress>>1));
close(file);
return 0;
}
 
sscanf(argv[2],"%x",&NewAddress);
 
printf("Old: %x New: %x\n", OldAddress, NewAddress);
 
printf("Vzdalenost: %d\n", echo(OldAddress>>1));
 
I2C_addr(OldAddress>>1);
Buf[0]=0x0;
Buf[1]=0xA0;
write(file, Buf, 2);
I2C_addr(OldAddress>>1);
Buf[0]=0x0;
Buf[1]=0xAA;
write(file, Buf, 2);
I2C_addr(OldAddress>>1);
Buf[0]=0x0;
Buf[1]=0xA5;
write(file, Buf, 2);
I2C_addr(OldAddress>>1);
Buf[0]=0x0;
Buf[1]=NewAddress;
write(file, Buf, 2);
 
 
usleep(100000);
 
printf("Vzdalenost: %d\n", echo(NewAddress>>1));
 
close(file);
return 0;
}
/roboti/Robotour/SW/motor/motor.c
0,0 → 1,75
#include "motor.h"
//#use i2c(Slave,Fast,sda=PIN_B1,scl=PIN_B4,force_hw,address=0xA0) // Motor 1
#use i2c(Slave,Fast,sda=PIN_B1,scl=PIN_B4,force_hw,address=0xA2) // Motor 2
 
#define H1 PIN_A1
#define L1 PIN_A2
#define H2 PIN_A3
#define L2 PIN_A4
 
signed int8 command; // rozsah +-127
 
#INT_SSP
void ssp_interupt ()
{
BYTE incoming, state;
 
output_a(0); // vypnuti vsech budicu
 
state = i2c_isr_state();
 
if(state < 0x80) //Master is sending data
{
command = i2c_read();
}
 
if(state == 0x80) //Master is requesting data
{
i2c_write(command);
}
}
 
 
void main()
{
int8 speed;
 
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_timer_0(RTCC_INTERNAL);setup_wdt(WDT_144MS);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_oscillator(OSC_8MHZ|OSC_INTRC);
 
enable_interrupts(GLOBAL);
enable_interrupts(INT_SSP);
 
command=-128; // zastaveni po resetu
 
while(true)
{
 
if (command==-128) // prikaz na odpojeni mustku nebo chybna hodnota
{
output_a(0); // volnobeh
continue;
};
 
speed=command+127; // posunuti 0 pro zaporna cisla
 
output_a(0b10010); // vpred
delay_us(speed);
output_a(0); // vypnuti vsech budicu
delay_us(1);
restart_wdt();
output_a(0b01100); // vzad
delay_us(254-speed);
output_a(0); // vypnuti vsech budicu
delay_us(1);
}
}
 
 
 
/roboti/Robotour/SW/motor/motor.hex
0,0 → 1,35
:1000000000308A007B280000FF00030E8301A1005E
:100010007F08A0000A08A8008A01A00E0408A20018
:100020007708A3007808A4007908A5007A08A6003C
:100030007B08A700831383128C308400801D222844
:100040008C193528220884002308F7002408F800BA
:100050002508F9002608FA002708FB0028088A006E
:10006000210E8300FF0E7F0E09008A114528130818
:100070003008930014168C118316141C4128831227
:100080003C28F80183128A1168288316850183129F
:1000900085018316941A51288312AA011318AA17EE
:1000A000831683122A08AA0AAF002F087F3C031C7C
:1000B0006128831614185E288312592883121308A6
:1000C000A9002F08803C031D68282908B0003728A4
:1000D0008C118A1122280830AD02031C7A282D3099
:1000E00084000310800C000803197A287828000087
:1000F000800B7728003484011F308305703083160D
:100100008F0006168614A2309300363083129400B6
:1001100083161F129F121B0880399B0007309C001A
:1001200003308312AA0083161F129F121B08803906
:100130009B0083121F1083160108C03981000B3009
:10014000F700073083128101813084000008F03904
:100150000738800064000008F739F719F039770490
:10016000800090010030F800920000308316920069
:1001700007309C0005080630F700F70BBD2800008B
:100180001C0883120D1383169D0172308F00C0303E
:1001900083128B0483168C1580308312A9002908E2
:1001A000803C031DD8288316850183128501CF2842
:1001B0007F302907AB00831685011230831285003A
:1001C0002B08AD006B20831685018312850100008A
:1001D00000006400831685010C30831285002B0813
:1001E000FE3CAC00AD006B208316850183128501B7
:0801F00000000000CF286300AD
:04400E00343FFC3F00
:00000001FF
;PIC16F88
/roboti/Robotour/SW/motor/motor.h
0,0 → 1,18
#include <16F88.h>
#device adc=8
 
#FUSES WDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES PUT //Power Up Timer
#FUSES MCLR //Master Clear pin enabled
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOFCMEN //Fail-safe clock monitor disabled
#FUSES NOIESO //Internal External Switch Over mode disabled
 
#use delay(clock=8000000)
 
/roboti/Robotour/SW/motor/motor.PJT
0,0 → 1,40
[PROJECT]
Target=motor.HEX
Development_Mode=
Processor=0x688F
ToolSuite=CCS
 
[Directories]
Include=C:\Program Files\PICC\devices\;C:\Program Files\PICC\Dr
Library=
LinkerScript=
 
[Target Data]
FileList=C:\dokumenty\svn\Kaklik\roboti\Robotour\SW\motor\motor.c
BuildTool=C-COMPILER
OptionString=+FM
AdditionalOptionString=
BuildRequired=1
 
[motor.c]
Type=4
Path=
FileList=
BuildTool=
OptionString=
AdditionalOptionString=
 
[mru-list]
1=motor.c
 
[Windows]
0=0000 motor.c 0 0 796 451 3 0
 
[Opened Files]
1=C:\dokumenty\svn\Kaklik\roboti\Robotour\SW\motor\motor.c
2=C:\dokumenty\svn\Kaklik\roboti\Robotour\SW\motor\motor.h
3=C:\Program Files\PICC\devices\16F88.h
4=
[Units]
Count=1
1=C:\dokumenty\svn\Kaklik\roboti\Robotour\SW\motor\motor.c (main)
/roboti/Robotour/SW/vector/vector.cpp
0,0 → 1,339
/*****************************************************************************/
/*
* vector.cpp - Control program for Vector robot
*
* Copyright (C) 2007 KAKL
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
/*****************************************************************************/
 
#include <iostream>
#include <getopt.h>
#include <errno.h>
#include <string.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "linux/i2c-dev.h"
#include "linux/i2c.h"
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "geocalc.h"
#include "track.h"
 
using namespace std;
 
 
#define BC_Addr 0x0B
#define US3_Addr 0x70 // 0xE0 in fact; Sonar na doprovod
#define CMPS_Addr 0x60 // 0xC0
#define M1 0x50 // 0xA0 in fact
#define M2 0x51 // 0xA2 in fact
 
#define SEVER 0
 
char vystup[50];
pthread_t thread_1, thread_2, thread_3;
FILE *pRouraO,*pRouraI;
unsigned int vzdalenost;
char command,ble;
int file;
double n, e;
unsigned char azimut_mag;
 
 
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
 
void *print_tele(void *unused);
void *gps(void *unused);
//void *sensors(void *unused);
 
void I2C_addr (int Addr)
{
if (ioctl(file, I2C_SLAVE, Addr) == -1)
{
fprintf(stderr, "Failed to set address to 0x%02x.\n", Addr);
exit(-5);
}
}
 
void go (int Addr, int speed) // nastavi rychlost motoru
{
char Buf[1];
 
I2C_addr (Addr);
Buf[0]=speed;
write(file, Buf, 1);
}
 
unsigned int echo(int Addr) // precte vzdalenost z US cidla
{
char Buf[3];
 
I2C_addr(Addr);
Buf[0]=0x0;
Buf[1]=0x51;
write(file, Buf, 2);
usleep(80000);
read(file, Buf, 3);
return (Buf[1]*256+Buf[2]);
}
 
void FindNearestCrossing(void)
{
int n;
 
n=0;
do
{
if (0==cros[n].id) break;
if (GeoCalc::EllipsoidDistance(n, e, cros[n].n, cros[n].e) <= cros[n].dia)
{
#include "nav.h"
break;
}
} while(++n<POINTS);
}
 
int i2c_init() // zinicializuje i2c
{
file = open("/dev/i2c-0", O_RDWR);
if (file < 0)
{
cerr << "Could not open /dev/i2c-0." << endl;
return -1;
}
return 0;
}
 
int read_azimut_mag() // precte azimut z kompasu
{
char Buf[3]; // promena pro manipulaci s i2c
I2C_addr(CMPS_Addr);
Buf[0]=1;
write(file,Buf,1);
read(file, Buf,1);
return Buf[0];
}
 
void turnL(unsigned char angle, signed char speed) // otoci robota o zadany uhel
{
int azimut;
 
go(M1, speed);
go(M2, -speed);
azimut=read_azimut_mag();
while(read_azimut_mag() >= (azimut + angle)) usleep(10000);
go(M1, 0);
go(M2, 0);
command=0;
}
 
void turnR() // otoci robota o zadany uhel
{
}
 
int main(int argc, char *argv[], char *envp[])
{
int filtr;
signed char test;
 
fprintf(stdout, "\n **** Starting Vector Control Programm **** \n \r");
 
i2c_init();
 
pthread_create(&thread_1, NULL, print_tele, NULL);
pthread_create(&thread_3, NULL, gps, NULL);
// pthread_create(&thread_2, NULL, sensors, NULL);
 
command=0;
filtr=0;
 
while(true)
{
switch (command)
{
case 'f': // forward
go(M1, 70);
go(M2, 70);
command=0;
break;
case 'b': // backward
go(M1, -70);
go(M2, -70);
command=0;
break;
case 'v': // volnobeh
go(M1, -128);
go(M2, -128);
command=0;
break;
case 's': // stop
go(M1, 0);
go(M2, 0);
command=0;
break;
case 'a': // test otaceni
go(M1, 100);
go(M2, -100);
azimut_mag=read_azimut_mag();
while(read_azimut_mag() >= (azimut_mag + 45)) usleep(10000);
go(M1, 0);
go(M2, 0);
command=0;
break;
 
case 't': // test
for(test=0;test<127;test++)
{
go(M1, test);
go(M2, test);
usleep(10000);
};
go(M1, 127);
go(M2, 127);
for(test=127;test>-128;test--)
{
go(M1, test);
go(M2, test);
usleep(10000);
};
go(M1, -128);
go(M2, -128);
command=0;
break;
 
case 'g':
usleep(180000); // simulace ostatnich cidel (zdrzeni)
azimut_mag=read_azimut_mag();
 
FindNearestCrossing();
 
vzdalenost=echo(US3_Addr);
if ((vzdalenost>60)&&(vzdalenost<80))
{
go(M1, 60);
go(M2, 60);
filtr=0;
break;
};
if ((vzdalenost>30)&&(vzdalenost<130))
{
filtr=0;
if (vzdalenost<55)
{
go(M1, 30);
go(M2, 60);
}
else
{
go(M1, 60);
go(M2, 30);
}
}
else
{
filtr++;
if (filtr>5)
{
go(M1, 1); // zastav, neni videt doprovod
go(M2, 1);
filtr=6;
}
};
break;
}
};
 
close(file);
pthread_join(thread_1, NULL);
pthread_join(thread_2, NULL);
pthread_join(thread_3, NULL);
 
return 0;
}
 
 
void *print_tele(void *unused)
{
char string[2];
 
while(true)
{
pRouraI = fopen("/home/ble/pipe","r");
command=fgetc(pRouraI);
string[0]=command;
string[1]=0;
fclose(pRouraI);
pRouraO = fopen("/home/ble/pipe","w");
fprintf(pRouraO,"Vzdalenost: %u cm Command: %s\n",vzdalenost,string);
 
pthread_mutex_lock(&mutex);
fprintf(pRouraO,"%f N %f E\n", n, e);
fprintf(pRouraO,"Vzdalenost: %.1f m\n", GeoCalc::EllipsoidDistance(n, e, cros[1].n, cros[1].e));
fprintf(pRouraO,"Azimut: %.2f Deg\n", GeoCalc::GCAzimuth(n, e, cros[1].n, cros[1].e));
fprintf(pRouraO,"AzimutMag: %d (0-255)\n", azimut_mag);
pthread_mutex_unlock(&mutex);
 
fclose(pRouraO);
}
}
 
void *gps(void *unused)
{
FILE *pRS232;
double N, E, pomN, pomE, nn, ee;
 
while(true)
{
pRS232 = fopen("/dev/ttyS1","r");
fscanf(pRS232,"$GPGGA,%*f,%lf,N,%lf,E,*", &N, &E); // parser NMEA
fclose(pRS232);
nn=ldiv((long)N,100).quot; // prepocet DDMM.MM na DD.DD
pomN=(N-nn*100)/60+nn;
ee=ldiv((long)E,100).quot;
pomE=(E-ee*100)/60+ee;
pthread_mutex_lock(&mutex); // prepis souradnic do sdilenych promennych
n=pomN; e=pomE;
pthread_mutex_unlock(&mutex);
usleep(800000); // NMEA nechodi castejc nez 1x za 1s
}
}
 
/*
void *sensors(void *unused)
{
char Buf[64];
 
while(true)
{
I2C_addr(US_Addr);
Buf[0]=0x0;
Buf[1]=0x51;
write(file, Buf, 2);
usleep(80000);
read(file, Buf, 3);
vzdalenost=(Buf[1]*256+Buf[2]);
usleep(300000);
 
I2C_addr(PIC_Addr);
Buf[0]=command;
write(file, Buf, 1);
read(file, Buf, 1);
ble=Buf[0];
}
}
*/
/roboti/Robotour/SW/vector/vector.cbp
0,0 → 1,48
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="vector" />
<Option pch_mode="2" />
<Option compiler="atmel_gnu_gcc_compiler" />
<Build>
<Target title="Debug">
<Option output="bin\Debug\vector" prefix_auto="0" extension_auto="0" />
<Option object_output="obj\Debug\" />
<Option type="1" />
<Option compiler="atmel_gnu_gcc_compiler" />
<Compiler>
<Add option="-g" />
</Compiler>
<Linker>
<Add option="-lpthread" />
</Linker>
</Target>
<Target title="Release">
<Option output="bin\Release\vector" prefix_auto="1" extension_auto="1" />
<Option object_output="obj\Release\" />
<Option type="1" />
<Option compiler="atmel_gnu_gcc_compiler" />
<Compiler>
<Add option="-O2" />
</Compiler>
<Linker>
<Add option="-s" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
<Add option="-fexceptions" />
</Compiler>
<Unit filename="geocalc.cpp" />
<Unit filename="nav.h" />
<Unit filename="track.h" />
<Unit filename="vector.cpp" />
<Extensions>
<code_completion />
<envvars />
<debugger />
</Extensions>
</Project>
</CodeBlocks_project_file>
/roboti/Robotour/SW/vector/geocalc.cpp
0,0 → 1,118
/* Navigation code */
 
#include "geocalc.h"
 
double GeoCalc::EllipsoidDistance(double lat1, double lon1, double lat2, double lon2)
{
double distance = 0.0;
double faz, baz;
double r = 1.0 - GEO::FLATTENING;
double tu1, tu2, cu1, su1, cu2, x, sx, cx, sy, cy, y, sa, c2a, cz, e, c, d;
double cosy1, cosy2;
distance = 0.0;
 
if((lon1 == lon2) && (lat1 == lat2)) return distance;
lon1 *= GEO::DE2RA;
lon2 *= GEO::DE2RA;
lat1 *= GEO::DE2RA;
lat2 *= GEO::DE2RA;
 
cosy1 = cos(lat1);
cosy2 = cos(lat2);
 
if(cosy1 == 0.0) cosy1 = 0.0000000001;
if(cosy2 == 0.0) cosy2 = 0.0000000001;
 
tu1 = r * sin(lat1) / cosy1;
tu2 = r * sin(lat2) / cosy2;
cu1 = 1.0 / sqrt(tu1 * tu1 + 1.0);
su1 = cu1 * tu1;
cu2 = 1.0 / sqrt(tu2 * tu2 + 1.0);
x = lon2 - lon1;
 
distance = cu1 * cu2;
baz = distance * tu2;
faz = baz * tu1;
 
do {
sx = sin(x);
cx = cos(x);
tu1 = cu2 * sx;
tu2 = baz - su1 * cu2 * cx;
sy = sqrt(tu1 * tu1 + tu2 * tu2);
cy = distance * cx + faz;
y = atan2(sy, cy);
sa = distance * sx / sy;
c2a = -sa * sa + 1.0;
cz = faz + faz;
if(c2a > 0.0) cz = -cz / c2a + cy;
e = cz * cz * 2. - 1.0;
c = ((-3.0 * c2a + 4.0) * GEO::FLATTENING + 4.0) * c2a * GEO::FLATTENING / 16.0;
d = x;
x = ((e * cy * c + cz) * sy * c + y) * sa;
x = (1.0 - c) * x * GEO::FLATTENING + lon2 - lon1;
} while(fabs(d - x) > GEO::EPS);
 
x = sqrt((1.0 / r / r - 1.0) * c2a + 1.0) + 1.0;
x = (x - 2.0) / x;
c = 1.0 - x;
c = (x * x / 4.0 + 1.0) / c;
d = (0.375 * x * x - 1.0) * x;
x = e * cy;
distance = 1.0 - e - e;
distance = ((((sy * sy * 4.0 - 3.0) *
distance * cz * d / 6.0 - x) * d / 4.0 + cz) * sy * d + y) * c * GEO::ERAD * r;
 
return distance*1000;
}
 
 
double GeoCalc::GCAzimuth(double lat1, double lon1, double lat2, double lon2)
{
double result = 0.0;
 
INT32 ilat1 = (INT32)(0.50 + lat1 * 360000.0);
INT32 ilat2 = (INT32)(0.50 + lat2 * 360000.0);
INT32 ilon1 = (INT32)(0.50 + lon1 * 360000.0);
INT32 ilon2 = (INT32)(0.50 + lon2 * 360000.0);
 
lat1 *= GEO::DE2RA;
lon1 *= GEO::DE2RA;
lat2 *= GEO::DE2RA;
lon2 *= GEO::DE2RA;
 
if ((ilat1 == ilat2) && (ilon1 == ilon2))
{
return result;
}
else if (ilon1 == ilon2)
{
if (ilat1 > ilat2)
result = 180.0;
}
else
{
double c = acos(sin(lat2)*sin(lat1) + cos(lat2)*cos(lat1)*cos((lon2-lon1)));
double A = asin(cos(lat2)*sin((lon2-lon1))/sin(c));
result = (A * GEO::RA2DE);
 
if ((ilat2 > ilat1) && (ilon2 > ilon1))
{
}
else if ((ilat2 < ilat1) && (ilon2 < ilon1))
{
result = 180.0 - result;
}
else if ((ilat2 < ilat1) && (ilon2 > ilon1))
{
result = 180.0 - result;
}
else if ((ilat2 > ilat1) && (ilon2 < ilon1))
{
result += 360.0;
}
}
 
return result;
}
 
/roboti/Robotour/SW/vector/geocalc.h
0,0 → 1,27
#include <iostream>
#include "math.h"
 
typedef signed int INT32;
 
namespace GEO {
const double PI = 3.14159265359;
const double PIOVER2 = PI/2.0;
const double TWOPI = 6.28318530718;
const double DE2RA = 0.01745329252;
const double RA2DE = 57.2957795129;
const double ERAD = 6378.137;
const double FLATTENING = 1.000000/298.257223563;// Earth flattening (WGS84)
const double EPS = 0.000000000005;
}
 
using namespace std;
 
class GeoCalc {
public:
// great circle method
static double GCAzimuth(double lat1, double lon1, double lat2, double lon2);
 
// ellipsoid methods
static double EllipsoidDistance(double lat1, double lon1, double lat2, double lon2);
};
 
/roboti/Robotour/SW/vector/main.cpp
0,0 → 1,9
#include <iostream>
 
using namespace std;
 
int main()
{
cout << "Hello world!" << endl;
return 0;
}
/roboti/Robotour/SW/wdt/wdt.c
0,0 → 1,17
#include "C:\dokumenty\svn\Kaklik\roboti\Robotour\SW\wdt\wdt.h"
 
 
void main()
{
 
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL);setup_wdt(WDT_144MS);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(VREF_LOW|-2);
setup_oscillator(False);
 
}
/roboti/Robotour/SW/wdt/wdt.h
0,0 → 1,18
#include <16F88.h>
#device adc=8
 
#FUSES WDT //Watch Dog Timer
#FUSES INTRC //Internal RC Osc
#FUSES NOPUT //No Power Up Timer
#FUSES MCLR //Master Clear pin enabled
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOFCMEN //Fail-safe clock monitor disabled
#FUSES NOIESO //Internal External Switch Over mode disabled
 
#use delay(clock=8000000,RESTART_WDT)
 
/roboti/Robotour/SW/wdt/wdt.hex
0,0 → 1,13
:1000000000308A000428000084011F30830570300E
:1000100083168F001F129F121B0880399B00073028
:100020009C001F129F121B0880399B0083121F1017
:10003000941283160611861406120030831294005F
:10004000831694000108C03981000B30F700073097
:1000500083128101813084000008F0390738800064
:1000600064000008F739F719F0397704800090012F
:100070000030F800920000308316920007309C0098
:10008000050864000630F700F70B44281C088312AB
:100090000D13FE3083169D0005158F010F086300B8
:04400E003D3FFC3FF7
:00000001FF
;PIC16F88
/roboti/Robotour/SW/board/main.cpp
0,0 → 1,164
/*****************************************************************************/
/*
* Board.cpp - communication with NGW100 Board Controller and I2C
*
* Copyright (C) 2007 Karel Hojdar, KAKL
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*
*
* Revision history
* 15.06.2007 1.0 Undertaken from KAHO
* 09.09.2007 2.0 I2C US Ranger
*/
/*****************************************************************************/
 
#include <iostream>
 
#include <getopt.h>
#include <errno.h>
#include <string.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "linux/i2c-dev.h"
#include "linux/i2c.h"
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
 
 
using namespace std;
 
#define BC_Addr 0x0B
#define US_Addr 0x70 // 0xE0 in fact
#define PIC_Addr 0x50 // 0xA0 in fact
 
char vystup[30];
pthread_t thread_id;
FILE *pRouraO,*pRouraI;
unsigned int vzdalenost;
char command,ble;
 
void *print_tele(void *unused);
 
void DoExit(int ex)
{
exit(ex);
}
 
unsigned char xfunc[5] = {0x99, 0x9A, 0x9B, 0x9E, 0x8D};
unsigned char xlen[5] = {8, 6, 1, 15, 2};
 
int main(int argc, char *argv[], char *envp[])
{
int Len;
int i2cbus = 0;
char filename[20],Buf[64];
int file;
 
 
fprintf(stdout, "Ble................");
 
sprintf(filename, "/dev/i2c-%d", i2cbus);
file = open(filename, O_RDWR);
 
if (file < 0)
{
cerr << "Could not open /dev/i2c-0." << endl;
return -1;
}
/*
if (ioctl(file, I2C_SLAVE, BC_Addr) == -1)
{
fprintf(stderr, "Failed to set address to 0x%02x.\n", BC_Addr);
DoExit(-2);
}
 
Buf[0] = xfunc[0];
if ( write(file, Buf, 1) != 1)
{
fprintf(stderr, "Failed to write byte to address to 0x%02x, errno %i.\n", BC_Addr, errno);
DoExit(-3);
}
 
if (read(file, Buf, 1) != 1)
{
fprintf(stderr, "Failed to read response length, errno %i.\n", errno);
DoExit(-4);
}
 
Len = Buf[0];
if (read(file, Buf, Len) != Len)
{
fprintf(stderr, "Failed to read response, errno %i.\n", errno);
DoExit(-5);
}
 
 
Buf[Len] = 0x00;
fprintf(stdout, "Board ID is %s.\n", Buf);
*/
//!------ US ---------------------------------------------------------------------------
 
pthread_create(&thread_id, NULL, print_tele, NULL);
 
while(true)
{
if (ioctl(file, I2C_SLAVE, US_Addr) == -1)
{
fprintf(stderr, "Failed to set address to 0x%02x.\n", US_Addr);
DoExit(-6);
}
Buf[0]=0x0;
Buf[1]=0x51;
write(file, Buf, 2);
usleep(80000);
read(file, Buf, 3);
vzdalenost=(Buf[1]*256+Buf[2]);
usleep(300000);
 
if (ioctl(file, I2C_SLAVE, PIC_Addr) == -1)
{
fprintf(stderr, "Failed to set address to 0x%02x.\n", US_Addr);
DoExit(-6);
}
Buf[0]=command;
write(file, Buf, 1);
read(file, Buf, 1);
ble=Buf[0];
 
//!--------
printf("Vzdalenost: %u cm Command: %x\n",vzdalenost,ble);
 
};
close(file);
pthread_join(thread_id, NULL);
fclose(pRouraO);
 
return 0;
}
 
void *print_tele(void *unused)
{
while(1)
{
pRouraI = fopen("/home/ble/pipe","r");
command=fgetc(pRouraI);
fclose(pRouraI);
pRouraO = fopen("/home/ble/pipe","w");
fprintf(pRouraO,"Vzdalenost: %u cm Command: %x\n",vzdalenost,ble);
fclose(pRouraO);
}
}
/roboti/Robotour/SW/board/board.cbp
0,0 → 1,45
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="board" />
<Option pch_mode="2" />
<Option compiler="atmel_gnu_gcc_compiler" />
<Build>
<Target title="Debug">
<Option output="bin\Debug\board" prefix_auto="0" extension_auto="0" />
<Option object_output="obj\Debug\" />
<Option type="1" />
<Option compiler="atmel_gnu_gcc_compiler" />
<Compiler>
<Add option="-g" />
</Compiler>
<Linker>
<Add option="-lpthread" />
</Linker>
</Target>
<Target title="Release">
<Option output="bin\Release\board" prefix_auto="1" extension_auto="1" />
<Option object_output="obj\Release\" />
<Option type="1" />
<Option compiler="atmel_gnu_gcc_compiler" />
<Compiler>
<Add option="-O2" />
</Compiler>
<Linker>
<Add option="-s" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-Wall" />
<Add option="-fexceptions" />
</Compiler>
<Unit filename="main.cpp" />
<Extensions>
<code_completion />
<envvars />
<debugger />
</Extensions>
</Project>
</CodeBlocks_project_file>
/roboti/Robotour/SW/board/workspace.workspace
0,0 → 1,6
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_workspace_file>
<Workspace title="Workspace">
<Project filename="board.cbp" active="1" />
</Workspace>
</CodeBlocks_workspace_file>
/roboti/Robotour/SW/pic_i2c_slave/test.PJT
0,0 → 1,40
[PROJECT]
Target=test.HEX
Development_Mode=
Processor=0x688F
ToolSuite=CCS
 
[Directories]
Include=C:\Program Files\PICC\devices\;C:\Program Files\PICC\Dr
Library=
LinkerScript=
 
[Target Data]
FileList=C:\Dokumenty\svn\Kaklik\roboti\Robotour\SW\pic\test.c
BuildTool=C-COMPILER
OptionString=+FM
AdditionalOptionString=
BuildRequired=1
 
[test.c]
Type=4
Path=
FileList=
BuildTool=
OptionString=
AdditionalOptionString=
 
[mru-list]
1=test.c
 
[Windows]
0=0000 test.c 0 0 796 451 3 0
 
[Opened Files]
1=C:\Dokumenty\svn\Kaklik\roboti\Robotour\SW\pic\test.c
2=C:\Dokumenty\svn\Kaklik\roboti\Robotour\SW\pic\test.h
3=C:\Program Files\PICC\devices\16F88.h
4=
[Units]
Count=1
1=C:\Dokumenty\svn\Kaklik\roboti\Robotour\SW\pic\test.c (main)
/roboti/Robotour/SW/pic_i2c_slave/test.c
0,0 → 1,73
#include "test.h"
 
#define H1 PIN_A1
#define L1 PIN_A2
#define H2 PIN_A3
#define L2 PIN_A4
 
char command;
 
int n;
 
#INT_SSP
void ssp_interupt ()
{
BYTE incoming, state;
output_low(H1);
output_low(L1);
output_low(H2);
output_low(L2);
 
state = i2c_isr_state();
 
if(state < 0x80) //Master is sending data
{
output_toggle(PIN_A0);
command = i2c_read();
}
if(state == 0x80) //Master is requesting data
{
i2c_write(command);
}
}
 
void main()
{
 
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_oscillator(False);
 
enable_interrupts(GLOBAL);
enable_interrupts(INT_SSP);
while(true)
{
if(command=='a')
{
output_high(H1);
output_low(H2);
output_low(L1);
output_high(L2);
}
else
{
output_low(H1);
output_high(H2);
output_high(L1);
output_low(L2);
};
delay_us(60);
output_low(H1);
output_low(H2);
output_low(L1);
output_low(L2);
}
}
/roboti/Robotour/SW/pic_i2c_slave/test.h
0,0 → 1,19
#include <16F88.h>
#device adc=8
 
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz)
#FUSES NOPUT //No Power Up Timer
#FUSES MCLR //Master Clear pin enabled
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOFCMEN //Fail-safe clock monitor disabled
#FUSES NOIESO //Internal External Switch Over mode disabled
 
#use delay(clock=4000000)
#use i2c(Slave,Fast,sda=PIN_B1,scl=PIN_B4,force_hw,address=0xA0)
 
/roboti/Robotour/SW/RNDF_MDF_parser/rndf_dbg.cpp
0,0 → 1,9
/*
* Funkce umi jedine... Vypsat zadany retezec
*/
#include <iostream>
 
template <class T>
void echoDbg(T hlaseni) {
std::cout << "DBG:\t" << hlaseni << std::endl;
}
/roboti/Robotour/SW/RNDF_MDF_parser/makefile
0,0 → 1,15
# makefile pro weboveho klienta
# Vasco 2007
CC = g++
DBG += -DDBG
 
## slinkovane soubory
RNDF_parser: rndfparser.o
$(CC) -o $@ $<
 
## *.o soubory
rndfparser.o: rndf_parser.cpp
$(CC) $(DBG) -c -o $@ $<
 
clean:
rm -f *.o RNDF_parser
/roboti/Robotour/SW/RNDF_MDF_parser/RNDF_stromovka.txt
0,0 → 1,3913
RNDF_name stromovka-rndf-0.2
num_segments 22
num_zones 0
format_version 1.0
creation_date 9/29/2006
segment 1
num_lanes 2
segment_name A
lane 1.1
num_waypoints 60
checkpoint 1.1.30 1
exit 1.1.60 2.1.1
exit 1.1.60 5.1.1
1.1.1 50.105220 14.427978
1.1.2 50.105230 14.427981
1.1.3 50.105240 14.427985
1.1.4 50.105250 14.427991
1.1.5 50.105260 14.427998
1.1.6 50.105270 14.428006
1.1.7 50.105280 14.428015
1.1.8 50.105291 14.428023
1.1.9 50.105301 14.428031
1.1.10 50.105313 14.428040
1.1.11 50.105323 14.428050
1.1.12 50.105333 14.428058
1.1.13 50.105343 14.428068
1.1.14 50.105353 14.428076
1.1.15 50.105363 14.428083
1.1.16 50.105375 14.428090
1.1.17 50.105385 14.428093
1.1.18 50.105398 14.428096
1.1.19 50.105410 14.428100
1.1.20 50.105423 14.428101
1.1.21 50.105435 14.428103
1.1.22 50.105446 14.428105
1.1.23 50.105460 14.428105
1.1.24 50.105471 14.428105
1.1.25 50.105481 14.428103
1.1.26 50.105493 14.428103
1.1.27 50.105503 14.428100
1.1.28 50.105515 14.428096
1.1.29 50.105525 14.428093
1.1.30 50.105536 14.428090
1.1.31 50.105546 14.428085
1.1.32 50.105560 14.428080
1.1.33 50.105570 14.428073
1.1.34 50.105581 14.428068
1.1.35 50.105593 14.428063
1.1.36 50.105605 14.428058
1.1.37 50.105616 14.428051
1.1.38 50.105626 14.428045
1.1.39 50.105638 14.428038
1.1.40 50.105650 14.428030
1.1.41 50.105660 14.428023
1.1.42 50.105670 14.428015
1.1.43 50.105680 14.428005
1.1.44 50.105690 14.427995
1.1.45 50.105700 14.427986
1.1.46 50.105710 14.427978
1.1.47 50.105720 14.427968
1.1.48 50.105730 14.427958
1.1.49 50.105740 14.427946
1.1.50 50.105748 14.427936
1.1.51 50.105756 14.427928
1.1.52 50.105765 14.427918
1.1.53 50.105773 14.427908
1.1.54 50.105781 14.427895
1.1.55 50.105790 14.427881
1.1.56 50.105798 14.427868
1.1.57 50.105806 14.427853
1.1.58 50.105813 14.427838
1.1.59 50.105820 14.427823
1.1.60 50.105825 14.427808
end_lane
lane 1.2
num_waypoints 60
checkpoint 1.2.30 2
exit 1.2.60 20.1.1
exit 1.2.60 21.2.1
1.2.1 50.105825 14.427808
1.2.2 50.105820 14.427823
1.2.3 50.105813 14.427838
1.2.4 50.105806 14.427853
1.2.5 50.105798 14.427868
1.2.6 50.105790 14.427881
1.2.7 50.105781 14.427895
1.2.8 50.105773 14.427908
1.2.9 50.105765 14.427918
1.2.10 50.105756 14.427928
1.2.11 50.105748 14.427936
1.2.12 50.105740 14.427946
1.2.13 50.105730 14.427958
1.2.14 50.105720 14.427968
1.2.15 50.105710 14.427978
1.2.16 50.105700 14.427986
1.2.17 50.105690 14.427995
1.2.18 50.105680 14.428005
1.2.19 50.105670 14.428015
1.2.20 50.105660 14.428023
1.2.21 50.105650 14.428030
1.2.22 50.105638 14.428038
1.2.23 50.105626 14.428045
1.2.24 50.105616 14.428051
1.2.25 50.105605 14.428058
1.2.26 50.105593 14.428063
1.2.27 50.105581 14.428068
1.2.28 50.105570 14.428073
1.2.29 50.105560 14.428080
1.2.30 50.105546 14.428085
1.2.31 50.105536 14.428090
1.2.32 50.105525 14.428093
1.2.33 50.105515 14.428096
1.2.34 50.105503 14.428100
1.2.35 50.105493 14.428103
1.2.36 50.105481 14.428103
1.2.37 50.105471 14.428105
1.2.38 50.105460 14.428105
1.2.39 50.105446 14.428105
1.2.40 50.105435 14.428103
1.2.41 50.105423 14.428101
1.2.42 50.105410 14.428100
1.2.43 50.105398 14.428096
1.2.44 50.105385 14.428093
1.2.45 50.105375 14.428090
1.2.46 50.105363 14.428083
1.2.47 50.105353 14.428076
1.2.48 50.105343 14.428068
1.2.49 50.105333 14.428058
1.2.50 50.105323 14.428050
1.2.51 50.105313 14.428040
1.2.52 50.105301 14.428031
1.2.53 50.105291 14.428023
1.2.54 50.105280 14.428015
1.2.55 50.105270 14.428006
1.2.56 50.105260 14.427998
1.2.57 50.105250 14.427991
1.2.58 50.105240 14.427985
1.2.59 50.105230 14.427981
1.2.60 50.105220 14.427978
end_lane
end_segment
segment 2
num_lanes 2
segment_name B
lane 2.1
num_waypoints 47
checkpoint 2.1.23 3
exit 2.1.47 3.1.1
exit 2.1.47 4.1.1
2.1.1 50.105846 14.427758
2.1.2 50.105850 14.427743
2.1.3 50.105853 14.427728
2.1.4 50.105856 14.427711
2.1.5 50.105860 14.427693
2.1.6 50.105863 14.427676
2.1.7 50.105866 14.427660
2.1.8 50.105868 14.427641
2.1.9 50.105871 14.427623
2.1.10 50.105873 14.427605
2.1.11 50.105875 14.427585
2.1.12 50.105876 14.427566
2.1.13 50.105876 14.427548
2.1.14 50.105876 14.427530
2.1.15 50.105876 14.427510
2.1.16 50.105875 14.427493
2.1.17 50.105875 14.427475
2.1.18 50.105873 14.427455
2.1.19 50.105871 14.427438
2.1.20 50.105870 14.427420
2.1.21 50.105868 14.427403
2.1.22 50.105865 14.427386
2.1.23 50.105861 14.427368
2.1.24 50.105858 14.427350
2.1.25 50.105855 14.427333
2.1.26 50.105851 14.427316
2.1.27 50.105846 14.427300
2.1.28 50.105841 14.427285
2.1.29 50.105836 14.427268
2.1.30 50.105830 14.427253
2.1.31 50.105825 14.427238
2.1.32 50.105818 14.427223
2.1.33 50.105811 14.427210
2.1.34 50.105805 14.427196
2.1.35 50.105796 14.427183
2.1.36 50.105790 14.427168
2.1.37 50.105783 14.427155
2.1.38 50.105775 14.427143
2.1.39 50.105766 14.427131
2.1.40 50.105758 14.427120
2.1.41 50.105750 14.427108
2.1.42 50.105741 14.427098
2.1.43 50.105733 14.427090
2.1.44 50.105725 14.427080
2.1.45 50.105716 14.427071
2.1.46 50.105708 14.427063
2.1.47 50.105700 14.427055
end_lane
lane 2.2
num_waypoints 47
checkpoint 2.2.23 4
exit 2.2.47 1.2.1
exit 2.2.47 5.1.1
2.2.1 50.105700 14.427055
2.2.2 50.105708 14.427063
2.2.3 50.105716 14.427071
2.2.4 50.105725 14.427080
2.2.5 50.105733 14.427090
2.2.6 50.105741 14.427098
2.2.7 50.105750 14.427108
2.2.8 50.105758 14.427120
2.2.9 50.105766 14.427131
2.2.10 50.105775 14.427143
2.2.11 50.105783 14.427155
2.2.12 50.105790 14.427168
2.2.13 50.105796 14.427183
2.2.14 50.105805 14.427196
2.2.15 50.105811 14.427210
2.2.16 50.105818 14.427223
2.2.17 50.105825 14.427238
2.2.18 50.105830 14.427253
2.2.19 50.105836 14.427268
2.2.20 50.105841 14.427285
2.2.21 50.105846 14.427300
2.2.22 50.105851 14.427316
2.2.23 50.105855 14.427333
2.2.24 50.105858 14.427350
2.2.25 50.105861 14.427368
2.2.26 50.105865 14.427386
2.2.27 50.105868 14.427403
2.2.28 50.105870 14.427420
2.2.29 50.105871 14.427438
2.2.30 50.105873 14.427455
2.2.31 50.105875 14.427475
2.2.32 50.105875 14.427493
2.2.33 50.105876 14.427510
2.2.34 50.105876 14.427530
2.2.35 50.105876 14.427548
2.2.36 50.105876 14.427566
2.2.37 50.105875 14.427585
2.2.38 50.105873 14.427605
2.2.39 50.105871 14.427623
2.2.40 50.105868 14.427641
2.2.41 50.105866 14.427660
2.2.42 50.105863 14.427676
2.2.43 50.105860 14.427693
2.2.44 50.105856 14.427711
2.2.45 50.105853 14.427728
2.2.46 50.105850 14.427743
2.2.47 50.105846 14.427758
end_lane
end_segment
segment 3
num_lanes 2
segment_name C
lane 3.1
num_waypoints 42
checkpoint 3.1.21 5
exit 3.1.42 8.2.1
exit 3.1.42 14.2.1
exit 3.1.42 21.1.1
3.1.1 50.105658 14.427046
3.1.2 50.105648 14.427041
3.1.3 50.105640 14.427036
3.1.4 50.105630 14.427031
3.1.5 50.105620 14.427026
3.1.6 50.105608 14.427023
3.1.7 50.105598 14.427020
3.1.8 50.105586 14.427016
3.1.9 50.105576 14.427015
3.1.10 50.105565 14.427013
3.1.11 50.105555 14.427011
3.1.12 50.105543 14.427010
3.1.13 50.105531 14.427008
3.1.14 50.105520 14.427010
3.1.15 50.105510 14.427010
3.1.16 50.105498 14.427010
3.1.17 50.105486 14.427011
3.1.18 50.105475 14.427013
3.1.19 50.105465 14.427018
3.1.20 50.105453 14.427020
3.1.21 50.105443 14.427021
3.1.22 50.105433 14.427025
3.1.23 50.105423 14.427028
3.1.24 50.105411 14.427028
3.1.25 50.105400 14.427030
3.1.26 50.105388 14.427033
3.1.27 50.105376 14.427036
3.1.28 50.105363 14.427041
3.1.29 50.105351 14.427045
3.1.30 50.105340 14.427050
3.1.31 50.105326 14.427055
3.1.32 50.105316 14.427060
3.1.33 50.105305 14.427066
3.1.34 50.105295 14.427071
3.1.35 50.105285 14.427076
3.1.36 50.105273 14.427080
3.1.37 50.105263 14.427083
3.1.38 50.105251 14.427086
3.1.39 50.105241 14.427090
3.1.40 50.105231 14.427095
3.1.41 50.105221 14.427098
3.1.42 50.105211 14.427103
end_lane
lane 3.2
num_waypoints 42
checkpoint 3.2.21 6
exit 3.2.42 2.2.1
exit 3.2.42 4.1.1
3.2.1 50.105211 14.427103
3.2.2 50.105221 14.427098
3.2.3 50.105231 14.427095
3.2.4 50.105241 14.427090
3.2.5 50.105251 14.427086
3.2.6 50.105263 14.427083
3.2.7 50.105273 14.427080
3.2.8 50.105285 14.427076
3.2.9 50.105295 14.427071
3.2.10 50.105305 14.427066
3.2.11 50.105316 14.427060
3.2.12 50.105326 14.427055
3.2.13 50.105340 14.427050
3.2.14 50.105351 14.427045
3.2.15 50.105363 14.427041
3.2.16 50.105376 14.427036
3.2.17 50.105388 14.427033
3.2.18 50.105400 14.427030
3.2.19 50.105411 14.427028
3.2.20 50.105423 14.427028
3.2.21 50.105433 14.427025
3.2.22 50.105443 14.427021
3.2.23 50.105453 14.427020
3.2.24 50.105465 14.427018
3.2.25 50.105475 14.427013
3.2.26 50.105486 14.427011
3.2.27 50.105498 14.427010
3.2.28 50.105510 14.427010
3.2.29 50.105520 14.427010
3.2.30 50.105531 14.427008
3.2.31 50.105543 14.427010
3.2.32 50.105555 14.427011
3.2.33 50.105565 14.427013
3.2.34 50.105576 14.427015
3.2.35 50.105586 14.427016
3.2.36 50.105598 14.427020
3.2.37 50.105608 14.427023
3.2.38 50.105620 14.427026
3.2.39 50.105630 14.427031
3.2.40 50.105640 14.427036
3.2.41 50.105648 14.427041
3.2.42 50.105658 14.427046
end_lane
end_segment
segment 4
num_lanes 2
segment_name D
lane 4.1
num_waypoints 47
checkpoint 4.1.23 7
exit 4.1.47 5.2.1
exit 4.1.47 6.1.1
4.1.1 50.105718 14.427045
4.1.2 50.105723 14.427043
4.1.3 50.105730 14.427045
4.1.4 50.105736 14.427048
4.1.5 50.105745 14.427051
4.1.6 50.105751 14.427053
4.1.7 50.105760 14.427058
4.1.8 50.105768 14.427061
4.1.9 50.105775 14.427065
4.1.10 50.105781 14.427068
4.1.11 50.105790 14.427071
4.1.12 50.105796 14.427076
4.1.13 50.105805 14.427081
4.1.14 50.105811 14.427088
4.1.15 50.105820 14.427093
4.1.16 50.105828 14.427100
4.1.17 50.105835 14.427106
4.1.18 50.105843 14.427111
4.1.19 50.105848 14.427116
4.1.20 50.105856 14.427123
4.1.21 50.105863 14.427130
4.1.22 50.105870 14.427135
4.1.23 50.105876 14.427143
4.1.24 50.105883 14.427150
4.1.25 50.105888 14.427158
4.1.26 50.105895 14.427165
4.1.27 50.105900 14.427173
4.1.28 50.105906 14.427180
4.1.29 50.105913 14.427188
4.1.30 50.105918 14.427196
4.1.31 50.105923 14.427203
4.1.32 50.105928 14.427211
4.1.33 50.105933 14.427220
4.1.34 50.105938 14.427228
4.1.35 50.105941 14.427236
4.1.36 50.105946 14.427246
4.1.37 50.105951 14.427255
4.1.38 50.105956 14.427263
4.1.39 50.105961 14.427271
4.1.40 50.105965 14.427281
4.1.41 50.105970 14.427290
4.1.42 50.105975 14.427300
4.1.43 50.105980 14.427308
4.1.44 50.105983 14.427318
4.1.45 50.105988 14.427328
4.1.46 50.105991 14.427336
4.1.47 50.105995 14.427346
end_lane
lane 4.2
num_waypoints 47
checkpoint 4.2.23 8
exit 4.2.47 2.2.1
exit 4.2.47 3.1.1
4.2.1 50.105995 14.427346
4.2.2 50.105991 14.427336
4.2.3 50.105988 14.427328
4.2.4 50.105983 14.427318
4.2.5 50.105980 14.427308
4.2.6 50.105975 14.427300
4.2.7 50.105970 14.427290
4.2.8 50.105965 14.427281
4.2.9 50.105961 14.427271
4.2.10 50.105956 14.427263
4.2.11 50.105951 14.427255
4.2.12 50.105946 14.427246
4.2.13 50.105941 14.427236
4.2.14 50.105938 14.427228
4.2.15 50.105933 14.427220
4.2.16 50.105928 14.427211
4.2.17 50.105923 14.427203
4.2.18 50.105918 14.427196
4.2.19 50.105913 14.427188
4.2.20 50.105906 14.427180
4.2.21 50.105900 14.427173
4.2.22 50.105895 14.427165
4.2.23 50.105888 14.427158
4.2.24 50.105883 14.427150
4.2.25 50.105876 14.427143
4.2.26 50.105870 14.427135
4.2.27 50.105863 14.427130
4.2.28 50.105856 14.427123
4.2.29 50.105848 14.427116
4.2.30 50.105843 14.427111
4.2.31 50.105835 14.427106
4.2.32 50.105828 14.427100
4.2.33 50.105820 14.427093
4.2.34 50.105811 14.427088
4.2.35 50.105805 14.427081
4.2.36 50.105796 14.427076
4.2.37 50.105790 14.427071
4.2.38 50.105781 14.427068
4.2.39 50.105775 14.427065
4.2.40 50.105768 14.427061
4.2.41 50.105760 14.427058
4.2.42 50.105751 14.427053
4.2.43 50.105745 14.427051
4.2.44 50.105736 14.427048
4.2.45 50.105730 14.427045
4.2.46 50.105723 14.427043
4.2.47 50.105718 14.427045
end_lane
end_segment
segment 5
num_lanes 2
segment_name E
lane 5.1
num_waypoints 25
checkpoint 5.1.12 9
exit 5.1.25 4.2.1
exit 5.1.25 6.1.1
5.1.1 50.105853 14.427771
5.1.2 50.105861 14.427763
5.1.3 50.105871 14.427753
5.1.4 50.105880 14.427740
5.1.5 50.105888 14.427723
5.1.6 50.105896 14.427708
5.1.7 50.105905 14.427691
5.1.8 50.105913 14.427675
5.1.9 50.105920 14.427658
5.1.10 50.105928 14.427641
5.1.11 50.105935 14.427623
5.1.12 50.105941 14.427603
5.1.13 50.105948 14.427585
5.1.14 50.105953 14.427565
5.1.15 50.105958 14.427546
5.1.16 50.105963 14.427528
5.1.17 50.105968 14.427508
5.1.18 50.105971 14.427488
5.1.19 50.105975 14.427470
5.1.20 50.105978 14.427451
5.1.21 50.105980 14.427431
5.1.22 50.105983 14.427411
5.1.23 50.105985 14.427391
5.1.24 50.105988 14.427371
5.1.25 50.105990 14.427355
end_lane
lane 5.2
num_waypoints 25
checkpoint 5.2.12 10
exit 5.2.25 1.2.1
exit 5.2.25 2.1.1
5.2.1 50.105990 14.427355
5.2.2 50.105988 14.427371
5.2.3 50.105985 14.427391
5.2.4 50.105983 14.427411
5.2.5 50.105980 14.427431
5.2.6 50.105978 14.427451
5.2.7 50.105975 14.427470
5.2.8 50.105971 14.427488
5.2.9 50.105968 14.427508
5.2.10 50.105963 14.427528
5.2.11 50.105958 14.427546
5.2.12 50.105953 14.427565
5.2.13 50.105948 14.427585
5.2.14 50.105941 14.427603
5.2.15 50.105935 14.427623
5.2.16 50.105928 14.427641
5.2.17 50.105920 14.427658
5.2.18 50.105913 14.427675
5.2.19 50.105905 14.427691
5.2.20 50.105896 14.427708
5.2.21 50.105888 14.427723
5.2.22 50.105880 14.427740
5.2.23 50.105871 14.427753
5.2.24 50.105861 14.427763
5.2.25 50.105853 14.427771
end_lane
end_segment
segment 6
num_lanes 2
segment_name F
lane 6.1
num_waypoints 40
checkpoint 6.1.20 11
exit 6.1.40 7.2.1
6.1.1 50.105966 14.427320
6.1.2 50.105971 14.427330
6.1.3 50.105976 14.427340
6.1.4 50.105980 14.427350
6.1.5 50.105985 14.427360
6.1.6 50.105991 14.427373
6.1.7 50.105998 14.427388
6.1.8 50.106003 14.427401
6.1.9 50.106010 14.427415
6.1.10 50.106013 14.427428
6.1.11 50.106018 14.427441
6.1.12 50.106023 14.427455
6.1.13 50.106028 14.427466
6.1.14 50.106033 14.427478
6.1.15 50.106036 14.427493
6.1.16 50.106041 14.427505
6.1.17 50.106046 14.427520
6.1.18 50.106050 14.427535
6.1.19 50.106055 14.427551
6.1.20 50.106060 14.427565
6.1.21 50.106065 14.427575
6.1.22 50.106068 14.427585
6.1.23 50.106070 14.427598
6.1.24 50.106073 14.427615
6.1.25 50.106075 14.427628
6.1.26 50.106076 14.427641
6.1.27 50.106080 14.427655
6.1.28 50.106083 14.427668
6.1.29 50.106086 14.427681
6.1.30 50.106090 14.427693
6.1.31 50.106095 14.427708
6.1.32 50.106101 14.427725
6.1.33 50.106105 14.427741
6.1.34 50.106108 14.427758
6.1.35 50.106108 14.427768
6.1.36 50.106111 14.427780
6.1.37 50.106113 14.427788
6.1.38 50.106116 14.427796
6.1.39 50.106123 14.427810
6.1.40 50.106123 14.427813
end_lane
lane 6.2
num_waypoints 40
checkpoint 6.2.20 12
exit 6.2.40 4.2.1
exit 6.2.40 5.2.1
6.2.1 50.106123 14.427813
6.2.2 50.106123 14.427810
6.2.3 50.106116 14.427796
6.2.4 50.106113 14.427788
6.2.5 50.106111 14.427780
6.2.6 50.106108 14.427768
6.2.7 50.106108 14.427758
6.2.8 50.106105 14.427741
6.2.9 50.106101 14.427725
6.2.10 50.106095 14.427708
6.2.11 50.106090 14.427693
6.2.12 50.106086 14.427681
6.2.13 50.106083 14.427668
6.2.14 50.106080 14.427655
6.2.15 50.106076 14.427641
6.2.16 50.106075 14.427628
6.2.17 50.106073 14.427615
6.2.18 50.106070 14.427598
6.2.19 50.106068 14.427585
6.2.20 50.106065 14.427575
6.2.21 50.106060 14.427565
6.2.22 50.106055 14.427551
6.2.23 50.106050 14.427535
6.2.24 50.106046 14.427520
6.2.25 50.106041 14.427505
6.2.26 50.106036 14.427493
6.2.27 50.106033 14.427478
6.2.28 50.106028 14.427466
6.2.29 50.106023 14.427455
6.2.30 50.106018 14.427441
6.2.31 50.106013 14.427428
6.2.32 50.106010 14.427415
6.2.33 50.106003 14.427401
6.2.34 50.105998 14.427388
6.2.35 50.105991 14.427373
6.2.36 50.105985 14.427360
6.2.37 50.105980 14.427350
6.2.38 50.105976 14.427340
6.2.39 50.105971 14.427330
6.2.40 50.105966 14.427320
end_lane
end_segment
segment 7
num_lanes 2
segment_name G
lane 7.1
num_waypoints 109
checkpoint 7.1.54 13
exit 7.1.109 6.2.1
7.1.1 50.106011 14.426290
7.1.2 50.106018 14.426293
7.1.3 50.106023 14.426301
7.1.4 50.106028 14.426318
7.1.5 50.106035 14.426335
7.1.6 50.106043 14.426351
7.1.7 50.106050 14.426368
7.1.8 50.106056 14.426383
7.1.9 50.106060 14.426393
7.1.10 50.106063 14.426405
7.1.11 50.106068 14.426421
7.1.12 50.106070 14.426435
7.1.13 50.106073 14.426450
7.1.14 50.106078 14.426461
7.1.15 50.106081 14.426473
7.1.16 50.106083 14.426485
7.1.17 50.106086 14.426496
7.1.18 50.106093 14.426508
7.1.19 50.106096 14.426523
7.1.20 50.106100 14.426538
7.1.21 50.106101 14.426550
7.1.22 50.106101 14.426563
7.1.23 50.106101 14.426578
7.1.24 50.106101 14.426590
7.1.25 50.106103 14.426605
7.1.26 50.106106 14.426621
7.1.27 50.106108 14.426636
7.1.28 50.106110 14.426653
7.1.29 50.106110 14.426668
7.1.30 50.106111 14.426686
7.1.31 50.106115 14.426703
7.1.32 50.106116 14.426721
7.1.33 50.106118 14.426736
7.1.34 50.106121 14.426753
7.1.35 50.106125 14.426768
7.1.36 50.106125 14.426785
7.1.37 50.106126 14.426801
7.1.38 50.106126 14.426816
7.1.39 50.106125 14.426830
7.1.40 50.106126 14.426840
7.1.41 50.106128 14.426855
7.1.42 50.106126 14.426863
7.1.43 50.106126 14.426875
7.1.44 50.106125 14.426891
7.1.45 50.106125 14.426905
7.1.46 50.106121 14.426916
7.1.47 50.106118 14.426930
7.1.48 50.106118 14.426948
7.1.49 50.106120 14.426966
7.1.50 50.106120 14.426980
7.1.51 50.106120 14.426990
7.1.52 50.106118 14.427000
7.1.53 50.106118 14.427015
7.1.54 50.106118 14.427033
7.1.55 50.106118 14.427050
7.1.56 50.106116 14.427068
7.1.57 50.106115 14.427086
7.1.58 50.106115 14.427100
7.1.59 50.106116 14.427111
7.1.60 50.106118 14.427123
7.1.61 50.106118 14.427136
7.1.62 50.106120 14.427155
7.1.63 50.106120 14.427165
7.1.64 50.106121 14.427175
7.1.65 50.106120 14.427190
7.1.66 50.106120 14.427203
7.1.67 50.106118 14.427220
7.1.68 50.106118 14.427235
7.1.69 50.106116 14.427255
7.1.70 50.106115 14.427270
7.1.71 50.106115 14.427291
7.1.72 50.106115 14.427310
7.1.73 50.106115 14.427326
7.1.74 50.106116 14.427343
7.1.75 50.106118 14.427360
7.1.76 50.106118 14.427378
7.1.77 50.106118 14.427395
7.1.78 50.106118 14.427413
7.1.79 50.106120 14.427433
7.1.80 50.106118 14.427448
7.1.81 50.106118 14.427463
7.1.82 50.106116 14.427476
7.1.83 50.106118 14.427491
7.1.84 50.106123 14.427505
7.1.85 50.106128 14.427520
7.1.86 50.106128 14.427536
7.1.87 50.106130 14.427553
7.1.88 50.106128 14.427570
7.1.89 50.106126 14.427585
7.1.90 50.106125 14.427601
7.1.91 50.106125 14.427615
7.1.92 50.106123 14.427628
7.1.93 50.106123 14.427648
7.1.94 50.106123 14.427666
7.1.95 50.106121 14.427683
7.1.96 50.106120 14.427700
7.1.97 50.106118 14.427715
7.1.98 50.106118 14.427730
7.1.99 50.106120 14.427738
7.1.100 50.106121 14.427748
7.1.101 50.106121 14.427765
7.1.102 50.106120 14.427780
7.1.103 50.106118 14.427798
7.1.104 50.106113 14.427821
7.1.105 50.106111 14.427841
7.1.106 50.106111 14.427858
7.1.107 50.106110 14.427873
7.1.108 50.106110 14.427885
7.1.109 50.106111 14.427895
end_lane
lane 7.2
num_waypoints 109
checkpoint 7.2.54 14
exit 7.2.109 8.1.1
exit 7.2.109 9.2.1
7.2.1 50.106111 14.427895
7.2.2 50.106110 14.427885
7.2.3 50.106110 14.427873
7.2.4 50.106111 14.427858
7.2.5 50.106111 14.427841
7.2.6 50.106113 14.427821
7.2.7 50.106118 14.427798
7.2.8 50.106120 14.427780
7.2.9 50.106121 14.427765
7.2.10 50.106121 14.427748
7.2.11 50.106120 14.427738
7.2.12 50.106118 14.427730
7.2.13 50.106118 14.427715
7.2.14 50.106120 14.427700
7.2.15 50.106121 14.427683
7.2.16 50.106123 14.427666
7.2.17 50.106123 14.427648
7.2.18 50.106123 14.427628
7.2.19 50.106125 14.427615
7.2.20 50.106125 14.427601
7.2.21 50.106126 14.427585
7.2.22 50.106128 14.427570
7.2.23 50.106130 14.427553
7.2.24 50.106128 14.427536
7.2.25 50.106128 14.427520
7.2.26 50.106123 14.427505
7.2.27 50.106118 14.427491
7.2.28 50.106116 14.427476
7.2.29 50.106118 14.427463
7.2.30 50.106118 14.427448
7.2.31 50.106120 14.427433
7.2.32 50.106118 14.427413
7.2.33 50.106118 14.427395
7.2.34 50.106118 14.427378
7.2.35 50.106118 14.427360
7.2.36 50.106116 14.427343
7.2.37 50.106115 14.427326
7.2.38 50.106115 14.427310
7.2.39 50.106115 14.427291
7.2.40 50.106115 14.427270
7.2.41 50.106116 14.427255
7.2.42 50.106118 14.427235
7.2.43 50.106118 14.427220
7.2.44 50.106120 14.427203
7.2.45 50.106120 14.427190
7.2.46 50.106121 14.427175
7.2.47 50.106120 14.427165
7.2.48 50.106120 14.427155
7.2.49 50.106118 14.427136
7.2.50 50.106118 14.427123
7.2.51 50.106116 14.427111
7.2.52 50.106115 14.427100
7.2.53 50.106115 14.427086
7.2.54 50.106116 14.427068
7.2.55 50.106118 14.427050
7.2.56 50.106118 14.427033
7.2.57 50.106118 14.427015
7.2.58 50.106118 14.427000
7.2.59 50.106120 14.426990
7.2.60 50.106120 14.426980
7.2.61 50.106120 14.426966
7.2.62 50.106118 14.426948
7.2.63 50.106118 14.426930
7.2.64 50.106121 14.426916
7.2.65 50.106125 14.426905
7.2.66 50.106125 14.426891
7.2.67 50.106126 14.426875
7.2.68 50.106126 14.426863
7.2.69 50.106128 14.426855
7.2.70 50.106126 14.426840
7.2.71 50.106125 14.426830
7.2.72 50.106126 14.426816
7.2.73 50.106126 14.426801
7.2.74 50.106125 14.426785
7.2.75 50.106125 14.426768
7.2.76 50.106121 14.426753
7.2.77 50.106118 14.426736
7.2.78 50.106116 14.426721
7.2.79 50.106115 14.426703
7.2.80 50.106111 14.426686
7.2.81 50.106110 14.426668
7.2.82 50.106110 14.426653
7.2.83 50.106108 14.426636
7.2.84 50.106106 14.426621
7.2.85 50.106103 14.426605
7.2.86 50.106101 14.426590
7.2.87 50.106101 14.426578
7.2.88 50.106101 14.426563
7.2.89 50.106101 14.426550
7.2.90 50.106100 14.426538
7.2.91 50.106096 14.426523
7.2.92 50.106093 14.426508
7.2.93 50.106086 14.426496
7.2.94 50.106083 14.426485
7.2.95 50.106081 14.426473
7.2.96 50.106078 14.426461
7.2.97 50.106073 14.426450
7.2.98 50.106070 14.426435
7.2.99 50.106068 14.426421
7.2.100 50.106063 14.426405
7.2.101 50.106060 14.426393
7.2.102 50.106056 14.426383
7.2.103 50.106050 14.426368
7.2.104 50.106043 14.426351
7.2.105 50.106035 14.426335
7.2.106 50.106028 14.426318
7.2.107 50.106023 14.426301
7.2.108 50.106018 14.426293
7.2.109 50.106011 14.426290
end_lane
end_segment
segment 8
num_lanes 2
segment_name H
lane 8.1
num_waypoints 71
checkpoint 8.1.35 15
exit 8.1.71 3.2.1
exit 8.1.71 11.1.1
exit 8.1.71 14.2.1
exit 8.1.71 21.1.1
8.1.1 50.105956 14.426205
8.1.2 50.105950 14.426218
8.1.3 50.105945 14.426231
8.1.4 50.105938 14.426245
8.1.5 50.105933 14.426260
8.1.6 50.105925 14.426276
8.1.7 50.105916 14.426293
8.1.8 50.105908 14.426310
8.1.9 50.105901 14.426328
8.1.10 50.105895 14.426346
8.1.11 50.105886 14.426363
8.1.12 50.105880 14.426378
8.1.13 50.105870 14.426395
8.1.14 50.105865 14.426413
8.1.15 50.105858 14.426431
8.1.16 50.105853 14.426450
8.1.17 50.105848 14.426466
8.1.18 50.105841 14.426485
8.1.19 50.105835 14.426503
8.1.20 50.105828 14.426518
8.1.21 50.105820 14.426533
8.1.22 50.105811 14.426551
8.1.23 50.105803 14.426568
8.1.24 50.105795 14.426583
8.1.25 50.105786 14.426598
8.1.26 50.105778 14.426613
8.1.27 50.105770 14.426628
8.1.28 50.105761 14.426645
8.1.29 50.105753 14.426660
8.1.30 50.105745 14.426676
8.1.31 50.105736 14.426688
8.1.32 50.105728 14.426698
8.1.33 50.105720 14.426711
8.1.34 50.105711 14.426723
8.1.35 50.105703 14.426735
8.1.36 50.105693 14.426745
8.1.37 50.105685 14.426753
8.1.38 50.105675 14.426760
8.1.39 50.105665 14.426768
8.1.40 50.105655 14.426775
8.1.41 50.105645 14.426781
8.1.42 50.105636 14.426788
8.1.43 50.105626 14.426796
8.1.44 50.105615 14.426805
8.1.45 50.105605 14.426813
8.1.46 50.105593 14.426820
8.1.47 50.105583 14.426826
8.1.48 50.105573 14.426833
8.1.49 50.105561 14.426841
8.1.50 50.105550 14.426848
8.1.51 50.105538 14.426855
8.1.52 50.105526 14.426860
8.1.53 50.105515 14.426868
8.1.54 50.105503 14.426875
8.1.55 50.105493 14.426881
8.1.56 50.105483 14.426888
8.1.57 50.105475 14.426895
8.1.58 50.105463 14.426901
8.1.59 50.105453 14.426908
8.1.60 50.105445 14.426915
8.1.61 50.105435 14.426923
8.1.62 50.105425 14.426930
8.1.63 50.105415 14.426933
8.1.64 50.105403 14.426936
8.1.65 50.105391 14.426940
8.1.66 50.105380 14.426946
8.1.67 50.105370 14.426953
8.1.68 50.105360 14.426958
8.1.69 50.105350 14.426963
8.1.70 50.105343 14.426968
8.1.71 50.105338 14.426971
end_lane
lane 8.2
num_waypoints 71
checkpoint 8.2.35 16
exit 8.2.71 7.1.1
exit 8.2.71 9.2.1
8.2.1 50.105338 14.426971
8.2.2 50.105343 14.426968
8.2.3 50.105350 14.426963
8.2.4 50.105360 14.426958
8.2.5 50.105370 14.426953
8.2.6 50.105380 14.426946
8.2.7 50.105391 14.426940
8.2.8 50.105403 14.426936
8.2.9 50.105415 14.426933
8.2.10 50.105425 14.426930
8.2.11 50.105435 14.426923
8.2.12 50.105445 14.426915
8.2.13 50.105453 14.426908
8.2.14 50.105463 14.426901
8.2.15 50.105475 14.426895
8.2.16 50.105483 14.426888
8.2.17 50.105493 14.426881
8.2.18 50.105503 14.426875
8.2.19 50.105515 14.426868
8.2.20 50.105526 14.426860
8.2.21 50.105538 14.426855
8.2.22 50.105550 14.426848
8.2.23 50.105561 14.426841
8.2.24 50.105573 14.426833
8.2.25 50.105583 14.426826
8.2.26 50.105593 14.426820
8.2.27 50.105605 14.426813
8.2.28 50.105615 14.426805
8.2.29 50.105626 14.426796
8.2.30 50.105636 14.426788
8.2.31 50.105645 14.426781
8.2.32 50.105655 14.426775
8.2.33 50.105665 14.426768
8.2.34 50.105675 14.426760
8.2.35 50.105685 14.426753
8.2.36 50.105693 14.426745
8.2.37 50.105703 14.426735
8.2.38 50.105711 14.426723
8.2.39 50.105720 14.426711
8.2.40 50.105728 14.426698
8.2.41 50.105736 14.426688
8.2.42 50.105745 14.426676
8.2.43 50.105753 14.426660
8.2.44 50.105761 14.426645
8.2.45 50.105770 14.426628
8.2.46 50.105778 14.426613
8.2.47 50.105786 14.426598
8.2.48 50.105795 14.426583
8.2.49 50.105803 14.426568
8.2.50 50.105811 14.426551
8.2.51 50.105820 14.426533
8.2.52 50.105828 14.426518
8.2.53 50.105835 14.426503
8.2.54 50.105841 14.426485
8.2.55 50.105848 14.426466
8.2.56 50.105853 14.426450
8.2.57 50.105858 14.426431
8.2.58 50.105865 14.426413
8.2.59 50.105870 14.426395
8.2.60 50.105880 14.426378
8.2.61 50.105886 14.426363
8.2.62 50.105895 14.426346
8.2.63 50.105901 14.426328
8.2.64 50.105908 14.426310
8.2.65 50.105916 14.426293
8.2.66 50.105925 14.426276
8.2.67 50.105933 14.426260
8.2.68 50.105938 14.426245
8.2.69 50.105945 14.426231
8.2.70 50.105950 14.426218
8.2.71 50.105956 14.426205
end_lane
end_segment
segment 9
num_lanes 2
segment_name I
lane 9.1
num_waypoints 90
checkpoint 9.1.45 17
exit 9.1.90 7.1.1
exit 9.1.90 8.1.1
9.1.1 50.106301 14.424728
9.1.2 50.106303 14.424741
9.1.3 50.106303 14.424760
9.1.4 50.106306 14.424771
9.1.5 50.106310 14.424786
9.1.6 50.106310 14.424803
9.1.7 50.106310 14.424818
9.1.8 50.106315 14.424838
9.1.9 50.106320 14.424856
9.1.10 50.106321 14.424878
9.1.11 50.106321 14.424898
9.1.12 50.106323 14.424923
9.1.13 50.106325 14.424950
9.1.14 50.106326 14.424971
9.1.15 50.106326 14.424993
9.1.16 50.106328 14.425016
9.1.17 50.106328 14.425040
9.1.18 50.106330 14.425060
9.1.19 50.106331 14.425081
9.1.20 50.106333 14.425106
9.1.21 50.106331 14.425133
9.1.22 50.106330 14.425158
9.1.23 50.106328 14.425176
9.1.24 50.106328 14.425196
9.1.25 50.106328 14.425218
9.1.26 50.106326 14.425240
9.1.27 50.106326 14.425260
9.1.28 50.106326 14.425275
9.1.29 50.106328 14.425290
9.1.30 50.106326 14.425306
9.1.31 50.106325 14.425323
9.1.32 50.106323 14.425340
9.1.33 50.106321 14.425355
9.1.34 50.106318 14.425371
9.1.35 50.106316 14.425390
9.1.36 50.106316 14.425406
9.1.37 50.106313 14.425421
9.1.38 50.106310 14.425436
9.1.39 50.106306 14.425450
9.1.40 50.106303 14.425463
9.1.41 50.106296 14.425485
9.1.42 50.106293 14.425505
9.1.43 50.106290 14.425525
9.1.44 50.106286 14.425541
9.1.45 50.106281 14.425561
9.1.46 50.106280 14.425580
9.1.47 50.106276 14.425596
9.1.48 50.106276 14.425611
9.1.49 50.106273 14.425626
9.1.50 50.106270 14.425643
9.1.51 50.106266 14.425656
9.1.52 50.106265 14.425670
9.1.53 50.106261 14.425685
9.1.54 50.106258 14.425700
9.1.55 50.106256 14.425711
9.1.56 50.106255 14.425725
9.1.57 50.106251 14.425741
9.1.58 50.106243 14.425763
9.1.59 50.106238 14.425780
9.1.60 50.106231 14.425796
9.1.61 50.106225 14.425813
9.1.62 50.106218 14.425833
9.1.63 50.106210 14.425855
9.1.64 50.106203 14.425871
9.1.65 50.106198 14.425891
9.1.66 50.106195 14.425910
9.1.67 50.106188 14.425930
9.1.68 50.106181 14.425950
9.1.69 50.106176 14.425968
9.1.70 50.106168 14.425985
9.1.71 50.106158 14.426003
9.1.72 50.106148 14.426020
9.1.73 50.106141 14.426038
9.1.74 50.106135 14.426056
9.1.75 50.106126 14.426073
9.1.76 50.106118 14.426090
9.1.77 50.106111 14.426108
9.1.78 50.106105 14.426128
9.1.79 50.106096 14.426145
9.1.80 50.106088 14.426163
9.1.81 50.106080 14.426178
9.1.82 50.106070 14.426193
9.1.83 50.106061 14.426208
9.1.84 50.106056 14.426221
9.1.85 50.106050 14.426233
9.1.86 50.106045 14.426245
9.1.87 50.106038 14.426255
9.1.88 50.106031 14.426266
9.1.89 50.106025 14.426278
9.1.90 50.106018 14.426288
end_lane
lane 9.2
num_waypoints 90
checkpoint 9.2.45 18
exit 9.2.90 10.1.1
9.2.1 50.106018 14.426288
9.2.2 50.106025 14.426278
9.2.3 50.106031 14.426266
9.2.4 50.106038 14.426255
9.2.5 50.106045 14.426245
9.2.6 50.106050 14.426233
9.2.7 50.106056 14.426221
9.2.8 50.106061 14.426208
9.2.9 50.106070 14.426193
9.2.10 50.106080 14.426178
9.2.11 50.106088 14.426163
9.2.12 50.106096 14.426145
9.2.13 50.106105 14.426128
9.2.14 50.106111 14.426108
9.2.15 50.106118 14.426090
9.2.16 50.106126 14.426073
9.2.17 50.106135 14.426056
9.2.18 50.106141 14.426038
9.2.19 50.106148 14.426020
9.2.20 50.106158 14.426003
9.2.21 50.106168 14.425985
9.2.22 50.106176 14.425968
9.2.23 50.106181 14.425950
9.2.24 50.106188 14.425930
9.2.25 50.106195 14.425910
9.2.26 50.106198 14.425891
9.2.27 50.106203 14.425871
9.2.28 50.106210 14.425855
9.2.29 50.106218 14.425833
9.2.30 50.106225 14.425813
9.2.31 50.106231 14.425796
9.2.32 50.106238 14.425780
9.2.33 50.106243 14.425763
9.2.34 50.106251 14.425741
9.2.35 50.106255 14.425725
9.2.36 50.106256 14.425711
9.2.37 50.106258 14.425700
9.2.38 50.106261 14.425685
9.2.39 50.106265 14.425670
9.2.40 50.106266 14.425656
9.2.41 50.106270 14.425643
9.2.42 50.106273 14.425626
9.2.43 50.106276 14.425611
9.2.44 50.106276 14.425596
9.2.45 50.106280 14.425580
9.2.46 50.106281 14.425561
9.2.47 50.106286 14.425541
9.2.48 50.106290 14.425525
9.2.49 50.106293 14.425505
9.2.50 50.106296 14.425485
9.2.51 50.106303 14.425463
9.2.52 50.106306 14.425450
9.2.53 50.106310 14.425436
9.2.54 50.106313 14.425421
9.2.55 50.106316 14.425406
9.2.56 50.106316 14.425390
9.2.57 50.106318 14.425371
9.2.58 50.106321 14.425355
9.2.59 50.106323 14.425340
9.2.60 50.106325 14.425323
9.2.61 50.106326 14.425306
9.2.62 50.106328 14.425290
9.2.63 50.106326 14.425275
9.2.64 50.106326 14.425260
9.2.65 50.106326 14.425240
9.2.66 50.106328 14.425218
9.2.67 50.106328 14.425196
9.2.68 50.106328 14.425176
9.2.69 50.106330 14.425158
9.2.70 50.106331 14.425133
9.2.71 50.106333 14.425106
9.2.72 50.106331 14.425081
9.2.73 50.106330 14.425060
9.2.74 50.106328 14.425040
9.2.75 50.106328 14.425016
9.2.76 50.106326 14.424993
9.2.77 50.106326 14.424971
9.2.78 50.106325 14.424950
9.2.79 50.106323 14.424923
9.2.80 50.106321 14.424898
9.2.81 50.106321 14.424878
9.2.82 50.106320 14.424856
9.2.83 50.106315 14.424838
9.2.84 50.106310 14.424818
9.2.85 50.106310 14.424803
9.2.86 50.106310 14.424786
9.2.87 50.106306 14.424771
9.2.88 50.106303 14.424760
9.2.89 50.106303 14.424741
9.2.90 50.106301 14.424728
end_lane
end_segment
segment 10
num_lanes 2
segment_name J
lane 10.1
num_waypoints 137
checkpoint 10.1.68 19
exit 10.1.137 11.2.1
exit 10.1.137 12.2.1
10.1.1 50.106301 14.424740
10.1.2 50.106298 14.424733
10.1.3 50.106293 14.424723
10.1.4 50.106290 14.424716
10.1.5 50.106285 14.424708
10.1.6 50.106280 14.424698
10.1.7 50.106276 14.424690
10.1.8 50.106273 14.424681
10.1.9 50.106268 14.424668
10.1.10 50.106261 14.424658
10.1.11 50.106256 14.424646
10.1.12 50.106250 14.424633
10.1.13 50.106245 14.424618
10.1.14 50.106238 14.424605
10.1.15 50.106231 14.424591
10.1.16 50.106225 14.424578
10.1.17 50.106220 14.424568
10.1.18 50.106218 14.424560
10.1.19 50.106213 14.424548
10.1.20 50.106210 14.424533
10.1.21 50.106206 14.424521
10.1.22 50.106203 14.424510
10.1.23 50.106200 14.424498
10.1.24 50.106196 14.424486
10.1.25 50.106191 14.424473
10.1.26 50.106188 14.424461
10.1.27 50.106183 14.424451
10.1.28 50.106175 14.424440
10.1.29 50.106166 14.424431
10.1.30 50.106161 14.424421
10.1.31 50.106156 14.424413
10.1.32 50.106151 14.424403
10.1.33 50.106148 14.424393
10.1.34 50.106143 14.424381
10.1.35 50.106138 14.424370
10.1.36 50.106133 14.424356
10.1.37 50.106125 14.424345
10.1.38 50.106120 14.424333
10.1.39 50.106115 14.424323
10.1.40 50.106110 14.424313
10.1.41 50.106105 14.424303
10.1.42 50.106100 14.424293
10.1.43 50.106095 14.424281
10.1.44 50.106090 14.424271
10.1.45 50.106085 14.424260
10.1.46 50.106080 14.424248
10.1.47 50.106075 14.424235
10.1.48 50.106068 14.424221
10.1.49 50.106061 14.424206
10.1.50 50.106055 14.424193
10.1.51 50.106050 14.424181
10.1.52 50.106043 14.424171
10.1.53 50.106038 14.424160
10.1.54 50.106031 14.424148
10.1.55 50.106026 14.424136
10.1.56 50.106023 14.424126
10.1.57 50.106020 14.424116
10.1.58 50.106018 14.424108
10.1.59 50.106015 14.424096
10.1.60 50.106011 14.424088
10.1.61 50.106008 14.424081
10.1.62 50.106005 14.424071
10.1.63 50.106001 14.424063
10.1.64 50.105998 14.424056
10.1.65 50.105995 14.424048
10.1.66 50.105993 14.424040
10.1.67 50.105990 14.424031
10.1.68 50.105986 14.424023
10.1.69 50.105983 14.424015
10.1.70 50.105980 14.424005
10.1.71 50.105978 14.423995
10.1.72 50.105973 14.423985
10.1.73 50.105970 14.423975
10.1.74 50.105968 14.423961
10.1.75 50.105965 14.423951
10.1.76 50.105963 14.423941
10.1.77 50.105960 14.423928
10.1.78 50.105956 14.423916
10.1.79 50.105955 14.423903
10.1.80 50.105951 14.423886
10.1.81 50.105948 14.423875
10.1.82 50.105945 14.423860
10.1.83 50.105943 14.423845
10.1.84 50.105941 14.423830
10.1.85 50.105941 14.423816
10.1.86 50.105943 14.423805
10.1.87 50.105943 14.423791
10.1.88 50.105943 14.423778
10.1.89 50.105945 14.423765
10.1.90 50.105945 14.423751
10.1.91 50.105943 14.423736
10.1.92 50.105945 14.423723
10.1.93 50.105945 14.423710
10.1.94 50.105945 14.423696
10.1.95 50.105946 14.423685
10.1.96 50.105948 14.423675
10.1.97 50.105950 14.423665
10.1.98 50.105951 14.423653
10.1.99 50.105951 14.423641
10.1.100 50.105953 14.423630
10.1.101 50.105955 14.423618
10.1.102 50.105956 14.423610
10.1.103 50.105958 14.423598
10.1.104 50.105958 14.423583
10.1.105 50.105960 14.423571
10.1.106 50.105961 14.423558
10.1.107 50.105963 14.423545
10.1.108 50.105963 14.423533
10.1.109 50.105965 14.423523
10.1.110 50.105966 14.423511
10.1.111 50.105966 14.423498
10.1.112 50.105966 14.423485
10.1.113 50.105963 14.423473
10.1.114 50.105963 14.423461
10.1.115 50.105961 14.423450
10.1.116 50.105960 14.423436
10.1.117 50.105958 14.423426
10.1.118 50.105956 14.423413
10.1.119 50.105951 14.423398
10.1.120 50.105948 14.423383
10.1.121 50.105945 14.423370
10.1.122 50.105943 14.423356
10.1.123 50.105941 14.423343
10.1.124 50.105940 14.423331
10.1.125 50.105936 14.423316
10.1.126 50.105933 14.423305
10.1.127 50.105930 14.423290
10.1.128 50.105923 14.423275
10.1.129 50.105918 14.423260
10.1.130 50.105915 14.423246
10.1.131 50.105910 14.423233
10.1.132 50.105906 14.423221
10.1.133 50.105903 14.423211
10.1.134 50.105900 14.423200
10.1.135 50.105895 14.423188
10.1.136 50.105888 14.423176
10.1.137 50.105885 14.423171
end_lane
lane 10.2
num_waypoints 137
checkpoint 10.2.68 20
exit 10.2.137 9.1.1
10.2.1 50.105885 14.423171
10.2.2 50.105888 14.423176
10.2.3 50.105895 14.423188
10.2.4 50.105900 14.423200
10.2.5 50.105903 14.423211
10.2.6 50.105906 14.423221
10.2.7 50.105910 14.423233
10.2.8 50.105915 14.423246
10.2.9 50.105918 14.423260
10.2.10 50.105923 14.423275
10.2.11 50.105930 14.423290
10.2.12 50.105933 14.423305
10.2.13 50.105936 14.423316
10.2.14 50.105940 14.423331
10.2.15 50.105941 14.423343
10.2.16 50.105943 14.423356
10.2.17 50.105945 14.423370
10.2.18 50.105948 14.423383
10.2.19 50.105951 14.423398
10.2.20 50.105956 14.423413
10.2.21 50.105958 14.423426
10.2.22 50.105960 14.423436
10.2.23 50.105961 14.423450
10.2.24 50.105963 14.423461
10.2.25 50.105963 14.423473
10.2.26 50.105966 14.423485
10.2.27 50.105966 14.423498
10.2.28 50.105966 14.423511
10.2.29 50.105965 14.423523
10.2.30 50.105963 14.423533
10.2.31 50.105963 14.423545
10.2.32 50.105961 14.423558
10.2.33 50.105960 14.423571
10.2.34 50.105958 14.423583
10.2.35 50.105958 14.423598
10.2.36 50.105956 14.423610
10.2.37 50.105955 14.423618
10.2.38 50.105953 14.423630
10.2.39 50.105951 14.423641
10.2.40 50.105951 14.423653
10.2.41 50.105950 14.423665
10.2.42 50.105948 14.423675
10.2.43 50.105946 14.423685
10.2.44 50.105945 14.423696
10.2.45 50.105945 14.423710
10.2.46 50.105945 14.423723
10.2.47 50.105943 14.423736
10.2.48 50.105945 14.423751
10.2.49 50.105945 14.423765
10.2.50 50.105943 14.423778
10.2.51 50.105943 14.423791
10.2.52 50.105943 14.423805
10.2.53 50.105941 14.423816
10.2.54 50.105941 14.423830
10.2.55 50.105943 14.423845
10.2.56 50.105945 14.423860
10.2.57 50.105948 14.423875
10.2.58 50.105951 14.423886
10.2.59 50.105955 14.423903
10.2.60 50.105956 14.423916
10.2.61 50.105960 14.423928
10.2.62 50.105963 14.423941
10.2.63 50.105965 14.423951
10.2.64 50.105968 14.423961
10.2.65 50.105970 14.423975
10.2.66 50.105973 14.423985
10.2.67 50.105978 14.423995
10.2.68 50.105980 14.424005
10.2.69 50.105983 14.424015
10.2.70 50.105986 14.424023
10.2.71 50.105990 14.424031
10.2.72 50.105993 14.424040
10.2.73 50.105995 14.424048
10.2.74 50.105998 14.424056
10.2.75 50.106001 14.424063
10.2.76 50.106005 14.424071
10.2.77 50.106008 14.424081
10.2.78 50.106011 14.424088
10.2.79 50.106015 14.424096
10.2.80 50.106018 14.424108
10.2.81 50.106020 14.424116
10.2.82 50.106023 14.424126
10.2.83 50.106026 14.424136
10.2.84 50.106031 14.424148
10.2.85 50.106038 14.424160
10.2.86 50.106043 14.424171
10.2.87 50.106050 14.424181
10.2.88 50.106055 14.424193
10.2.89 50.106061 14.424206
10.2.90 50.106068 14.424221
10.2.91 50.106075 14.424235
10.2.92 50.106080 14.424248
10.2.93 50.106085 14.424260
10.2.94 50.106090 14.424271
10.2.95 50.106095 14.424281
10.2.96 50.106100 14.424293
10.2.97 50.106105 14.424303
10.2.98 50.106110 14.424313
10.2.99 50.106115 14.424323
10.2.100 50.106120 14.424333
10.2.101 50.106125 14.424345
10.2.102 50.106133 14.424356
10.2.103 50.106138 14.424370
10.2.104 50.106143 14.424381
10.2.105 50.106148 14.424393
10.2.106 50.106151 14.424403
10.2.107 50.106156 14.424413
10.2.108 50.106161 14.424421
10.2.109 50.106166 14.424431
10.2.110 50.106175 14.424440
10.2.111 50.106183 14.424451
10.2.112 50.106188 14.424461
10.2.113 50.106191 14.424473
10.2.114 50.106196 14.424486
10.2.115 50.106200 14.424498
10.2.116 50.106203 14.424510
10.2.117 50.106206 14.424521
10.2.118 50.106210 14.424533
10.2.119 50.106213 14.424548
10.2.120 50.106218 14.424560
10.2.121 50.106220 14.424568
10.2.122 50.106225 14.424578
10.2.123 50.106231 14.424591
10.2.124 50.106238 14.424605
10.2.125 50.106245 14.424618
10.2.126 50.106250 14.424633
10.2.127 50.106256 14.424646
10.2.128 50.106261 14.424658
10.2.129 50.106268 14.424668
10.2.130 50.106273 14.424681
10.2.131 50.106276 14.424690
10.2.132 50.106280 14.424698
10.2.133 50.106285 14.424708
10.2.134 50.106290 14.424716
10.2.135 50.106293 14.424723
10.2.136 50.106298 14.424733
10.2.137 50.106301 14.424740
end_lane
end_segment
segment 11
num_lanes 2
segment_name L
lane 11.1
num_waypoints 172
checkpoint 11.1.86 21
exit 11.1.172 10.2.1
exit 11.1.172 12.2.1
11.1.1 50.105325 14.426801
11.1.2 50.105330 14.426790
11.1.3 50.105335 14.426775
11.1.4 50.105340 14.426760
11.1.5 50.105346 14.426741
11.1.6 50.105355 14.426721
11.1.7 50.105360 14.426705
11.1.8 50.105363 14.426690
11.1.9 50.105366 14.426676
11.1.10 50.105371 14.426660
11.1.11 50.105376 14.426641
11.1.12 50.105381 14.426625
11.1.13 50.105386 14.426611
11.1.14 50.105391 14.426595
11.1.15 50.105395 14.426578
11.1.16 50.105400 14.426561
11.1.17 50.105401 14.426545
11.1.18 50.105401 14.426526
11.1.19 50.105403 14.426505
11.1.20 50.105410 14.426483
11.1.21 50.105415 14.426460
11.1.22 50.105418 14.426438
11.1.23 50.105421 14.426413
11.1.24 50.105428 14.426391
11.1.25 50.105435 14.426370
11.1.26 50.105445 14.426348
11.1.27 50.105455 14.426321
11.1.28 50.105461 14.426300
11.1.29 50.105468 14.426281
11.1.30 50.105471 14.426261
11.1.31 50.105475 14.426240
11.1.32 50.105478 14.426216
11.1.33 50.105483 14.426191
11.1.34 50.105488 14.426168
11.1.35 50.105495 14.426145
11.1.36 50.105500 14.426121
11.1.37 50.105505 14.426101
11.1.38 50.105506 14.426085
11.1.39 50.105508 14.426065
11.1.40 50.105516 14.426038
11.1.41 50.105521 14.426015
11.1.42 50.105521 14.425991
11.1.43 50.105516 14.425975
11.1.44 50.105516 14.425953
11.1.45 50.105516 14.425933
11.1.46 50.105521 14.425913
11.1.47 50.105528 14.425890
11.1.48 50.105531 14.425863
11.1.49 50.105531 14.425836
11.1.50 50.105531 14.425818
11.1.51 50.105533 14.425801
11.1.52 50.105535 14.425783
11.1.53 50.105538 14.425761
11.1.54 50.105541 14.425735
11.1.55 50.105545 14.425713
11.1.56 50.105548 14.425688
11.1.57 50.105550 14.425666
11.1.58 50.105551 14.425641
11.1.59 50.105551 14.425620
11.1.60 50.105551 14.425596
11.1.61 50.105555 14.425571
11.1.62 50.105556 14.425551
11.1.63 50.105560 14.425533
11.1.64 50.105563 14.425510
11.1.65 50.105565 14.425490
11.1.66 50.105565 14.425466
11.1.67 50.105570 14.425443
11.1.68 50.105570 14.425423
11.1.69 50.105571 14.425405
11.1.70 50.105575 14.425383
11.1.71 50.105576 14.425363
11.1.72 50.105580 14.425341
11.1.73 50.105583 14.425320
11.1.74 50.105588 14.425296
11.1.75 50.105591 14.425273
11.1.76 50.105595 14.425253
11.1.77 50.105598 14.425233
11.1.78 50.105601 14.425211
11.1.79 50.105605 14.425191
11.1.80 50.105606 14.425171
11.1.81 50.105608 14.425150
11.1.82 50.105610 14.425128
11.1.83 50.105611 14.425106
11.1.84 50.105613 14.425085
11.1.85 50.105615 14.425063
11.1.86 50.105618 14.425041
11.1.87 50.105621 14.425018
11.1.88 50.105625 14.424996
11.1.89 50.105626 14.424976
11.1.90 50.105630 14.424953
11.1.91 50.105633 14.424931
11.1.92 50.105638 14.424908
11.1.93 50.105640 14.424886
11.1.94 50.105641 14.424865
11.1.95 50.105646 14.424845
11.1.96 50.105650 14.424823
11.1.97 50.105655 14.424801
11.1.98 50.105661 14.424775
11.1.99 50.105665 14.424751
11.1.100 50.105675 14.424731
11.1.101 50.105683 14.424710
11.1.102 50.105691 14.424686
11.1.103 50.105700 14.424658
11.1.104 50.105705 14.424626
11.1.105 50.105705 14.424595
11.1.106 50.105706 14.424566
11.1.107 50.105711 14.424545
11.1.108 50.105713 14.424531
11.1.109 50.105715 14.424518
11.1.110 50.105718 14.424501
11.1.111 50.105718 14.424478
11.1.112 50.105716 14.424448
11.1.113 50.105720 14.424420
11.1.114 50.105721 14.424401
11.1.115 50.105718 14.424381
11.1.116 50.105716 14.424365
11.1.117 50.105716 14.424350
11.1.118 50.105720 14.424328
11.1.119 50.105720 14.424310
11.1.120 50.105723 14.424286
11.1.121 50.105726 14.424265
11.1.122 50.105730 14.424240
11.1.123 50.105735 14.424216
11.1.124 50.105733 14.424198
11.1.125 50.105731 14.424181
11.1.126 50.105731 14.424160
11.1.127 50.105736 14.424138
11.1.128 50.105743 14.424115
11.1.129 50.105743 14.424091
11.1.130 50.105745 14.424070
11.1.131 50.105748 14.424043
11.1.132 50.105755 14.424013
11.1.133 50.105756 14.423988
11.1.134 50.105760 14.423963
11.1.135 50.105763 14.423943
11.1.136 50.105765 14.423920
11.1.137 50.105766 14.423895
11.1.138 50.105766 14.423873
11.1.139 50.105770 14.423851
11.1.140 50.105771 14.423833
11.1.141 50.105775 14.423816
11.1.142 50.105778 14.423800
11.1.143 50.105783 14.423780
11.1.144 50.105786 14.423760
11.1.145 50.105785 14.423740
11.1.146 50.105786 14.423720
11.1.147 50.105790 14.423698
11.1.148 50.105793 14.423673
11.1.149 50.105796 14.423651
11.1.150 50.105800 14.423630
11.1.151 50.105803 14.423608
11.1.152 50.105806 14.423581
11.1.153 50.105813 14.423561
11.1.154 50.105816 14.423545
11.1.155 50.105820 14.423528
11.1.156 50.105826 14.423508
11.1.157 50.105828 14.423486
11.1.158 50.105828 14.423461
11.1.159 50.105830 14.423435
11.1.160 50.105830 14.423415
11.1.161 50.105833 14.423390
11.1.162 50.105835 14.423370
11.1.163 50.105836 14.423351
11.1.164 50.105838 14.423331
11.1.165 50.105843 14.423308
11.1.166 50.105848 14.423286
11.1.167 50.105848 14.423266
11.1.168 50.105846 14.423246
11.1.169 50.105846 14.423228
11.1.170 50.105853 14.423213
11.1.171 50.105861 14.423201
11.1.172 50.105868 14.423190
end_lane
lane 11.2
num_waypoints 172
checkpoint 11.2.86 22
exit 11.2.172 8.2.1
11.2.1 50.105868 14.423190
11.2.2 50.105861 14.423201
11.2.3 50.105853 14.423213
11.2.4 50.105846 14.423228
11.2.5 50.105846 14.423246
11.2.6 50.105848 14.423266
11.2.7 50.105848 14.423286
11.2.8 50.105843 14.423308
11.2.9 50.105838 14.423331
11.2.10 50.105836 14.423351
11.2.11 50.105835 14.423370
11.2.12 50.105833 14.423390
11.2.13 50.105830 14.423415
11.2.14 50.105830 14.423435
11.2.15 50.105828 14.423461
11.2.16 50.105828 14.423486
11.2.17 50.105826 14.423508
11.2.18 50.105820 14.423528
11.2.19 50.105816 14.423545
11.2.20 50.105813 14.423561
11.2.21 50.105806 14.423581
11.2.22 50.105803 14.423608
11.2.23 50.105800 14.423630
11.2.24 50.105796 14.423651
11.2.25 50.105793 14.423673
11.2.26 50.105790 14.423698
11.2.27 50.105786 14.423720
11.2.28 50.105785 14.423740
11.2.29 50.105786 14.423760
11.2.30 50.105783 14.423780
11.2.31 50.105778 14.423800
11.2.32 50.105775 14.423816
11.2.33 50.105771 14.423833
11.2.34 50.105770 14.423851
11.2.35 50.105766 14.423873
11.2.36 50.105766 14.423895
11.2.37 50.105765 14.423920
11.2.38 50.105763 14.423943
11.2.39 50.105760 14.423963
11.2.40 50.105756 14.423988
11.2.41 50.105755 14.424013
11.2.42 50.105748 14.424043
11.2.43 50.105745 14.424070
11.2.44 50.105743 14.424091
11.2.45 50.105743 14.424115
11.2.46 50.105736 14.424138
11.2.47 50.105731 14.424160
11.2.48 50.105731 14.424181
11.2.49 50.105733 14.424198
11.2.50 50.105735 14.424216
11.2.51 50.105730 14.424240
11.2.52 50.105726 14.424265
11.2.53 50.105723 14.424286
11.2.54 50.105720 14.424310
11.2.55 50.105720 14.424328
11.2.56 50.105716 14.424350
11.2.57 50.105716 14.424365
11.2.58 50.105718 14.424381
11.2.59 50.105721 14.424401
11.2.60 50.105720 14.424420
11.2.61 50.105716 14.424448
11.2.62 50.105718 14.424478
11.2.63 50.105718 14.424501
11.2.64 50.105715 14.424518
11.2.65 50.105713 14.424531
11.2.66 50.105711 14.424545
11.2.67 50.105706 14.424566
11.2.68 50.105705 14.424595
11.2.69 50.105705 14.424626
11.2.70 50.105700 14.424658
11.2.71 50.105691 14.424686
11.2.72 50.105683 14.424710
11.2.73 50.105675 14.424731
11.2.74 50.105665 14.424751
11.2.75 50.105661 14.424775
11.2.76 50.105655 14.424801
11.2.77 50.105650 14.424823
11.2.78 50.105646 14.424845
11.2.79 50.105641 14.424865
11.2.80 50.105640 14.424886
11.2.81 50.105638 14.424908
11.2.82 50.105633 14.424931
11.2.83 50.105630 14.424953
11.2.84 50.105626 14.424976
11.2.85 50.105625 14.424996
11.2.86 50.105621 14.425018
11.2.87 50.105618 14.425041
11.2.88 50.105615 14.425063
11.2.89 50.105613 14.425085
11.2.90 50.105611 14.425106
11.2.91 50.105610 14.425128
11.2.92 50.105608 14.425150
11.2.93 50.105606 14.425171
11.2.94 50.105605 14.425191
11.2.95 50.105601 14.425211
11.2.96 50.105598 14.425233
11.2.97 50.105595 14.425253
11.2.98 50.105591 14.425273
11.2.99 50.105588 14.425296
11.2.100 50.105583 14.425320
11.2.101 50.105580 14.425341
11.2.102 50.105576 14.425363
11.2.103 50.105575 14.425383
11.2.104 50.105571 14.425405
11.2.105 50.105570 14.425423
11.2.106 50.105570 14.425443
11.2.107 50.105565 14.425466
11.2.108 50.105565 14.425490
11.2.109 50.105563 14.425510
11.2.110 50.105560 14.425533
11.2.111 50.105556 14.425551
11.2.112 50.105555 14.425571
11.2.113 50.105551 14.425596
11.2.114 50.105551 14.425620
11.2.115 50.105551 14.425641
11.2.116 50.105550 14.425666
11.2.117 50.105548 14.425688
11.2.118 50.105545 14.425713
11.2.119 50.105541 14.425735
11.2.120 50.105538 14.425761
11.2.121 50.105535 14.425783
11.2.122 50.105533 14.425801
11.2.123 50.105531 14.425818
11.2.124 50.105531 14.425836
11.2.125 50.105531 14.425863
11.2.126 50.105528 14.425890
11.2.127 50.105521 14.425913
11.2.128 50.105516 14.425933
11.2.129 50.105516 14.425953
11.2.130 50.105516 14.425975
11.2.131 50.105521 14.425991
11.2.132 50.105521 14.426015
11.2.133 50.105516 14.426038
11.2.134 50.105508 14.426065
11.2.135 50.105506 14.426085
11.2.136 50.105505 14.426101
11.2.137 50.105500 14.426121
11.2.138 50.105495 14.426145
11.2.139 50.105488 14.426168
11.2.140 50.105483 14.426191
11.2.141 50.105478 14.426216
11.2.142 50.105475 14.426240
11.2.143 50.105471 14.426261
11.2.144 50.105468 14.426281
11.2.145 50.105461 14.426300
11.2.146 50.105455 14.426321
11.2.147 50.105445 14.426348
11.2.148 50.105435 14.426370
11.2.149 50.105428 14.426391
11.2.150 50.105421 14.426413
11.2.151 50.105418 14.426438
11.2.152 50.105415 14.426460
11.2.153 50.105410 14.426483
11.2.154 50.105403 14.426505
11.2.155 50.105401 14.426526
11.2.156 50.105401 14.426545
11.2.157 50.105400 14.426561
11.2.158 50.105395 14.426578
11.2.159 50.105391 14.426595
11.2.160 50.105386 14.426611
11.2.161 50.105381 14.426625
11.2.162 50.105376 14.426641
11.2.163 50.105371 14.426660
11.2.164 50.105366 14.426676
11.2.165 50.105363 14.426690
11.2.166 50.105360 14.426705
11.2.167 50.105355 14.426721
11.2.168 50.105346 14.426741
11.2.169 50.105340 14.426760
11.2.170 50.105335 14.426775
11.2.171 50.105330 14.426790
11.2.172 50.105325 14.426801
end_lane
end_segment
segment 12
num_lanes 2
segment_name M
lane 12.1
num_waypoints 68
checkpoint 12.1.34 23
exit 12.1.68 10.2.1
exit 12.1.68 11.2.1
12.1.1 50.105120 14.423268
12.1.2 50.105128 14.423261
12.1.3 50.105136 14.423253
12.1.4 50.105145 14.423243
12.1.5 50.105155 14.423235
12.1.6 50.105166 14.423225
12.1.7 50.105176 14.423215
12.1.8 50.105188 14.423206
12.1.9 50.105198 14.423198
12.1.10 50.105208 14.423190
12.1.11 50.105220 14.423181
12.1.12 50.105230 14.423173
12.1.13 50.105240 14.423165
12.1.14 50.105251 14.423155
12.1.15 50.105263 14.423146
12.1.16 50.105273 14.423136
12.1.17 50.105283 14.423126
12.1.18 50.105293 14.423118
12.1.19 50.105303 14.423108
12.1.20 50.105313 14.423100
12.1.21 50.105323 14.423091
12.1.22 50.105333 14.423083
12.1.23 50.105343 14.423073
12.1.24 50.105355 14.423066
12.1.25 50.105366 14.423060
12.1.26 50.105375 14.423053
12.1.27 50.105383 14.423048
12.1.28 50.105393 14.423043
12.1.29 50.105403 14.423038
12.1.30 50.105410 14.423030
12.1.31 50.105418 14.423025
12.1.32 50.105428 14.423020
12.1.33 50.105440 14.423015
12.1.34 50.105451 14.423008
12.1.35 50.105465 14.423000
12.1.36 50.105480 14.422995
12.1.37 50.105491 14.422990
12.1.38 50.105501 14.422988
12.1.39 50.105513 14.422985
12.1.40 50.105526 14.422981
12.1.41 50.105538 14.422978
12.1.42 50.105551 14.422981
12.1.43 50.105563 14.422983
12.1.44 50.105575 14.422985
12.1.45 50.105588 14.422986
12.1.46 50.105603 14.422993
12.1.47 50.105616 14.423001
12.1.48 50.105628 14.423010
12.1.49 50.105640 14.423016
12.1.50 50.105650 14.423025
12.1.51 50.105660 14.423033
12.1.52 50.105671 14.423040
12.1.53 50.105681 14.423043
12.1.54 50.105690 14.423045
12.1.55 50.105700 14.423051
12.1.56 50.105711 14.423061
12.1.57 50.105721 14.423070
12.1.58 50.105733 14.423080
12.1.59 50.105741 14.423086
12.1.60 50.105751 14.423095
12.1.61 50.105763 14.423103
12.1.62 50.105773 14.423108
12.1.63 50.105783 14.423116
12.1.64 50.105791 14.423121
12.1.65 50.105800 14.423123
12.1.66 50.105808 14.423130
12.1.67 50.105818 14.423135
12.1.68 50.105826 14.423140
end_lane
lane 12.2
num_waypoints 68
checkpoint 12.2.34 24
exit 12.2.68 13.1.1
exit 12.2.68 15.2.1
12.2.1 50.105826 14.423140
12.2.2 50.105818 14.423135
12.2.3 50.105808 14.423130
12.2.4 50.105800 14.423123
12.2.5 50.105791 14.423121
12.2.6 50.105783 14.423116
12.2.7 50.105773 14.423108
12.2.8 50.105763 14.423103
12.2.9 50.105751 14.423095
12.2.10 50.105741 14.423086
12.2.11 50.105733 14.423080
12.2.12 50.105721 14.423070
12.2.13 50.105711 14.423061
12.2.14 50.105700 14.423051
12.2.15 50.105690 14.423045
12.2.16 50.105681 14.423043
12.2.17 50.105671 14.423040
12.2.18 50.105660 14.423033
12.2.19 50.105650 14.423025
12.2.20 50.105640 14.423016
12.2.21 50.105628 14.423010
12.2.22 50.105616 14.423001
12.2.23 50.105603 14.422993
12.2.24 50.105588 14.422986
12.2.25 50.105575 14.422985
12.2.26 50.105563 14.422983
12.2.27 50.105551 14.422981
12.2.28 50.105538 14.422978
12.2.29 50.105526 14.422981
12.2.30 50.105513 14.422985
12.2.31 50.105501 14.422988
12.2.32 50.105491 14.422990
12.2.33 50.105480 14.422995
12.2.34 50.105465 14.423000
12.2.35 50.105451 14.423008
12.2.36 50.105440 14.423015
12.2.37 50.105428 14.423020
12.2.38 50.105418 14.423025
12.2.39 50.105410 14.423030
12.2.40 50.105403 14.423038
12.2.41 50.105393 14.423043
12.2.42 50.105383 14.423048
12.2.43 50.105375 14.423053
12.2.44 50.105366 14.423060
12.2.45 50.105355 14.423066
12.2.46 50.105343 14.423073
12.2.47 50.105333 14.423083
12.2.48 50.105323 14.423091
12.2.49 50.105313 14.423100
12.2.50 50.105303 14.423108
12.2.51 50.105293 14.423118
12.2.52 50.105283 14.423126
12.2.53 50.105273 14.423136
12.2.54 50.105263 14.423146
12.2.55 50.105251 14.423155
12.2.56 50.105240 14.423165
12.2.57 50.105230 14.423173
12.2.58 50.105220 14.423181
12.2.59 50.105208 14.423190
12.2.60 50.105198 14.423198
12.2.61 50.105188 14.423206
12.2.62 50.105176 14.423215
12.2.63 50.105166 14.423225
12.2.64 50.105155 14.423235
12.2.65 50.105145 14.423243
12.2.66 50.105136 14.423253
12.2.67 50.105128 14.423261
12.2.68 50.105120 14.423268
end_lane
end_segment
segment 13
num_lanes 2
segment_name N
lane 13.1
num_waypoints 194
checkpoint 13.1.97 25
exit 13.1.194 14.1.1
exit 13.1.194 19.2.1
exit 13.1.194 22.1.1
13.1.1 50.105140 14.423273
13.1.2 50.105143 14.423283
13.1.3 50.105146 14.423295
13.1.4 50.105150 14.423310
13.1.5 50.105151 14.423325
13.1.6 50.105153 14.423340
13.1.7 50.105153 14.423355
13.1.8 50.105153 14.423371
13.1.9 50.105155 14.423388
13.1.10 50.105155 14.423406
13.1.11 50.105156 14.423426
13.1.12 50.105156 14.423446
13.1.13 50.105153 14.423468
13.1.14 50.105151 14.423491
13.1.15 50.105150 14.423516
13.1.16 50.105148 14.423538
13.1.17 50.105148 14.423560
13.1.18 50.105148 14.423580
13.1.19 50.105150 14.423598
13.1.20 50.105153 14.423615
13.1.21 50.105155 14.423630
13.1.22 50.105156 14.423648
13.1.23 50.105158 14.423666
13.1.24 50.105158 14.423688
13.1.25 50.105158 14.423708
13.1.26 50.105158 14.423726
13.1.27 50.105156 14.423743
13.1.28 50.105153 14.423763
13.1.29 50.105151 14.423785
13.1.30 50.105150 14.423808
13.1.31 50.105150 14.423831
13.1.32 50.105150 14.423855
13.1.33 50.105150 14.423876
13.1.34 50.105148 14.423895
13.1.35 50.105146 14.423910
13.1.36 50.105145 14.423926
13.1.37 50.105143 14.423948
13.1.38 50.105143 14.423968
13.1.39 50.105143 14.423988
13.1.40 50.105145 14.424006
13.1.41 50.105145 14.424026
13.1.42 50.105145 14.424046
13.1.43 50.105145 14.424066
13.1.44 50.105145 14.424081
13.1.45 50.105143 14.424093
13.1.46 50.105143 14.424110
13.1.47 50.105145 14.424126
13.1.48 50.105145 14.424143
13.1.49 50.105146 14.424158
13.1.50 50.105148 14.424176
13.1.51 50.105150 14.424198
13.1.52 50.105150 14.424216
13.1.53 50.105150 14.424231
13.1.54 50.105153 14.424250
13.1.55 50.105155 14.424270
13.1.56 50.105156 14.424286
13.1.57 50.105158 14.424303
13.1.58 50.105158 14.424320
13.1.59 50.105158 14.424340
13.1.60 50.105156 14.424360
13.1.61 50.105155 14.424380
13.1.62 50.105155 14.424400
13.1.63 50.105155 14.424415
13.1.64 50.105156 14.424431
13.1.65 50.105155 14.424446
13.1.66 50.105153 14.424465
13.1.67 50.105151 14.424486
13.1.68 50.105150 14.424510
13.1.69 50.105150 14.424530
13.1.70 50.105148 14.424555
13.1.71 50.105146 14.424578
13.1.72 50.105145 14.424603
13.1.73 50.105145 14.424625
13.1.74 50.105145 14.424650
13.1.75 50.105145 14.424673
13.1.76 50.105145 14.424696
13.1.77 50.105146 14.424718
13.1.78 50.105146 14.424738
13.1.79 50.105146 14.424760
13.1.80 50.105146 14.424778
13.1.81 50.105148 14.424798
13.1.82 50.105148 14.424816
13.1.83 50.105150 14.424833
13.1.84 50.105150 14.424851
13.1.85 50.105151 14.424868
13.1.86 50.105153 14.424886
13.1.87 50.105153 14.424906
13.1.88 50.105155 14.424926
13.1.89 50.105156 14.424946
13.1.90 50.105155 14.424966
13.1.91 50.105153 14.424988
13.1.92 50.105155 14.425006
13.1.93 50.105156 14.425023
13.1.94 50.105156 14.425040
13.1.95 50.105155 14.425055
13.1.96 50.105155 14.425073
13.1.97 50.105156 14.425091
13.1.98 50.105156 14.425110
13.1.99 50.105158 14.425125
13.1.100 50.105158 14.425143
13.1.101 50.105158 14.425161
13.1.102 50.105158 14.425180
13.1.103 50.105156 14.425198
13.1.104 50.105156 14.425218
13.1.105 50.105156 14.425235
13.1.106 50.105155 14.425255
13.1.107 50.105156 14.425271
13.1.108 50.105156 14.425291
13.1.109 50.105155 14.425315
13.1.110 50.105155 14.425336
13.1.111 50.105156 14.425358
13.1.112 50.105155 14.425380
13.1.113 50.105155 14.425400
13.1.114 50.105153 14.425421
13.1.115 50.105151 14.425443
13.1.116 50.105150 14.425466
13.1.117 50.105148 14.425490
13.1.118 50.105148 14.425511
13.1.119 50.105148 14.425531
13.1.120 50.105148 14.425550
13.1.121 50.105146 14.425570
13.1.122 50.105145 14.425588
13.1.123 50.105143 14.425608
13.1.124 50.105143 14.425626
13.1.125 50.105143 14.425645
13.1.126 50.105143 14.425663
13.1.127 50.105141 14.425683
13.1.128 50.105141 14.425701
13.1.129 50.105143 14.425718
13.1.130 50.105143 14.425735
13.1.131 50.105143 14.425751
13.1.132 50.105143 14.425770
13.1.133 50.105145 14.425785
13.1.134 50.105145 14.425803
13.1.135 50.105143 14.425823
13.1.136 50.105140 14.425845
13.1.137 50.105136 14.425868
13.1.138 50.105135 14.425893
13.1.139 50.105131 14.425911
13.1.140 50.105128 14.425930
13.1.141 50.105128 14.425951
13.1.142 50.105126 14.425975
13.1.143 50.105125 14.425995
13.1.144 50.105123 14.426011
13.1.145 50.105121 14.426028
13.1.146 50.105118 14.426043
13.1.147 50.105116 14.426060
13.1.148 50.105115 14.426076
13.1.149 50.105113 14.426095
13.1.150 50.105111 14.426111
13.1.151 50.105110 14.426128
13.1.152 50.105108 14.426143
13.1.153 50.105106 14.426161
13.1.154 50.105103 14.426178
13.1.155 50.105101 14.426198
13.1.156 50.105098 14.426216
13.1.157 50.105096 14.426233
13.1.158 50.105095 14.426248
13.1.159 50.105088 14.426268
13.1.160 50.105083 14.426291
13.1.161 50.105078 14.426311
13.1.162 50.105075 14.426330
13.1.163 50.105073 14.426346
13.1.164 50.105071 14.426361
13.1.165 50.105068 14.426380
13.1.166 50.105065 14.426398
13.1.167 50.105061 14.426418
13.1.168 50.105058 14.426438
13.1.169 50.105058 14.426458
13.1.170 50.105055 14.426476
13.1.171 50.105053 14.426493
13.1.172 50.105050 14.426511
13.1.173 50.105048 14.426530
13.1.174 50.105046 14.426546
13.1.175 50.105043 14.426565
13.1.176 50.105040 14.426583
13.1.177 50.105036 14.426603
13.1.178 50.105033 14.426625
13.1.179 50.105030 14.426643
13.1.180 50.105026 14.426663
13.1.181 50.105025 14.426681
13.1.182 50.105021 14.426700
13.1.183 50.105018 14.426720
13.1.184 50.105015 14.426738
13.1.185 50.105011 14.426755
13.1.186 50.105010 14.426771
13.1.187 50.105010 14.426783
13.1.188 50.105011 14.426793
13.1.189 50.105010 14.426808
13.1.190 50.105006 14.426826
13.1.191 50.105005 14.426843
13.1.192 50.105001 14.426858
13.1.193 50.104998 14.426873
13.1.194 50.104995 14.426890
end_lane
lane 13.2
num_waypoints 194
checkpoint 13.2.97 26
exit 13.2.194 12.1.1
exit 13.2.194 15.2.1
13.2.1 50.104995 14.426890
13.2.2 50.104998 14.426873
13.2.3 50.105001 14.426858
13.2.4 50.105005 14.426843
13.2.5 50.105006 14.426826
13.2.6 50.105010 14.426808
13.2.7 50.105011 14.426793
13.2.8 50.105010 14.426783
13.2.9 50.105010 14.426771
13.2.10 50.105011 14.426755
13.2.11 50.105015 14.426738
13.2.12 50.105018 14.426720
13.2.13 50.105021 14.426700
13.2.14 50.105025 14.426681
13.2.15 50.105026 14.426663
13.2.16 50.105030 14.426643
13.2.17 50.105033 14.426625
13.2.18 50.105036 14.426603
13.2.19 50.105040 14.426583
13.2.20 50.105043 14.426565
13.2.21 50.105046 14.426546
13.2.22 50.105048 14.426530
13.2.23 50.105050 14.426511
13.2.24 50.105053 14.426493
13.2.25 50.105055 14.426476
13.2.26 50.105058 14.426458
13.2.27 50.105058 14.426438
13.2.28 50.105061 14.426418
13.2.29 50.105065 14.426398
13.2.30 50.105068 14.426380
13.2.31 50.105071 14.426361
13.2.32 50.105073 14.426346
13.2.33 50.105075 14.426330
13.2.34 50.105078 14.426311
13.2.35 50.105083 14.426291
13.2.36 50.105088 14.426268
13.2.37 50.105095 14.426248
13.2.38 50.105096 14.426233
13.2.39 50.105098 14.426216
13.2.40 50.105101 14.426198
13.2.41 50.105103 14.426178
13.2.42 50.105106 14.426161
13.2.43 50.105108 14.426143
13.2.44 50.105110 14.426128
13.2.45 50.105111 14.426111
13.2.46 50.105113 14.426095
13.2.47 50.105115 14.426076
13.2.48 50.105116 14.426060
13.2.49 50.105118 14.426043
13.2.50 50.105121 14.426028
13.2.51 50.105123 14.426011
13.2.52 50.105125 14.425995
13.2.53 50.105126 14.425975
13.2.54 50.105128 14.425951
13.2.55 50.105128 14.425930
13.2.56 50.105131 14.425911
13.2.57 50.105135 14.425893
13.2.58 50.105136 14.425868
13.2.59 50.105140 14.425845
13.2.60 50.105143 14.425823
13.2.61 50.105145 14.425803
13.2.62 50.105145 14.425785
13.2.63 50.105143 14.425770
13.2.64 50.105143 14.425751
13.2.65 50.105143 14.425735
13.2.66 50.105143 14.425718
13.2.67 50.105141 14.425701
13.2.68 50.105141 14.425683
13.2.69 50.105143 14.425663
13.2.70 50.105143 14.425645
13.2.71 50.105143 14.425626
13.2.72 50.105143 14.425608
13.2.73 50.105145 14.425588
13.2.74 50.105146 14.425570
13.2.75 50.105148 14.425550
13.2.76 50.105148 14.425531
13.2.77 50.105148 14.425511
13.2.78 50.105148 14.425490
13.2.79 50.105150 14.425466
13.2.80 50.105151 14.425443
13.2.81 50.105153 14.425421
13.2.82 50.105155 14.425400
13.2.83 50.105155 14.425380
13.2.84 50.105156 14.425358
13.2.85 50.105155 14.425336
13.2.86 50.105155 14.425315
13.2.87 50.105156 14.425291
13.2.88 50.105156 14.425271
13.2.89 50.105155 14.425255
13.2.90 50.105156 14.425235
13.2.91 50.105156 14.425218
13.2.92 50.105156 14.425198
13.2.93 50.105158 14.425180
13.2.94 50.105158 14.425161
13.2.95 50.105158 14.425143
13.2.96 50.105158 14.425125
13.2.97 50.105156 14.425110
13.2.98 50.105156 14.425091
13.2.99 50.105155 14.425073
13.2.100 50.105155 14.425055
13.2.101 50.105156 14.425040
13.2.102 50.105156 14.425023
13.2.103 50.105155 14.425006
13.2.104 50.105153 14.424988
13.2.105 50.105155 14.424966
13.2.106 50.105156 14.424946
13.2.107 50.105155 14.424926
13.2.108 50.105153 14.424906
13.2.109 50.105153 14.424886
13.2.110 50.105151 14.424868
13.2.111 50.105150 14.424851
13.2.112 50.105150 14.424833
13.2.113 50.105148 14.424816
13.2.114 50.105148 14.424798
13.2.115 50.105146 14.424778
13.2.116 50.105146 14.424760
13.2.117 50.105146 14.424738
13.2.118 50.105146 14.424718
13.2.119 50.105145 14.424696
13.2.120 50.105145 14.424673
13.2.121 50.105145 14.424650
13.2.122 50.105145 14.424625
13.2.123 50.105145 14.424603
13.2.124 50.105146 14.424578
13.2.125 50.105148 14.424555
13.2.126 50.105150 14.424530
13.2.127 50.105150 14.424510
13.2.128 50.105151 14.424486
13.2.129 50.105153 14.424465
13.2.130 50.105155 14.424446
13.2.131 50.105156 14.424431
13.2.132 50.105155 14.424415
13.2.133 50.105155 14.424400
13.2.134 50.105155 14.424380
13.2.135 50.105156 14.424360
13.2.136 50.105158 14.424340
13.2.137 50.105158 14.424320
13.2.138 50.105158 14.424303
13.2.139 50.105156 14.424286
13.2.140 50.105155 14.424270
13.2.141 50.105153 14.424250
13.2.142 50.105150 14.424231
13.2.143 50.105150 14.424216
13.2.144 50.105150 14.424198
13.2.145 50.105148 14.424176
13.2.146 50.105146 14.424158
13.2.147 50.105145 14.424143
13.2.148 50.105145 14.424126
13.2.149 50.105143 14.424110
13.2.150 50.105143 14.424093
13.2.151 50.105145 14.424081
13.2.152 50.105145 14.424066
13.2.153 50.105145 14.424046
13.2.154 50.105145 14.424026
13.2.155 50.105145 14.424006
13.2.156 50.105143 14.423988
13.2.157 50.105143 14.423968
13.2.158 50.105143 14.423948
13.2.159 50.105145 14.423926
13.2.160 50.105146 14.423910
13.2.161 50.105148 14.423895
13.2.162 50.105150 14.423876
13.2.163 50.105150 14.423855
13.2.164 50.105150 14.423831
13.2.165 50.105150 14.423808
13.2.166 50.105151 14.423785
13.2.167 50.105153 14.423763
13.2.168 50.105156 14.423743
13.2.169 50.105158 14.423726
13.2.170 50.105158 14.423708
13.2.171 50.105158 14.423688
13.2.172 50.105158 14.423666
13.2.173 50.105156 14.423648
13.2.174 50.105155 14.423630
13.2.175 50.105153 14.423615
13.2.176 50.105150 14.423598
13.2.177 50.105148 14.423580
13.2.178 50.105148 14.423560
13.2.179 50.105148 14.423538
13.2.180 50.105150 14.423516
13.2.181 50.105151 14.423491
13.2.182 50.105153 14.423468
13.2.183 50.105156 14.423446
13.2.184 50.105156 14.423426
13.2.185 50.105155 14.423406
13.2.186 50.105155 14.423388
13.2.187 50.105153 14.423371
13.2.188 50.105153 14.423355
13.2.189 50.105153 14.423340
13.2.190 50.105151 14.423325
13.2.191 50.105150 14.423310
13.2.192 50.105146 14.423295
13.2.193 50.105143 14.423283
13.2.194 50.105140 14.423273
end_lane
end_segment
segment 14
num_lanes 2
segment_name O
lane 14.1
num_waypoints 24
checkpoint 14.1.12 27
exit 14.1.24 3.2.1
exit 14.1.24 8.2.1
exit 14.1.24 21.1.1
14.1.1 50.104951 14.426865
14.1.2 50.104958 14.426871
14.1.3 50.104966 14.426876
14.1.4 50.104980 14.426888
14.1.5 50.104995 14.426901
14.1.6 50.105008 14.426915
14.1.7 50.105021 14.426925
14.1.8 50.105035 14.426933
14.1.9 50.105045 14.426943
14.1.10 50.105053 14.426950
14.1.11 50.105063 14.426955
14.1.12 50.105075 14.426958
14.1.13 50.105090 14.426965
14.1.14 50.105101 14.426976
14.1.15 50.105115 14.426986
14.1.16 50.105128 14.426996
14.1.17 50.105140 14.427008
14.1.18 50.105153 14.427018
14.1.19 50.105166 14.427025
14.1.20 50.105178 14.427031
14.1.21 50.105188 14.427036
14.1.22 50.105196 14.427043
14.1.23 50.105203 14.427050
14.1.24 50.105213 14.427056
end_lane
lane 14.2
num_waypoints 24
checkpoint 14.2.12 28
exit 14.2.24 13.2.1
exit 14.2.24 19.2.1
exit 14.2.24 22.1.1
14.2.1 50.105213 14.427056
14.2.2 50.105203 14.427050
14.2.3 50.105196 14.427043
14.2.4 50.105188 14.427036
14.2.5 50.105178 14.427031
14.2.6 50.105166 14.427025
14.2.7 50.105153 14.427018
14.2.8 50.105140 14.427008
14.2.9 50.105128 14.426996
14.2.10 50.105115 14.426986
14.2.11 50.105101 14.426976
14.2.12 50.105090 14.426965
14.2.13 50.105075 14.426958
14.2.14 50.105063 14.426955
14.2.15 50.105053 14.426950
14.2.16 50.105045 14.426943
14.2.17 50.105035 14.426933
14.2.18 50.105021 14.426925
14.2.19 50.105008 14.426915
14.2.20 50.104995 14.426901
14.2.21 50.104980 14.426888
14.2.22 50.104966 14.426876
14.2.23 50.104958 14.426871
14.2.24 50.104951 14.426865
end_lane
end_segment
segment 15
num_lanes 2
segment_name P
lane 15.1
num_waypoints 106
checkpoint 15.1.53 29
exit 15.1.106 12.1.1
exit 15.1.106 13.1.1
15.1.1 50.104028 14.424180
15.1.2 50.104036 14.424175
15.1.3 50.104043 14.424168
15.1.4 50.104050 14.424163
15.1.5 50.104058 14.424155
15.1.6 50.104066 14.424146
15.1.7 50.104073 14.424140
15.1.8 50.104080 14.424135
15.1.9 50.104088 14.424133
15.1.10 50.104091 14.424133
15.1.11 50.104098 14.424126
15.1.12 50.104106 14.424121
15.1.13 50.104118 14.424113
15.1.14 50.104130 14.424105
15.1.15 50.104141 14.424095
15.1.16 50.104153 14.424083
15.1.17 50.104165 14.424070
15.1.18 50.104171 14.424056
15.1.19 50.104180 14.424046
15.1.20 50.104188 14.424038
15.1.21 50.104200 14.424028
15.1.22 50.104211 14.424018
15.1.23 50.104223 14.424008
15.1.24 50.104236 14.423998
15.1.25 50.104246 14.423988
15.1.26 50.104260 14.423978
15.1.27 50.104271 14.423966
15.1.28 50.104283 14.423955
15.1.29 50.104293 14.423943
15.1.30 50.104303 14.423931
15.1.31 50.104316 14.423920
15.1.32 50.104330 14.423906
15.1.33 50.104346 14.423893
15.1.34 50.104360 14.423880
15.1.35 50.104373 14.423866
15.1.36 50.104385 14.423853
15.1.37 50.104398 14.423841
15.1.38 50.104411 14.423833
15.1.39 50.104421 14.423823
15.1.40 50.104435 14.423815
15.1.41 50.104443 14.423806
15.1.42 50.104453 14.423798
15.1.43 50.104465 14.423788
15.1.44 50.104475 14.423781
15.1.45 50.104488 14.423775
15.1.46 50.104498 14.423765
15.1.47 50.104510 14.423758
15.1.48 50.104521 14.423750
15.1.49 50.104535 14.423741
15.1.50 50.104545 14.423733
15.1.51 50.104556 14.423725
15.1.52 50.104568 14.423716
15.1.53 50.104580 14.423708
15.1.54 50.104593 14.423700
15.1.55 50.104605 14.423690
15.1.56 50.104616 14.423681
15.1.57 50.104625 14.423671
15.1.58 50.104636 14.423663
15.1.59 50.104648 14.423656
15.1.60 50.104660 14.423648
15.1.61 50.104671 14.423643
15.1.62 50.104685 14.423636
15.1.63 50.104696 14.423628
15.1.64 50.104708 14.423620
15.1.65 50.104720 14.423613
15.1.66 50.104731 14.423608
15.1.67 50.104740 14.423598
15.1.68 50.104751 14.423590
15.1.69 50.104761 14.423581
15.1.70 50.104771 14.423575
15.1.71 50.104781 14.423568
15.1.72 50.104796 14.423561
15.1.73 50.104810 14.423556
15.1.74 50.104816 14.423550
15.1.75 50.104821 14.423541
15.1.76 50.104830 14.423535
15.1.77 50.104841 14.423528
15.1.78 50.104846 14.423521
15.1.79 50.104855 14.423515
15.1.80 50.104863 14.423508
15.1.81 50.104871 14.423501
15.1.82 50.104883 14.423495
15.1.83 50.104895 14.423486
15.1.84 50.104903 14.423476
15.1.85 50.104911 14.423468
15.1.86 50.104920 14.423460
15.1.87 50.104928 14.423451
15.1.88 50.104935 14.423441
15.1.89 50.104943 14.423431
15.1.90 50.104953 14.423423
15.1.91 50.104963 14.423415
15.1.92 50.104973 14.423406
15.1.93 50.104981 14.423400
15.1.94 50.104988 14.423391
15.1.95 50.104998 14.423381
15.1.96 50.105006 14.423371
15.1.97 50.105015 14.423361
15.1.98 50.105023 14.423351
15.1.99 50.105031 14.423341
15.1.100 50.105043 14.423333
15.1.101 50.105056 14.423326
15.1.102 50.105068 14.423320
15.1.103 50.105081 14.423311
15.1.104 50.105091 14.423303
15.1.105 50.105101 14.423295
15.1.106 50.105108 14.423288
end_lane
lane 15.2
num_waypoints 106
checkpoint 15.2.53 30
exit 15.2.106 16.1.1
15.2.1 50.105108 14.423288
15.2.2 50.105101 14.423295
15.2.3 50.105091 14.423303
15.2.4 50.105081 14.423311
15.2.5 50.105068 14.423320
15.2.6 50.105056 14.423326
15.2.7 50.105043 14.423333
15.2.8 50.105031 14.423341
15.2.9 50.105023 14.423351
15.2.10 50.105015 14.423361
15.2.11 50.105006 14.423371
15.2.12 50.104998 14.423381
15.2.13 50.104988 14.423391
15.2.14 50.104981 14.423400
15.2.15 50.104973 14.423406
15.2.16 50.104963 14.423415
15.2.17 50.104953 14.423423
15.2.18 50.104943 14.423431
15.2.19 50.104935 14.423441
15.2.20 50.104928 14.423451
15.2.21 50.104920 14.423460
15.2.22 50.104911 14.423468
15.2.23 50.104903 14.423476
15.2.24 50.104895 14.423486
15.2.25 50.104883 14.423495
15.2.26 50.104871 14.423501
15.2.27 50.104863 14.423508
15.2.28 50.104855 14.423515
15.2.29 50.104846 14.423521
15.2.30 50.104841 14.423528
15.2.31 50.104830 14.423535
15.2.32 50.104821 14.423541
15.2.33 50.104816 14.423550
15.2.34 50.104810 14.423556
15.2.35 50.104796 14.423561
15.2.36 50.104781 14.423568
15.2.37 50.104771 14.423575
15.2.38 50.104761 14.423581
15.2.39 50.104751 14.423590
15.2.40 50.104740 14.423598
15.2.41 50.104731 14.423608
15.2.42 50.104720 14.423613
15.2.43 50.104708 14.423620
15.2.44 50.104696 14.423628
15.2.45 50.104685 14.423636
15.2.46 50.104671 14.423643
15.2.47 50.104660 14.423648
15.2.48 50.104648 14.423656
15.2.49 50.104636 14.423663
15.2.50 50.104625 14.423671
15.2.51 50.104616 14.423681
15.2.52 50.104605 14.423690
15.2.53 50.104593 14.423700
15.2.54 50.104580 14.423708
15.2.55 50.104568 14.423716
15.2.56 50.104556 14.423725
15.2.57 50.104545 14.423733
15.2.58 50.104535 14.423741
15.2.59 50.104521 14.423750
15.2.60 50.104510 14.423758
15.2.61 50.104498 14.423765
15.2.62 50.104488 14.423775
15.2.63 50.104475 14.423781
15.2.64 50.104465 14.423788
15.2.65 50.104453 14.423798
15.2.66 50.104443 14.423806
15.2.67 50.104435 14.423815
15.2.68 50.104421 14.423823
15.2.69 50.104411 14.423833
15.2.70 50.104398 14.423841
15.2.71 50.104385 14.423853
15.2.72 50.104373 14.423866
15.2.73 50.104360 14.423880
15.2.74 50.104346 14.423893
15.2.75 50.104330 14.423906
15.2.76 50.104316 14.423920
15.2.77 50.104303 14.423931
15.2.78 50.104293 14.423943
15.2.79 50.104283 14.423955
15.2.80 50.104271 14.423966
15.2.81 50.104260 14.423978
15.2.82 50.104246 14.423988
15.2.83 50.104236 14.423998
15.2.84 50.104223 14.424008
15.2.85 50.104211 14.424018
15.2.86 50.104200 14.424028
15.2.87 50.104188 14.424038
15.2.88 50.104180 14.424046
15.2.89 50.104171 14.424056
15.2.90 50.104165 14.424070
15.2.91 50.104153 14.424083
15.2.92 50.104141 14.424095
15.2.93 50.104130 14.424105
15.2.94 50.104118 14.424113
15.2.95 50.104106 14.424121
15.2.96 50.104098 14.424126
15.2.97 50.104091 14.424133
15.2.98 50.104088 14.424133
15.2.99 50.104080 14.424135
15.2.100 50.104073 14.424140
15.2.101 50.104066 14.424146
15.2.102 50.104058 14.424155
15.2.103 50.104050 14.424163
15.2.104 50.104043 14.424168
15.2.105 50.104036 14.424175
15.2.106 50.104028 14.424180
end_lane
end_segment
segment 16
num_lanes 2
segment_name Q
lane 16.1
num_waypoints 127
checkpoint 16.1.63 31
exit 16.1.127 17.2.1
exit 16.1.127 22.2.1
16.1.1 50.104025 14.424263
16.1.2 50.104030 14.424268
16.1.3 50.104035 14.424275
16.1.4 50.104041 14.424285
16.1.5 50.104050 14.424300
16.1.6 50.104058 14.424313
16.1.7 50.104065 14.424325
16.1.8 50.104071 14.424338
16.1.9 50.104083 14.424353
16.1.10 50.104093 14.424368
16.1.11 50.104105 14.424381
16.1.12 50.104115 14.424395
16.1.13 50.104123 14.424406
16.1.14 50.104133 14.424420
16.1.15 50.104140 14.424430
16.1.16 50.104150 14.424440
16.1.17 50.104158 14.424453
16.1.18 50.104170 14.424468
16.1.19 50.104180 14.424486
16.1.20 50.104188 14.424501
16.1.21 50.104193 14.424516
16.1.22 50.104198 14.424526
16.1.23 50.104208 14.424536
16.1.24 50.104216 14.424553
16.1.25 50.104226 14.424566
16.1.26 50.104235 14.424580
16.1.27 50.104243 14.424595
16.1.28 50.104250 14.424606
16.1.29 50.104255 14.424618
16.1.30 50.104263 14.424631
16.1.31 50.104270 14.424643
16.1.32 50.104278 14.424653
16.1.33 50.104286 14.424661
16.1.34 50.104291 14.424666
16.1.35 50.104298 14.424675
16.1.36 50.104308 14.424683
16.1.37 50.104318 14.424693
16.1.38 50.104325 14.424700
16.1.39 50.104331 14.424710
16.1.40 50.104341 14.424720
16.1.41 50.104353 14.424735
16.1.42 50.104361 14.424741
16.1.43 50.104371 14.424750
16.1.44 50.104381 14.424756
16.1.45 50.104390 14.424765
16.1.46 50.104400 14.424773
16.1.47 50.104408 14.424781
16.1.48 50.104413 14.424790
16.1.49 50.104421 14.424801
16.1.50 50.104426 14.424813
16.1.51 50.104433 14.424823
16.1.52 50.104445 14.424831
16.1.53 50.104455 14.424838
16.1.54 50.104463 14.424850
16.1.55 50.104468 14.424863
16.1.56 50.104475 14.424876
16.1.57 50.104480 14.424891
16.1.58 50.104488 14.424905
16.1.59 50.104496 14.424916
16.1.60 50.104505 14.424930
16.1.61 50.104511 14.424941
16.1.62 50.104516 14.424955
16.1.63 50.104521 14.424970
16.1.64 50.104526 14.424985
16.1.65 50.104533 14.425001
16.1.66 50.104540 14.425018
16.1.67 50.104545 14.425033
16.1.68 50.104550 14.425050
16.1.69 50.104556 14.425066
16.1.70 50.104563 14.425080
16.1.71 50.104568 14.425096
16.1.72 50.104571 14.425113
16.1.73 50.104575 14.425130
16.1.74 50.104578 14.425143
16.1.75 50.104583 14.425160
16.1.76 50.104588 14.425183
16.1.77 50.104591 14.425201
16.1.78 50.104595 14.425216
16.1.79 50.104598 14.425231
16.1.80 50.104603 14.425246
16.1.81 50.104610 14.425260
16.1.82 50.104616 14.425275
16.1.83 50.104625 14.425288
16.1.84 50.104633 14.425305
16.1.85 50.104638 14.425323
16.1.86 50.104645 14.425341
16.1.87 50.104651 14.425360
16.1.88 50.104655 14.425380
16.1.89 50.104656 14.425396
16.1.90 50.104658 14.425413
16.1.91 50.104660 14.425430
16.1.92 50.104661 14.425446
16.1.93 50.104665 14.425465
16.1.94 50.104666 14.425480
16.1.95 50.104666 14.425498
16.1.96 50.104665 14.425518
16.1.97 50.104665 14.425536
16.1.98 50.104666 14.425555
16.1.99 50.104668 14.425575
16.1.100 50.104666 14.425593
16.1.101 50.104665 14.425613
16.1.102 50.104661 14.425633
16.1.103 50.104656 14.425653
16.1.104 50.104653 14.425670
16.1.105 50.104650 14.425688
16.1.106 50.104648 14.425706
16.1.107 50.104646 14.425721
16.1.108 50.104641 14.425740
16.1.109 50.104638 14.425758
16.1.110 50.104636 14.425778
16.1.111 50.104631 14.425793
16.1.112 50.104630 14.425813
16.1.113 50.104628 14.425833
16.1.114 50.104623 14.425848
16.1.115 50.104615 14.425861
16.1.116 50.104606 14.425876
16.1.117 50.104605 14.425891
16.1.118 50.104600 14.425908
16.1.119 50.104598 14.425928
16.1.120 50.104595 14.425946
16.1.121 50.104590 14.425965
16.1.122 50.104590 14.425981
16.1.123 50.104588 14.425998
16.1.124 50.104585 14.426015
16.1.125 50.104583 14.426031
16.1.126 50.104578 14.426048
16.1.127 50.104573 14.426058
end_lane
lane 16.2
num_waypoints 127
checkpoint 16.2.63 32
exit 16.2.127 15.1.1
16.2.1 50.104573 14.426058
16.2.2 50.104578 14.426048
16.2.3 50.104583 14.426031
16.2.4 50.104585 14.426015
16.2.5 50.104588 14.425998
16.2.6 50.104590 14.425981
16.2.7 50.104590 14.425965
16.2.8 50.104595 14.425946
16.2.9 50.104598 14.425928
16.2.10 50.104600 14.425908
16.2.11 50.104605 14.425891
16.2.12 50.104606 14.425876
16.2.13 50.104615 14.425861
16.2.14 50.104623 14.425848
16.2.15 50.104628 14.425833
16.2.16 50.104630 14.425813
16.2.17 50.104631 14.425793
16.2.18 50.104636 14.425778
16.2.19 50.104638 14.425758
16.2.20 50.104641 14.425740
16.2.21 50.104646 14.425721
16.2.22 50.104648 14.425706
16.2.23 50.104650 14.425688
16.2.24 50.104653 14.425670
16.2.25 50.104656 14.425653
16.2.26 50.104661 14.425633
16.2.27 50.104665 14.425613
16.2.28 50.104666 14.425593
16.2.29 50.104668 14.425575
16.2.30 50.104666 14.425555
16.2.31 50.104665 14.425536
16.2.32 50.104665 14.425518
16.2.33 50.104666 14.425498
16.2.34 50.104666 14.425480
16.2.35 50.104665 14.425465
16.2.36 50.104661 14.425446
16.2.37 50.104660 14.425430
16.2.38 50.104658 14.425413
16.2.39 50.104656 14.425396
16.2.40 50.104655 14.425380
16.2.41 50.104651 14.425360
16.2.42 50.104645 14.425341
16.2.43 50.104638 14.425323
16.2.44 50.104633 14.425305
16.2.45 50.104625 14.425288
16.2.46 50.104616 14.425275
16.2.47 50.104610 14.425260
16.2.48 50.104603 14.425246
16.2.49 50.104598 14.425231
16.2.50 50.104595 14.425216
16.2.51 50.104591 14.425201
16.2.52 50.104588 14.425183
16.2.53 50.104583 14.425160
16.2.54 50.104578 14.425143
16.2.55 50.104575 14.425130
16.2.56 50.104571 14.425113
16.2.57 50.104568 14.425096
16.2.58 50.104563 14.425080
16.2.59 50.104556 14.425066
16.2.60 50.104550 14.425050
16.2.61 50.104545 14.425033
16.2.62 50.104540 14.425018
16.2.63 50.104533 14.425001
16.2.64 50.104526 14.424985
16.2.65 50.104521 14.424970
16.2.66 50.104516 14.424955
16.2.67 50.104511 14.424941
16.2.68 50.104505 14.424930
16.2.69 50.104496 14.424916
16.2.70 50.104488 14.424905
16.2.71 50.104480 14.424891
16.2.72 50.104475 14.424876
16.2.73 50.104468 14.424863
16.2.74 50.104463 14.424850
16.2.75 50.104455 14.424838
16.2.76 50.104445 14.424831
16.2.77 50.104433 14.424823
16.2.78 50.104426 14.424813
16.2.79 50.104421 14.424801
16.2.80 50.104413 14.424790
16.2.81 50.104408 14.424781
16.2.82 50.104400 14.424773
16.2.83 50.104390 14.424765
16.2.84 50.104381 14.424756
16.2.85 50.104371 14.424750
16.2.86 50.104361 14.424741
16.2.87 50.104353 14.424735
16.2.88 50.104341 14.424720
16.2.89 50.104331 14.424710
16.2.90 50.104325 14.424700
16.2.91 50.104318 14.424693
16.2.92 50.104308 14.424683
16.2.93 50.104298 14.424675
16.2.94 50.104291 14.424666
16.2.95 50.104286 14.424661
16.2.96 50.104278 14.424653
16.2.97 50.104270 14.424643
16.2.98 50.104263 14.424631
16.2.99 50.104255 14.424618
16.2.100 50.104250 14.424606
16.2.101 50.104243 14.424595
16.2.102 50.104235 14.424580
16.2.103 50.104226 14.424566
16.2.104 50.104216 14.424553
16.2.105 50.104208 14.424536
16.2.106 50.104198 14.424526
16.2.107 50.104193 14.424516
16.2.108 50.104188 14.424501
16.2.109 50.104180 14.424486
16.2.110 50.104170 14.424468
16.2.111 50.104158 14.424453
16.2.112 50.104150 14.424440
16.2.113 50.104140 14.424430
16.2.114 50.104133 14.424420
16.2.115 50.104123 14.424406
16.2.116 50.104115 14.424395
16.2.117 50.104105 14.424381
16.2.118 50.104093 14.424368
16.2.119 50.104083 14.424353
16.2.120 50.104071 14.424338
16.2.121 50.104065 14.424325
16.2.122 50.104058 14.424313
16.2.123 50.104050 14.424300
16.2.124 50.104041 14.424285
16.2.125 50.104035 14.424275
16.2.126 50.104030 14.424268
16.2.127 50.104025 14.424263
end_lane
end_segment
segment 17
num_lanes 2
segment_name S
lane 17.1
num_waypoints 143
checkpoint 17.1.71 33
exit 17.1.143 16.2.1
exit 17.1.143 22.2.1
17.1.1 50.104270 14.428455
17.1.2 50.104268 14.428443
17.1.3 50.104268 14.428430
17.1.4 50.104266 14.428415
17.1.5 50.104265 14.428400
17.1.6 50.104263 14.428388
17.1.7 50.104260 14.428375
17.1.8 50.104258 14.428360
17.1.9 50.104258 14.428346
17.1.10 50.104256 14.428333
17.1.11 50.104255 14.428318
17.1.12 50.104253 14.428303
17.1.13 50.104251 14.428290
17.1.14 50.104250 14.428275
17.1.15 50.104248 14.428258
17.1.16 50.104248 14.428241
17.1.17 50.104246 14.428226
17.1.18 50.104245 14.428211
17.1.19 50.104241 14.428196
17.1.20 50.104238 14.428181
17.1.21 50.104235 14.428166
17.1.22 50.104230 14.428150
17.1.23 50.104226 14.428133
17.1.24 50.104225 14.428118
17.1.25 50.104223 14.428101
17.1.26 50.104221 14.428085
17.1.27 50.104220 14.428063
17.1.28 50.104216 14.428041
17.1.29 50.104213 14.428021
17.1.30 50.104211 14.428000
17.1.31 50.104208 14.427980
17.1.32 50.104206 14.427963
17.1.33 50.104203 14.427943
17.1.34 50.104200 14.427923
17.1.35 50.104195 14.427903
17.1.36 50.104190 14.427885
17.1.37 50.104188 14.427866
17.1.38 50.104186 14.427850
17.1.39 50.104185 14.427831
17.1.40 50.104180 14.427813
17.1.41 50.104175 14.427793
17.1.42 50.104171 14.427773
17.1.43 50.104171 14.427751
17.1.44 50.104168 14.427731
17.1.45 50.104165 14.427710
17.1.46 50.104163 14.427690
17.1.47 50.104160 14.427671
17.1.48 50.104158 14.427650
17.1.49 50.104160 14.427631
17.1.50 50.104160 14.427611
17.1.51 50.104160 14.427595
17.1.52 50.104163 14.427576
17.1.53 50.104166 14.427558
17.1.54 50.104168 14.427535
17.1.55 50.104168 14.427513
17.1.56 50.104170 14.427495
17.1.57 50.104170 14.427475
17.1.58 50.104170 14.427456
17.1.59 50.104168 14.427440
17.1.60 50.104168 14.427421
17.1.61 50.104171 14.427405
17.1.62 50.104173 14.427386
17.1.63 50.104171 14.427366
17.1.64 50.104173 14.427343
17.1.65 50.104176 14.427320
17.1.66 50.104180 14.427300
17.1.67 50.104181 14.427278
17.1.68 50.104185 14.427256
17.1.69 50.104188 14.427235
17.1.70 50.104190 14.427216
17.1.71 50.104195 14.427196
17.1.72 50.104200 14.427175
17.1.73 50.104205 14.427155
17.1.74 50.104208 14.427136
17.1.75 50.104211 14.427118
17.1.76 50.104216 14.427098
17.1.77 50.104220 14.427078
17.1.78 50.104221 14.427058
17.1.79 50.104223 14.427038
17.1.80 50.104226 14.427020
17.1.81 50.104230 14.427006
17.1.82 50.104231 14.426991
17.1.83 50.104235 14.426971
17.1.84 50.104236 14.426953
17.1.85 50.104240 14.426936
17.1.86 50.104240 14.426920
17.1.87 50.104238 14.426906
17.1.88 50.104236 14.426890
17.1.89 50.104236 14.426875
17.1.90 50.104235 14.426861
17.1.91 50.104236 14.426843
17.1.92 50.104236 14.426825
17.1.93 50.104238 14.426805
17.1.94 50.104241 14.426788
17.1.95 50.104245 14.426771
17.1.96 50.104245 14.426751
17.1.97 50.104246 14.426733
17.1.98 50.104250 14.426718
17.1.99 50.104253 14.426700
17.1.100 50.104255 14.426681
17.1.101 50.104258 14.426661
17.1.102 50.104263 14.426645
17.1.103 50.104268 14.426631
17.1.104 50.104273 14.426618
17.1.105 50.104275 14.426603
17.1.106 50.104278 14.426586
17.1.107 50.104283 14.426573
17.1.108 50.104288 14.426556
17.1.109 50.104296 14.426538
17.1.110 50.104308 14.426515
17.1.111 50.104315 14.426498
17.1.112 50.104320 14.426478
17.1.113 50.104326 14.426461
17.1.114 50.104335 14.426448
17.1.115 50.104343 14.426433
17.1.116 50.104348 14.426418
17.1.117 50.104356 14.426396
17.1.118 50.104365 14.426376
17.1.119 50.104371 14.426358
17.1.120 50.104378 14.426340
17.1.121 50.104386 14.426323
17.1.122 50.104395 14.426306
17.1.123 50.104401 14.426291
17.1.124 50.104406 14.426276
17.1.125 50.104411 14.426263
17.1.126 50.104421 14.426250
17.1.127 50.104433 14.426235
17.1.128 50.104443 14.426225
17.1.129 50.104451 14.426213
17.1.130 50.104460 14.426196
17.1.131 50.104466 14.426178
17.1.132 50.104475 14.426163
17.1.133 50.104483 14.426148
17.1.134 50.104490 14.426135
17.1.135 50.104495 14.426121
17.1.136 50.104500 14.426110
17.1.137 50.104506 14.426098
17.1.138 50.104515 14.426088
17.1.139 50.104530 14.426076
17.1.140 50.104546 14.426065
17.1.141 50.104558 14.426058
17.1.142 50.104568 14.426055
17.1.143 50.104578 14.426053
end_lane
lane 17.2
num_waypoints 143
checkpoint 17.2.71 34
exit 17.2.143 18.2.1
17.2.1 50.104578 14.426053
17.2.2 50.104568 14.426055
17.2.3 50.104558 14.426058
17.2.4 50.104546 14.426065
17.2.5 50.104530 14.426076
17.2.6 50.104515 14.426088
17.2.7 50.104506 14.426098
17.2.8 50.104500 14.426110
17.2.9 50.104495 14.426121
17.2.10 50.104490 14.426135
17.2.11 50.104483 14.426148
17.2.12 50.104475 14.426163
17.2.13 50.104466 14.426178
17.2.14 50.104460 14.426196
17.2.15 50.104451 14.426213
17.2.16 50.104443 14.426225
17.2.17 50.104433 14.426235
17.2.18 50.104421 14.426250
17.2.19 50.104411 14.426263
17.2.20 50.104406 14.426276
17.2.21 50.104401 14.426291
17.2.22 50.104395 14.426306
17.2.23 50.104386 14.426323
17.2.24 50.104378 14.426340
17.2.25 50.104371 14.426358
17.2.26 50.104365 14.426376
17.2.27 50.104356 14.426396
17.2.28 50.104348 14.426418
17.2.29 50.104343 14.426433
17.2.30 50.104335 14.426448
17.2.31 50.104326 14.426461
17.2.32 50.104320 14.426478
17.2.33 50.104315 14.426498
17.2.34 50.104308 14.426515
17.2.35 50.104296 14.426538
17.2.36 50.104288 14.426556
17.2.37 50.104283 14.426573
17.2.38 50.104278 14.426586
17.2.39 50.104275 14.426603
17.2.40 50.104273 14.426618
17.2.41 50.104268 14.426631
17.2.42 50.104263 14.426645
17.2.43 50.104258 14.426661
17.2.44 50.104255 14.426681
17.2.45 50.104253 14.426700
17.2.46 50.104250 14.426718
17.2.47 50.104246 14.426733
17.2.48 50.104245 14.426751
17.2.49 50.104245 14.426771
17.2.50 50.104241 14.426788
17.2.51 50.104238 14.426805
17.2.52 50.104236 14.426825
17.2.53 50.104236 14.426843
17.2.54 50.104235 14.426861
17.2.55 50.104236 14.426875
17.2.56 50.104236 14.426890
17.2.57 50.104238 14.426906
17.2.58 50.104240 14.426920
17.2.59 50.104240 14.426936
17.2.60 50.104236 14.426953
17.2.61 50.104235 14.426971
17.2.62 50.104231 14.426991
17.2.63 50.104230 14.427006
17.2.64 50.104226 14.427020
17.2.65 50.104223 14.427038
17.2.66 50.104221 14.427058
17.2.67 50.104220 14.427078
17.2.68 50.104216 14.427098
17.2.69 50.104211 14.427118
17.2.70 50.104208 14.427136
17.2.71 50.104205 14.427155
17.2.72 50.104200 14.427175
17.2.73 50.104195 14.427196
17.2.74 50.104190 14.427216
17.2.75 50.104188 14.427235
17.2.76 50.104185 14.427256
17.2.77 50.104181 14.427278
17.2.78 50.104180 14.427300
17.2.79 50.104176 14.427320
17.2.80 50.104173 14.427343
17.2.81 50.104171 14.427366
17.2.82 50.104173 14.427386
17.2.83 50.104171 14.427405
17.2.84 50.104168 14.427421
17.2.85 50.104168 14.427440
17.2.86 50.104170 14.427456
17.2.87 50.104170 14.427475
17.2.88 50.104170 14.427495
17.2.89 50.104168 14.427513
17.2.90 50.104168 14.427535
17.2.91 50.104166 14.427558
17.2.92 50.104163 14.427576
17.2.93 50.104160 14.427595
17.2.94 50.104160 14.427611
17.2.95 50.104160 14.427631
17.2.96 50.104158 14.427650
17.2.97 50.104160 14.427671
17.2.98 50.104163 14.427690
17.2.99 50.104165 14.427710
17.2.100 50.104168 14.427731
17.2.101 50.104171 14.427751
17.2.102 50.104171 14.427773
17.2.103 50.104175 14.427793
17.2.104 50.104180 14.427813
17.2.105 50.104185 14.427831
17.2.106 50.104186 14.427850
17.2.107 50.104188 14.427866
17.2.108 50.104190 14.427885
17.2.109 50.104195 14.427903
17.2.110 50.104200 14.427923
17.2.111 50.104203 14.427943
17.2.112 50.104206 14.427963
17.2.113 50.104208 14.427980
17.2.114 50.104211 14.428000
17.2.115 50.104213 14.428021
17.2.116 50.104216 14.428041
17.2.117 50.104220 14.428063
17.2.118 50.104221 14.428085
17.2.119 50.104223 14.428101
17.2.120 50.104225 14.428118
17.2.121 50.104226 14.428133
17.2.122 50.104230 14.428150
17.2.123 50.104235 14.428166
17.2.124 50.104238 14.428181
17.2.125 50.104241 14.428196
17.2.126 50.104245 14.428211
17.2.127 50.104246 14.428226
17.2.128 50.104248 14.428241
17.2.129 50.104248 14.428258
17.2.130 50.104250 14.428275
17.2.131 50.104251 14.428290
17.2.132 50.104253 14.428303
17.2.133 50.104255 14.428318
17.2.134 50.104256 14.428333
17.2.135 50.104258 14.428346
17.2.136 50.104258 14.428360
17.2.137 50.104260 14.428375
17.2.138 50.104263 14.428388
17.2.139 50.104265 14.428400
17.2.140 50.104266 14.428415
17.2.141 50.104268 14.428430
17.2.142 50.104268 14.428443
17.2.143 50.104270 14.428455
end_lane
end_segment
segment 18
num_lanes 2
segment_name T
lane 18.1
num_waypoints 41
checkpoint 18.1.20 35
exit 18.1.41 17.1.1
18.1.1 50.104648 14.428108
18.1.2 50.104640 14.428113
18.1.3 50.104630 14.428118
18.1.4 50.104620 14.428123
18.1.5 50.104610 14.428126
18.1.6 50.104600 14.428131
18.1.7 50.104591 14.428140
18.1.8 50.104583 14.428150
18.1.9 50.104573 14.428158
18.1.10 50.104563 14.428165
18.1.11 50.104555 14.428173
18.1.12 50.104543 14.428180
18.1.13 50.104535 14.428188
18.1.14 50.104526 14.428196
18.1.15 50.104518 14.428206
18.1.16 50.104510 14.428215
18.1.17 50.104500 14.428225
18.1.18 50.104493 14.428235
18.1.19 50.104485 14.428243
18.1.20 50.104476 14.428253
18.1.21 50.104466 14.428261
18.1.22 50.104456 14.428273
18.1.23 50.104446 14.428286
18.1.24 50.104438 14.428298
18.1.25 50.104428 14.428310
18.1.26 50.104420 14.428320
18.1.27 50.104411 14.428330
18.1.28 50.104403 14.428341
18.1.29 50.104395 14.428353
18.1.30 50.104386 14.428365
18.1.31 50.104378 14.428376
18.1.32 50.104370 14.428388
18.1.33 50.104361 14.428398
18.1.34 50.104351 14.428408
18.1.35 50.104341 14.428418
18.1.36 50.104333 14.428426
18.1.37 50.104323 14.428435
18.1.38 50.104315 14.428441
18.1.39 50.104308 14.428448
18.1.40 50.104300 14.428458
18.1.41 50.104293 14.428468
end_lane
lane 18.2
num_waypoints 41
checkpoint 18.2.20 36
exit 18.2.41 19.1.1
exit 18.2.41 20.2.1
18.2.1 50.104293 14.428468
18.2.2 50.104300 14.428458
18.2.3 50.104308 14.428448
18.2.4 50.104315 14.428441
18.2.5 50.104323 14.428435
18.2.6 50.104333 14.428426
18.2.7 50.104341 14.428418
18.2.8 50.104351 14.428408
18.2.9 50.104361 14.428398
18.2.10 50.104370 14.428388
18.2.11 50.104378 14.428376
18.2.12 50.104386 14.428365
18.2.13 50.104395 14.428353
18.2.14 50.104403 14.428341
18.2.15 50.104411 14.428330
18.2.16 50.104420 14.428320
18.2.17 50.104428 14.428310
18.2.18 50.104438 14.428298
18.2.19 50.104446 14.428286
18.2.20 50.104456 14.428273
18.2.21 50.104466 14.428261
18.2.22 50.104476 14.428253
18.2.23 50.104485 14.428243
18.2.24 50.104493 14.428235
18.2.25 50.104500 14.428225
18.2.26 50.104510 14.428215
18.2.27 50.104518 14.428206
18.2.28 50.104526 14.428196
18.2.29 50.104535 14.428188
18.2.30 50.104543 14.428180
18.2.31 50.104555 14.428173
18.2.32 50.104563 14.428165
18.2.33 50.104573 14.428158
18.2.34 50.104583 14.428150
18.2.35 50.104591 14.428140
18.2.36 50.104600 14.428131
18.2.37 50.104610 14.428126
18.2.38 50.104620 14.428123
18.2.39 50.104630 14.428118
18.2.40 50.104640 14.428113
18.2.41 50.104648 14.428108
end_lane
end_segment
segment 19
num_lanes 2
segment_name U
lane 19.1
num_waypoints 65
checkpoint 19.1.32 37
exit 19.1.65 13.2.1
exit 19.1.65 14.1.1
exit 19.1.65 22.1.1
19.1.1 50.104701 14.428131
19.1.2 50.104708 14.428121
19.1.3 50.104713 14.428106
19.1.4 50.104720 14.428090
19.1.5 50.104728 14.428071
19.1.6 50.104733 14.428053
19.1.7 50.104741 14.428038
19.1.8 50.104746 14.428020
19.1.9 50.104751 14.427996
19.1.10 50.104756 14.427978
19.1.11 50.104763 14.427965
19.1.12 50.104768 14.427950
19.1.13 50.104775 14.427928
19.1.14 50.104780 14.427906
19.1.15 50.104785 14.427886
19.1.16 50.104791 14.427871
19.1.17 50.104796 14.427851
19.1.18 50.104803 14.427831
19.1.19 50.104808 14.427813
19.1.20 50.104813 14.427793
19.1.21 50.104818 14.427775
19.1.22 50.104823 14.427755
19.1.23 50.104831 14.427738
19.1.24 50.104838 14.427720
19.1.25 50.104843 14.427700
19.1.26 50.104851 14.427683
19.1.27 50.104856 14.427663
19.1.28 50.104863 14.427645
19.1.29 50.104871 14.427626
19.1.30 50.104876 14.427610
19.1.31 50.104883 14.427590
19.1.32 50.104890 14.427570
19.1.33 50.104895 14.427551
19.1.34 50.104900 14.427531
19.1.35 50.104901 14.427510
19.1.36 50.104906 14.427490
19.1.37 50.104911 14.427471
19.1.38 50.104918 14.427453
19.1.39 50.104925 14.427435
19.1.40 50.104931 14.427416
19.1.41 50.104936 14.427396
19.1.42 50.104938 14.427375
19.1.43 50.104940 14.427355
19.1.44 50.104945 14.427338
19.1.45 50.104950 14.427321
19.1.46 50.104953 14.427303
19.1.47 50.104956 14.427285
19.1.48 50.104963 14.427270
19.1.49 50.104970 14.427253
19.1.50 50.104973 14.427236
19.1.51 50.104978 14.427220
19.1.52 50.104980 14.427201
19.1.53 50.104981 14.427183
19.1.54 50.104981 14.427161
19.1.55 50.104985 14.427145
19.1.56 50.104986 14.427130
19.1.57 50.104990 14.427113
19.1.58 50.104991 14.427095
19.1.59 50.104993 14.427076
19.1.60 50.104995 14.427056
19.1.61 50.104996 14.427036
19.1.62 50.105000 14.427013
19.1.63 50.105003 14.426995
19.1.64 50.105003 14.426976
19.1.65 50.105006 14.426961
end_lane
lane 19.2
num_waypoints 65
checkpoint 19.2.32 38
exit 19.2.65 18.1.1
exit 19.2.65 20.2.1
19.2.1 50.105006 14.426961
19.2.2 50.105003 14.426976
19.2.3 50.105003 14.426995
19.2.4 50.105000 14.427013
19.2.5 50.104996 14.427036
19.2.6 50.104995 14.427056
19.2.7 50.104993 14.427076
19.2.8 50.104991 14.427095
19.2.9 50.104990 14.427113
19.2.10 50.104986 14.427130
19.2.11 50.104985 14.427145
19.2.12 50.104981 14.427161
19.2.13 50.104981 14.427183
19.2.14 50.104980 14.427201
19.2.15 50.104978 14.427220
19.2.16 50.104973 14.427236
19.2.17 50.104970 14.427253
19.2.18 50.104963 14.427270
19.2.19 50.104956 14.427285
19.2.20 50.104953 14.427303
19.2.21 50.104950 14.427321
19.2.22 50.104945 14.427338
19.2.23 50.104940 14.427355
19.2.24 50.104938 14.427375
19.2.25 50.104936 14.427396
19.2.26 50.104931 14.427416
19.2.27 50.104925 14.427435
19.2.28 50.104918 14.427453
19.2.29 50.104911 14.427471
19.2.30 50.104906 14.427490
19.2.31 50.104901 14.427510
19.2.32 50.104900 14.427531
19.2.33 50.104895 14.427551
19.2.34 50.104890 14.427570
19.2.35 50.104883 14.427590
19.2.36 50.104876 14.427610
19.2.37 50.104871 14.427626
19.2.38 50.104863 14.427645
19.2.39 50.104856 14.427663
19.2.40 50.104851 14.427683
19.2.41 50.104843 14.427700
19.2.42 50.104838 14.427720
19.2.43 50.104831 14.427738
19.2.44 50.104823 14.427755
19.2.45 50.104818 14.427775
19.2.46 50.104813 14.427793
19.2.47 50.104808 14.427813
19.2.48 50.104803 14.427831
19.2.49 50.104796 14.427851
19.2.50 50.104791 14.427871
19.2.51 50.104785 14.427886
19.2.52 50.104780 14.427906
19.2.53 50.104775 14.427928
19.2.54 50.104768 14.427950
19.2.55 50.104763 14.427965
19.2.56 50.104756 14.427978
19.2.57 50.104751 14.427996
19.2.58 50.104746 14.428020
19.2.59 50.104741 14.428038
19.2.60 50.104733 14.428053
19.2.61 50.104728 14.428071
19.2.62 50.104720 14.428090
19.2.63 50.104713 14.428106
19.2.64 50.104708 14.428121
19.2.65 50.104701 14.428131
end_lane
end_segment
segment 20
num_lanes 2
segment_name V
lane 20.1
num_waypoints 49
checkpoint 20.1.24 39
exit 20.1.49 18.1.1
exit 20.1.49 19.1.1
20.1.1 50.105193 14.428016
20.1.2 50.105183 14.428021
20.1.3 50.105173 14.428026
20.1.4 50.105161 14.428031
20.1.5 50.105150 14.428035
20.1.6 50.105140 14.428038
20.1.7 50.105128 14.428041
20.1.8 50.105118 14.428045
20.1.9 50.105106 14.428046
20.1.10 50.105095 14.428048
20.1.11 50.105083 14.428051
20.1.12 50.105073 14.428055
20.1.13 50.105061 14.428056
20.1.14 50.105050 14.428058
20.1.15 50.105040 14.428060
20.1.16 50.105030 14.428061
20.1.17 50.105020 14.428065
20.1.18 50.105008 14.428066
20.1.19 50.104996 14.428068
20.1.20 50.104985 14.428068
20.1.21 50.104973 14.428071
20.1.22 50.104963 14.428075
20.1.23 50.104953 14.428075
20.1.24 50.104941 14.428075
20.1.25 50.104930 14.428075
20.1.26 50.104918 14.428070
20.1.27 50.104906 14.428066
20.1.28 50.104896 14.428065
20.1.29 50.104883 14.428065
20.1.30 50.104873 14.428066
20.1.31 50.104861 14.428065
20.1.32 50.104851 14.428063
20.1.33 50.104841 14.428063
20.1.34 50.104831 14.428063
20.1.35 50.104821 14.428063
20.1.36 50.104811 14.428063
20.1.37 50.104800 14.428063
20.1.38 50.104788 14.428061
20.1.39 50.104778 14.428060
20.1.40 50.104766 14.428060
20.1.41 50.104756 14.428058
20.1.42 50.104746 14.428060
20.1.43 50.104735 14.428060
20.1.44 50.104726 14.428058
20.1.45 50.104718 14.428058
20.1.46 50.104710 14.428060
20.1.47 50.104700 14.428061
20.1.48 50.104691 14.428060
20.1.49 50.104683 14.428060
end_lane
lane 20.2
num_waypoints 49
checkpoint 20.2.24 40
exit 20.2.49 1.1.1
exit 20.2.49 21.2.1
20.2.1 50.104683 14.428060
20.2.2 50.104691 14.428060
20.2.3 50.104700 14.428061
20.2.4 50.104710 14.428060
20.2.5 50.104718 14.428058
20.2.6 50.104726 14.428058
20.2.7 50.104735 14.428060
20.2.8 50.104746 14.428060
20.2.9 50.104756 14.428058
20.2.10 50.104766 14.428060
20.2.11 50.104778 14.428060
20.2.12 50.104788 14.428061
20.2.13 50.104800 14.428063
20.2.14 50.104811 14.428063
20.2.15 50.104821 14.428063
20.2.16 50.104831 14.428063
20.2.17 50.104841 14.428063
20.2.18 50.104851 14.428063
20.2.19 50.104861 14.428065
20.2.20 50.104873 14.428066
20.2.21 50.104883 14.428065
20.2.22 50.104896 14.428065
20.2.23 50.104906 14.428066
20.2.24 50.104918 14.428070
20.2.25 50.104930 14.428075
20.2.26 50.104941 14.428075
20.2.27 50.104953 14.428075
20.2.28 50.104963 14.428075
20.2.29 50.104973 14.428071
20.2.30 50.104985 14.428068
20.2.31 50.104996 14.428068
20.2.32 50.105008 14.428066
20.2.33 50.105020 14.428065
20.2.34 50.105030 14.428061
20.2.35 50.105040 14.428060
20.2.36 50.105050 14.428058
20.2.37 50.105061 14.428056
20.2.38 50.105073 14.428055
20.2.39 50.105083 14.428051
20.2.40 50.105095 14.428048
20.2.41 50.105106 14.428046
20.2.42 50.105118 14.428045
20.2.43 50.105128 14.428041
20.2.44 50.105140 14.428038
20.2.45 50.105150 14.428035
20.2.46 50.105161 14.428031
20.2.47 50.105173 14.428026
20.2.48 50.105183 14.428021
20.2.49 50.105193 14.428016
end_lane
end_segment
segment 21
num_lanes 2
segment_name W
lane 21.1
num_waypoints 56
checkpoint 21.1.28 41
exit 21.1.56 1.1.1
exit 21.1.56 20.1.1
21.1.1 50.105228 14.427126
21.1.2 50.105226 14.427141
21.1.3 50.105223 14.427158
21.1.4 50.105221 14.427173
21.1.5 50.105218 14.427190
21.1.6 50.105215 14.427206
21.1.7 50.105211 14.427220
21.1.8 50.105206 14.427235
21.1.9 50.105200 14.427251
21.1.10 50.105193 14.427270
21.1.11 50.105186 14.427286
21.1.12 50.105181 14.427301
21.1.13 50.105176 14.427318
21.1.14 50.105173 14.427333
21.1.15 50.105170 14.427346
21.1.16 50.105165 14.427360
21.1.17 50.105160 14.427376
21.1.18 50.105155 14.427393
21.1.19 50.105150 14.427405
21.1.20 50.105145 14.427418
21.1.21 50.105140 14.427430
21.1.22 50.105135 14.427443
21.1.23 50.105130 14.427458
21.1.24 50.105125 14.427470
21.1.25 50.105123 14.427481
21.1.26 50.105123 14.427493
21.1.27 50.105123 14.427508
21.1.28 50.105123 14.427526
21.1.29 50.105125 14.427541
21.1.30 50.105126 14.427558
21.1.31 50.105130 14.427575
21.1.32 50.105131 14.427593
21.1.33 50.105133 14.427610
21.1.34 50.105135 14.427626
21.1.35 50.105136 14.427641
21.1.36 50.105140 14.427658
21.1.37 50.105141 14.427675
21.1.38 50.105146 14.427690
21.1.39 50.105150 14.427706
21.1.40 50.105151 14.427726
21.1.41 50.105155 14.427743
21.1.42 50.105158 14.427758
21.1.43 50.105161 14.427776
21.1.44 50.105165 14.427793
21.1.45 50.105170 14.427810
21.1.46 50.105176 14.427825
21.1.47 50.105181 14.427840
21.1.48 50.105186 14.427855
21.1.49 50.105191 14.427870
21.1.50 50.105196 14.427885
21.1.51 50.105203 14.427898
21.1.52 50.105210 14.427911
21.1.53 50.105216 14.427926
21.1.54 50.105221 14.427941
21.1.55 50.105228 14.427955
21.1.56 50.105233 14.427968
end_lane
lane 21.2
num_waypoints 56
checkpoint 21.2.28 42
exit 21.2.56 3.2.1
exit 21.2.56 8.2.1
exit 21.2.56 14.2.1
21.2.1 50.105233 14.427968
21.2.2 50.105228 14.427955
21.2.3 50.105221 14.427941
21.2.4 50.105216 14.427926
21.2.5 50.105210 14.427911
21.2.6 50.105203 14.427898
21.2.7 50.105196 14.427885
21.2.8 50.105191 14.427870
21.2.9 50.105186 14.427855
21.2.10 50.105181 14.427840
21.2.11 50.105176 14.427825
21.2.12 50.105170 14.427810
21.2.13 50.105165 14.427793
21.2.14 50.105161 14.427776
21.2.15 50.105158 14.427758
21.2.16 50.105155 14.427743
21.2.17 50.105151 14.427726
21.2.18 50.105150 14.427706
21.2.19 50.105146 14.427690
21.2.20 50.105141 14.427675
21.2.21 50.105140 14.427658
21.2.22 50.105136 14.427641
21.2.23 50.105135 14.427626
21.2.24 50.105133 14.427610
21.2.25 50.105131 14.427593
21.2.26 50.105130 14.427575
21.2.27 50.105126 14.427558
21.2.28 50.105125 14.427541
21.2.29 50.105123 14.427526
21.2.30 50.105123 14.427508
21.2.31 50.105123 14.427493
21.2.32 50.105123 14.427481
21.2.33 50.105125 14.427470
21.2.34 50.105130 14.427458
21.2.35 50.105135 14.427443
21.2.36 50.105140 14.427430
21.2.37 50.105145 14.427418
21.2.38 50.105150 14.427405
21.2.39 50.105155 14.427393
21.2.40 50.105160 14.427376
21.2.41 50.105165 14.427360
21.2.42 50.105170 14.427346
21.2.43 50.105173 14.427333
21.2.44 50.105176 14.427318
21.2.45 50.105181 14.427301
21.2.46 50.105186 14.427286
21.2.47 50.105193 14.427270
21.2.48 50.105200 14.427251
21.2.49 50.105206 14.427235
21.2.50 50.105211 14.427220
21.2.51 50.105215 14.427206
21.2.52 50.105218 14.427190
21.2.53 50.105221 14.427173
21.2.54 50.105223 14.427158
21.2.55 50.105226 14.427141
21.2.56 50.105228 14.427126
end_lane
end_segment
segment 22
num_lanes 2
segment_name R
lane 22.1
num_waypoints 64
checkpoint 22.1.32 43
exit 22.1.64 16.2.1
exit 22.1.64 17.2.1
22.1.1 50.104991 14.426938
22.1.2 50.104991 14.426930
22.1.3 50.104990 14.426913
22.1.4 50.104985 14.426890
22.1.5 50.104975 14.426866
22.1.6 50.104963 14.426845
22.1.7 50.104951 14.426825
22.1.8 50.104938 14.426808
22.1.9 50.104926 14.426795
22.1.10 50.104915 14.426781
22.1.11 50.104906 14.426768
22.1.12 50.104898 14.426756
22.1.13 50.104890 14.426743
22.1.14 50.104881 14.426730
22.1.15 50.104871 14.426716
22.1.16 50.104863 14.426703
22.1.17 50.104856 14.426691
22.1.18 50.104846 14.426680
22.1.19 50.104838 14.426666
22.1.20 50.104830 14.426655
22.1.21 50.104823 14.426643
22.1.22 50.104816 14.426631
22.1.23 50.104815 14.426625
22.1.24 50.104808 14.426613
22.1.25 50.104800 14.426600
22.1.26 50.104791 14.426586
22.1.27 50.104785 14.426576
22.1.28 50.104778 14.426563
22.1.29 50.104771 14.426551
22.1.30 50.104766 14.426543
22.1.31 50.104760 14.426533
22.1.32 50.104753 14.426523
22.1.33 50.104746 14.426513
22.1.34 50.104741 14.426503
22.1.35 50.104735 14.426491
22.1.36 50.104726 14.426481
22.1.37 50.104721 14.426470
22.1.38 50.104715 14.426456
22.1.39 50.104708 14.426443
22.1.40 50.104703 14.426430
22.1.41 50.104698 14.426418
22.1.42 50.104695 14.426406
22.1.43 50.104691 14.426393
22.1.44 50.104686 14.426380
22.1.45 50.104683 14.426366
22.1.46 50.104680 14.426353
22.1.47 50.104676 14.426336
22.1.48 50.104673 14.426323
22.1.49 50.104670 14.426308
22.1.50 50.104666 14.426293
22.1.51 50.104661 14.426278
22.1.52 50.104658 14.426263
22.1.53 50.104658 14.426248
22.1.54 50.104651 14.426230
22.1.55 50.104648 14.426213
22.1.56 50.104646 14.426196
22.1.57 50.104645 14.426180
22.1.58 50.104641 14.426163
22.1.59 50.104636 14.426148
22.1.60 50.104635 14.426133
22.1.61 50.104631 14.426118
22.1.62 50.104630 14.426103
22.1.63 50.104625 14.426086
22.1.64 50.104621 14.426073
end_lane
lane 22.2
num_waypoints 64
checkpoint 22.2.32 44
exit 22.2.64 13.2.1
exit 22.2.64 14.1.1
exit 22.2.64 19.2.1
22.2.1 50.104621 14.426073
22.2.2 50.104625 14.426086
22.2.3 50.104630 14.426103
22.2.4 50.104631 14.426118
22.2.5 50.104635 14.426133
22.2.6 50.104636 14.426148
22.2.7 50.104641 14.426163
22.2.8 50.104645 14.426180
22.2.9 50.104646 14.426196
22.2.10 50.104648 14.426213
22.2.11 50.104651 14.426230
22.2.12 50.104658 14.426248
22.2.13 50.104658 14.426263
22.2.14 50.104661 14.426278
22.2.15 50.104666 14.426293
22.2.16 50.104670 14.426308
22.2.17 50.104673 14.426323
22.2.18 50.104676 14.426336
22.2.19 50.104680 14.426353
22.2.20 50.104683 14.426366
22.2.21 50.104686 14.426380
22.2.22 50.104691 14.426393
22.2.23 50.104695 14.426406
22.2.24 50.104698 14.426418
22.2.25 50.104703 14.426430
22.2.26 50.104708 14.426443
22.2.27 50.104715 14.426456
22.2.28 50.104721 14.426470
22.2.29 50.104726 14.426481
22.2.30 50.104735 14.426491
22.2.31 50.104741 14.426503
22.2.32 50.104746 14.426513
22.2.33 50.104753 14.426523
22.2.34 50.104760 14.426533
22.2.35 50.104766 14.426543
22.2.36 50.104771 14.426551
22.2.37 50.104778 14.426563
22.2.38 50.104785 14.426576
22.2.39 50.104791 14.426586
22.2.40 50.104800 14.426600
22.2.41 50.104808 14.426613
22.2.42 50.104815 14.426625
22.2.43 50.104816 14.426631
22.2.44 50.104823 14.426643
22.2.45 50.104830 14.426655
22.2.46 50.104838 14.426666
22.2.47 50.104846 14.426680
22.2.48 50.104856 14.426691
22.2.49 50.104863 14.426703
22.2.50 50.104871 14.426716
22.2.51 50.104881 14.426730
22.2.52 50.104890 14.426743
22.2.53 50.104898 14.426756
22.2.54 50.104906 14.426768
22.2.55 50.104915 14.426781
22.2.56 50.104926 14.426795
22.2.57 50.104938 14.426808
22.2.58 50.104951 14.426825
22.2.59 50.104963 14.426845
22.2.60 50.104975 14.426866
22.2.61 50.104985 14.426890
22.2.62 50.104990 14.426913
22.2.63 50.104991 14.426930
22.2.64 50.104991 14.426938
end_lane
end_segment
end_file
 
/roboti/Robotour/SW/RNDF_MDF_parser/rndf_parser.cpp
0,0 → 1,95
/*
* Trida RNDFParser poskytuje metody ke zpracovani textoveho souboru ve
* formatu RNDF definovaneho v soutezi Rotobour 2007
*
* @author: Vasco
* @date: Sat, 21 Jul 2007 15:56:28 +0200
* @version: 0.0.0
*
*/
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <cctype>
 
#ifdef DBG
// vypisuje ladici hlaseni
#include "rndf_dbg.cpp"
#endif
 
class RNDFParser {
private:
std::string rndfname;
 
protected:
/* funkce vezme retezec a rozlozi jej na slova, vraci vector<std::string> */
std::vector<std::string> toWord(const std::string& veta);
 
public:
RNDFParser(std::string name) { rndfname = name; } // konstruktor, ulozi jmeno souboru
std::string rndfName() { return rndfname; } // vrati jmeno zpracovavaneho souboru
std::map<double, double> parseSegment(int numSegment); // rozparsuje zadany segment cesty
};
 
/**
* @param veta retezec, ktery chceme rozlozit na slova
*
* Metoda vezme vstupni retezec a rozlozi jej na slova. Slovo zacina a konci libovolnym poctem
* bilych znaku, veta konci s koncem retezce. Vysledna slova jsou ukladana do vector<string>,
* ktery je nasledne vracen volajicimu.
*/
std::vector<std::string> RNDFParser::toWord(const std::string& veta) {
// definice vlastnich typu
typedef std::string::size_type vel_vety; // velikost retezce
 
// mistni promnene
std::vector<std::string> slova; // sem se budou ukladat slova
vel_vety i = 0; // velikost zadane vety
 
#ifdef DBG
// pro kontrolu vypiseme vetu
echoDbg(veta);
#endif
 
// dokud nedojdeme na konec retezce
while(i != veta.size()) {
// jsou na zacatku mezery? preskoc je
while(i != veta.size() && std::isspace(veta[i]))
i++;
 
// uloz pozici zacatku slova
vel_vety j = i; // pomocny ukazatel v retezci
 
// slovo, dokud nenarazime na dalsi mezeru
while(j != veta.size() && !(std::isspace(veta[j])))
j++;
 
// pokud se ve vete vyskytovaly slova
if(i != j) {
// vloz slovo do vectoru
slova.push_back(veta.substr(i, j - i));
 
// opet ulozime pozici a jdem na dalsi slovo
i = j;
 
}
} //end while
 
return slova;
}
 
/* funkce main je jen pro testovaci ucely, prelozi se pouze s definovanym makrem 'DBG' */
#ifdef DBG
int main(void) {
std::cout << "PARSER:\tvypisuji RNDF soubor:" << std::endl;
 
RNDFParser parser("RNDF_stromovka.txt");
std::cout << "PARSER:\tJmeno souboru je " << parser.rndfName() << std::endl;
 
 
return 0;
}
#endif
/roboti/istrobot/camerus/SW/873/bak/camerus.c
0,0 → 1,66
#include ".\camerus.h"
 
 
void main()
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
 
output_high(PIN_C0);
 
i2c_start(); // Reset
i2c_write(0xC0);
i2c_write(0x12);
i2c_write(0x80 | 0x24);
i2c_stop();
 
i2c_start(); // BW
i2c_write(0xC0);
i2c_write(0x28);
i2c_write(0b01000001);
i2c_stop();
 
i2c_start(); // Contrast
i2c_write(0xC0);
i2c_write(0x05);
i2c_write(0xFF);
i2c_stop();
 
i2c_start(); // Brightness
i2c_write(0xC0);
i2c_write(0x06);
i2c_write(0x80);
i2c_stop();
 
/*
i2c_start(); // Band Filter
i2c_write(0xC0);
i2c_write(0x2D);
i2c_write(0x04 | 0x03);
i2c_stop();
 
i2c_start(); // 4-bit, (CLK/4)
i2c_write(0xC0);
i2c_write(0x3E);
i2c_write(0x10 | 0x80);
i2c_stop();
*/
i2c_start(); // VSTRT
i2c_write(0xC0);
i2c_write(0x19);
i2c_write(45);
i2c_stop();
 
i2c_start(); // VEND
i2c_write(0xC0);
i2c_write(0x1A);
i2c_write(45);
i2c_stop();
 
output_low(PIN_C0);
 
while(true);
}
/roboti/istrobot/camerus/SW/873/objizdka_L.c
0,0 → 1,163
// **** Objeti cihly vlevo **** LLLL
 
#define L_TOUCH 1 // Cara vlevo
#define R_TOUCH 2 // Cata vpravo
#define B_TOUCH 3 // Both
 
int8 n;
int8 r1,r2,rr;
int8 touch;
enum okolo_cihly {pred_carou,na_care,po_care};
okolo_cihly ridic; // V jakem jsme stavu objizdeni cihly
int8 vzdalenost;
 
cihla:
 
rr=20;
disp(0x99);
set_pwm1_duty(0); // zabrzdi levym kolem, prave vpred
set_pwm2_duty(150);
output_high(MOT_L);
output_low(MOT_R);
odocounter=get_timer1();
while(true) // Na zacatku se vyhni cihle, zatoc co muzes
{
cas=CASMIN-5; // jeste vic nez hodne do leva
 
set_pwm1_duty(0);
set_pwm2_duty(200);
output_high(MOT_L); // leve kolo reverz
output_low(MOT_R); // prave kolo vpred
if(get_timer1()>(odocounter+5)) // konec zatacky?
{
disp(0x66);
break;
}
SetServoQ(cas);
delay_ms(18);
};
 
//------ Objeti cihly v konstantni vzdalenosti ------
touch=0;
ridic=pred_carou;
cas=CASAVR-CASMIN; // rovne
output_low(MOT_L); // vpred
output_low(MOT_R);
while(true)
{
if(!input(IRRX)) // hrozi celni srazka s cihlou v prubehu objizdeni
{
cas=CASMIN;
}
else
{
if((vzdalenost!=0)||!input(PROXIMITY)) // Udrzovani konstantni vzdalenosti od cihly
{
if(cas>(CASMIN+20)) cas-=20;
}
else
{
if(cas<(CASMAX-20)) cas+=20;
};
};
// Elektronicky diferencial
if(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimace
if(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoru
if(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92
 
if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeni
if (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN);
 
set_pwm1_duty(r1); // Nastav rychlost motoru
set_pwm2_duty(r2);
 
SetServoQ(cas);
 
i2c_start(); // Sonar Ping
i2c_write(0xE0);
i2c_write(0x0);
i2c_write(0x52); // mereni v us
i2c_stop();
 
for(n=1;n<=90;n++) // 18ms testovani cary do dalsi korekce serva
{
set_adc_channel(LMAX);
delay_us(100);
if(read_adc()<THR) touch|=L_TOUCH;
set_adc_channel(RMAX);
delay_us(100);
if(read_adc()<THR) touch|=R_TOUCH;
};
 
i2c_start(); // Odraz ze sonaru
i2c_write(0xE0);
i2c_write(0x3);
i2c_stop();
i2c_start();
i2c_write(0xE1);
vzdalenost=i2c_read(0);
i2c_stop();
 
if(touch==L_TOUCH) disp(0xC0);
if(touch==R_TOUCH) disp(0x03);
if((touch==B_TOUCH)&&(ridic==pred_carou)) ridic=na_care;
if((ridic==na_care)&&(touch==0)) break;
if(ridic==na_care) touch=0;
};
disp(0xC3);
 
set_pwm1_duty(20);
set_pwm2_duty(200);
output_high(MOT_L);
output_low(MOT_R);
delay_us(40);
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie
while (true) // Znovu se musime dotknout cary
{
for(n=1;n<=90;n++) // 18ms testovani cary do dalsi korekce serva
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(100);
if(read_adc()<THR) // Dotkli jsme se levym senzorem
{
disp(0xE0);
cas=CASAVR-CASMIN; // nastavime, ze cara je rovne
goto cara;
};
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(100);
if((get_timer1()>=(odocounter+2)) && (read_adc()<THR)) // Pravym senzorem nesmime caru prejet!
{
disp(0x07);
cas=CASMAX; // kdyz prejedem, tak nastavime, ze cara je vpravo
goto cara;
};
}
SetServoQ(CASMIN-5); // max. max. doleva L
}
 
cara:
 
output_low(MOT_L); // oba motory vpred
output_low(MOT_R);
/*
set_pwm1_duty(0); // vypni motory
set_pwm2_duty(0);
 
SetServo(CASAVR-CASMIN); // doprostred
 
set_pwm1_duty(255); // max. vpred
set_pwm2_duty(255);
output_low(MOT_L);
output_low(MOT_R);
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie
while(get_timer1()<(odocounter+2)) // Ujed kousek
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(40);
if(read_adc()<THR) {cas=CASMIN; break;}; // Prejeli jsme caru vlevo
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(40);
if(read_adc()<THR) {cas=CASMAX; break;}; // Prejeli jsme caru vpravo
};
*/
/roboti/istrobot/camerus/SW/873/camerus.PJT
0,0 → 1,55
[PROJECT]
Target=camerus.HEX
Development_Mode=
Processor=0x873A
ToolSuite=CCS
 
[Directories]
Include=C:\Program Files\PICC\devices\;C:\Program Files\PICC\Dr
Library=
LinkerScript=
 
[Target Data]
FileList=C:\dokumenty\svn\Kaklik\roboti\istrobot\camerus\SW\873\camerus.c
BuildTool=C-COMPILER
OptionString=+FM
AdditionalOptionString=
BuildRequired=1
 
[camerus.c]
Type=4
Path=
FileList=
BuildTool=
OptionString=
AdditionalOptionString=
 
[mru-list]
1=camerus.c
 
[Windows]
0=0000 camerus.c 0 0 796 451 3 0
 
[Opened Files]
1=C:\dokumenty\svn\Kaklik\roboti\istrobot\camerus\SW\873\camerus.c
2=C:\dokumenty\svn\Kaklik\roboti\istrobot\camerus\SW\873\camerus.h
3=C:\Program Files\PICC\devices\16F873A.h
4=
[debugperif]
selected=Analog/Digital Conv
[debugram]
autoread=1
[debugeedata]
autoread=1
[debugbreak]
count=0
[pcwdebug]
watchcol0=75
[debugwatch]
count=0
[debugexpr]
expr=
sideeffects=0
[Units]
Count=1
1=C:\dokumenty\svn\Kaklik\roboti\istrobot\camerus\SW\873\camerus.c (main)
/roboti/istrobot/camerus/SW/873/camerus.c
0,0 → 1,512
//********* Robot Camerus pro IstRobot 2007 ************
//"$Id: camerus.c 229 2007-04-09 11:41:19Z kakl $"
//*****************************************************
 
#include ".\camerus.h"
 
#USE FAST_IO (C) // Brana C je ve FAST_IO modu, aby slo rychle cist z kamery
 
// A/D vstupy
#define RMAX 4 // AN4/RA5 - leve cidlo na vyjeti z cary
#define LMAX 3 // AN3/RA3 - prave cidlo na vyjeti z cary
#define CERVENA 2 // AN2/RA2 - cervene kroutitko
#define ZELENA 1 // AN1/RA0 - zelene kroutitko
#define MODRA 0 // AN0/RA1 - modre kroutitko
 
// I/O
#define HREF PIN_C5 // Signal HREF z kamery (v H po celou dobu radku)
#define PIX PIN_C6 // Vstup pro body z kamery (za trivstupim hradlem OR (dig. komparator))
#define SERVO PIN_B4 // Vystup na servo (1 az 2ms po cca 20ms (synchronizovano snimkovym kmitoctem))
#define MOT_L PIN_B5 // Smer otaceni leveho motoru; druhy pol je RC2
#define MOT_R PIN_B6 // Smer otaceni praveho motoru; druhy pol je RC1
#define MOT_1 PIN_C1 // PWM vystpy motoru
#define MOT_2 PIN_C2 //
#define DATA PIN_B2 // K modulu LEDbar data
#define CP PIN_B1 // K modulu LEDbar hodiny
//#define ODO PIN_C0 // Ze snimace z odometrie z praveho kola na TIMER1
// Jeden impuls je 31,25mm
#define IRRX PIN_B0 // Vstup INT, generuje preruseni pri prekazce
#define IRTX PIN_B3 // Modulovani vysilaci IR LED na detekci prekazky
#define PROXIMITY PIN_C7 // Cidlo kratkeho dosahu na cihlu
 
#define CASMIN 6 // Rozsah radku snimace
#define CASMAX 192
#define CASAVR ((CASMAX+CASMIN) / 2)
 
#define OFFSETO 0x9F //0x9F // Vystredeni serva pro objeti prekazky
 
#define THR 90 // Threshold pro UV cidla na caru
 
#byte INTCON = 0x0B // Interrupt configuration register
#bit GIE = INTCON.7
#bit PEIE = INTCON.6
#bit TMR0IE = INTCON.5
#bit INT0IE = INTCON.4
#bit RBIE = INTCON.3
#bit TMR0IF = INTCON.2
#bit INT0IF = INTCON.1
#bit RBIF = INTCON.0
 
enum stavy {start,rozjezd,jizda,cihla,pocihle,cil};
stavy stav; // Kde jsme na trati
int8 cas; // Cas hrany bila/cerna v radce
int8 stred; // Vystredeni kolecka
int16 odocounter; // Zaznamenani aktualniho stavu pocitadla odometrie
int8 rr; // Promenna na ulozeni Rozumne rychlost
int8 rrold;
//int8 pole_h[0x40];
int8 pole_l[0x40];
 
// Zobrazeni jednoho byte na modulu LEDbar
inline void disp(int8 x)
{
int n;
 
for(n=0;n<=7;n++)
{
if (x & 1 == 1) output_low(DATA); else output_high(DATA);
output_high(CP);
x>>=1;
output_low(CP);
}
}
 
// Blikani LEDbarem ve stilu Night Rider
void NightRider(int8 x)
{
int n,i,j;
 
for(j=0;j<x;j++)
{
i=0x01;
for(n=0;n<7;n++)
{
disp(i);
rotate_left(&i, 1);
delay_ms(40);
}
for(n=0;n<7;n++)
{
disp(i);
rotate_right(&i, 1);
delay_ms(40);
}
}
disp(i);
delay_ms(40);
i=0;
disp(i);
}
 
// Brzdeni motorama stridou 1:1
void brzda()
{
int8 n,i;
 
set_pwm1_duty(0); // vypni PWM
set_pwm2_duty(0);
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_OFF);
for (n=0;n<200;n++)
{
output_low(MOT_L);
output_low(MOT_R);
output_high(MOT_1);
output_high(MOT_2);
delay_us(200);
output_high(MOT_L);
output_high(MOT_R);
output_low(MOT_1);
output_low(MOT_2);
delay_us(200);
}
output_low(MOT_L); // smer vpred
output_low(MOT_R);
setup_ccp1(CCP_PWM); // RC1 // Zapni PWM pro motory
setup_ccp2(CCP_PWM); // RC2
}
 
void SetServo(int8 angle)
{
int8 n;
 
for(n=0; n<14; n++)
{
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(angle);
delay_us(angle);
output_low(SERVO);
delay_ms(18);
}
}
 
inline void SetServoQ(int8 angle)
{
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(angle);
delay_us(angle);
output_low(SERVO);
}
 
//---------------------------- INT --------------------------------
#int_EXT
EXT_isr() // Preruseni od prekazky
{
set_pwm1_duty(0); // zabrzdi levym kolem, prave vypni
set_pwm2_duty(0);
output_high(MOT_L);
output_low(MOT_R);
// Ujistime se, ze prijaty signal je z naseho IR vysilace
output_high(IRTX); // Vypni LED na detekci prekazky
delay_ms(2);
if (!input(IRRX)) // stale nas signal?
{
output_low(MOT_L); // je odraz -> vpred
output_low(MOT_R);
return;
};
output_low(IRTX); // Zapni LED na detekci prekazky
delay_ms(10);
if (input(IRRX)) // stale nas signal?
{
output_low(MOT_L); // neni odraz -> vpred
output_low(MOT_R);
return;
};
 
//!!! if(stav==cihla) while(true); // Zastav na furt, konec drahy
// if(stav==cihla) return; // Po druhe nic neobjizdej
// Pozor na rozjezd
 
if(stav==jizda) // Objed cihlu
{
#include ".\objizdka_L.c"
}
}
 
 
//---------------------------------- MAIN --------------------------------------
void main()
{
int8 offset; // Promena pro ulozeni offsetu
int8 r1; // Rychlost motoru 1
int8 r2; // Rychlost motoru 2
 
setup_adc_ports(ALL_ANALOG); // Zapnuti A/D prevodniku pro cteni kroutitek
setup_adc(ADC_CLOCK_INTERNAL);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // Casovac pro mereni casu hrany W/B v radce
setup_timer_1(T1_EXTERNAL); // Cita pulzy z odometrie z praveho kola
setup_timer_2(T2_DIV_BY_16,255,1); // Casovac PWM motoru
setup_ccp1(CCP_PWM); // RC1 // PWM pro motory
setup_ccp2(CCP_PWM); // RC2
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
 
set_tris_c(0b11111001); // Nastaveni vstup/vystup pro branu C, protoze se nedela automaticky
 
set_pwm1_duty(0); // Zastav motory
set_pwm2_duty(0);
output_low(MOT_L); // Nastav smer vpred
output_low(MOT_R);
 
output_low(IRTX); // Zapni LED na detekci prekazky
 
NightRider(1); // Aby se poznalo, ze byl RESET
// taky se musi pockat, nez se rozjede kamera, nez se do ni zacnou posilat prikazy
 
 
/*
for(cas=0;cas<=0x3F;cas++)
{
pole_h[cas]=0x80|cas;
pole_l[cas]=cas;
}
for(cas=0;cas<=0x7F;cas+=2)
{
write_eeprom(cas,pole_h[cas/2]);
write_eeprom(cas+1,pole_l[cas/2]);
}
*/
 
while(true)
{
output_high(PIN_B0);
delay_ms(200);
output_low(PIN_B0);
delay_ms(200);
}
 
//... Nastaveni sonaru ...
i2c_start();
i2c_write(0xE0);
i2c_write(0x02); // dosah
i2c_write(0x03); // n*43mm
i2c_stop();
i2c_start();
i2c_write(0xE0);
i2c_write(0x01); // zesileni
i2c_write(0x01); // male, pro eliminaci echa z minuleho mereni
i2c_stop();
 
// pro ladeni sonaru
/*
while(true)
{
i2c_start(); // Sonar Ping
i2c_write(0xE0);
i2c_write(0x0);
i2c_write(0x51); // 50 mereni v palcich, 51 mereni v cm, 52 v us
i2c_stop();
delay_ms(100);
i2c_start(); // Odraz ze sonaru
i2c_write(0xE0);
i2c_write(0x3);
i2c_stop();
i2c_start();
i2c_write(0xE1);
cas=i2c_read(0);
i2c_stop();
disp(cas);
}
*/
 
//... Nastaveni kamery ...
i2c_start(); // Soft RESET kamery
i2c_write(0xC0); // Pro single slave musi mit vsechny zapisy adresu C0h
i2c_write(0x12); // Adresa registru COMH
i2c_write(0x80 | 0x24); // Zapis ridiciho slova
i2c_stop();
 
i2c_start(); // BW
i2c_write(0xC0);
i2c_write(0x28);
i2c_write(0b01000001);
i2c_stop();
 
/*
i2c_start(); // Contrast (nema podstatny vliv na obraz)
i2c_write(0xC0);
i2c_write(0x05);
i2c_write(0xA0); // 48h
i2c_stop();
 
i2c_start(); // Band Filter (pokud by byl problem se zarivkama 50Hz)
i2c_write(0xC0);
i2c_write(0x2D);
i2c_write(0x04 | 0x03);
i2c_stop();
*/
 
i2c_start(); // Fame Rate
i2c_write(0xC0);
i2c_write(0x2B);
i2c_write(0x00); // cca 17ms (puvodni hodnota 5Eh = 20ms)
i2c_stop();
 
i2c_start(); // VSTRT
i2c_write(0xC0);
i2c_write(0x19);
i2c_write(118); // prostredni radka
i2c_stop();
 
i2c_start(); // VEND
i2c_write(0xC0);
i2c_write(0x1A);
i2c_write(118);
i2c_stop();
 
NightRider(1); // Musi se dat cas kamere na AGC a AEC
 
{ // Mereni expozice
int8 t1,t2;
 
i2c_start(); // Brightness, zacni od uplne tmy
i2c_write(0xC0);
i2c_write(0x06);
i2c_write(0); // 80h default
i2c_stop();
delay_ms(50);
 
for(offset=0x04;offset<(255-0x04);offset+=0x04) // Zacni od jasu 10h
{
i2c_start(); // Brightness
i2c_write(0xC0);
i2c_write(0x06);
i2c_write(offset); // 80h default
i2c_stop();
disp(offset);
delay_ms(50);
 
t1=0;
t2=0;
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z radky
delay_ms(5);
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z radky
set_timer0(0); // Vynuluj pocitadlo casu
if(!input(PIX)) continue;
while(input(PIX));
t1=get_timer0(); // Precti cas z citace casu hrany
set_timer0(0); // Vynuluj pocitadlo casu
while(!input(PIX));
t2=get_timer0();
 
if((t1>60) && (t1<140) && (t2>5) && (t2<=10)) break; // Vidis, co mas?
 
delay_ms(2); // Preskoc druhou radku z kamery
};
delay_ms(1000); // Nech chvili na displayi zmerenou hodnotu
}
 
set_adc_channel(CERVENA); // --- Kroutitko pro jas ---
delay_ms(1);
offset=read_adc();
offset &= 0b11111100; // Dva nejnizsi bity ignoruj
// offset += 0x70; // Jas nebude nikdy nizsi
disp(offset);
i2c_start(); // Brightness
i2c_write(0xC0);
i2c_write(0x06);
i2c_write(offset); // 80h default
i2c_stop();
delay_ms(1000); // Nech hodnotu chvili na displayi
 
set_adc_channel(ZELENA); // --- Kroutitko pro vykon motoru ---
delay_ms(1);
rr=read_adc()>>2; // 0-31 // Pokud by se zvetsil rozsah, tak zkontrolovat jakonasobeni !!!
rrold=rr;
 
cas=CASAVR-CASMIN; // Inicializace promenych, aby neslo servo za roh
// a aby se to rozjelo jeste dneska
stav=start; // Jsme na startu
set_timer1(0); // Vynuluj citac odometrie
 
// ........................... Hlavni smycka ................................
while(true)
{
int8 pom;
int8 n;
 
next_snap:
 
pom=0;
disable_interrupts(GLOBAL); //----------------------- Critical
while(input(HREF)); // Preskoc 1. radku
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z 2. radky
set_timer0(0); // Vynuluj pocitadlo casu
while(input(HREF)) // Po dobu vysilani radky cekej na hranu W/B
{
// !!!!Dodelat rozpoznani cerne cary napric pro zastaveni ?
if(!input(PIX)) // Pokud se X-krat za sebou precetla CERNA
if(!input(PIX))
// if(!input(PIX))
{
pom=get_timer0(); // Precti cas z citace casu hrany
break;
};
};
while(input(HREF)); // Pockej na shozeni signalu HREF
 
if((pom<CASMAX) && (pom>CASMIN)) cas=pom; // Orizni konce radku
// Na konci obrazovaho radku to blbne. Jednak chyba od apertury
// a vubec to nejak na kraji nefunguje.
 
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(cas);
delay_us(cas);
output_low(SERVO);
 
// Elektronicky diferencial
if(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimace
if(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoru
if(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92
 
enable_interrupts(GLOBAL); //----------------------- Critical
 
if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeni
if (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN);
 
// r1<<=1; // Rychlost je dvojnasobna
// r2<<=1; // Rozsah 2 az 184
 
/* Nerozumna rychlost po cihle
if ((stav==cihla)&&(get_timer1()>(odocounter+5))) // Snizime rychlost po ujeti
{
rr=rrold;
stav=pocihle;
};
*/
if ((stav==jizda)||(stav==cihla)||(stav==rozjezd)) //||(stav==pocihle)) // Jizda
{
set_pwm1_duty(r1);
set_pwm2_duty(r2);
}
else
{
set_pwm1_duty(0); // Zastaveni
set_pwm2_duty(0);
};
 
if((stav==rozjezd)&&(get_timer1()>10)) // musi ujet alespon 31cm
{
ext_int_edge(H_TO_L); // Nastav podminky preruseni od cihly
INT0IF=0; // Zruseni predesle udalosti od startera
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
stav=jizda;
};
 
if(stav==start) // Snimkuje, toci servem a ceka na start
{
set_adc_channel(MODRA); // Kroutitko na vystredeni predniho kolecka
Delay_ms(1);
stred=read_adc();
if(!input(PROXIMITY))
{
disp(0x80);
while(input(PROXIMITY)); // Cekej, dokud starter neda ruku pryc
set_timer1(0); // Vynuluj citac odometrie
set_pwm1_duty(255); // Rychly rozjezd !!! Zkontrolovat na oscyloskopu
set_pwm2_duty(255);
disp(0x01);
while(get_timer1()<=4) // Ujed alespon 12cm
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(40);
if(read_adc()<THR) {cas=CASMIN; break;}; // Prejeli jsme caru vlevo
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(40);
if(read_adc()<THR) {cas=CASMAX; break;}; // Prejeli jsme caru vpravo
cas=CASAVR-CASMIN; // Cara je rovne
};
stav=rozjezd;
};
}
 
pom=0x80; // Zobrazeni pozice cary na displayi
for(n=CASMAX/8; n<cas; n+=CASMAX/8) pom>>=1;
disp(pom);
 
while(true) // Ve zbytku casu snimku cti krajni UV senzory
{
set_adc_channel(LMAX); // Levy UV sensor
for(n=0;n<20;n++) if(input(HREF)) goto next_snap;
if(read_adc()<THR) cas=CASMIN;
set_adc_channel(RMAX); // Pravy UV sensor
for(n=0;n<20;n++) if(input(HREF)) goto next_snap;
if(read_adc()<THR) cas=CASMAX;
};
}
}
/roboti/istrobot/camerus/SW/873/camerus.h
0,0 → 1,16
#include <16F873A.h>
#device adc=8
 
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
 
#use delay(clock=20000000)
#use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3,force_hw)
 
/roboti/istrobot/camerus/SW/873
Property changes:
Added: svn:ignore
+*.bak
+*.BAK
+*.cof
+*.err
+*.hex
+*.lst
+*.sta
+*.sym
+*.tre
/roboti/istrobot/camerus/SW/diferencial.xls
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/camerus/SW/876/backup/camerus.c
0,0 → 1,657
//********* Robot Camerus pro IstRobot 2007 ************
//"$Id: camerus.c 253 2007-04-24 09:26:46Z kakl $"
//*****************************************************
 
#include ".\camerus.h"
 
#USE FAST_IO (C) // Brana C je ve FAST_IO modu, aby slo rychle cist z kamery
 
// Rychlostni konstanty
#define RR_CIHLA 50 // Rozumna rychlost pro objizdeni cihly
#define RR_PRERUSENI 50 // Rozumna rychlost pro priblizeni se k preruseni
#define BRZDNA_DRAHA 0x15 // Jak daleko pred problemem se zacne brzdit
#define TUHOS 100 // Jak dlouho se bude couvat po narazu na naraznik
#define ODODO_CIHLA 0xD0
#define ODODO_TUNEL 0xFFF
#define ODODO_PRERUSENI 0xFFF//0xB4
 
// Adresy IIC periferii
#define COMPAS_ADR 0xC0
#define CAMERA_ADR 0xDC
#define SONAR_ADR 0xE0
 
// A/D vstupy
#define RMAX 4 // AN4/RA5 - leve cidlo na vyjeti z cary
#define LMAX 3 // AN3/RA3 - prave cidlo na vyjeti z cary
#define CERVENA 2 // AN2/RA2 - cervene kroutitko
#define ZELENA 1 // AN1/RA0 - zelene kroutitko
#define MODRA 0 // AN0/RA1 - modre kroutitko
 
// I/O
#define HREF PIN_C5 // Signal HREF z kamery (v H po celou dobu radku)
#define PIX PIN_C6 // Vstup pro body z kamery (za trivstupim hradlem OR (dig. komparator))
#define SERVO PIN_B4 // Vystup na servo (1 az 2ms po cca 20ms (synchronizovano snimkovym kmitoctem))
#define MOT_L PIN_B5 // Smer otaceni leveho motoru; druhy pol je RC2
#define MOT_R PIN_B6 // Smer otaceni praveho motoru; druhy pol je RC1
#define MOT_1 PIN_C1 // PWM vystpy motoru
#define MOT_2 PIN_C2 //
#define DATA PIN_B2 // K modulu LEDbar data
#define CP PIN_B1 // K modulu LEDbar hodiny
//#define ODO PIN_C0 // Ze snimace z odometrie z praveho kola na TIMER1
// Jeden impuls je 31,25mm
#define IRRX !input(PIN_B0) // Vstup INT, generuje preruseni pri prekazce
#define IRTX PIN_B3 // Modulovani vysilaci IR LED na detekci prekazky
#define PROXIMITY PIN_C7 // Cidlo kratkeho dosahu na cihlu
#define BUMPER !input(PIN_A4) // Naraznik
 
#define CASMIN 6 // Rozsah radku snimace
#define CASMAX 192
#define CASAVR ((CASMAX+CASMIN) / 2)
 
#define EEMAX 255 // Konec EEPROM
#define MAXLOG 0x10 // Maximalni pocet zaznamu v logu
#if MAXLOG>(EEMAX/3)
#error Prekrocena velikost EEPROM
#endif
 
#define OFFSETO 0x9F //0x9F // Vystredeni serva pro objeti prekazky
 
#define THR 90 // Threshold pro UV cidla na caru
 
#byte INTCON = 0x0B // Interrupt configuration register
#bit GIE = INTCON.7
#bit PEIE = INTCON.6
#bit TMR0IE = INTCON.5
#bit INT0IE = INTCON.4
#bit RBIE = INTCON.3
#bit TMR0IF = INTCON.2
#bit INT0IF = INTCON.1
#bit RBIF = INTCON.0
 
enum stavy {start,rozjezd,jizda,cihla,pocihle,cil};
stavy stav; // Kde jsme na trati
int8 cas; // Cas hrany bila/cerna v radce
int8 stred; // Vystredeni kolecka
int16 odocounter; // Zaznamenani aktualniho stavu pocitadla odometrie
int16 last_log_odo; // Posledni stav odometrie poznamenany do logu
int16 last_log; // Cislo posledniho zaznamu v logu v EEPROM
int8 bb_h[MAXLOG]; // Cerna skrinka MSB
int8 bb_l[MAXLOG]; // Cerna skrinka LSB
int8 bb_f[MAXLOG]; // Cerna skrinka priznak (typ zaznamu)
int8 log; // Pocitadlo pro cernou skrinku
int8 rr; // Promenna na ulozeni Rozumne rychlost
int8 rrold;
int16 odo_preruseni, odo_cihla, odo_tunel; // Problemy na trati
 
// Zobrazeni jednoho byte na modulu LEDbar
inline void disp(int8 x)
{
int n;
 
for(n=0;n<=7;n++)
{
if (bit_test(x,0)) output_low(DATA); else output_high(DATA);
output_high(CP);
x>>=1;
output_low(CP);
}
}
 
// Blikani LEDbarem ve stilu Night Rider
void NightRider(int8 x)
{
int n,i,j;
 
for(j=0;j<x;j++)
{
i=0x01;
for(n=0;n<7;n++)
{
disp(i);
rotate_left(&i, 1);
delay_ms(40);
}
for(n=0;n<7;n++)
{
disp(i);
rotate_right(&i, 1);
delay_ms(40);
}
}
disp(i);
delay_ms(40);
i=0;
disp(i);
}
 
// Zaznam LOGu do EEPROM
void SaveLog()
{
int8 n,i,xlog;
 
i=0;
for(n=0;n<=(log*3);n+=3) // Ulozeni Black Boxu do EEPROM
{
write_eeprom(n,bb_f[i]);
write_eeprom(n+1,bb_h[i]);
write_eeprom(n+2,bb_l[i]);
i++;
};
if(log>0) {xlog=log-1;} else {xlog=0;};
write_eeprom(EEMAX,xlog); // Zapis poctu zaznamu na konec EEPROM
}
 
// Zaznam do Logu do RAM
void LogLog(int8 reason, int16 log_delay)
{
int16 timer_pom;
 
timer_pom=get_timer1(); // Timer se musi vycist atomicky
bb_l[log]=make8(timer_pom,0); // Zaznam
bb_h[log]=make8(timer_pom,1);
bb_f[log]=reason; // Typ zaznamu
if(log<(MAXLOG-1)) log++; // Ukazatel na dalsi zaznam
last_log_odo=timer_pom+log_delay; // Dalsi mereni nejdrive po ujeti def. vzdalenosti
rr=rrold; // Problem skoncil, znovu jed Rozumnou Rychlosti
}
 
void ReadBlackBox()
{
last_log=read_eeprom(EEMAX); // Kolik zaznamu mame od minule poznamenano?
{
int8 n,i;
 
i=0;
for(n=0;n<=last_log;n++)
{
if(read_eeprom(i)==0) odo_tunel=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
if(read_eeprom(i)==0xFF) odo_cihla=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
if((read_eeprom(i)>0) && (read_eeprom(i)<0xFF)) odo_preruseni=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
}
}
}
 
 
// Brzdeni motorama stridou 1:1
void brzda()
{
int8 n,i;
 
set_pwm1_duty(0); // vypni PWM
set_pwm2_duty(0);
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_OFF);
for (n=0;n<200;n++)
{
output_low(MOT_L);
output_low(MOT_R);
output_high(MOT_1);
output_high(MOT_2);
delay_us(200);
output_high(MOT_L);
output_high(MOT_R);
output_low(MOT_1);
output_low(MOT_2);
delay_us(200);
}
output_low(MOT_L); // smer vpred
output_low(MOT_R);
setup_ccp1(CCP_PWM); // RC1 // Zapni PWM pro motory
setup_ccp2(CCP_PWM); // RC2
}
 
void SetServo(int8 angle)
{
int8 n;
 
for(n=0; n<10; n++)
{
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(angle);
delay_us(angle);
output_low(SERVO);
delay_ms(18);
}
}
 
inline void SetServoQ(int8 angle)
{
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(angle);
delay_us(angle);
output_low(SERVO);
}
 
// Couvni po narazu na naraznik
inline void bum()
{
set_pwm1_duty(0); // couvni, rovne dozadu
set_pwm2_duty(0);
output_high(MOT_L);
output_high(MOT_R);
disp(0xA5);
SetServo(CASAVR-CASMIN);
}
 
#include ".\diag.c"
 
//---------------------------- INT --------------------------------
#int_EXT
EXT_isr() // Preruseni od prekazky
{
unsigned int8 bearing, bearing_offset, delta_bearing;
 
set_pwm1_duty(0); // zabrzdi levym kolem, prave vypni
set_pwm2_duty(0);
output_high(MOT_L);
output_low(MOT_R);
// Ujistime se, ze prijaty signal je z naseho IR vysilace
output_high(IRTX); // Vypni LED na detekci prekazky
delay_ms(2);
if (IRRX) // stale nas signal?
{
output_low(MOT_L); // je odraz -> vpred
output_low(MOT_R);
return;
};
output_low(IRTX); // Zapni LED na detekci prekazky
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1); // 0-255 (odpovida 0-359)
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
bearing_offset=i2c_read(0); // Poznamenej hodnotu pred cihlou
i2c_stop();
 
delay_ms(9);
if (!IRRX) // stale nas signal?
{
output_low(MOT_L); // neni odraz -> vpred
output_low(MOT_R);
return;
};
 
rr=rrold; // Po cihle se pojede opet Rozumnou Rychlosti
if(stav!=cihla)
{
LogLog(0xFF,3); // Cihla
};
 
//!!! if(stav==cihla) while(true); // Zastav na furt, konec drahy
// if(stav==cihla) return; // Po druhe nic neobjizdej
// Pozor na rozjezd
 
if((stav==jizda)||(stav==cihla)) // Objed cihlu
{
#include ".\objizdka_L.c"
};
last_log_odo=get_timer1()+16; // Pul metru po cihle nezaznamenavej do LOGu
}
 
 
//---------------------------------- MAIN --------------------------------------
void main()
{
int8 offset; // Promena pro ulozeni offsetu
int8 r1; // Rychlost motoru 1
int8 r2; // Rychlost motoru 2
int16 ble;
 
setup_adc_ports(ALL_ANALOG); // Zapnuti A/D prevodniku pro cteni kroutitek
setup_adc(ADC_CLOCK_INTERNAL);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // Casovac pro mereni casu hrany W/B v radce
setup_timer_1(T1_EXTERNAL); // Cita pulzy z odometrie z praveho kola
setup_timer_2(T2_DIV_BY_16,255,1); // Casovac PWM motoru
//!!! setup_timer_2(T2_DIV_BY_4,255,1); // Casovac PWM motoru
setup_ccp1(CCP_PWM); // RC1 // PWM pro motory
setup_ccp2(CCP_PWM); // RC2
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
 
set_tris_c(0b11111001); // Nastaveni vstup/vystup pro branu C, protoze se to nedela automaticky
 
set_pwm1_duty(0); // Zastav motory
set_pwm2_duty(0);
output_low(MOT_L); // Nastav smer vpred
output_low(MOT_R);
 
disp(0); // Zhasni LEDbar
 
if(BUMPER) // Kdyz nekdo na zacatku drzi naraznik, vymaz log a spust diagnostiku
{
diag();
}
 
output_low(IRTX); // Zapni LED na detekci prekazky
 
NightRider(1); // Zablikej, aby se poznalo, ze byl RESET
// Zaroven se musi pockat, nez se rozjede kamera, nez se do ni zacnou posilat prikazy
 
//... Nastaveni sonaru ...
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x02); // dosah
i2c_write(0x03); // n*43mm
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x01); // zesileni
i2c_write(0x01); // male, pro eliminaci echa z minuleho mereni
i2c_stop();
 
//... Nastaveni kamery ...
i2c_start(); // Soft RESET kamery
i2c_write(CAMERA_ADR); // Adresa kamery
i2c_write(0x12); // Adresa registru COMH
i2c_write(0x80 | 0x24); // Zapis ridiciho slova
i2c_stop();
 
i2c_start(); // BW
i2c_write(CAMERA_ADR);
i2c_write(0x28);
i2c_write(0b01000001);
i2c_stop();
 
/*
i2c_start(); // Contrast (nema podstatny vliv na obraz)
i2c_write(CAMERA_ADR);
i2c_write(0x05);
i2c_write(0xA0); // 48h
i2c_stop();
 
i2c_start(); // Band Filter (pokud by byl problem se zarivkama 50Hz)
i2c_write(CAMERA_ADR);
i2c_write(0x2D);
i2c_write(0x04 | 0x03);
i2c_stop();
*/
 
i2c_start(); // Fame Rate
i2c_write(CAMERA_ADR);
i2c_write(0x2B);
i2c_write(0x00); // cca 17ms (puvodni hodnota 5Eh = 20ms)
i2c_stop();
 
i2c_start(); // VSTRT
i2c_write(CAMERA_ADR);
i2c_write(0x19);
i2c_write(118); // prostredni radka
i2c_stop();
 
i2c_start(); // VEND
i2c_write(CAMERA_ADR);
i2c_write(0x1A);
i2c_write(118);
i2c_stop();
 
NightRider(1); // Musi se dat cas kamere na AGC a AEC
 
{ // Mereni expozice
int8 t1,t2;
 
i2c_start(); // Brightness, zacni od uplne tmy
i2c_write(CAMERA_ADR);
i2c_write(0x06);
i2c_write(0); // 80h default
i2c_stop();
delay_ms(50);
 
for(offset=0x04;offset<(255-0x04);offset+=0x04) // Zacni od jasu 10h
{
i2c_start(); // Brightness
i2c_write(CAMERA_ADR);
i2c_write(0x06);
i2c_write(offset); // 80h default
i2c_stop();
disp(offset);
delay_ms(50);
 
t1=0;
t2=0;
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z radky
delay_ms(5);
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z radky
set_timer0(0); // Vynuluj pocitadlo casu
if(!input(PIX)) continue;
while(input(PIX));
t1=get_timer0(); // Precti cas z citace casu hrany
set_timer0(0); // Vynuluj pocitadlo casu
while(!input(PIX));
t2=get_timer0();
 
if((t1>60) && (t1<140) && (t2>5) && (t2<=10)) break; // Vidis, co mas?
 
delay_ms(2); // Preskoc druhou radku z kamery
};
delay_ms(1000); // Nech chvili na displayi zmerenou hodnotu
}
 
set_adc_channel(CERVENA); // --- Kroutitko pro jas ---
delay_ms(1);
offset=read_adc();
offset &= 0b11111100; // Dva nejnizsi bity ignoruj
// offset += 0x70; // Jas nebude nikdy nizsi
disp(offset);
i2c_start(); // Brightness
i2c_write(CAMERA_adr);
i2c_write(0x06);
i2c_write(offset); // 80h default
i2c_stop();
delay_ms(1000); // Nech hodnotu chvili na displayi
 
set_adc_channel(ZELENA); // --- Kroutitko pro vykon motoru ---
delay_ms(1);
rr=read_adc()>>2; // 0-63 // Pokud by se zvetsil rozsah, tak zkontrolovat jakonasobeni!
rr+=27; // 27-90
//!!! rr=read_adc()>>1; // 0-128 // Pokud by se zvetsil rozsah, tak zkontrolovat jakonasobeni!
rrold=rr;
 
cas=CASAVR-CASMIN; // Inicializace promenych, aby neslo servo za roh
// a aby se to rozjelo jeste dneska
stav=start; // Jsme na startu
set_timer1(0); // Vynuluj citac odometrie
log=0; // Zacatek logu v cerne skrince
last_log_odo=0; // Posledni zaznam odometrie do logu
 
// ReadBlackBox(); // Vycteni zaznamu z Black Boxu
 
odo_cihla=ODODO_CIHLA-BRZDNA_DRAHA;
odo_tunel=ODODO_TUNEL-BRZDNA_DRAHA;
odo_preruseni=ODODO_PRERUSENI-BRZDNA_DRAHA;
 
// ........................... Hlavni smycka ................................
while(true)
{
int8 pom;
int8 n;
int8 gap;
int16 ododo;
 
gap=0; // Vynuluj pocitadlo preruseni
 
next_snap:
 
pom=0;
disable_interrupts(GLOBAL); //----------------------- Critical Section
while(input(HREF)); // Preskoc 1. radku
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z 2. radky
set_timer0(0); // Vynuluj pocitadlo casu
while(input(HREF)) // Po dobu vysilani radky cekej na hranu W/B
{
// !!!!Dodelat rozpoznani cerne cary napric pro zastaveni ?
if(!input(PIX)) // Pokud se X-krat za sebou precetla CERNA
if(!input(PIX))
// if(!input(PIX))
{
pom=get_timer0(); // Precti cas z citace casu hrany
break;
};
};
while(input(HREF)); // Pockej na shozeni signalu HREF
 
if((pom<CASMAX) && (pom>CASMIN)) cas=pom; // Orizni konce radku
// Na konci obrazovaho radku to blbne. Jednak chyba od apertury
// a vubec to nejak na kraji nefunguje.
 
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(cas);
delay_us(cas);
output_low(SERVO);
 
// Elektronicky diferencial 1. cast
if(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimace
if(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoru
if(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92
 
enable_interrupts(GLOBAL); //----------------------- End Critical Section
 
if(pom==0) // Kamera nevidi caru
{
if((cas>(CASMIN+15))&&(cas<(CASMAX-15))) // Nebyla minule cara moc u kraje?
{
gap++;
if(gap>=3) // Trva preruseni cary alespon 2 snimky?
{
cas=CASAVR-CASMIN;
// disp(0xAA);
}
}
}
else
{
gap=0;
};
 
 
/*
if(pom==0) // Kamera nevidi caru, poznamenej to do logu
{
if((cas>(CASMIN+30))&&(cas<(CASMAX-30))) // Nebyla minule cara moc u kraje?
if(last_log_odo<get_timer1()) // Aby nebyly zaznamy v logu prilis huste, musi se napred neco ujet od minuleho zaznamu
{
gap++;
}
}
else
{
if(gap>=4) // Trva preruseni cary alespon 2 snimky?
{
LogLog(gap,8); // Dalsi mereni nejdrive po ujeti 24 cm
rr=rrold; // Preruseni cary skoncilo, znovu jed Rozumnou Rychlosti
cas=CASAVR-CASMIN;
disp(0xAA);
}
gap=0;
};
 
if(!input(PROXIMITY) && ((stav==jizda)||(stav==cihla))) // Tunel
{
if(last_log_odo<get_timer1()) // Aby nebyly zaznamy v logu prilis huste, musi se napred neco ujet od minuleho zaznamu
{
LogLog(0xDD,16); // Priznak tunelu; dalsi mereni nejdrive po ujeti 48 cm
rr=rrold; // Vjeli jsme do tunelu, znovu jed rychle
}
};
*/
 
//ODODO
ododo=get_timer1();
if((ododo>odo_preruseni)&&(ododo<(odo_preruseni+8))) rr=RR_PRERUSENI;
if((ododo>odo_cihla)&&(ododo<(odo_cihla+8))) rr=RR_PRERUSENI;
if((ododo>odo_tunel)&&(ododo<(odo_tunel+8))) rr=RR_PRERUSENI;
 
// Elektronicky diferencial 2. cast
if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeni
if (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN); // rozsah 1 az 92 pro rr=0 // rozsah 1 az 154 pro rr=63
 
//!!! pro zatuhle prevodovky
// r1<<=1; // Rychlost je dvojnasobna
// r2<<=1; // Rozsah 2 az 184 pro rr=0
 
if ((stav==jizda)||(stav==cihla)||(stav==rozjezd)) //||(stav==pocihle)) // Jizda
{
set_pwm1_duty(r1);
set_pwm2_duty(r2);
}
else
{
set_pwm1_duty(0); // Zastaveni
set_pwm2_duty(0);
};
 
if((stav==rozjezd)&&(get_timer1()>10)) // musi ujet alespon 31cm
{
ext_int_edge(H_TO_L); // Nastav podminky preruseni od cihly
INT0IF=0; // Zruseni predesle udalosti od startera
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
stav=jizda;
};
 
if(stav==start) // Snimkuje, toci servem a ceka na start
{
set_adc_channel(MODRA); // Kroutitko na vystredeni predniho kolecka
Delay_ms(1);
stred=read_adc();
if(!input(PROXIMITY))
{
disp(0x80);
while(input(PROXIMITY)); // Cekej, dokud starter neda ruku pryc
set_timer1(0); // Vynuluj citac odometrie
set_pwm1_duty(255); // Rychly rozjezd !!! Zkontrolovat na oscyloskopu
set_pwm2_duty(255);
disp(0x01);
while(get_timer1()<=4) // Ujed alespon 12cm
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(40);
if(read_adc()<THR) {cas=CASMIN; break;}; // Prejeli jsme caru vlevo
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(40);
if(read_adc()<THR) {cas=CASMAX; break;}; // Prejeli jsme caru vpravo
cas=CASAVR-CASMIN; // Cara je rovne
};
stav=rozjezd;
};
}
 
pom=0x80; // Zobrazeni pozice cary na displayi
for(n=CASMAX/8; n<cas; n+=CASMAX/8) pom>>=1;
disp(pom);
 
while(true) // Ve zbytku casu snimku cti krajni UV senzory a naraznik
{
if(BUMPER) // Sakra, do neceho jsme narazili a nevideli jsme to!
{
bum();
SaveLog(); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
set_pwm1_duty(200); // pomalu vpred
set_pwm2_duty(200);
output_low(MOT_L);
output_low(MOT_R);
cas=CASAVR-CASMIN;
};
set_adc_channel(LMAX); // Levy UV sensor
for(n=0;n<20;n++) if(input(HREF)) goto next_snap;
if(read_adc()<THR) cas=CASMIN;
set_adc_channel(RMAX); // Pravy UV sensor
for(n=0;n<20;n++) if(input(HREF)) goto next_snap;
if(read_adc()<THR) cas=CASMAX;
};
}
}
/roboti/istrobot/camerus/SW/876/backup/diag.c
0,0 → 1,68
//--- Diagnostika cidel a vymazani EEPROM ---
void diag()
{
int8 n;
 
// Vymaz Black Box v EEPROM
for(n=0;n<255;n++) write_eeprom(n,0);
bb_l[0]=0; // Zapis na pozici 0 vzdalenost 0
bb_h[0]=0;
bb_f[0]=0;
write_eeprom(EEMAX,0); // Zapis do EEPROM pocet zaznamu 0, tedy jeden zaznam
for(n=0;n<=4;n++)
{
disp(0x55); // Blikni pro potvrzeni
delay_ms(200);
disp(0xAA);
delay_ms(200);
};
 
while(true)
{
if(!IRRX)
{
int8 ble;
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1);
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
ble=i2c_read(0);
i2c_stop();
disp(ble);
delay_ms(200);
}
else
{
i2c_start(); // Diagnostika sonaru
i2c_write(SONAR_ADR);
i2c_write(0x02); // dosah
i2c_write(0x03); // n*43mm
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x01); // zesileni
i2c_write(0x01); // male, pro eliminaci echa z minuleho mereni
i2c_stop();
 
i2c_start(); // Sonar Ping
i2c_write(0xE0);
i2c_write(0x0);
i2c_write(0x51); // 50 mereni v palcich, 51 mereni v cm, 52 v us
i2c_stop();
delay_ms(100);
i2c_start(); // Odraz ze sonaru
i2c_write(0xE0);
i2c_write(0x3);
i2c_stop();
i2c_start();
i2c_write(0xE1);
n=i2c_read(0);
i2c_stop();
disp(n); // Zobrazeni hodnoty ze sonaru a zaroven diagnostika predniho IR cidla
delay_ms(200);
}
}
}
/roboti/istrobot/camerus/SW/876/backup/objizdka_L.c
0,0 → 1,183
// **** Objeti cihly vlevo **** LLLL
 
#define L_TOUCH 1 // Cara vlevo
#define R_TOUCH 2 // Cata vpravo
#define B_TOUCH 3 // Both
 
int8 n;
int8 r1,r2,rr;
int8 touch;
enum okolo_cihly {pred_carou,na_care,po_care};
okolo_cihly ridic; // V jakem jsme stavu objizdeni cihly
int8 vzdalenost;
int8 visualisation;
 
stav=cihla; // Dalsi prekazku uz nezaznamenavej (je to s velkou pravdepodobnosti cil)
odocounter=get_timer1();
 
cihla:
 
rr=RR_CIHLA; //!!! Rozumna rychlost pro objizdeni cihly (bylo by lepsi rychlost zvysovat) a pri detekci pohybu zase snizit
disp(0x99);
set_pwm1_duty(0); // zabrzdi levym kolem, prave vpred
set_pwm2_duty(255);
output_high(MOT_L);
output_low(MOT_R);
while(true) // Na zacatku se vyhni cihle, zatoc co muzes
{
cas=CASMIN-5; // jeste vic nez hodne do leva
 
if(BUMPER) // Narazili jsme do cihly, musime couvnout!
{
bum();
SaveLog(); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
brzda();
goto cihla; // Znovu zacni cihlu objizdet
};
 
set_pwm1_duty(0);
set_pwm2_duty(255); // !!! mozna prilis maly vykon pro rozjezd pro zatuhlou prevodovku
output_high(MOT_L); // leve kolo reverz
output_low(MOT_R); // prave kolo vpred
if(get_timer1()>(odocounter+5)) // konec zatacky?
{
disp(0x66);
break;
}
SetServoQ(cas);
delay_ms(18);
};
 
//------ Objeti cihly v konstantni vzdalenosti ------
touch=0; // Indikator detekce cary pri objizdeni
ridic=pred_carou;
cas=CASAVR-CASMIN; // rovne
output_low(MOT_L); // vpred
output_low(MOT_R);
visualisation=0;
while(true)
{
if(BUMPER) // Narazili jsme do cihly, musime couvnout!
{
bum();
SaveLog(); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
set_pwm1_duty(160); // vpred
set_pwm2_duty(160);
output_low(MOT_L);
output_low(MOT_R);
cas=CASMIN;
};
 
delta_bearing=bearing-bearing_offset;
visualisation=(delta_bearing & 0xF0) | (visualisation & 0x0F);
if(IRRX) // hrozi celni srazka s cihlou v prubehu objizdeni
{
cas=CASMIN;
}
else
{
if((vzdalenost!=0)||!input(PROXIMITY)||((delta_bearing>60)&&(delta_bearing<128))) // Udrzovani konstantni vzdalenosti od cihly
{
if(cas>(CASMIN+30)) cas-=30;
}
else
{
if(cas<(CASMAX-30)) cas+=30;
};
};
// Elektronicky diferencial
if(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimace
if(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoru
if(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92
 
if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeni
if (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN);
 
//!!! pro zatuhle prevodovky
// r1<<=1; // Rychlost je dvojnasobna
// r2<<=1; // Rozsah 2 az 184 pro rr=0
 
set_pwm1_duty(r1); // Nastav rychlost motoru
set_pwm2_duty(r2);
 
SetServoQ(cas);
 
i2c_start(); // Sonar Ping
i2c_write(SONAR_ADR);
i2c_write(0x0);
i2c_write(0x52); // mereni v us
i2c_stop();
 
for(n=1;n<=90;n++) // 18ms testovani cary do dalsi korekce serva
{
set_adc_channel(LMAX);
delay_us(100);
if(read_adc()<THR) touch|=L_TOUCH;
set_adc_channel(RMAX);
delay_us(100);
if(read_adc()<THR) touch|=R_TOUCH;
};
 
i2c_start(); // Odraz ze sonaru
i2c_write(SONAR_ADR);
i2c_write(0x3);
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR+1);
vzdalenost=i2c_read(0);
i2c_stop();
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1); // uhel 0-255
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
bearing=i2c_read(0);
i2c_stop();
 
if(touch==L_TOUCH) visualisation|=0x2;
if(touch==R_TOUCH) visualisation|=0x1;
if((touch==B_TOUCH)&&(ridic==pred_carou)) ridic=na_care;
if((ridic==na_care)&&(touch==0)) break;
if(ridic==na_care) touch=0;
disp(visualisation);
};
disp(0xC3);
 
set_pwm1_duty(0); //!!! pred zatuhlejma prevodovkama tam bylo 20 a 200
set_pwm2_duty(255);
output_high(MOT_L);
output_low(MOT_R);
delay_us(40);
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie
while (true) // Znovu se musime dotknout cary
{
for(n=1;n<=90;n++) // 18ms testovani cary do dalsi korekce serva
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(100);
if(read_adc()<THR) // Dotkli jsme se levym senzorem
{
disp(0xE0);
cas=CASAVR-CASMIN; // nastavime, ze cara je rovne
goto cara;
};
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(100);
if((get_timer1()>=(odocounter+2)) && (read_adc()<THR)) // Pravym senzorem nesmime caru prejet!
{
disp(0x07);
cas=CASMAX; // kdyz prejedem, tak nastavime, ze cara je vpravo
goto cara;
};
}
SetServoQ(CASMIN-5); // max. max. doleva L
}
 
cara:
 
output_low(MOT_L); // oba motory vpred
output_low(MOT_R);
/roboti/istrobot/camerus/SW/876/bak/camerus.c
0,0 → 1,633
//********* Robot Camerus pro IstRobot 2007 ************
//"$Id: camerus.c 253 2007-04-24 09:26:46Z kakl $"
//*****************************************************
 
#include ".\camerus.h"
 
#USE FAST_IO (C) // Brana C je ve FAST_IO modu, aby slo rychle cist z kamery
 
// Rychlostni konstanty
#define RR_CIHLA 50 // Rozumna rychlost pro objizdeni cihly
#define RR_PRERUSENI 30 // Rozumna rychlost pro priblizeni se k preruseni
#define BRZDNA_DRAHA 0x20 // Jak daleko pred problemem se zacne brzdit
#define TUHOS 100 // Jak dlouho se bude couvat po narazu na naraznik
#define ODODO_CIHLA 0xFFF
#define ODODO_TUNEL 0xFFF
#define ODODO_PRERUSENI 0xFFF
 
// Adresy IIC periferii
#define COMPAS_ADR 0xC0
#define CAMERA_ADR 0xDC
#define SONAR_ADR 0xE0
 
// A/D vstupy
#define RMAX 4 // AN4/RA5 - leve cidlo na vyjeti z cary
#define LMAX 3 // AN3/RA3 - prave cidlo na vyjeti z cary
#define CERVENA 2 // AN2/RA2 - cervene kroutitko
#define ZELENA 1 // AN1/RA0 - zelene kroutitko
#define MODRA 0 // AN0/RA1 - modre kroutitko
 
// I/O
#define HREF PIN_C5 // Signal HREF z kamery (v H po celou dobu radku)
#define PIX PIN_C6 // Vstup pro body z kamery (za trivstupim hradlem OR (dig. komparator))
#define SERVO PIN_B4 // Vystup na servo (1 az 2ms po cca 20ms (synchronizovano snimkovym kmitoctem))
#define MOT_L PIN_B5 // Smer otaceni leveho motoru; druhy pol je RC2
#define MOT_R PIN_B6 // Smer otaceni praveho motoru; druhy pol je RC1
#define MOT_1 PIN_C1 // PWM vystpy motoru
#define MOT_2 PIN_C2 //
#define DATA PIN_B2 // K modulu LEDbar data
#define CP PIN_B1 // K modulu LEDbar hodiny
//#define ODO PIN_C0 // Ze snimace z odometrie z praveho kola na TIMER1
// Jeden impuls je 31,25mm
#define IRRX !input(PIN_B0) // Vstup INT, generuje preruseni pri prekazce
#define IRTX PIN_B3 // Modulovani vysilaci IR LED na detekci prekazky
#define PROXIMITY PIN_C7 // Cidlo kratkeho dosahu na cihlu
#define BUMPER !input(PIN_A4) // Naraznik
 
#define CASMIN 6 // Rozsah radku snimace
#define CASMAX 192
#define CASAVR ((CASMAX+CASMIN) / 2)
 
#define EEMAX 255 // Konec EEPROM
#define MAXLOG 0x10 // Maximalni pocet zaznamu v logu
#if MAXLOG>(EEMAX/3)
#error Prekrocena velikost EEPROM
#endif
 
#define OFFSETO 0x9F //0x9F // Vystredeni serva pro objeti prekazky
 
#define THR 90 // Threshold pro UV cidla na caru
 
#byte INTCON = 0x0B // Interrupt configuration register
#bit GIE = INTCON.7
#bit PEIE = INTCON.6
#bit TMR0IE = INTCON.5
#bit INT0IE = INTCON.4
#bit RBIE = INTCON.3
#bit TMR0IF = INTCON.2
#bit INT0IF = INTCON.1
#bit RBIF = INTCON.0
 
enum stavy {start,rozjezd,jizda,cihla,pocihle,cil};
stavy stav; // Kde jsme na trati
int8 cas; // Cas hrany bila/cerna v radce
int8 stred; // Vystredeni kolecka
int16 odocounter; // Zaznamenani aktualniho stavu pocitadla odometrie
int16 last_log_odo; // Posledni stav odometrie poznamenany do logu
int16 last_log; // Cislo posledniho zaznamu v logu v EEPROM
int8 bb_h[MAXLOG]; // Cerna skrinka MSB
int8 bb_l[MAXLOG]; // Cerna skrinka LSB
int8 bb_f[MAXLOG]; // Cerna skrinka priznak (typ zaznamu)
int8 log; // Pocitadlo pro cernou skrinku
int8 rr; // Promenna na ulozeni Rozumne rychlost
int8 rrold;
int16 odo_preruseni, odo_cihla, odo_tunel; // Problemy na trati
 
// Zobrazeni jednoho byte na modulu LEDbar
inline void disp(int8 x)
{
int n;
 
for(n=0;n<=7;n++)
{
if (bit_test(x,0)) output_low(DATA); else output_high(DATA);
output_high(CP);
x>>=1;
output_low(CP);
}
}
 
// Blikani LEDbarem ve stilu Night Rider
void NightRider(int8 x)
{
int n,i,j;
 
for(j=0;j<x;j++)
{
i=0x01;
for(n=0;n<7;n++)
{
disp(i);
rotate_left(&i, 1);
delay_ms(40);
}
for(n=0;n<7;n++)
{
disp(i);
rotate_right(&i, 1);
delay_ms(40);
}
}
disp(i);
delay_ms(40);
i=0;
disp(i);
}
 
// Zaznam LOGu do EEPROM
void SaveLog(int8 log)
{
int8 n,i;
 
i=0;
for(n=0;n<=(log*3);n+=3) // Ulozeni Black Boxu do EEPROM
{
write_eeprom(n,bb_f[i]);
write_eeprom(n+1,bb_h[i]);
write_eeprom(n+2,bb_l[i]);
i++;
};
write_eeprom(EEMAX,log); // Zapis poctu zaznamu na konec EEPROM
}
 
// Zaznam do Logu do RAM
void LogLog(int8 flag, int16 gap)
{
int16 timer_pom;
 
timer_pom=get_timer1(); // Timer se musi vycist atomicky
bb_l[log]=make8(timer_pom,0); // Zaznam
bb_h[log]=make8(timer_pom,1);
bb_f[log]=flag; // Typ zaznamu
if(log<MAXLOG) log++; // Ukazatel na dalsi zaznam
last_log_odo=timer_pom+gap; // Dalsi mereni nejdrive po ujeti def. vzdalenosti
rr=rrold; // Problem skoncil, znovu jed Rozumnou Rychlosti
}
 
void ReadBlackBox()
{
last_log=read_eeprom(EEMAX); // Kolik zaznamu mame od minule poznamenano?
{
int8 n,i;
 
i=0;
for(n=0;n<=last_log;n++)
{
if(read_eeprom(i)==0) odo_tunel=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
if(read_eeprom(i)==0xFF) odo_cihla=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
if((read_eeprom(i)>0) && (read_eeprom(i)<0xFF)) odo_preruseni=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
}
}
}
 
 
// Brzdeni motorama stridou 1:1
void brzda()
{
int8 n,i;
 
set_pwm1_duty(0); // vypni PWM
set_pwm2_duty(0);
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_OFF);
for (n=0;n<200;n++)
{
output_low(MOT_L);
output_low(MOT_R);
output_high(MOT_1);
output_high(MOT_2);
delay_us(200);
output_high(MOT_L);
output_high(MOT_R);
output_low(MOT_1);
output_low(MOT_2);
delay_us(200);
}
output_low(MOT_L); // smer vpred
output_low(MOT_R);
setup_ccp1(CCP_PWM); // RC1 // Zapni PWM pro motory
setup_ccp2(CCP_PWM); // RC2
}
 
void SetServo(int8 angle)
{
int8 n;
 
for(n=0; n<10; n++)
{
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(angle);
delay_us(angle);
output_low(SERVO);
delay_ms(18);
}
}
 
inline void SetServoQ(int8 angle)
{
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(angle);
delay_us(angle);
output_low(SERVO);
}
 
// Couvni po narazu na naraznik
inline void bum()
{
set_pwm1_duty(0); // couvni, rovne dozadu
set_pwm2_duty(0);
output_high(MOT_L);
output_high(MOT_R);
disp(0xA5);
SetServo(CASAVR-CASMIN);
}
 
#include ".\diag.c"
 
//---------------------------- INT --------------------------------
#int_EXT
EXT_isr() // Preruseni od prekazky
{
unsigned int8 bearing, bearing_offset, delta_bearing;
 
set_pwm1_duty(0); // zabrzdi levym kolem, prave vypni
set_pwm2_duty(0);
output_high(MOT_L);
output_low(MOT_R);
// Ujistime se, ze prijaty signal je z naseho IR vysilace
output_high(IRTX); // Vypni LED na detekci prekazky
delay_ms(2);
if (IRRX) // stale nas signal?
{
output_low(MOT_L); // je odraz -> vpred
output_low(MOT_R);
return;
};
output_low(IRTX); // Zapni LED na detekci prekazky
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1); // 0-255 (odpovida 0-359)
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
bearing_offset=i2c_read(0); // Poznamenej hodnotu pred cihlou
i2c_stop();
 
delay_ms(9);
if (!IRRX) // stale nas signal?
{
output_low(MOT_L); // neni odraz -> vpred
output_low(MOT_R);
return;
};
 
rr=rrold; // Po cihle se pojede opet Rozumnou Rychlosti
if(stav!=cihla)
{
LogLog(0xFF,3); // Cihla
};
 
//!!! if(stav==cihla) while(true); // Zastav na furt, konec drahy
// if(stav==cihla) return; // Po druhe nic neobjizdej
// Pozor na rozjezd
 
if((stav==jizda)||(stav==cihla)) // Objed cihlu
{
#include ".\objizdka_L.c"
};
last_log_odo=get_timer1()+16; // Pul metru po cihle nezaznamenavej do LOGu
}
 
 
//---------------------------------- MAIN --------------------------------------
void main()
{
int8 offset; // Promena pro ulozeni offsetu
int8 r1; // Rychlost motoru 1
int8 r2; // Rychlost motoru 2
 
setup_adc_ports(ALL_ANALOG); // Zapnuti A/D prevodniku pro cteni kroutitek
setup_adc(ADC_CLOCK_INTERNAL);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // Casovac pro mereni casu hrany W/B v radce
setup_timer_1(T1_EXTERNAL); // Cita pulzy z odometrie z praveho kola
setup_timer_2(T2_DIV_BY_16,255,1); // Casovac PWM motoru
//!!! setup_timer_2(T2_DIV_BY_4,255,1); // Casovac PWM motoru
setup_ccp1(CCP_PWM); // RC1 // PWM pro motory
setup_ccp2(CCP_PWM); // RC2
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
 
set_tris_c(0b11111001); // Nastaveni vstup/vystup pro branu C, protoze se to nedela automaticky
 
set_pwm1_duty(0); // Zastav motory
set_pwm2_duty(0);
output_low(MOT_L); // Nastav smer vpred
output_low(MOT_R);
 
disp(0); // Zhasni LEDbar
 
if(BUMPER) // Kdyz nekdo na zacatku drzi naraznik, vymaz log a spust diagnostiku
{
diag();
}
 
output_low(IRTX); // Zapni LED na detekci prekazky
 
NightRider(1); // Zablikej, aby se poznalo, ze byl RESET
// Zaroven se musi pockat, nez se rozjede kamera, nez se do ni zacnou posilat prikazy
 
//... Nastaveni sonaru ...
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x02); // dosah
i2c_write(0x03); // n*43mm
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x01); // zesileni
i2c_write(0x01); // male, pro eliminaci echa z minuleho mereni
i2c_stop();
 
//... Nastaveni kamery ...
i2c_start(); // Soft RESET kamery
i2c_write(CAMERA_ADR); // Adresa kamery
i2c_write(0x12); // Adresa registru COMH
i2c_write(0x80 | 0x24); // Zapis ridiciho slova
i2c_stop();
 
i2c_start(); // BW
i2c_write(CAMERA_ADR);
i2c_write(0x28);
i2c_write(0b01000001);
i2c_stop();
 
/*
i2c_start(); // Contrast (nema podstatny vliv na obraz)
i2c_write(CAMERA_ADR);
i2c_write(0x05);
i2c_write(0xA0); // 48h
i2c_stop();
 
i2c_start(); // Band Filter (pokud by byl problem se zarivkama 50Hz)
i2c_write(CAMERA_ADR);
i2c_write(0x2D);
i2c_write(0x04 | 0x03);
i2c_stop();
*/
 
i2c_start(); // Fame Rate
i2c_write(CAMERA_ADR);
i2c_write(0x2B);
i2c_write(0x00); // cca 17ms (puvodni hodnota 5Eh = 20ms)
i2c_stop();
 
i2c_start(); // VSTRT
i2c_write(CAMERA_ADR);
i2c_write(0x19);
i2c_write(118); // prostredni radka
i2c_stop();
 
i2c_start(); // VEND
i2c_write(CAMERA_ADR);
i2c_write(0x1A);
i2c_write(118);
i2c_stop();
 
NightRider(1); // Musi se dat cas kamere na AGC a AEC
 
{ // Mereni expozice
int8 t1,t2;
 
i2c_start(); // Brightness, zacni od uplne tmy
i2c_write(CAMERA_ADR);
i2c_write(0x06);
i2c_write(0); // 80h default
i2c_stop();
delay_ms(50);
 
for(offset=0x04;offset<(255-0x04);offset+=0x04) // Zacni od jasu 10h
{
i2c_start(); // Brightness
i2c_write(CAMERA_ADR);
i2c_write(0x06);
i2c_write(offset); // 80h default
i2c_stop();
disp(offset);
delay_ms(50);
 
t1=0;
t2=0;
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z radky
delay_ms(5);
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z radky
set_timer0(0); // Vynuluj pocitadlo casu
if(!input(PIX)) continue;
while(input(PIX));
t1=get_timer0(); // Precti cas z citace casu hrany
set_timer0(0); // Vynuluj pocitadlo casu
while(!input(PIX));
t2=get_timer0();
 
if((t1>60) && (t1<140) && (t2>5) && (t2<=10)) break; // Vidis, co mas?
 
delay_ms(2); // Preskoc druhou radku z kamery
};
delay_ms(1000); // Nech chvili na displayi zmerenou hodnotu
}
 
set_adc_channel(CERVENA); // --- Kroutitko pro jas ---
delay_ms(1);
offset=read_adc();
offset &= 0b11111100; // Dva nejnizsi bity ignoruj
// offset += 0x70; // Jas nebude nikdy nizsi
disp(offset);
i2c_start(); // Brightness
i2c_write(CAMERA_adr);
i2c_write(0x06);
i2c_write(offset); // 80h default
i2c_stop();
delay_ms(1000); // Nech hodnotu chvili na displayi
 
set_adc_channel(ZELENA); // --- Kroutitko pro vykon motoru ---
delay_ms(1);
rr=read_adc()>>2; // 0-63 // Pokud by se zvetsil rozsah, tak zkontrolovat jakonasobeni!
rr+=27; // 27-90
//!!! rr=read_adc()>>1; // 0-128 // Pokud by se zvetsil rozsah, tak zkontrolovat jakonasobeni!
rrold=rr;
 
cas=CASAVR-CASMIN; // Inicializace promenych, aby neslo servo za roh
// a aby se to rozjelo jeste dneska
stav=start; // Jsme na startu
set_timer1(0); // Vynuluj citac odometrie
log=0; // Zacatek logu v cerne skrince
last_log_odo=0; // Posledni zaznam odometrie do logu
 
// ReadBlackBox(); // Vycteni zaznamu z Black Boxu
 
odo_cihla=ODODO_CIHLA-BRZDNA_DRAHA;
odo_tunel=ODODO_TUNEL-BRZDNA_DRAHA;
odo_preruseni=ODODO_PRERUSENI-BRZDNA_DRAHA;
 
// ........................... Hlavni smycka ................................
while(true)
{
int8 pom;
int8 n;
int8 gap;
int16 ododo;
 
gap=0; // Vynuluj pocitadlo preruseni
 
next_snap:
 
pom=0;
disable_interrupts(GLOBAL); //----------------------- Critical Section
while(input(HREF)); // Preskoc 1. radku
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z 2. radky
set_timer0(0); // Vynuluj pocitadlo casu
while(input(HREF)) // Po dobu vysilani radky cekej na hranu W/B
{
// !!!!Dodelat rozpoznani cerne cary napric pro zastaveni ?
if(!input(PIX)) // Pokud se X-krat za sebou precetla CERNA
if(!input(PIX))
// if(!input(PIX))
{
pom=get_timer0(); // Precti cas z citace casu hrany
break;
};
};
while(input(HREF)); // Pockej na shozeni signalu HREF
 
if((pom<CASMAX) && (pom>CASMIN)) cas=pom; // Orizni konce radku
// Na konci obrazovaho radku to blbne. Jednak chyba od apertury
// a vubec to nejak na kraji nefunguje.
 
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(cas);
delay_us(cas);
output_low(SERVO);
 
// Elektronicky diferencial 1. cast
if(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimace
if(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoru
if(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92
 
enable_interrupts(GLOBAL); //----------------------- End Critical Section
 
if(pom==0) // Kamera nevidi caru, poznamenej to do logu
{
if((cas>(CASMIN+30))&&(cas<(CASMAX-30))) // Nebyla minule cara moc u kraje?
if(last_log_odo<get_timer1()) // Aby nebyly zaznamy v logu prilis huste, musi se napred neco ujet od minuleho zaznamu
{
gap++;
}
}
else
{
if(gap>=2) // Trva preruseni cary alespon 2 snimky?
{
LogLog(gap,8); // Dalsi mereni nejdrive po ujeti 24 cm
rr=rrold; // Preruseni cary skoncilo, znovu jed Rozumnou Rychlosti
}
gap=0;
};
 
if(input(PROXIMITY) && ((stav==jizda)||(stav==cihla))) // Tunel
{
if(last_log_odo<get_timer1()) // Aby nebyly zaznamy v logu prilis huste, musi se napred neco ujet od minuleho zaznamu
{
LogLog(0,16); // Priznak tunelu; dalsi mereni nejdrive po ujeti 48 cm
rr=rrold; // Vjeli jsme do tunelu, znovu jed rychle
}
};
 
//ODODO
ododo=get_timer1();
if((ododo>odo_preruseni)&&(ododo<(odo_preruseni+8))) rr=RR_PRERUSENI;
if((ododo>odo_cihla)&&(ododo<(odo_cihla+8))) rr=RR_PRERUSENI;
if((ododo>odo_tunel)&&(ododo<(odo_tunel+8))) rr=RR_PRERUSENI;
 
// Elektronicky diferencial 2. cast
if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeni
if (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN); // rozsah 1 az 92 pro rr=0 // rozsah 1 az 154 pro rr=63
 
//!!! pro zatuhle prevodovky
// r1<<=1; // Rychlost je dvojnasobna
// r2<<=1; // Rozsah 2 az 184 pro rr=0
 
if ((stav==jizda)||(stav==cihla)||(stav==rozjezd)) //||(stav==pocihle)) // Jizda
{
set_pwm1_duty(r1);
set_pwm2_duty(r2);
}
else
{
set_pwm1_duty(0); // Zastaveni
set_pwm2_duty(0);
};
 
if((stav==rozjezd)&&(get_timer1()>10)) // musi ujet alespon 31cm
{
ext_int_edge(H_TO_L); // Nastav podminky preruseni od cihly
INT0IF=0; // Zruseni predesle udalosti od startera
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
stav=jizda;
};
 
if(stav==start) // Snimkuje, toci servem a ceka na start
{
set_adc_channel(MODRA); // Kroutitko na vystredeni predniho kolecka
Delay_ms(1);
stred=read_adc();
if(!input(PROXIMITY))
{
disp(0x80);
while(input(PROXIMITY)); // Cekej, dokud starter neda ruku pryc
set_timer1(0); // Vynuluj citac odometrie
set_pwm1_duty(255); // Rychly rozjezd !!! Zkontrolovat na oscyloskopu
set_pwm2_duty(255);
disp(0x01);
while(get_timer1()<=4) // Ujed alespon 12cm
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(40);
if(read_adc()<THR) {cas=CASMIN; break;}; // Prejeli jsme caru vlevo
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(40);
if(read_adc()<THR) {cas=CASMAX; break;}; // Prejeli jsme caru vpravo
cas=CASAVR-CASMIN; // Cara je rovne
};
stav=rozjezd;
};
}
 
pom=0x80; // Zobrazeni pozice cary na displayi
for(n=CASMAX/8; n<cas; n+=CASMAX/8) pom>>=1;
disp(pom);
 
while(true) // Ve zbytku casu snimku cti krajni UV senzory a naraznik
{
if(BUMPER) // Sakra, do neceho jsme narazili a nevideli jsme to!
{
bum();
SaveLog(log-1); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
set_pwm1_duty(200); // pomalu vpred
set_pwm2_duty(200);
output_low(MOT_L);
output_low(MOT_R);
cas=CASAVR-CASMIN;
};
set_adc_channel(LMAX); // Levy UV sensor
for(n=0;n<20;n++) if(input(HREF)) goto next_snap;
if(read_adc()<THR) cas=CASMIN;
set_adc_channel(RMAX); // Pravy UV sensor
for(n=0;n<20;n++) if(input(HREF)) goto next_snap;
if(read_adc()<THR) cas=CASMAX;
};
}
}
/roboti/istrobot/camerus/SW/876/bak/diag.c
0,0 → 1,67
//--- Diagnostika cidel a vymazani EEPROM ---
void diag()
{
int8 n;
 
// Vymaz Black Box v EEPROM
for(n=0;n<255;n++) write_eeprom(n,0);
bb_l[0]=0; // Zapis na pozici 0 vzdalenost 0
bb_h[0]=0;
SaveLog(0); // Zapis do EEPROM pocet zaznamu 0, tedy jeden zaznam
for(n=0;n<=4;n++)
{
disp(0x55); // Blikni pro potvrzeni
delay_ms(200);
disp(0xAA);
delay_ms(200);
};
 
while(true)
{
if(!IRRX)
{
int8 ble;
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1);
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
ble=i2c_read(0);
i2c_stop();
disp(ble);
delay_ms(200);
}
else
{
i2c_start(); // Diagnostika sonaru
i2c_write(SONAR_ADR);
i2c_write(0x02); // dosah
i2c_write(0x03); // n*43mm
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x01); // zesileni
i2c_write(0x01); // male, pro eliminaci echa z minuleho mereni
i2c_stop();
 
i2c_start(); // Sonar Ping
i2c_write(0xE0);
i2c_write(0x0);
i2c_write(0x51); // 50 mereni v palcich, 51 mereni v cm, 52 v us
i2c_stop();
delay_ms(100);
i2c_start(); // Odraz ze sonaru
i2c_write(0xE0);
i2c_write(0x3);
i2c_stop();
i2c_start();
i2c_write(0xE1);
n=i2c_read(0);
i2c_stop();
disp(n); // Zobrazeni hodnoty ze sonaru a zaroven diagnostika predniho IR cidla
delay_ms(200);
}
}
}
/roboti/istrobot/camerus/SW/876/bak/objizdka_L.c
0,0 → 1,183
// **** Objeti cihly vlevo **** LLLL
 
#define L_TOUCH 1 // Cara vlevo
#define R_TOUCH 2 // Cata vpravo
#define B_TOUCH 3 // Both
 
int8 n;
int8 r1,r2,rr;
int8 touch;
enum okolo_cihly {pred_carou,na_care,po_care};
okolo_cihly ridic; // V jakem jsme stavu objizdeni cihly
int8 vzdalenost;
int8 visualisation;
 
stav=cihla; // Dalsi prekazku uz nezaznamenavej (je to s velkou pravdepodobnosti cil)
touch=0; // Indikator detekce cary pri objizdeni
 
cihla:
 
rr=RR_CIHLA; //!!! Rozumna rychlost pro objizdeni cihly (bylo by lepsi rychlost zvysovat) a pri detekci pohybu zase snizit
disp(0x99);
set_pwm1_duty(0); // zabrzdi levym kolem, prave vpred
set_pwm2_duty(220);
output_high(MOT_L);
output_low(MOT_R);
odocounter=get_timer1();
while(true) // Na zacatku se vyhni cihle, zatoc co muzes
{
cas=CASMIN-5; // jeste vic nez hodne do leva
 
if(BUMPER) // Narazili jsme do cihly, musime couvnout!
{
bum();
SaveLog(log-1); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
brzda();
goto cihla; // Znovu zacni cihlu objizdet
};
 
set_pwm1_duty(0);
set_pwm2_duty(220); // !!! mozna prilis maly vykon pro rozjezd pro zatuhlou prevodovku
output_high(MOT_L); // leve kolo reverz
output_low(MOT_R); // prave kolo vpred
if(get_timer1()>(odocounter+5)) // konec zatacky?
{
disp(0x66);
break;
}
SetServoQ(cas);
delay_ms(18);
};
 
//------ Objeti cihly v konstantni vzdalenosti ------
ridic=pred_carou;
cas=CASAVR-CASMIN; // rovne
output_low(MOT_L); // vpred
output_low(MOT_R);
visualisation=0;
while(true)
{
if(BUMPER) // Narazili jsme do cihly, musime couvnout!
{
bum();
SaveLog(log-1); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
set_pwm1_duty(160); // vpred
set_pwm2_duty(160);
output_low(MOT_L);
output_low(MOT_R);
cas=CASMIN;
};
 
delta_bearing=bearing-bearing_offset;
visualisation=(delta_bearing & 0xF0) | (visualisation & 0x0F);
if(IRRX) // hrozi celni srazka s cihlou v prubehu objizdeni
{
cas=CASMIN;
}
else
{
if((vzdalenost!=0)||!input(PROXIMITY)||((delta_bearing>60)&&(delta_bearing<128))) // Udrzovani konstantni vzdalenosti od cihly
{
if(cas>(CASMIN+20)) cas-=20;
}
else
{
if(cas<(CASMAX-20)) cas+=20;
};
};
// Elektronicky diferencial
if(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimace
if(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoru
if(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92
 
if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeni
if (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN);
 
//!!! pro zatuhle prevodovky
// r1<<=1; // Rychlost je dvojnasobna
// r2<<=1; // Rozsah 2 az 184 pro rr=0
 
set_pwm1_duty(r1); // Nastav rychlost motoru
set_pwm2_duty(r2);
 
SetServoQ(cas);
 
i2c_start(); // Sonar Ping
i2c_write(SONAR_ADR);
i2c_write(0x0);
i2c_write(0x52); // mereni v us
i2c_stop();
 
for(n=1;n<=90;n++) // 18ms testovani cary do dalsi korekce serva
{
set_adc_channel(LMAX);
delay_us(100);
if(read_adc()<THR) touch|=L_TOUCH;
set_adc_channel(RMAX);
delay_us(100);
if(read_adc()<THR) touch|=R_TOUCH;
};
 
i2c_start(); // Odraz ze sonaru
i2c_write(SONAR_ADR);
i2c_write(0x3);
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR+1);
vzdalenost=i2c_read(0);
i2c_stop();
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1); // uhel 0-255
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
bearing=i2c_read(0);
i2c_stop();
 
if(touch==L_TOUCH) visualisation|=0x2;
if(touch==R_TOUCH) visualisation|=0x1;
if((touch==B_TOUCH)&&(ridic==pred_carou)) ridic=na_care;
if((ridic==na_care)&&(touch==0)) break;
if(ridic==na_care) touch=0;
disp(visualisation);
};
disp(0xC3);
 
set_pwm1_duty(20); //!!! pred zatuhlejma prevodovkama tam bylo 20 a 200
set_pwm2_duty(250);
output_high(MOT_L);
output_low(MOT_R);
delay_us(40);
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie
while (true) // Znovu se musime dotknout cary
{
for(n=1;n<=90;n++) // 18ms testovani cary do dalsi korekce serva
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(100);
if(read_adc()<THR) // Dotkli jsme se levym senzorem
{
disp(0xE0);
cas=CASAVR-CASMIN; // nastavime, ze cara je rovne
goto cara;
};
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(100);
if((get_timer1()>=(odocounter+2)) && (read_adc()<THR)) // Pravym senzorem nesmime caru prejet!
{
disp(0x07);
cas=CASMAX; // kdyz prejedem, tak nastavime, ze cara je vpravo
goto cara;
};
}
SetServoQ(CASMIN-5); // max. max. doleva L
}
 
cara:
 
output_low(MOT_L); // oba motory vpred
output_low(MOT_R);
/roboti/istrobot/camerus/SW/876/bak2/camerus.c
0,0 → 1,633
//********* Robot Camerus pro IstRobot 2007 ************
//"$Id: camerus.c 253 2007-04-24 09:26:46Z kakl $"
//*****************************************************
 
#include ".\camerus.h"
 
#USE FAST_IO (C) // Brana C je ve FAST_IO modu, aby slo rychle cist z kamery
 
// Rychlostni konstanty
#define RR_CIHLA 60 // Rozumna rychlost pro objizdeni cihly
#define RR_PRERUSENI 50 // Rozumna rychlost pro priblizeni se k preruseni
#define BRZDNA_DRAHA 0x20 // Jak daleko pred problemem se zacne brzdit
#define TUHOS 100 // Jak dlouho se bude couvat po narazu na naraznik
#define ODODO_CIHLA 0xFFF
#define ODODO_TUNEL 0xFFF
#define ODODO_PRERUSENI 0xFFF
 
// Adresy IIC periferii
#define COMPAS_ADR 0xC0
#define CAMERA_ADR 0xDC
#define SONAR_ADR 0xE0
 
// A/D vstupy
#define RMAX 4 // AN4/RA5 - leve cidlo na vyjeti z cary
#define LMAX 3 // AN3/RA3 - prave cidlo na vyjeti z cary
#define CERVENA 2 // AN2/RA2 - cervene kroutitko
#define ZELENA 1 // AN1/RA0 - zelene kroutitko
#define MODRA 0 // AN0/RA1 - modre kroutitko
 
// I/O
#define HREF PIN_C5 // Signal HREF z kamery (v H po celou dobu radku)
#define PIX PIN_C6 // Vstup pro body z kamery (za trivstupim hradlem OR (dig. komparator))
#define SERVO PIN_B4 // Vystup na servo (1 az 2ms po cca 20ms (synchronizovano snimkovym kmitoctem))
#define MOT_L PIN_B5 // Smer otaceni leveho motoru; druhy pol je RC2
#define MOT_R PIN_B6 // Smer otaceni praveho motoru; druhy pol je RC1
#define MOT_1 PIN_C1 // PWM vystpy motoru
#define MOT_2 PIN_C2 //
#define DATA PIN_B2 // K modulu LEDbar data
#define CP PIN_B1 // K modulu LEDbar hodiny
//#define ODO PIN_C0 // Ze snimace z odometrie z praveho kola na TIMER1
// Jeden impuls je 31,25mm
#define IRRX !input(PIN_B0) // Vstup INT, generuje preruseni pri prekazce
#define IRTX PIN_B3 // Modulovani vysilaci IR LED na detekci prekazky
#define PROXIMITY PIN_C7 // Cidlo kratkeho dosahu na cihlu
#define BUMPER !input(PIN_A4) // Naraznik
 
#define CASMIN 6 // Rozsah radku snimace
#define CASMAX 192
#define CASAVR ((CASMAX+CASMIN) / 2)
 
#define EEMAX 255 // Konec EEPROM
#define MAXLOG 0x10 // Maximalni pocet zaznamu v logu
#if MAXLOG>(EEMAX/3)
#error Prekrocena velikost EEPROM
#endif
 
#define OFFSETO 0x9F //0x9F // Vystredeni serva pro objeti prekazky
 
#define THR 90 // Threshold pro UV cidla na caru
 
#byte INTCON = 0x0B // Interrupt configuration register
#bit GIE = INTCON.7
#bit PEIE = INTCON.6
#bit TMR0IE = INTCON.5
#bit INT0IE = INTCON.4
#bit RBIE = INTCON.3
#bit TMR0IF = INTCON.2
#bit INT0IF = INTCON.1
#bit RBIF = INTCON.0
 
enum stavy {start,rozjezd,jizda,cihla,pocihle,cil};
stavy stav; // Kde jsme na trati
int8 cas; // Cas hrany bila/cerna v radce
int8 stred; // Vystredeni kolecka
int16 odocounter; // Zaznamenani aktualniho stavu pocitadla odometrie
int16 last_log_odo; // Posledni stav odometrie poznamenany do logu
int16 last_log; // Cislo posledniho zaznamu v logu v EEPROM
int8 bb_h[MAXLOG]; // Cerna skrinka MSB
int8 bb_l[MAXLOG]; // Cerna skrinka LSB
int8 bb_f[MAXLOG]; // Cerna skrinka priznak (typ zaznamu)
int8 log; // Pocitadlo pro cernou skrinku
int8 rr; // Promenna na ulozeni Rozumne rychlost
int8 rrold;
int16 odo_preruseni, odo_cihla, odo_tunel; // Problemy na trati
 
// Zobrazeni jednoho byte na modulu LEDbar
inline void disp(int8 x)
{
int n;
 
for(n=0;n<=7;n++)
{
if (bit_test(x,0)) output_low(DATA); else output_high(DATA);
output_high(CP);
x>>=1;
output_low(CP);
}
}
 
// Blikani LEDbarem ve stilu Night Rider
void NightRider(int8 x)
{
int n,i,j;
 
for(j=0;j<x;j++)
{
i=0x01;
for(n=0;n<7;n++)
{
disp(i);
rotate_left(&i, 1);
delay_ms(40);
}
for(n=0;n<7;n++)
{
disp(i);
rotate_right(&i, 1);
delay_ms(40);
}
}
disp(i);
delay_ms(40);
i=0;
disp(i);
}
 
// Zaznam LOGu do EEPROM
void SaveLog(int8 log)
{
int8 n,i;
 
i=0;
for(n=0;n<=(log*3);n+=3) // Ulozeni Black Boxu do EEPROM
{
write_eeprom(n,bb_f[i]);
write_eeprom(n+1,bb_h[i]);
write_eeprom(n+2,bb_l[i]);
i++;
};
write_eeprom(EEMAX,log); // Zapis poctu zaznamu na konec EEPROM
}
 
// Zaznam do Logu do RAM
void LogLog(int8 flag, int16 gap)
{
int16 timer_pom;
 
timer_pom=get_timer1(); // Timer se musi vycist atomicky
bb_l[log]=make8(timer_pom,0); // Zaznam
bb_h[log]=make8(timer_pom,1);
bb_f[log]=flag; // Typ zaznamu
if(log<MAXLOG) log++; // Ukazatel na dalsi zaznam
last_log_odo=timer_pom+gap; // Dalsi mereni nejdrive po ujeti def. vzdalenosti
rr=rrold; // Problem skoncil, znovu jed Rozumnou Rychlosti
}
 
void ReadBlackBox()
{
last_log=read_eeprom(EEMAX); // Kolik zaznamu mame od minule poznamenano?
{
int8 n,i;
 
i=0;
for(n=0;n<=last_log;n++)
{
if(read_eeprom(i)==0) odo_tunel=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
if(read_eeprom(i)==0xFF) odo_cihla=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
if((read_eeprom(i)>0) && (read_eeprom(i)<0xFF)) odo_preruseni=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
}
}
}
 
 
// Brzdeni motorama stridou 1:1
void brzda()
{
int8 n,i;
 
set_pwm1_duty(0); // vypni PWM
set_pwm2_duty(0);
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_OFF);
for (n=0;n<200;n++)
{
output_low(MOT_L);
output_low(MOT_R);
output_high(MOT_1);
output_high(MOT_2);
delay_us(200);
output_high(MOT_L);
output_high(MOT_R);
output_low(MOT_1);
output_low(MOT_2);
delay_us(200);
}
output_low(MOT_L); // smer vpred
output_low(MOT_R);
setup_ccp1(CCP_PWM); // RC1 // Zapni PWM pro motory
setup_ccp2(CCP_PWM); // RC2
}
 
void SetServo(int8 angle)
{
int8 n;
 
for(n=0; n<10; n++)
{
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(angle);
delay_us(angle);
output_low(SERVO);
delay_ms(18);
}
}
 
inline void SetServoQ(int8 angle)
{
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(angle);
delay_us(angle);
output_low(SERVO);
}
 
// Couvni po narazu na naraznik
inline void bum()
{
set_pwm1_duty(0); // couvni, rovne dozadu
set_pwm2_duty(0);
output_high(MOT_L);
output_high(MOT_R);
disp(0xA5);
SetServo(CASAVR-CASMIN);
}
 
#include ".\diag.c"
 
//---------------------------- INT --------------------------------
#int_EXT
EXT_isr() // Preruseni od prekazky
{
unsigned int8 bearing, bearing_offset, delta_bearing;
 
set_pwm1_duty(0); // zabrzdi levym kolem, prave vypni
set_pwm2_duty(0);
output_high(MOT_L);
output_low(MOT_R);
// Ujistime se, ze prijaty signal je z naseho IR vysilace
output_high(IRTX); // Vypni LED na detekci prekazky
delay_ms(2);
if (IRRX) // stale nas signal?
{
output_low(MOT_L); // je odraz -> vpred
output_low(MOT_R);
return;
};
output_low(IRTX); // Zapni LED na detekci prekazky
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1); // 0-255 (odpovida 0-359)
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
bearing_offset=i2c_read(0); // Poznamenej hodnotu pred cihlou
i2c_stop();
 
delay_ms(9);
if (!IRRX) // stale nas signal?
{
output_low(MOT_L); // neni odraz -> vpred
output_low(MOT_R);
return;
};
 
rr=rrold; // Po cihle se pojede opet Rozumnou Rychlosti
if(stav!=cihla)
{
LogLog(0xFF,3); // Cihla
};
 
//!!! if(stav==cihla) while(true); // Zastav na furt, konec drahy
// if(stav==cihla) return; // Po druhe nic neobjizdej
// Pozor na rozjezd
 
if((stav==jizda)||(stav==cihla)) // Objed cihlu
{
#include ".\objizdka_L.c"
};
last_log_odo=get_timer1()+16; // Pul metru po cihle nezaznamenavej do LOGu
}
 
 
//---------------------------------- MAIN --------------------------------------
void main()
{
int8 offset; // Promena pro ulozeni offsetu
int8 r1; // Rychlost motoru 1
int8 r2; // Rychlost motoru 2
 
setup_adc_ports(ALL_ANALOG); // Zapnuti A/D prevodniku pro cteni kroutitek
setup_adc(ADC_CLOCK_INTERNAL);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // Casovac pro mereni casu hrany W/B v radce
setup_timer_1(T1_EXTERNAL); // Cita pulzy z odometrie z praveho kola
setup_timer_2(T2_DIV_BY_16,255,1); // Casovac PWM motoru
//!!! setup_timer_2(T2_DIV_BY_4,255,1); // Casovac PWM motoru
setup_ccp1(CCP_PWM); // RC1 // PWM pro motory
setup_ccp2(CCP_PWM); // RC2
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
 
set_tris_c(0b11111001); // Nastaveni vstup/vystup pro branu C, protoze se to nedela automaticky
 
set_pwm1_duty(0); // Zastav motory
set_pwm2_duty(0);
output_low(MOT_L); // Nastav smer vpred
output_low(MOT_R);
 
disp(0); // Zhasni LEDbar
 
if(BUMPER) // Kdyz nekdo na zacatku drzi naraznik, vymaz log a spust diagnostiku
{
diag();
}
 
output_low(IRTX); // Zapni LED na detekci prekazky
 
NightRider(1); // Zablikej, aby se poznalo, ze byl RESET
// Zaroven se musi pockat, nez se rozjede kamera, nez se do ni zacnou posilat prikazy
 
//... Nastaveni sonaru ...
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x02); // dosah
i2c_write(0x03); // n*43mm
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x01); // zesileni
i2c_write(0x01); // male, pro eliminaci echa z minuleho mereni
i2c_stop();
 
//... Nastaveni kamery ...
i2c_start(); // Soft RESET kamery
i2c_write(CAMERA_ADR); // Adresa kamery
i2c_write(0x12); // Adresa registru COMH
i2c_write(0x80 | 0x24); // Zapis ridiciho slova
i2c_stop();
 
i2c_start(); // BW
i2c_write(CAMERA_ADR);
i2c_write(0x28);
i2c_write(0b01000001);
i2c_stop();
 
/*
i2c_start(); // Contrast (nema podstatny vliv na obraz)
i2c_write(CAMERA_ADR);
i2c_write(0x05);
i2c_write(0xA0); // 48h
i2c_stop();
 
i2c_start(); // Band Filter (pokud by byl problem se zarivkama 50Hz)
i2c_write(CAMERA_ADR);
i2c_write(0x2D);
i2c_write(0x04 | 0x03);
i2c_stop();
*/
 
i2c_start(); // Fame Rate
i2c_write(CAMERA_ADR);
i2c_write(0x2B);
i2c_write(0x00); // cca 17ms (puvodni hodnota 5Eh = 20ms)
i2c_stop();
 
i2c_start(); // VSTRT
i2c_write(CAMERA_ADR);
i2c_write(0x19);
i2c_write(118); // prostredni radka
i2c_stop();
 
i2c_start(); // VEND
i2c_write(CAMERA_ADR);
i2c_write(0x1A);
i2c_write(118);
i2c_stop();
 
NightRider(1); // Musi se dat cas kamere na AGC a AEC
 
{ // Mereni expozice
int8 t1,t2;
 
i2c_start(); // Brightness, zacni od uplne tmy
i2c_write(CAMERA_ADR);
i2c_write(0x06);
i2c_write(0); // 80h default
i2c_stop();
delay_ms(50);
 
for(offset=0x04;offset<(255-0x04);offset+=0x04) // Zacni od jasu 10h
{
i2c_start(); // Brightness
i2c_write(CAMERA_ADR);
i2c_write(0x06);
i2c_write(offset); // 80h default
i2c_stop();
disp(offset);
delay_ms(50);
 
t1=0;
t2=0;
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z radky
delay_ms(5);
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z radky
set_timer0(0); // Vynuluj pocitadlo casu
if(!input(PIX)) continue;
while(input(PIX));
t1=get_timer0(); // Precti cas z citace casu hrany
set_timer0(0); // Vynuluj pocitadlo casu
while(!input(PIX));
t2=get_timer0();
 
if((t1>60) && (t1<140) && (t2>5) && (t2<=10)) break; // Vidis, co mas?
 
delay_ms(2); // Preskoc druhou radku z kamery
};
delay_ms(1000); // Nech chvili na displayi zmerenou hodnotu
}
 
set_adc_channel(CERVENA); // --- Kroutitko pro jas ---
delay_ms(1);
offset=read_adc();
offset &= 0b11111100; // Dva nejnizsi bity ignoruj
// offset += 0x70; // Jas nebude nikdy nizsi
disp(offset);
i2c_start(); // Brightness
i2c_write(CAMERA_adr);
i2c_write(0x06);
i2c_write(offset); // 80h default
i2c_stop();
delay_ms(1000); // Nech hodnotu chvili na displayi
 
set_adc_channel(ZELENA); // --- Kroutitko pro vykon motoru ---
delay_ms(1);
rr=read_adc()>>2; // 0-63 // Pokud by se zvetsil rozsah, tak zkontrolovat jakonasobeni!
rr+=27; // 27-90
//!!! rr=read_adc()>>1; // 0-128 // Pokud by se zvetsil rozsah, tak zkontrolovat jakonasobeni!
rrold=rr;
 
cas=CASAVR-CASMIN; // Inicializace promenych, aby neslo servo za roh
// a aby se to rozjelo jeste dneska
stav=start; // Jsme na startu
set_timer1(0); // Vynuluj citac odometrie
log=0; // Zacatek logu v cerne skrince
last_log_odo=0; // Posledni zaznam odometrie do logu
 
// ReadBlackBox(); // Vycteni zaznamu z Black Boxu
 
odo_cihla=ODODO_CIHLA-BRZDNA_DRAHA;
odo_tunel=ODODO_TUNEL-BRZDNA_DRAHA;
odo_preruseni=ODODO_PRERUSENI-BRZDNA_DRAHA;
 
// ........................... Hlavni smycka ................................
while(true)
{
int8 pom;
int8 n;
int8 gap;
int16 ododo;
 
gap=0; // Vynuluj pocitadlo preruseni
 
next_snap:
 
pom=0;
disable_interrupts(GLOBAL); //----------------------- Critical Section
while(input(HREF)); // Preskoc 1. radku
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z 2. radky
set_timer0(0); // Vynuluj pocitadlo casu
while(input(HREF)) // Po dobu vysilani radky cekej na hranu W/B
{
// !!!!Dodelat rozpoznani cerne cary napric pro zastaveni ?
if(!input(PIX)) // Pokud se X-krat za sebou precetla CERNA
if(!input(PIX))
// if(!input(PIX))
{
pom=get_timer0(); // Precti cas z citace casu hrany
break;
};
};
while(input(HREF)); // Pockej na shozeni signalu HREF
 
if((pom<CASMAX) && (pom>CASMIN)) cas=pom; // Orizni konce radku
// Na konci obrazovaho radku to blbne. Jednak chyba od apertury
// a vubec to nejak na kraji nefunguje.
 
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(cas);
delay_us(cas);
output_low(SERVO);
 
// Elektronicky diferencial 1. cast
if(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimace
if(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoru
if(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92
 
enable_interrupts(GLOBAL); //----------------------- End Critical Section
 
if(pom==0) // Kamera nevidi caru, poznamenej to do logu
{
if((cas>(CASMIN+30))&&(cas<(CASMAX-30))) // Nebyla minule cara moc u kraje?
if(last_log_odo<get_timer1()) // Aby nebyly zaznamy v logu prilis huste, musi se napred neco ujet od minuleho zaznamu
{
gap++;
}
}
else
{
if(gap>=2) // Trva preruseni cary alespon 2 snimky?
{
LogLog(gap,8); // Dalsi mereni nejdrive po ujeti 24 cm
rr=rrold; // Preruseni cary skoncilo, znovu jed Rozumnou Rychlosti
}
gap=0;
};
 
if(input(PROXIMITY) && ((stav==jizda)||(stav==cihla))) // Tunel
{
if(last_log_odo<get_timer1()) // Aby nebyly zaznamy v logu prilis huste, musi se napred neco ujet od minuleho zaznamu
{
LogLog(0,16); // Priznak tunelu; dalsi mereni nejdrive po ujeti 48 cm
rr=rrold; // Vjeli jsme do tunelu, znovu jed rychle
}
};
 
//ODODO
ododo=get_timer1();
if((ododo>odo_preruseni)&&(ododo<(odo_preruseni+8))) rr=RR_PRERUSENI;
if((ododo>odo_cihla)&&(ododo<(odo_cihla+8))) rr=RR_PRERUSENI;
if((ododo>odo_tunel)&&(ododo<(odo_tunel+8))) rr=RR_PRERUSENI;
 
// Elektronicky diferencial 2. cast
if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeni
if (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN); // rozsah 1 az 92 pro rr=0 // rozsah 1 az 154 pro rr=63
 
//!!! pro zatuhle prevodovky
// r1<<=1; // Rychlost je dvojnasobna
// r2<<=1; // Rozsah 2 az 184 pro rr=0
 
if ((stav==jizda)||(stav==cihla)||(stav==rozjezd)) //||(stav==pocihle)) // Jizda
{
set_pwm1_duty(r1);
set_pwm2_duty(r2);
}
else
{
set_pwm1_duty(0); // Zastaveni
set_pwm2_duty(0);
};
 
if((stav==rozjezd)&&(get_timer1()>10)) // musi ujet alespon 31cm
{
ext_int_edge(H_TO_L); // Nastav podminky preruseni od cihly
INT0IF=0; // Zruseni predesle udalosti od startera
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
stav=jizda;
};
 
if(stav==start) // Snimkuje, toci servem a ceka na start
{
set_adc_channel(MODRA); // Kroutitko na vystredeni predniho kolecka
Delay_ms(1);
stred=read_adc();
if(!input(PROXIMITY))
{
disp(0x80);
while(input(PROXIMITY)); // Cekej, dokud starter neda ruku pryc
set_timer1(0); // Vynuluj citac odometrie
set_pwm1_duty(255); // Rychly rozjezd !!! Zkontrolovat na oscyloskopu
set_pwm2_duty(255);
disp(0x01);
while(get_timer1()<=4) // Ujed alespon 12cm
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(40);
if(read_adc()<THR) {cas=CASMIN; break;}; // Prejeli jsme caru vlevo
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(40);
if(read_adc()<THR) {cas=CASMAX; break;}; // Prejeli jsme caru vpravo
cas=CASAVR-CASMIN; // Cara je rovne
};
stav=rozjezd;
};
}
 
pom=0x80; // Zobrazeni pozice cary na displayi
for(n=CASMAX/8; n<cas; n+=CASMAX/8) pom>>=1;
disp(pom);
 
while(true) // Ve zbytku casu snimku cti krajni UV senzory a naraznik
{
if(BUMPER) // Sakra, do neceho jsme narazili a nevideli jsme to!
{
bum();
SaveLog(log-1); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
set_pwm1_duty(200); // pomalu vpred
set_pwm2_duty(200);
output_low(MOT_L);
output_low(MOT_R);
cas=CASAVR-CASMIN;
};
set_adc_channel(LMAX); // Levy UV sensor
for(n=0;n<20;n++) if(input(HREF)) goto next_snap;
if(read_adc()<THR) cas=CASMIN;
set_adc_channel(RMAX); // Pravy UV sensor
for(n=0;n<20;n++) if(input(HREF)) goto next_snap;
if(read_adc()<THR) cas=CASMAX;
};
}
}
/roboti/istrobot/camerus/SW/876/bak2/diag.c
0,0 → 1,67
//--- Diagnostika cidel a vymazani EEPROM ---
void diag()
{
int8 n;
 
// Vymaz Black Box v EEPROM
for(n=0;n<255;n++) write_eeprom(n,0);
bb_l[0]=0; // Zapis na pozici 0 vzdalenost 0
bb_h[0]=0;
SaveLog(0); // Zapis do EEPROM pocet zaznamu 0, tedy jeden zaznam
for(n=0;n<=4;n++)
{
disp(0x55); // Blikni pro potvrzeni
delay_ms(200);
disp(0xAA);
delay_ms(200);
};
 
while(true)
{
if(!IRRX)
{
int8 ble;
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1);
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
ble=i2c_read(0);
i2c_stop();
disp(ble);
delay_ms(200);
}
else
{
i2c_start(); // Diagnostika sonaru
i2c_write(SONAR_ADR);
i2c_write(0x02); // dosah
i2c_write(0x03); // n*43mm
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x01); // zesileni
i2c_write(0x01); // male, pro eliminaci echa z minuleho mereni
i2c_stop();
 
i2c_start(); // Sonar Ping
i2c_write(0xE0);
i2c_write(0x0);
i2c_write(0x51); // 50 mereni v palcich, 51 mereni v cm, 52 v us
i2c_stop();
delay_ms(100);
i2c_start(); // Odraz ze sonaru
i2c_write(0xE0);
i2c_write(0x3);
i2c_stop();
i2c_start();
i2c_write(0xE1);
n=i2c_read(0);
i2c_stop();
disp(n); // Zobrazeni hodnoty ze sonaru a zaroven diagnostika predniho IR cidla
delay_ms(200);
}
}
}
/roboti/istrobot/camerus/SW/876/bak2/objizdka_L.c
0,0 → 1,183
// **** Objeti cihly vlevo **** LLLL
 
#define L_TOUCH 1 // Cara vlevo
#define R_TOUCH 2 // Cata vpravo
#define B_TOUCH 3 // Both
 
int8 n;
int8 r1,r2,rr;
int8 touch;
enum okolo_cihly {pred_carou,na_care,po_care};
okolo_cihly ridic; // V jakem jsme stavu objizdeni cihly
int8 vzdalenost;
int8 visualisation;
 
stav=cihla; // Dalsi prekazku uz nezaznamenavej (je to s velkou pravdepodobnosti cil)
odocounter=get_timer1();
 
cihla:
 
rr=RR_CIHLA; //!!! Rozumna rychlost pro objizdeni cihly (bylo by lepsi rychlost zvysovat) a pri detekci pohybu zase snizit
disp(0x99);
set_pwm1_duty(0); // zabrzdi levym kolem, prave vpred
set_pwm2_duty(255);
output_high(MOT_L);
output_low(MOT_R);
while(true) // Na zacatku se vyhni cihle, zatoc co muzes
{
cas=CASMIN-5; // jeste vic nez hodne do leva
 
if(BUMPER) // Narazili jsme do cihly, musime couvnout!
{
bum();
SaveLog(log-1); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
brzda();
goto cihla; // Znovu zacni cihlu objizdet
};
 
set_pwm1_duty(0);
set_pwm2_duty(220); // !!! mozna prilis maly vykon pro rozjezd pro zatuhlou prevodovku
output_high(MOT_L); // leve kolo reverz
output_low(MOT_R); // prave kolo vpred
if(get_timer1()>(odocounter+5)) // konec zatacky?
{
disp(0x66);
break;
}
SetServoQ(cas);
delay_ms(18);
};
 
//------ Objeti cihly v konstantni vzdalenosti ------
touch=0; // Indikator detekce cary pri objizdeni
ridic=pred_carou;
cas=CASAVR-CASMIN; // rovne
output_low(MOT_L); // vpred
output_low(MOT_R);
visualisation=0;
while(true)
{
if(BUMPER) // Narazili jsme do cihly, musime couvnout!
{
bum();
SaveLog(log-1); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
set_pwm1_duty(160); // vpred
set_pwm2_duty(160);
output_low(MOT_L);
output_low(MOT_R);
cas=CASMIN;
};
 
delta_bearing=bearing-bearing_offset;
visualisation=(delta_bearing & 0xF0) | (visualisation & 0x0F);
if(IRRX) // hrozi celni srazka s cihlou v prubehu objizdeni
{
cas=CASMIN;
}
else
{
if((vzdalenost!=0)||!input(PROXIMITY)||((delta_bearing>60)&&(delta_bearing<128))) // Udrzovani konstantni vzdalenosti od cihly
{
if(cas>(CASMIN+20)) cas-=20;
}
else
{
if(cas<(CASMAX-20)) cas+=20;
};
};
// Elektronicky diferencial
if(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimace
if(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoru
if(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92
 
if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeni
if (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN);
 
//!!! pro zatuhle prevodovky
// r1<<=1; // Rychlost je dvojnasobna
// r2<<=1; // Rozsah 2 az 184 pro rr=0
 
set_pwm1_duty(r1); // Nastav rychlost motoru
set_pwm2_duty(r2);
 
SetServoQ(cas);
 
i2c_start(); // Sonar Ping
i2c_write(SONAR_ADR);
i2c_write(0x0);
i2c_write(0x52); // mereni v us
i2c_stop();
 
for(n=1;n<=90;n++) // 18ms testovani cary do dalsi korekce serva
{
set_adc_channel(LMAX);
delay_us(100);
if(read_adc()<THR) touch|=L_TOUCH;
set_adc_channel(RMAX);
delay_us(100);
if(read_adc()<THR) touch|=R_TOUCH;
};
 
i2c_start(); // Odraz ze sonaru
i2c_write(SONAR_ADR);
i2c_write(0x3);
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR+1);
vzdalenost=i2c_read(0);
i2c_stop();
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1); // uhel 0-255
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
bearing=i2c_read(0);
i2c_stop();
 
if(touch==L_TOUCH) visualisation|=0x2;
if(touch==R_TOUCH) visualisation|=0x1;
if((touch==B_TOUCH)&&(ridic==pred_carou)) ridic=na_care;
if((ridic==na_care)&&(touch==0)) break;
if(ridic==na_care) touch=0;
disp(visualisation);
};
disp(0xC3);
 
set_pwm1_duty(20); //!!! pred zatuhlejma prevodovkama tam bylo 20 a 200
set_pwm2_duty(250);
output_high(MOT_L);
output_low(MOT_R);
delay_us(40);
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie
while (true) // Znovu se musime dotknout cary
{
for(n=1;n<=90;n++) // 18ms testovani cary do dalsi korekce serva
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(100);
if(read_adc()<THR) // Dotkli jsme se levym senzorem
{
disp(0xE0);
cas=CASAVR-CASMIN; // nastavime, ze cara je rovne
goto cara;
};
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(100);
if((get_timer1()>=(odocounter+2)) && (read_adc()<THR)) // Pravym senzorem nesmime caru prejet!
{
disp(0x07);
cas=CASMAX; // kdyz prejedem, tak nastavime, ze cara je vpravo
goto cara;
};
}
SetServoQ(CASMIN-5); // max. max. doleva L
}
 
cara:
 
output_low(MOT_L); // oba motory vpred
output_low(MOT_R);
/roboti/istrobot/camerus/SW/876/camerus.c
0,0 → 1,661
//********* Robot Camerus pro IstRobot 2007 ************
//"$Id$"
//*****************************************************
 
#include ".\camerus.h"
 
#USE FAST_IO (C) // Brana C je ve FAST_IO modu, aby slo rychle cist z kamery
 
// Rychlostni konstanty
#define RR_CIHLA 50 // Rozumna rychlost pro objizdeni cihly
#define RR_PRERUSENI 50 // Rozumna rychlost pro priblizeni se k preruseni
#define BRZDNA_DRAHA 0x15 // Jak daleko pred problemem se zacne brzdit
#define TUHOS 100 // Jak dlouho se bude couvat po narazu na naraznik
#define ODODO_PROBLEM1 0xFFF
#define ODODO_PROBLEM2 0xFFF
#define ODODO_PROBLEM3 0xFFF
 
// Adresy IIC periferii
#define COMPAS_ADR 0xC0
#define CAMERA_ADR 0xDC
#define SONAR_ADR 0xE0
 
// A/D vstupy
#define RMAX 4 // AN4/RA5 - leve cidlo na vyjeti z cary
#define LMAX 3 // AN3/RA3 - prave cidlo na vyjeti z cary
#define CERVENA 2 // AN2/RA2 - cervene kroutitko
#define ZELENA 1 // AN1/RA0 - zelene kroutitko
#define MODRA 0 // AN0/RA1 - modre kroutitko
 
// I/O
#define HREF PIN_C5 // Signal HREF z kamery (v H po celou dobu radku)
#define PIX PIN_C6 // Vstup pro body z kamery (za trivstupim hradlem OR (dig. komparator))
#define SERVO PIN_B4 // Vystup na servo (1 az 2ms po cca 20ms (synchronizovano snimkovym kmitoctem))
#define MOT_L PIN_B5 // Smer otaceni leveho motoru; druhy pol je RC2
#define MOT_R PIN_B6 // Smer otaceni praveho motoru; druhy pol je RC1
#define MOT_1 PIN_C1 // PWM vystpy motoru
#define MOT_2 PIN_C2 //
#define DATA PIN_B2 // K modulu LEDbar data
#define CP PIN_B1 // K modulu LEDbar hodiny
//#define ODO PIN_C0 // Ze snimace z odometrie z praveho kola na TIMER1
// Jeden impuls je 31,25mm
#define IRRX !input(PIN_B0) // Vstup INT, generuje preruseni pri prekazce
#define IRTX PIN_B3 // Modulovani vysilaci IR LED na detekci prekazky
#define PROXIMITY PIN_C7 // Cidlo kratkeho dosahu na cihlu
#define BUMPER !input(PIN_A4) // Naraznik
 
#define CASMIN 6 // Rozsah radku snimace
#define CASMAX 192
#define CASAVR ((CASMAX+CASMIN) / 2)
 
#define EEMAX 255 // Konec EEPROM
#define MAXLOG 0x10 // Maximalni pocet zaznamu v logu
#if MAXLOG>(EEMAX/3)
#error Prekrocena velikost EEPROM
#endif
 
#define OFFSETO 0x9F //0x9F // Vystredeni serva pro objeti prekazky
 
#define THR 90 // Threshold pro UV cidla na caru
 
#byte INTCON = 0x0B // Interrupt configuration register
#bit GIE = INTCON.7
#bit PEIE = INTCON.6
#bit TMR0IE = INTCON.5
#bit INT0IE = INTCON.4
#bit RBIE = INTCON.3
#bit TMR0IF = INTCON.2
#bit INT0IF = INTCON.1
#bit RBIF = INTCON.0
 
enum stavy {start,rozjezd,jizda,cihla,pocihle,cil};
stavy stav; // Kde jsme na trati
int8 cas; // Cas hrany bila/cerna v radce
int8 stred; // Vystredeni kolecka
int16 odocounter; // Zaznamenani aktualniho stavu pocitadla odometrie
int16 last_log_odo; // Posledni stav odometrie poznamenany do logu
int16 last_log; // Cislo posledniho zaznamu v logu v EEPROM
int8 bb_h[MAXLOG]; // Cerna skrinka MSB
int8 bb_l[MAXLOG]; // Cerna skrinka LSB
int8 bb_f[MAXLOG]; // Cerna skrinka priznak (typ zaznamu)
int8 log; // Pocitadlo pro cernou skrinku
int8 rr; // Promenna na ulozeni Rozumne rychlost
int8 rrold;
int16 odo_preruseni, odo_cihla, odo_tunel; // Problemy na trati
int16 odo_problem1, odo_problem2, odo_problem3; // Problemy na trati
 
// Zobrazeni jednoho byte na modulu LEDbar
inline void disp(int8 x)
{
int n;
 
for(n=0;n<=7;n++)
{
if (bit_test(x,0)) output_low(DATA); else output_high(DATA);
output_high(CP);
x>>=1;
output_low(CP);
}
}
 
// Blikani LEDbarem ve stilu Night Rider
void NightRider(int8 x)
{
int n,i,j;
 
for(j=0;j<x;j++)
{
i=0x01;
for(n=0;n<7;n++)
{
disp(i);
rotate_left(&i, 1);
delay_ms(40);
}
for(n=0;n<7;n++)
{
disp(i);
rotate_right(&i, 1);
delay_ms(40);
}
}
disp(i);
delay_ms(40);
i=0;
disp(i);
}
 
// Zaznam LOGu do EEPROM
void SaveLog()
{
int8 n,i,xlog;
 
i=0;
for(n=0;n<=(log*3);n+=3) // Ulozeni Black Boxu do EEPROM
{
write_eeprom(n,bb_f[i]);
write_eeprom(n+1,bb_h[i]);
write_eeprom(n+2,bb_l[i]);
i++;
};
if(log>0) {xlog=log-1;} else {xlog=0;};
write_eeprom(EEMAX,xlog); // Zapis poctu zaznamu na konec EEPROM
}
 
// Zaznam do Logu do RAM
void LogLog(int8 reason, int16 log_delay)
{
int16 timer_pom;
 
timer_pom=get_timer1(); // Timer se musi vycist atomicky
bb_l[log]=make8(timer_pom,0); // Zaznam
bb_h[log]=make8(timer_pom,1);
bb_f[log]=reason; // Typ zaznamu
if(log<(MAXLOG-1)) log++; // Ukazatel na dalsi zaznam
last_log_odo=timer_pom+log_delay; // Dalsi mereni nejdrive po ujeti def. vzdalenosti
rr=rrold; // Problem skoncil, znovu jed Rozumnou Rychlosti
}
 
void ReadBlackBox()
{
last_log=read_eeprom(EEMAX); // Kolik zaznamu mame od minule poznamenano?
{
int8 n,i;
 
i=0;
for(n=0;n<=last_log;n++)
{
if(read_eeprom(i)==0) odo_tunel=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
if(read_eeprom(i)==0xFF) odo_cihla=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
if((read_eeprom(i)>0) && (read_eeprom(i)<0xFF)) odo_preruseni=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
}
}
}
 
 
// Brzdeni motorama stridou 1:1
void brzda()
{
int8 n,i;
 
set_pwm1_duty(0); // vypni PWM
set_pwm2_duty(0);
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_OFF);
for (n=0;n<200;n++)
{
output_low(MOT_L);
output_low(MOT_R);
output_high(MOT_1);
output_high(MOT_2);
delay_us(200);
output_high(MOT_L);
output_high(MOT_R);
output_low(MOT_1);
output_low(MOT_2);
delay_us(200);
}
output_low(MOT_L); // smer vpred
output_low(MOT_R);
setup_ccp1(CCP_PWM); // RC1 // Zapni PWM pro motory
setup_ccp2(CCP_PWM); // RC2
}
 
void SetServo(int8 angle)
{
int8 n;
 
for(n=0; n<10; n++)
{
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(angle);
delay_us(angle);
output_low(SERVO);
delay_ms(18);
}
}
 
inline void SetServoQ(int8 angle)
{
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(angle);
delay_us(angle);
output_low(SERVO);
}
 
// Couvni po narazu na naraznik
inline void bum()
{
set_pwm1_duty(0); // couvni, rovne dozadu
set_pwm2_duty(0);
output_high(MOT_L);
output_high(MOT_R);
disp(0xA5);
SetServo(CASAVR-CASMIN);
}
 
#include ".\diag.c"
 
//---------------------------- INT --------------------------------
#int_EXT
EXT_isr() // Preruseni od prekazky
{
unsigned int8 bearing, bearing_offset, delta_bearing;
 
set_pwm1_duty(0); // zabrzdi levym kolem, prave vypni
set_pwm2_duty(0);
output_high(MOT_L);
output_low(MOT_R);
// Ujistime se, ze prijaty signal je z naseho IR vysilace
output_high(IRTX); // Vypni LED na detekci prekazky
delay_ms(2);
if (IRRX) // stale nas signal?
{
output_low(MOT_L); // je odraz -> vpred
output_low(MOT_R);
return;
};
output_low(IRTX); // Zapni LED na detekci prekazky
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1); // 0-255 (odpovida 0-359)
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
bearing_offset=i2c_read(0); // Poznamenej hodnotu pred cihlou
i2c_stop();
 
delay_ms(9);
if (!IRRX) // stale nas signal?
{
output_low(MOT_L); // neni odraz -> vpred
output_low(MOT_R);
return;
};
 
rr=rrold; // Po cihle se pojede opet Rozumnou Rychlosti
if(stav!=cihla)
{
LogLog(0xFF,3); // Cihla
};
 
//!!! if(stav==cihla) while(true); // Zastav na furt, konec drahy
// if(stav==cihla) return; // Po druhe nic neobjizdej
// Pozor na rozjezd
 
if((stav==jizda)||(stav==cihla)) // Objed cihlu
{
#include ".\objizdka_L.c"
};
last_log_odo=get_timer1()+16; // Pul metru po cihle nezaznamenavej do LOGu
}
 
 
//---------------------------------- MAIN --------------------------------------
void main()
{
int8 offset; // Promena pro ulozeni offsetu
int8 r1; // Rychlost motoru 1
int8 r2; // Rychlost motoru 2
int16 ble;
 
setup_adc_ports(ALL_ANALOG); // Zapnuti A/D prevodniku pro cteni kroutitek
setup_adc(ADC_CLOCK_INTERNAL);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // Casovac pro mereni casu hrany W/B v radce
setup_timer_1(T1_EXTERNAL); // Cita pulzy z odometrie z praveho kola
setup_timer_2(T2_DIV_BY_16,255,1); // Casovac PWM motoru
//!!! setup_timer_2(T2_DIV_BY_4,255,1); // Casovac PWM motoru
setup_ccp1(CCP_PWM); // RC1 // PWM pro motory
setup_ccp2(CCP_PWM); // RC2
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
 
set_tris_c(0b11111001); // Nastaveni vstup/vystup pro branu C, protoze se to nedela automaticky
 
set_pwm1_duty(0); // Zastav motory
set_pwm2_duty(0);
output_low(MOT_L); // Nastav smer vpred
output_low(MOT_R);
 
disp(0); // Zhasni LEDbar
 
if(BUMPER) // Kdyz nekdo na zacatku drzi naraznik, vymaz log a spust diagnostiku
{
diag();
}
 
output_low(IRTX); // Zapni LED na detekci prekazky
 
NightRider(1); // Zablikej, aby se poznalo, ze byl RESET
// Zaroven se musi pockat, nez se rozjede kamera, nez se do ni zacnou posilat prikazy
 
//... Nastaveni sonaru ...
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x02); // dosah
i2c_write(0x03); // n*43mm
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x01); // zesileni
i2c_write(0x01); // male, pro eliminaci echa z minuleho mereni
i2c_stop();
 
//... Nastaveni kamery ...
i2c_start(); // Soft RESET kamery
i2c_write(CAMERA_ADR); // Adresa kamery
i2c_write(0x12); // Adresa registru COMH
i2c_write(0x80 | 0x24); // Zapis ridiciho slova
i2c_stop();
 
i2c_start(); // BW
i2c_write(CAMERA_ADR);
i2c_write(0x28);
i2c_write(0b01000001);
i2c_stop();
 
/*
i2c_start(); // Contrast (nema podstatny vliv na obraz)
i2c_write(CAMERA_ADR);
i2c_write(0x05);
i2c_write(0xA0); // 48h
i2c_stop();
 
i2c_start(); // Band Filter (pokud by byl problem se zarivkama 50Hz)
i2c_write(CAMERA_ADR);
i2c_write(0x2D);
i2c_write(0x04 | 0x03);
i2c_stop();
*/
 
i2c_start(); // Fame Rate
i2c_write(CAMERA_ADR);
i2c_write(0x2B);
i2c_write(0x00); // cca 17ms (puvodni hodnota 5Eh = 20ms)
i2c_stop();
 
i2c_start(); // VSTRT
i2c_write(CAMERA_ADR);
i2c_write(0x19);
i2c_write(118); // prostredni radka
i2c_stop();
 
i2c_start(); // VEND
i2c_write(CAMERA_ADR);
i2c_write(0x1A);
i2c_write(118);
i2c_stop();
 
NightRider(1); // Musi se dat cas kamere na AGC a AEC
 
{ // Mereni expozice
int8 t1,t2;
 
i2c_start(); // Brightness, zacni od uplne tmy
i2c_write(CAMERA_ADR);
i2c_write(0x06);
i2c_write(0); // 80h default
i2c_stop();
delay_ms(50);
 
for(offset=0x04;offset<(255-0x04);offset+=0x04) // Zacni od jasu 10h
{
i2c_start(); // Brightness
i2c_write(CAMERA_ADR);
i2c_write(0x06);
i2c_write(offset); // 80h default
i2c_stop();
disp(offset);
delay_ms(50);
 
t1=0;
t2=0;
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z radky
delay_ms(5);
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z radky
set_timer0(0); // Vynuluj pocitadlo casu
if(!input(PIX)) continue;
while(input(PIX));
t1=get_timer0(); // Precti cas z citace casu hrany
set_timer0(0); // Vynuluj pocitadlo casu
while(!input(PIX));
t2=get_timer0();
 
if((t1>60) && (t1<140) && (t2>5) && (t2<=10)) break; // Vidis, co mas?
 
delay_ms(2); // Preskoc druhou radku z kamery
};
delay_ms(1000); // Nech chvili na displayi zmerenou hodnotu
}
 
set_adc_channel(CERVENA); // --- Kroutitko pro jas ---
delay_ms(1);
offset=read_adc();
offset &= 0b11111100; // Dva nejnizsi bity ignoruj
// offset += 0x70; // Jas nebude nikdy nizsi
disp(offset);
i2c_start(); // Brightness
i2c_write(CAMERA_adr);
i2c_write(0x06);
i2c_write(offset); // 80h default
i2c_stop();
delay_ms(1000); // Nech hodnotu chvili na displayi
 
set_adc_channel(ZELENA); // --- Kroutitko pro vykon motoru ---
delay_ms(1);
rr=read_adc()>>2; // 0-63 // Pokud by se zvetsil rozsah, tak zkontrolovat jakonasobeni!
rr+=27; // 27-90
//!!! rr=read_adc()>>1; // 0-128 // Pokud by se zvetsil rozsah, tak zkontrolovat jakonasobeni!
rrold=rr;
 
cas=CASAVR-CASMIN; // Inicializace promenych, aby neslo servo za roh
// a aby se to rozjelo jeste dneska
stav=start; // Jsme na startu
set_timer1(0); // Vynuluj citac odometrie
log=0; // Zacatek logu v cerne skrince
last_log_odo=0; // Posledni zaznam odometrie do logu
 
ReadBlackBox(); // Vycteni zaznamu z Black Boxu
 
odo_problem1=ODODO_PROBLEM1-BRZDNA_DRAHA;
odo_problem2=ODODO_PROBLEM2-BRZDNA_DRAHA;
odo_problem3=ODODO_PROBLEM3-BRZDNA_DRAHA;
 
// ........................... Hlavni smycka ................................
while(true)
{
int8 pom;
int8 n;
int8 gap;
int16 ododo;
 
gap=0; // Vynuluj pocitadlo preruseni
 
next_snap:
 
pom=0;
disable_interrupts(GLOBAL); //----------------------- Critical Section
while(input(HREF)); // Preskoc 1. radku
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z 2. radky
set_timer0(0); // Vynuluj pocitadlo casu
while(input(HREF)) // Po dobu vysilani radky cekej na hranu W/B
{
// !!!!Dodelat rozpoznani cerne cary napric pro zastaveni ?
if(!input(PIX)) // Pokud se X-krat za sebou precetla CERNA
if(!input(PIX))
// if(!input(PIX))
{
pom=get_timer0(); // Precti cas z citace casu hrany
break;
};
};
while(input(HREF)); // Pockej na shozeni signalu HREF
 
if((pom<CASMAX) && (pom>CASMIN)) cas=pom; // Orizni konce radku
// Na konci obrazovaho radku to blbne. Jednak chyba od apertury
// a vubec to nejak na kraji nefunguje.
 
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(cas);
delay_us(cas);
output_low(SERVO);
 
// Elektronicky diferencial 1. cast
if(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimace
if(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoru
if(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92
 
enable_interrupts(GLOBAL); //----------------------- End Critical Section
 
if(pom==0) // Kamera nevidi caru
{
if((cas>(CASMIN+15))&&(cas<(CASMAX-15))) // Nebyla minule cara moc u kraje?
{
gap++;
if(gap>=3) // Trva preruseni cary alespon 2 snimky?
{
cas=CASAVR-CASMIN;
// disp(0xAA);
}
}
}
else
{
gap=0;
};
 
 
/*
if(pom==0) // Kamera nevidi caru, poznamenej to do logu
{
if((cas>(CASMIN+30))&&(cas<(CASMAX-30))) // Nebyla minule cara moc u kraje?
if(last_log_odo<get_timer1()) // Aby nebyly zaznamy v logu prilis huste, musi se napred neco ujet od minuleho zaznamu
{
gap++;
}
}
else
{
if(gap>=4) // Trva preruseni cary alespon 2 snimky?
{
LogLog(gap,8); // Dalsi mereni nejdrive po ujeti 24 cm
rr=rrold; // Preruseni cary skoncilo, znovu jed Rozumnou Rychlosti
cas=CASAVR-CASMIN;
disp(0xAA);
}
gap=0;
};
 
if(!input(PROXIMITY) && ((stav==jizda)||(stav==cihla))) // Tunel
{
if(last_log_odo<get_timer1()) // Aby nebyly zaznamy v logu prilis huste, musi se napred neco ujet od minuleho zaznamu
{
LogLog(0xDD,16); // Priznak tunelu; dalsi mereni nejdrive po ujeti 48 cm
rr=rrold; // Vjeli jsme do tunelu, znovu jed rychle
}
};
*/
 
//ODODO
ododo=get_timer1();
if((ododo>odo_preruseni)&&(ododo<(odo_preruseni+8))) rr=RR_PRERUSENI;
if((ododo>odo_cihla)&&(ododo<(odo_cihla+8))) rr=RR_PRERUSENI;
if((ododo>odo_tunel)&&(ododo<(odo_tunel+8))) rr=RR_PRERUSENI;
if((ododo>odo_problem1)&&(ododo<(odo_problem1+8))) rr=RR_PRERUSENI;
if((ododo>odo_problem2)&&(ododo<(odo_problem2+8))) rr=RR_PRERUSENI;
if((ododo>odo_problem3)&&(ododo<(odo_problem3+8))) rr=RR_PRERUSENI;
 
// Elektronicky diferencial 2. cast
if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeni
if (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN); // rozsah 1 az 92 pro rr=0 // rozsah 1 az 154 pro rr=63
 
//!!! pro zatuhle prevodovky
// r1<<=1; // Rychlost je dvojnasobna
// r2<<=1; // Rozsah 2 az 184 pro rr=0
 
if ((stav==jizda)||(stav==cihla)||(stav==rozjezd)) //||(stav==pocihle)) // Jizda
{
set_pwm1_duty(r1);
set_pwm2_duty(r2);
}
else
{
set_pwm1_duty(0); // Zastaveni
set_pwm2_duty(0);
};
 
if((stav==rozjezd)&&(get_timer1()>10)) // musi ujet alespon 31cm
{
ext_int_edge(H_TO_L); // Nastav podminky preruseni od cihly
INT0IF=0; // Zruseni predesle udalosti od startera
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
stav=jizda;
};
 
if(stav==start) // Snimkuje, toci servem a ceka na start
{
set_adc_channel(MODRA); // Kroutitko na vystredeni predniho kolecka
Delay_ms(1);
stred=read_adc();
if(!input(PROXIMITY))
{
disp(0x80);
while(input(PROXIMITY)); // Cekej, dokud starter neda ruku pryc
set_timer1(0); // Vynuluj citac odometrie
set_pwm1_duty(255); // Rychly rozjezd !!! Zkontrolovat na oscyloskopu
set_pwm2_duty(255);
disp(0x01);
while(get_timer1()<=4) // Ujed alespon 12cm
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(40);
if(read_adc()<THR) {cas=CASMIN; break;}; // Prejeli jsme caru vlevo
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(40);
if(read_adc()<THR) {cas=CASMAX; break;}; // Prejeli jsme caru vpravo
cas=CASAVR-CASMIN; // Cara je rovne
};
stav=rozjezd;
};
}
 
pom=0x80; // Zobrazeni pozice cary na displayi
for(n=CASMAX/8; n<cas; n+=CASMAX/8) pom>>=1;
disp(pom);
 
while(true) // Ve zbytku casu snimku cti krajni UV senzory a naraznik
{
if(BUMPER) // Sakra, do neceho jsme narazili a nevideli jsme to!
{
bum();
SaveLog(); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
set_pwm1_duty(200); // pomalu vpred
set_pwm2_duty(200);
output_low(MOT_L);
output_low(MOT_R);
cas=CASAVR-CASMIN;
};
set_adc_channel(LMAX); // Levy UV sensor
for(n=0;n<20;n++) if(input(HREF)) goto next_snap;
if(read_adc()<THR) cas=CASMIN;
set_adc_channel(RMAX); // Pravy UV sensor
for(n=0;n<20;n++) if(input(HREF)) goto next_snap;
if(read_adc()<THR) cas=CASMAX;
};
}
}
Property changes:
Added: svn:keywords
+Id Rev
\ No newline at end of property
/roboti/istrobot/camerus/SW/876/jiny_zapis_do_eeprom/camerus.c
0,0 → 1,634
//********* Robot Camerus pro IstRobot 2007 ************
//"$Id: camerus.c 253 2007-04-24 09:26:46Z kakl $"
//*****************************************************
 
#include ".\camerus.h"
 
#USE FAST_IO (C) // Brana C je ve FAST_IO modu, aby slo rychle cist z kamery
 
// Rychlostni konstanty
#define RR_CIHLA 50 // Rozumna rychlost pro objizdeni cihly
#define RR_PRERUSENI 50 // Rozumna rychlost pro priblizeni se k preruseni
#define BRZDNA_DRAHA 0x20 // Jak daleko pred problemem se zacne brzdit
#define TUHOS 100 // Jak dlouho se bude couvat po narazu na naraznik
#define ODODO_CIHLA 0xFFF
#define ODODO_TUNEL 0xFFF
#define ODODO_PRERUSENI 0xFFF
 
// Adresy IIC periferii
#define COMPAS_ADR 0xC0
#define CAMERA_ADR 0xDC
#define SONAR_ADR 0xE0
 
// A/D vstupy
#define RMAX 4 // AN4/RA5 - leve cidlo na vyjeti z cary
#define LMAX 3 // AN3/RA3 - prave cidlo na vyjeti z cary
#define CERVENA 2 // AN2/RA2 - cervene kroutitko
#define ZELENA 1 // AN1/RA0 - zelene kroutitko
#define MODRA 0 // AN0/RA1 - modre kroutitko
 
// I/O
#define HREF PIN_C5 // Signal HREF z kamery (v H po celou dobu radku)
#define PIX PIN_C6 // Vstup pro body z kamery (za trivstupim hradlem OR (dig. komparator))
#define SERVO PIN_B4 // Vystup na servo (1 az 2ms po cca 20ms (synchronizovano snimkovym kmitoctem))
#define MOT_L PIN_B5 // Smer otaceni leveho motoru; druhy pol je RC2
#define MOT_R PIN_B6 // Smer otaceni praveho motoru; druhy pol je RC1
#define MOT_1 PIN_C1 // PWM vystpy motoru
#define MOT_2 PIN_C2 //
#define DATA PIN_B2 // K modulu LEDbar data
#define CP PIN_B1 // K modulu LEDbar hodiny
//#define ODO PIN_C0 // Ze snimace z odometrie z praveho kola na TIMER1
// Jeden impuls je 31,25mm
#define IRRX !input(PIN_B0) // Vstup INT, generuje preruseni pri prekazce
#define IRTX PIN_B3 // Modulovani vysilaci IR LED na detekci prekazky
#define PROXIMITY PIN_C7 // Cidlo kratkeho dosahu na cihlu
#define BUMPER !input(PIN_A4) // Naraznik
 
#define CASMIN 6 // Rozsah radku snimace
#define CASMAX 192
#define CASAVR ((CASMAX+CASMIN) / 2)
 
#define EEMAX 255 // Konec EEPROM
#define MAXLOG 0x10 // Maximalni pocet zaznamu v logu
#if MAXLOG>(EEMAX/3)
#error Prekrocena velikost EEPROM
#endif
 
#define OFFSETO 0x9F //0x9F // Vystredeni serva pro objeti prekazky
 
#define THR 90 // Threshold pro UV cidla na caru
 
#byte INTCON = 0x0B // Interrupt configuration register
#bit GIE = INTCON.7
#bit PEIE = INTCON.6
#bit TMR0IE = INTCON.5
#bit INT0IE = INTCON.4
#bit RBIE = INTCON.3
#bit TMR0IF = INTCON.2
#bit INT0IF = INTCON.1
#bit RBIF = INTCON.0
 
enum stavy {start,rozjezd,jizda,cihla,pocihle,cil};
stavy stav; // Kde jsme na trati
int8 cas; // Cas hrany bila/cerna v radce
int8 stred; // Vystredeni kolecka
int16 odocounter; // Zaznamenani aktualniho stavu pocitadla odometrie
int16 last_log_odo; // Posledni stav odometrie poznamenany do logu
int16 last_log; // Cislo posledniho zaznamu v logu v EEPROM
int8 bb_h[MAXLOG]; // Cerna skrinka MSB
int8 bb_l[MAXLOG]; // Cerna skrinka LSB
int8 bb_f[MAXLOG]; // Cerna skrinka priznak (typ zaznamu)
int8 log; // Pocitadlo pro cernou skrinku
int8 rr; // Promenna na ulozeni Rozumne rychlost
int8 rrold;
int16 odo_preruseni, odo_cihla, odo_tunel; // Problemy na trati
 
// Zobrazeni jednoho byte na modulu LEDbar
inline void disp(int8 x)
{
int n;
 
for(n=0;n<=7;n++)
{
if (bit_test(x,0)) output_low(DATA); else output_high(DATA);
output_high(CP);
x>>=1;
output_low(CP);
}
}
 
// Blikani LEDbarem ve stilu Night Rider
void NightRider(int8 x)
{
int n,i,j;
 
for(j=0;j<x;j++)
{
i=0x01;
for(n=0;n<7;n++)
{
disp(i);
rotate_left(&i, 1);
delay_ms(40);
}
for(n=0;n<7;n++)
{
disp(i);
rotate_right(&i, 1);
delay_ms(40);
}
}
disp(i);
delay_ms(40);
i=0;
disp(i);
}
 
// Zaznam LOGu do EEPROM
void SaveLog()
{
int8 n,i,xlog;
 
i=0;
for(n=0;n<=(log*3);n+=3) // Ulozeni Black Boxu do EEPROM
{
write_eeprom(n,bb_f[i]);
write_eeprom(n+1,bb_h[i]);
write_eeprom(n+2,bb_l[i]);
i++;
};
if(log>0) {xlog=log-1;} else {xlog=0;};
write_eeprom(EEMAX,xlog); // Zapis poctu zaznamu na konec EEPROM
}
 
// Zaznam do Logu do RAM
void LogLog(int8 reason, int16 log_delay)
{
int16 timer_pom;
 
timer_pom=get_timer1(); // Timer se musi vycist atomicky
bb_l[log]=make8(timer_pom,0); // Zaznam
bb_h[log]=make8(timer_pom,1);
bb_f[log]=reason; // Typ zaznamu
if(log<(MAXLOG-1)) log++; // Ukazatel na dalsi zaznam
last_log_odo=timer_pom+log_delay; // Dalsi mereni nejdrive po ujeti def. vzdalenosti
rr=rrold; // Problem skoncil, znovu jed Rozumnou Rychlosti
}
 
void ReadBlackBox()
{
last_log=read_eeprom(EEMAX); // Kolik zaznamu mame od minule poznamenano?
{
int8 n,i;
 
i=0;
for(n=0;n<=last_log;n++)
{
if(read_eeprom(i)==0) odo_tunel=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
if(read_eeprom(i)==0xFF) odo_cihla=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
if((read_eeprom(i)>0) && (read_eeprom(i)<0xFF)) odo_preruseni=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
}
}
}
 
 
// Brzdeni motorama stridou 1:1
void brzda()
{
int8 n,i;
 
set_pwm1_duty(0); // vypni PWM
set_pwm2_duty(0);
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_OFF);
for (n=0;n<200;n++)
{
output_low(MOT_L);
output_low(MOT_R);
output_high(MOT_1);
output_high(MOT_2);
delay_us(200);
output_high(MOT_L);
output_high(MOT_R);
output_low(MOT_1);
output_low(MOT_2);
delay_us(200);
}
output_low(MOT_L); // smer vpred
output_low(MOT_R);
setup_ccp1(CCP_PWM); // RC1 // Zapni PWM pro motory
setup_ccp2(CCP_PWM); // RC2
}
 
void SetServo(int8 angle)
{
int8 n;
 
for(n=0; n<10; n++)
{
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(angle);
delay_us(angle);
output_low(SERVO);
delay_ms(18);
}
}
 
inline void SetServoQ(int8 angle)
{
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(angle);
delay_us(angle);
output_low(SERVO);
}
 
// Couvni po narazu na naraznik
inline void bum()
{
set_pwm1_duty(0); // couvni, rovne dozadu
set_pwm2_duty(0);
output_high(MOT_L);
output_high(MOT_R);
disp(0xA5);
SetServo(CASAVR-CASMIN);
}
 
#include ".\diag.c"
 
//---------------------------- INT --------------------------------
#int_EXT
EXT_isr() // Preruseni od prekazky
{
unsigned int8 bearing, bearing_offset, delta_bearing;
 
set_pwm1_duty(0); // zabrzdi levym kolem, prave vypni
set_pwm2_duty(0);
output_high(MOT_L);
output_low(MOT_R);
// Ujistime se, ze prijaty signal je z naseho IR vysilace
output_high(IRTX); // Vypni LED na detekci prekazky
delay_ms(2);
if (IRRX) // stale nas signal?
{
output_low(MOT_L); // je odraz -> vpred
output_low(MOT_R);
return;
};
output_low(IRTX); // Zapni LED na detekci prekazky
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1); // 0-255 (odpovida 0-359)
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
bearing_offset=i2c_read(0); // Poznamenej hodnotu pred cihlou
i2c_stop();
 
delay_ms(9);
if (!IRRX) // stale nas signal?
{
output_low(MOT_L); // neni odraz -> vpred
output_low(MOT_R);
return;
};
 
rr=rrold; // Po cihle se pojede opet Rozumnou Rychlosti
if(stav!=cihla)
{
LogLog(0xFF,3); // Cihla
};
 
//!!! if(stav==cihla) while(true); // Zastav na furt, konec drahy
// if(stav==cihla) return; // Po druhe nic neobjizdej
// Pozor na rozjezd
 
if((stav==jizda)||(stav==cihla)) // Objed cihlu
{
#include ".\objizdka_L.c"
};
last_log_odo=get_timer1()+16; // Pul metru po cihle nezaznamenavej do LOGu
}
 
 
//---------------------------------- MAIN --------------------------------------
void main()
{
int8 offset; // Promena pro ulozeni offsetu
int8 r1; // Rychlost motoru 1
int8 r2; // Rychlost motoru 2
 
setup_adc_ports(ALL_ANALOG); // Zapnuti A/D prevodniku pro cteni kroutitek
setup_adc(ADC_CLOCK_INTERNAL);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // Casovac pro mereni casu hrany W/B v radce
setup_timer_1(T1_EXTERNAL); // Cita pulzy z odometrie z praveho kola
setup_timer_2(T2_DIV_BY_16,255,1); // Casovac PWM motoru
//!!! setup_timer_2(T2_DIV_BY_4,255,1); // Casovac PWM motoru
setup_ccp1(CCP_PWM); // RC1 // PWM pro motory
setup_ccp2(CCP_PWM); // RC2
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
 
set_tris_c(0b11111001); // Nastaveni vstup/vystup pro branu C, protoze se to nedela automaticky
 
set_pwm1_duty(0); // Zastav motory
set_pwm2_duty(0);
output_low(MOT_L); // Nastav smer vpred
output_low(MOT_R);
 
disp(0); // Zhasni LEDbar
 
if(BUMPER) // Kdyz nekdo na zacatku drzi naraznik, vymaz log a spust diagnostiku
{
diag();
}
 
output_low(IRTX); // Zapni LED na detekci prekazky
 
NightRider(1); // Zablikej, aby se poznalo, ze byl RESET
// Zaroven se musi pockat, nez se rozjede kamera, nez se do ni zacnou posilat prikazy
 
//... Nastaveni sonaru ...
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x02); // dosah
i2c_write(0x03); // n*43mm
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x01); // zesileni
i2c_write(0x01); // male, pro eliminaci echa z minuleho mereni
i2c_stop();
 
//... Nastaveni kamery ...
i2c_start(); // Soft RESET kamery
i2c_write(CAMERA_ADR); // Adresa kamery
i2c_write(0x12); // Adresa registru COMH
i2c_write(0x80 | 0x24); // Zapis ridiciho slova
i2c_stop();
 
i2c_start(); // BW
i2c_write(CAMERA_ADR);
i2c_write(0x28);
i2c_write(0b01000001);
i2c_stop();
 
/*
i2c_start(); // Contrast (nema podstatny vliv na obraz)
i2c_write(CAMERA_ADR);
i2c_write(0x05);
i2c_write(0xA0); // 48h
i2c_stop();
 
i2c_start(); // Band Filter (pokud by byl problem se zarivkama 50Hz)
i2c_write(CAMERA_ADR);
i2c_write(0x2D);
i2c_write(0x04 | 0x03);
i2c_stop();
*/
 
i2c_start(); // Fame Rate
i2c_write(CAMERA_ADR);
i2c_write(0x2B);
i2c_write(0x00); // cca 17ms (puvodni hodnota 5Eh = 20ms)
i2c_stop();
 
i2c_start(); // VSTRT
i2c_write(CAMERA_ADR);
i2c_write(0x19);
i2c_write(118); // prostredni radka
i2c_stop();
 
i2c_start(); // VEND
i2c_write(CAMERA_ADR);
i2c_write(0x1A);
i2c_write(118);
i2c_stop();
 
NightRider(1); // Musi se dat cas kamere na AGC a AEC
 
{ // Mereni expozice
int8 t1,t2;
 
i2c_start(); // Brightness, zacni od uplne tmy
i2c_write(CAMERA_ADR);
i2c_write(0x06);
i2c_write(0); // 80h default
i2c_stop();
delay_ms(50);
 
for(offset=0x04;offset<(255-0x04);offset+=0x04) // Zacni od jasu 10h
{
i2c_start(); // Brightness
i2c_write(CAMERA_ADR);
i2c_write(0x06);
i2c_write(offset); // 80h default
i2c_stop();
disp(offset);
delay_ms(50);
 
t1=0;
t2=0;
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z radky
delay_ms(5);
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z radky
set_timer0(0); // Vynuluj pocitadlo casu
if(!input(PIX)) continue;
while(input(PIX));
t1=get_timer0(); // Precti cas z citace casu hrany
set_timer0(0); // Vynuluj pocitadlo casu
while(!input(PIX));
t2=get_timer0();
 
if((t1>60) && (t1<140) && (t2>5) && (t2<=10)) break; // Vidis, co mas?
 
delay_ms(2); // Preskoc druhou radku z kamery
};
delay_ms(1000); // Nech chvili na displayi zmerenou hodnotu
}
 
set_adc_channel(CERVENA); // --- Kroutitko pro jas ---
delay_ms(1);
offset=read_adc();
offset &= 0b11111100; // Dva nejnizsi bity ignoruj
// offset += 0x70; // Jas nebude nikdy nizsi
disp(offset);
i2c_start(); // Brightness
i2c_write(CAMERA_adr);
i2c_write(0x06);
i2c_write(offset); // 80h default
i2c_stop();
delay_ms(1000); // Nech hodnotu chvili na displayi
 
set_adc_channel(ZELENA); // --- Kroutitko pro vykon motoru ---
delay_ms(1);
rr=read_adc()>>2; // 0-63 // Pokud by se zvetsil rozsah, tak zkontrolovat jakonasobeni!
rr+=27; // 27-90
//!!! rr=read_adc()>>1; // 0-128 // Pokud by se zvetsil rozsah, tak zkontrolovat jakonasobeni!
rrold=rr;
 
cas=CASAVR-CASMIN; // Inicializace promenych, aby neslo servo za roh
// a aby se to rozjelo jeste dneska
stav=start; // Jsme na startu
set_timer1(0); // Vynuluj citac odometrie
log=0; // Zacatek logu v cerne skrince
last_log_odo=0; // Posledni zaznam odometrie do logu
 
// ReadBlackBox(); // Vycteni zaznamu z Black Boxu
 
odo_cihla=ODODO_CIHLA-BRZDNA_DRAHA;
odo_tunel=ODODO_TUNEL-BRZDNA_DRAHA;
odo_preruseni=ODODO_PRERUSENI-BRZDNA_DRAHA;
 
// ........................... Hlavni smycka ................................
while(true)
{
int8 pom;
int8 n;
int8 gap;
int16 ododo;
 
gap=0; // Vynuluj pocitadlo preruseni
 
next_snap:
 
pom=0;
disable_interrupts(GLOBAL); //----------------------- Critical Section
while(input(HREF)); // Preskoc 1. radku
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z 2. radky
set_timer0(0); // Vynuluj pocitadlo casu
while(input(HREF)) // Po dobu vysilani radky cekej na hranu W/B
{
// !!!!Dodelat rozpoznani cerne cary napric pro zastaveni ?
if(!input(PIX)) // Pokud se X-krat za sebou precetla CERNA
if(!input(PIX))
// if(!input(PIX))
{
pom=get_timer0(); // Precti cas z citace casu hrany
break;
};
};
while(input(HREF)); // Pockej na shozeni signalu HREF
 
if((pom<CASMAX) && (pom>CASMIN)) cas=pom; // Orizni konce radku
// Na konci obrazovaho radku to blbne. Jednak chyba od apertury
// a vubec to nejak na kraji nefunguje.
 
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(cas);
delay_us(cas);
output_low(SERVO);
 
// Elektronicky diferencial 1. cast
if(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimace
if(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoru
if(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92
 
enable_interrupts(GLOBAL); //----------------------- End Critical Section
 
if(pom==0) // Kamera nevidi caru, poznamenej to do logu
{
if((cas>(CASMIN+30))&&(cas<(CASMAX-30))) // Nebyla minule cara moc u kraje?
if(last_log_odo<get_timer1()) // Aby nebyly zaznamy v logu prilis huste, musi se napred neco ujet od minuleho zaznamu
{
gap++;
}
}
else
{
if(gap>=2) // Trva preruseni cary alespon 2 snimky?
{
LogLog(gap,8); // Dalsi mereni nejdrive po ujeti 24 cm
rr=rrold; // Preruseni cary skoncilo, znovu jed Rozumnou Rychlosti
}
gap=0;
};
 
if(!input(PROXIMITY) && ((stav==jizda)||(stav==cihla))) // Tunel
{
if(last_log_odo<get_timer1()) // Aby nebyly zaznamy v logu prilis huste, musi se napred neco ujet od minuleho zaznamu
{
LogLog(0xDD,16); // Priznak tunelu; dalsi mereni nejdrive po ujeti 48 cm
rr=rrold; // Vjeli jsme do tunelu, znovu jed rychle
}
};
 
//ODODO
ododo=get_timer1();
if((ododo>odo_preruseni)&&(ododo<(odo_preruseni+8))) rr=RR_PRERUSENI;
if((ododo>odo_cihla)&&(ododo<(odo_cihla+8))) rr=RR_PRERUSENI;
if((ododo>odo_tunel)&&(ododo<(odo_tunel+8))) rr=RR_PRERUSENI;
 
// Elektronicky diferencial 2. cast
if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeni
if (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN); // rozsah 1 az 92 pro rr=0 // rozsah 1 az 154 pro rr=63
 
//!!! pro zatuhle prevodovky
// r1<<=1; // Rychlost je dvojnasobna
// r2<<=1; // Rozsah 2 az 184 pro rr=0
 
if ((stav==jizda)||(stav==cihla)||(stav==rozjezd)) //||(stav==pocihle)) // Jizda
{
set_pwm1_duty(r1);
set_pwm2_duty(r2);
}
else
{
set_pwm1_duty(0); // Zastaveni
set_pwm2_duty(0);
};
 
if((stav==rozjezd)&&(get_timer1()>10)) // musi ujet alespon 31cm
{
ext_int_edge(H_TO_L); // Nastav podminky preruseni od cihly
INT0IF=0; // Zruseni predesle udalosti od startera
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
stav=jizda;
};
 
if(stav==start) // Snimkuje, toci servem a ceka na start
{
set_adc_channel(MODRA); // Kroutitko na vystredeni predniho kolecka
Delay_ms(1);
stred=read_adc();
if(!input(PROXIMITY))
{
disp(0x80);
while(input(PROXIMITY)); // Cekej, dokud starter neda ruku pryc
set_timer1(0); // Vynuluj citac odometrie
set_pwm1_duty(255); // Rychly rozjezd !!! Zkontrolovat na oscyloskopu
set_pwm2_duty(255);
disp(0x01);
while(get_timer1()<=4) // Ujed alespon 12cm
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(40);
if(read_adc()<THR) {cas=CASMIN; break;}; // Prejeli jsme caru vlevo
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(40);
if(read_adc()<THR) {cas=CASMAX; break;}; // Prejeli jsme caru vpravo
cas=CASAVR-CASMIN; // Cara je rovne
};
stav=rozjezd;
};
}
 
pom=0x80; // Zobrazeni pozice cary na displayi
for(n=CASMAX/8; n<cas; n+=CASMAX/8) pom>>=1;
disp(pom);
 
while(true) // Ve zbytku casu snimku cti krajni UV senzory a naraznik
{
if(BUMPER) // Sakra, do neceho jsme narazili a nevideli jsme to!
{
bum();
SaveLog(); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
set_pwm1_duty(200); // pomalu vpred
set_pwm2_duty(200);
output_low(MOT_L);
output_low(MOT_R);
cas=CASAVR-CASMIN;
};
set_adc_channel(LMAX); // Levy UV sensor
for(n=0;n<20;n++) if(input(HREF)) goto next_snap;
if(read_adc()<THR) cas=CASMIN;
set_adc_channel(RMAX); // Pravy UV sensor
for(n=0;n<20;n++) if(input(HREF)) goto next_snap;
if(read_adc()<THR) cas=CASMAX;
};
}
}
/roboti/istrobot/camerus/SW/876/jiny_zapis_do_eeprom/diag.c
0,0 → 1,68
//--- Diagnostika cidel a vymazani EEPROM ---
void diag()
{
int8 n;
 
// Vymaz Black Box v EEPROM
for(n=0;n<255;n++) write_eeprom(n,0);
bb_l[0]=0; // Zapis na pozici 0 vzdalenost 0
bb_h[0]=0;
bb_f[0]=0;
write_eeprom(EEMAX,0); // Zapis do EEPROM pocet zaznamu 0, tedy jeden zaznam
for(n=0;n<=4;n++)
{
disp(0x55); // Blikni pro potvrzeni
delay_ms(200);
disp(0xAA);
delay_ms(200);
};
 
while(true)
{
if(!IRRX)
{
int8 ble;
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1);
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
ble=i2c_read(0);
i2c_stop();
disp(ble);
delay_ms(200);
}
else
{
i2c_start(); // Diagnostika sonaru
i2c_write(SONAR_ADR);
i2c_write(0x02); // dosah
i2c_write(0x03); // n*43mm
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x01); // zesileni
i2c_write(0x01); // male, pro eliminaci echa z minuleho mereni
i2c_stop();
 
i2c_start(); // Sonar Ping
i2c_write(0xE0);
i2c_write(0x0);
i2c_write(0x51); // 50 mereni v palcich, 51 mereni v cm, 52 v us
i2c_stop();
delay_ms(100);
i2c_start(); // Odraz ze sonaru
i2c_write(0xE0);
i2c_write(0x3);
i2c_stop();
i2c_start();
i2c_write(0xE1);
n=i2c_read(0);
i2c_stop();
disp(n); // Zobrazeni hodnoty ze sonaru a zaroven diagnostika predniho IR cidla
delay_ms(200);
}
}
}
/roboti/istrobot/camerus/SW/876/jiny_zapis_do_eeprom/objizdka_L.c
0,0 → 1,183
// **** Objeti cihly vlevo **** LLLL
 
#define L_TOUCH 1 // Cara vlevo
#define R_TOUCH 2 // Cata vpravo
#define B_TOUCH 3 // Both
 
int8 n;
int8 r1,r2,rr;
int8 touch;
enum okolo_cihly {pred_carou,na_care,po_care};
okolo_cihly ridic; // V jakem jsme stavu objizdeni cihly
int8 vzdalenost;
int8 visualisation;
 
stav=cihla; // Dalsi prekazku uz nezaznamenavej (je to s velkou pravdepodobnosti cil)
odocounter=get_timer1();
 
cihla:
 
rr=RR_CIHLA; //!!! Rozumna rychlost pro objizdeni cihly (bylo by lepsi rychlost zvysovat) a pri detekci pohybu zase snizit
disp(0x99);
set_pwm1_duty(0); // zabrzdi levym kolem, prave vpred
set_pwm2_duty(255);
output_high(MOT_L);
output_low(MOT_R);
while(true) // Na zacatku se vyhni cihle, zatoc co muzes
{
cas=CASMIN-5; // jeste vic nez hodne do leva
 
if(BUMPER) // Narazili jsme do cihly, musime couvnout!
{
bum();
SaveLog(); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
brzda();
goto cihla; // Znovu zacni cihlu objizdet
};
 
set_pwm1_duty(0);
set_pwm2_duty(200); // !!! mozna prilis maly vykon pro rozjezd pro zatuhlou prevodovku
output_high(MOT_L); // leve kolo reverz
output_low(MOT_R); // prave kolo vpred
if(get_timer1()>(odocounter+5)) // konec zatacky?
{
disp(0x66);
break;
}
SetServoQ(cas);
delay_ms(18);
};
 
//------ Objeti cihly v konstantni vzdalenosti ------
touch=0; // Indikator detekce cary pri objizdeni
ridic=pred_carou;
cas=CASAVR-CASMIN; // rovne
output_low(MOT_L); // vpred
output_low(MOT_R);
visualisation=0;
while(true)
{
if(BUMPER) // Narazili jsme do cihly, musime couvnout!
{
bum();
SaveLog(); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
set_pwm1_duty(160); // vpred
set_pwm2_duty(160);
output_low(MOT_L);
output_low(MOT_R);
cas=CASMIN;
};
 
delta_bearing=bearing-bearing_offset;
visualisation=(delta_bearing & 0xF0) | (visualisation & 0x0F);
if(IRRX) // hrozi celni srazka s cihlou v prubehu objizdeni
{
cas=CASMIN;
}
else
{
if((vzdalenost!=0)||!input(PROXIMITY)||((delta_bearing>60)&&(delta_bearing<128))) // Udrzovani konstantni vzdalenosti od cihly
{
if(cas>(CASMIN+30)) cas-=30;
}
else
{
if(cas<(CASMAX-30)) cas+=30;
};
};
// Elektronicky diferencial
if(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimace
if(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoru
if(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92
 
if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeni
if (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN);
 
//!!! pro zatuhle prevodovky
// r1<<=1; // Rychlost je dvojnasobna
// r2<<=1; // Rozsah 2 az 184 pro rr=0
 
set_pwm1_duty(r1); // Nastav rychlost motoru
set_pwm2_duty(r2);
 
SetServoQ(cas);
 
i2c_start(); // Sonar Ping
i2c_write(SONAR_ADR);
i2c_write(0x0);
i2c_write(0x52); // mereni v us
i2c_stop();
 
for(n=1;n<=90;n++) // 18ms testovani cary do dalsi korekce serva
{
set_adc_channel(LMAX);
delay_us(100);
if(read_adc()<THR) touch|=L_TOUCH;
set_adc_channel(RMAX);
delay_us(100);
if(read_adc()<THR) touch|=R_TOUCH;
};
 
i2c_start(); // Odraz ze sonaru
i2c_write(SONAR_ADR);
i2c_write(0x3);
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR+1);
vzdalenost=i2c_read(0);
i2c_stop();
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1); // uhel 0-255
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
bearing=i2c_read(0);
i2c_stop();
 
if(touch==L_TOUCH) visualisation|=0x2;
if(touch==R_TOUCH) visualisation|=0x1;
if((touch==B_TOUCH)&&(ridic==pred_carou)) ridic=na_care;
if((ridic==na_care)&&(touch==0)) break;
if(ridic==na_care) touch=0;
disp(visualisation);
};
disp(0xC3);
 
set_pwm1_duty(0); //!!! pred zatuhlejma prevodovkama tam bylo 20 a 200
set_pwm2_duty(240);
output_high(MOT_L);
output_low(MOT_R);
delay_us(40);
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie
while (true) // Znovu se musime dotknout cary
{
for(n=1;n<=90;n++) // 18ms testovani cary do dalsi korekce serva
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(100);
if(read_adc()<THR) // Dotkli jsme se levym senzorem
{
disp(0xE0);
cas=CASAVR-CASMIN; // nastavime, ze cara je rovne
goto cara;
};
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(100);
if((get_timer1()>=(odocounter+2)) && (read_adc()<THR)) // Pravym senzorem nesmime caru prejet!
{
disp(0x07);
cas=CASMAX; // kdyz prejedem, tak nastavime, ze cara je vpravo
goto cara;
};
}
SetServoQ(CASMIN-5); // max. max. doleva L
}
 
cara:
 
output_low(MOT_L); // oba motory vpred
output_low(MOT_R);
/roboti/istrobot/camerus/SW/876/pred_finale/camerus.c
0,0 → 1,657
//********* Robot Camerus pro IstRobot 2007 ************
//"$Id: camerus.c 253 2007-04-24 09:26:46Z kakl $"
//*****************************************************
 
#include ".\camerus.h"
 
#USE FAST_IO (C) // Brana C je ve FAST_IO modu, aby slo rychle cist z kamery
 
// Rychlostni konstanty
#define RR_CIHLA 50 // Rozumna rychlost pro objizdeni cihly
#define RR_PRERUSENI 50 // Rozumna rychlost pro priblizeni se k preruseni
#define BRZDNA_DRAHA 0x15 // Jak daleko pred problemem se zacne brzdit
#define TUHOS 100 // Jak dlouho se bude couvat po narazu na naraznik
#define ODODO_CIHLA 0xD0
#define ODODO_TUNEL 0xFFF
#define ODODO_PRERUSENI 0xFFF//0xB4
 
// Adresy IIC periferii
#define COMPAS_ADR 0xC0
#define CAMERA_ADR 0xDC
#define SONAR_ADR 0xE0
 
// A/D vstupy
#define RMAX 4 // AN4/RA5 - leve cidlo na vyjeti z cary
#define LMAX 3 // AN3/RA3 - prave cidlo na vyjeti z cary
#define CERVENA 2 // AN2/RA2 - cervene kroutitko
#define ZELENA 1 // AN1/RA0 - zelene kroutitko
#define MODRA 0 // AN0/RA1 - modre kroutitko
 
// I/O
#define HREF PIN_C5 // Signal HREF z kamery (v H po celou dobu radku)
#define PIX PIN_C6 // Vstup pro body z kamery (za trivstupim hradlem OR (dig. komparator))
#define SERVO PIN_B4 // Vystup na servo (1 az 2ms po cca 20ms (synchronizovano snimkovym kmitoctem))
#define MOT_L PIN_B5 // Smer otaceni leveho motoru; druhy pol je RC2
#define MOT_R PIN_B6 // Smer otaceni praveho motoru; druhy pol je RC1
#define MOT_1 PIN_C1 // PWM vystpy motoru
#define MOT_2 PIN_C2 //
#define DATA PIN_B2 // K modulu LEDbar data
#define CP PIN_B1 // K modulu LEDbar hodiny
//#define ODO PIN_C0 // Ze snimace z odometrie z praveho kola na TIMER1
// Jeden impuls je 31,25mm
#define IRRX !input(PIN_B0) // Vstup INT, generuje preruseni pri prekazce
#define IRTX PIN_B3 // Modulovani vysilaci IR LED na detekci prekazky
#define PROXIMITY PIN_C7 // Cidlo kratkeho dosahu na cihlu
#define BUMPER !input(PIN_A4) // Naraznik
 
#define CASMIN 6 // Rozsah radku snimace
#define CASMAX 192
#define CASAVR ((CASMAX+CASMIN) / 2)
 
#define EEMAX 255 // Konec EEPROM
#define MAXLOG 0x10 // Maximalni pocet zaznamu v logu
#if MAXLOG>(EEMAX/3)
#error Prekrocena velikost EEPROM
#endif
 
#define OFFSETO 0x9F //0x9F // Vystredeni serva pro objeti prekazky
 
#define THR 90 // Threshold pro UV cidla na caru
 
#byte INTCON = 0x0B // Interrupt configuration register
#bit GIE = INTCON.7
#bit PEIE = INTCON.6
#bit TMR0IE = INTCON.5
#bit INT0IE = INTCON.4
#bit RBIE = INTCON.3
#bit TMR0IF = INTCON.2
#bit INT0IF = INTCON.1
#bit RBIF = INTCON.0
 
enum stavy {start,rozjezd,jizda,cihla,pocihle,cil};
stavy stav; // Kde jsme na trati
int8 cas; // Cas hrany bila/cerna v radce
int8 stred; // Vystredeni kolecka
int16 odocounter; // Zaznamenani aktualniho stavu pocitadla odometrie
int16 last_log_odo; // Posledni stav odometrie poznamenany do logu
int16 last_log; // Cislo posledniho zaznamu v logu v EEPROM
int8 bb_h[MAXLOG]; // Cerna skrinka MSB
int8 bb_l[MAXLOG]; // Cerna skrinka LSB
int8 bb_f[MAXLOG]; // Cerna skrinka priznak (typ zaznamu)
int8 log; // Pocitadlo pro cernou skrinku
int8 rr; // Promenna na ulozeni Rozumne rychlost
int8 rrold;
int16 odo_preruseni, odo_cihla, odo_tunel; // Problemy na trati
 
// Zobrazeni jednoho byte na modulu LEDbar
inline void disp(int8 x)
{
int n;
 
for(n=0;n<=7;n++)
{
if (bit_test(x,0)) output_low(DATA); else output_high(DATA);
output_high(CP);
x>>=1;
output_low(CP);
}
}
 
// Blikani LEDbarem ve stilu Night Rider
void NightRider(int8 x)
{
int n,i,j;
 
for(j=0;j<x;j++)
{
i=0x01;
for(n=0;n<7;n++)
{
disp(i);
rotate_left(&i, 1);
delay_ms(40);
}
for(n=0;n<7;n++)
{
disp(i);
rotate_right(&i, 1);
delay_ms(40);
}
}
disp(i);
delay_ms(40);
i=0;
disp(i);
}
 
// Zaznam LOGu do EEPROM
void SaveLog()
{
int8 n,i,xlog;
 
i=0;
for(n=0;n<=(log*3);n+=3) // Ulozeni Black Boxu do EEPROM
{
write_eeprom(n,bb_f[i]);
write_eeprom(n+1,bb_h[i]);
write_eeprom(n+2,bb_l[i]);
i++;
};
if(log>0) {xlog=log-1;} else {xlog=0;};
write_eeprom(EEMAX,xlog); // Zapis poctu zaznamu na konec EEPROM
}
 
// Zaznam do Logu do RAM
void LogLog(int8 reason, int16 log_delay)
{
int16 timer_pom;
 
timer_pom=get_timer1(); // Timer se musi vycist atomicky
bb_l[log]=make8(timer_pom,0); // Zaznam
bb_h[log]=make8(timer_pom,1);
bb_f[log]=reason; // Typ zaznamu
if(log<(MAXLOG-1)) log++; // Ukazatel na dalsi zaznam
last_log_odo=timer_pom+log_delay; // Dalsi mereni nejdrive po ujeti def. vzdalenosti
rr=rrold; // Problem skoncil, znovu jed Rozumnou Rychlosti
}
 
void ReadBlackBox()
{
last_log=read_eeprom(EEMAX); // Kolik zaznamu mame od minule poznamenano?
{
int8 n,i;
 
i=0;
for(n=0;n<=last_log;n++)
{
if(read_eeprom(i)==0) odo_tunel=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
if(read_eeprom(i)==0xFF) odo_cihla=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
if((read_eeprom(i)>0) && (read_eeprom(i)<0xFF)) odo_preruseni=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
}
}
}
 
 
// Brzdeni motorama stridou 1:1
void brzda()
{
int8 n,i;
 
set_pwm1_duty(0); // vypni PWM
set_pwm2_duty(0);
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_OFF);
for (n=0;n<200;n++)
{
output_low(MOT_L);
output_low(MOT_R);
output_high(MOT_1);
output_high(MOT_2);
delay_us(200);
output_high(MOT_L);
output_high(MOT_R);
output_low(MOT_1);
output_low(MOT_2);
delay_us(200);
}
output_low(MOT_L); // smer vpred
output_low(MOT_R);
setup_ccp1(CCP_PWM); // RC1 // Zapni PWM pro motory
setup_ccp2(CCP_PWM); // RC2
}
 
void SetServo(int8 angle)
{
int8 n;
 
for(n=0; n<10; n++)
{
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(angle);
delay_us(angle);
output_low(SERVO);
delay_ms(18);
}
}
 
inline void SetServoQ(int8 angle)
{
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(angle);
delay_us(angle);
output_low(SERVO);
}
 
// Couvni po narazu na naraznik
inline void bum()
{
set_pwm1_duty(0); // couvni, rovne dozadu
set_pwm2_duty(0);
output_high(MOT_L);
output_high(MOT_R);
disp(0xA5);
SetServo(CASAVR-CASMIN);
}
 
#include ".\diag.c"
 
//---------------------------- INT --------------------------------
#int_EXT
EXT_isr() // Preruseni od prekazky
{
unsigned int8 bearing, bearing_offset, delta_bearing;
 
set_pwm1_duty(0); // zabrzdi levym kolem, prave vypni
set_pwm2_duty(0);
output_high(MOT_L);
output_low(MOT_R);
// Ujistime se, ze prijaty signal je z naseho IR vysilace
output_high(IRTX); // Vypni LED na detekci prekazky
delay_ms(2);
if (IRRX) // stale nas signal?
{
output_low(MOT_L); // je odraz -> vpred
output_low(MOT_R);
return;
};
output_low(IRTX); // Zapni LED na detekci prekazky
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1); // 0-255 (odpovida 0-359)
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
bearing_offset=i2c_read(0); // Poznamenej hodnotu pred cihlou
i2c_stop();
 
delay_ms(9);
if (!IRRX) // stale nas signal?
{
output_low(MOT_L); // neni odraz -> vpred
output_low(MOT_R);
return;
};
 
rr=rrold; // Po cihle se pojede opet Rozumnou Rychlosti
if(stav!=cihla)
{
LogLog(0xFF,3); // Cihla
};
 
//!!! if(stav==cihla) while(true); // Zastav na furt, konec drahy
// if(stav==cihla) return; // Po druhe nic neobjizdej
// Pozor na rozjezd
 
if((stav==jizda)||(stav==cihla)) // Objed cihlu
{
#include ".\objizdka_L.c"
};
last_log_odo=get_timer1()+16; // Pul metru po cihle nezaznamenavej do LOGu
}
 
 
//---------------------------------- MAIN --------------------------------------
void main()
{
int8 offset; // Promena pro ulozeni offsetu
int8 r1; // Rychlost motoru 1
int8 r2; // Rychlost motoru 2
int16 ble;
 
setup_adc_ports(ALL_ANALOG); // Zapnuti A/D prevodniku pro cteni kroutitek
setup_adc(ADC_CLOCK_INTERNAL);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // Casovac pro mereni casu hrany W/B v radce
setup_timer_1(T1_EXTERNAL); // Cita pulzy z odometrie z praveho kola
setup_timer_2(T2_DIV_BY_16,255,1); // Casovac PWM motoru
//!!! setup_timer_2(T2_DIV_BY_4,255,1); // Casovac PWM motoru
setup_ccp1(CCP_PWM); // RC1 // PWM pro motory
setup_ccp2(CCP_PWM); // RC2
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
 
set_tris_c(0b11111001); // Nastaveni vstup/vystup pro branu C, protoze se to nedela automaticky
 
set_pwm1_duty(0); // Zastav motory
set_pwm2_duty(0);
output_low(MOT_L); // Nastav smer vpred
output_low(MOT_R);
 
disp(0); // Zhasni LEDbar
 
if(BUMPER) // Kdyz nekdo na zacatku drzi naraznik, vymaz log a spust diagnostiku
{
diag();
}
 
output_low(IRTX); // Zapni LED na detekci prekazky
 
NightRider(1); // Zablikej, aby se poznalo, ze byl RESET
// Zaroven se musi pockat, nez se rozjede kamera, nez se do ni zacnou posilat prikazy
 
//... Nastaveni sonaru ...
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x02); // dosah
i2c_write(0x03); // n*43mm
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x01); // zesileni
i2c_write(0x01); // male, pro eliminaci echa z minuleho mereni
i2c_stop();
 
//... Nastaveni kamery ...
i2c_start(); // Soft RESET kamery
i2c_write(CAMERA_ADR); // Adresa kamery
i2c_write(0x12); // Adresa registru COMH
i2c_write(0x80 | 0x24); // Zapis ridiciho slova
i2c_stop();
 
i2c_start(); // BW
i2c_write(CAMERA_ADR);
i2c_write(0x28);
i2c_write(0b01000001);
i2c_stop();
 
/*
i2c_start(); // Contrast (nema podstatny vliv na obraz)
i2c_write(CAMERA_ADR);
i2c_write(0x05);
i2c_write(0xA0); // 48h
i2c_stop();
 
i2c_start(); // Band Filter (pokud by byl problem se zarivkama 50Hz)
i2c_write(CAMERA_ADR);
i2c_write(0x2D);
i2c_write(0x04 | 0x03);
i2c_stop();
*/
 
i2c_start(); // Fame Rate
i2c_write(CAMERA_ADR);
i2c_write(0x2B);
i2c_write(0x00); // cca 17ms (puvodni hodnota 5Eh = 20ms)
i2c_stop();
 
i2c_start(); // VSTRT
i2c_write(CAMERA_ADR);
i2c_write(0x19);
i2c_write(118); // prostredni radka
i2c_stop();
 
i2c_start(); // VEND
i2c_write(CAMERA_ADR);
i2c_write(0x1A);
i2c_write(118);
i2c_stop();
 
NightRider(1); // Musi se dat cas kamere na AGC a AEC
 
{ // Mereni expozice
int8 t1,t2;
 
i2c_start(); // Brightness, zacni od uplne tmy
i2c_write(CAMERA_ADR);
i2c_write(0x06);
i2c_write(0); // 80h default
i2c_stop();
delay_ms(50);
 
for(offset=0x04;offset<(255-0x04);offset+=0x04) // Zacni od jasu 10h
{
i2c_start(); // Brightness
i2c_write(CAMERA_ADR);
i2c_write(0x06);
i2c_write(offset); // 80h default
i2c_stop();
disp(offset);
delay_ms(50);
 
t1=0;
t2=0;
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z radky
delay_ms(5);
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z radky
set_timer0(0); // Vynuluj pocitadlo casu
if(!input(PIX)) continue;
while(input(PIX));
t1=get_timer0(); // Precti cas z citace casu hrany
set_timer0(0); // Vynuluj pocitadlo casu
while(!input(PIX));
t2=get_timer0();
 
if((t1>60) && (t1<140) && (t2>5) && (t2<=10)) break; // Vidis, co mas?
 
delay_ms(2); // Preskoc druhou radku z kamery
};
delay_ms(1000); // Nech chvili na displayi zmerenou hodnotu
}
 
set_adc_channel(CERVENA); // --- Kroutitko pro jas ---
delay_ms(1);
offset=read_adc();
offset &= 0b11111100; // Dva nejnizsi bity ignoruj
// offset += 0x70; // Jas nebude nikdy nizsi
disp(offset);
i2c_start(); // Brightness
i2c_write(CAMERA_adr);
i2c_write(0x06);
i2c_write(offset); // 80h default
i2c_stop();
delay_ms(1000); // Nech hodnotu chvili na displayi
 
set_adc_channel(ZELENA); // --- Kroutitko pro vykon motoru ---
delay_ms(1);
rr=read_adc()>>2; // 0-63 // Pokud by se zvetsil rozsah, tak zkontrolovat jakonasobeni!
rr+=27; // 27-90
//!!! rr=read_adc()>>1; // 0-128 // Pokud by se zvetsil rozsah, tak zkontrolovat jakonasobeni!
rrold=rr;
 
cas=CASAVR-CASMIN; // Inicializace promenych, aby neslo servo za roh
// a aby se to rozjelo jeste dneska
stav=start; // Jsme na startu
set_timer1(0); // Vynuluj citac odometrie
log=0; // Zacatek logu v cerne skrince
last_log_odo=0; // Posledni zaznam odometrie do logu
 
// ReadBlackBox(); // Vycteni zaznamu z Black Boxu
 
odo_cihla=ODODO_CIHLA-BRZDNA_DRAHA;
odo_tunel=ODODO_TUNEL-BRZDNA_DRAHA;
odo_preruseni=ODODO_PRERUSENI-BRZDNA_DRAHA;
 
// ........................... Hlavni smycka ................................
while(true)
{
int8 pom;
int8 n;
int8 gap;
int16 ododo;
 
gap=0; // Vynuluj pocitadlo preruseni
 
next_snap:
 
pom=0;
disable_interrupts(GLOBAL); //----------------------- Critical Section
while(input(HREF)); // Preskoc 1. radku
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z 2. radky
set_timer0(0); // Vynuluj pocitadlo casu
while(input(HREF)) // Po dobu vysilani radky cekej na hranu W/B
{
// !!!!Dodelat rozpoznani cerne cary napric pro zastaveni ?
if(!input(PIX)) // Pokud se X-krat za sebou precetla CERNA
if(!input(PIX))
// if(!input(PIX))
{
pom=get_timer0(); // Precti cas z citace casu hrany
break;
};
};
while(input(HREF)); // Pockej na shozeni signalu HREF
 
if((pom<CASMAX) && (pom>CASMIN)) cas=pom; // Orizni konce radku
// Na konci obrazovaho radku to blbne. Jednak chyba od apertury
// a vubec to nejak na kraji nefunguje.
 
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(cas);
delay_us(cas);
output_low(SERVO);
 
// Elektronicky diferencial 1. cast
if(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimace
if(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoru
if(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92
 
enable_interrupts(GLOBAL); //----------------------- End Critical Section
 
if(pom==0) // Kamera nevidi caru
{
if((cas>(CASMIN+15))&&(cas<(CASMAX-15))) // Nebyla minule cara moc u kraje?
{
gap++;
if(gap>=3) // Trva preruseni cary alespon 2 snimky?
{
cas=CASAVR-CASMIN;
// disp(0xAA);
}
}
}
else
{
gap=0;
};
 
 
/*
if(pom==0) // Kamera nevidi caru, poznamenej to do logu
{
if((cas>(CASMIN+30))&&(cas<(CASMAX-30))) // Nebyla minule cara moc u kraje?
if(last_log_odo<get_timer1()) // Aby nebyly zaznamy v logu prilis huste, musi se napred neco ujet od minuleho zaznamu
{
gap++;
}
}
else
{
if(gap>=4) // Trva preruseni cary alespon 2 snimky?
{
LogLog(gap,8); // Dalsi mereni nejdrive po ujeti 24 cm
rr=rrold; // Preruseni cary skoncilo, znovu jed Rozumnou Rychlosti
cas=CASAVR-CASMIN;
disp(0xAA);
}
gap=0;
};
 
if(!input(PROXIMITY) && ((stav==jizda)||(stav==cihla))) // Tunel
{
if(last_log_odo<get_timer1()) // Aby nebyly zaznamy v logu prilis huste, musi se napred neco ujet od minuleho zaznamu
{
LogLog(0xDD,16); // Priznak tunelu; dalsi mereni nejdrive po ujeti 48 cm
rr=rrold; // Vjeli jsme do tunelu, znovu jed rychle
}
};
*/
 
//ODODO
ododo=get_timer1();
if((ododo>odo_preruseni)&&(ododo<(odo_preruseni+8))) rr=RR_PRERUSENI;
if((ododo>odo_cihla)&&(ododo<(odo_cihla+8))) rr=RR_PRERUSENI;
if((ododo>odo_tunel)&&(ododo<(odo_tunel+8))) rr=RR_PRERUSENI;
 
// Elektronicky diferencial 2. cast
if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeni
if (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN); // rozsah 1 az 92 pro rr=0 // rozsah 1 az 154 pro rr=63
 
//!!! pro zatuhle prevodovky
// r1<<=1; // Rychlost je dvojnasobna
// r2<<=1; // Rozsah 2 az 184 pro rr=0
 
if ((stav==jizda)||(stav==cihla)||(stav==rozjezd)) //||(stav==pocihle)) // Jizda
{
set_pwm1_duty(r1);
set_pwm2_duty(r2);
}
else
{
set_pwm1_duty(0); // Zastaveni
set_pwm2_duty(0);
};
 
if((stav==rozjezd)&&(get_timer1()>10)) // musi ujet alespon 31cm
{
ext_int_edge(H_TO_L); // Nastav podminky preruseni od cihly
INT0IF=0; // Zruseni predesle udalosti od startera
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
stav=jizda;
};
 
if(stav==start) // Snimkuje, toci servem a ceka na start
{
set_adc_channel(MODRA); // Kroutitko na vystredeni predniho kolecka
Delay_ms(1);
stred=read_adc();
if(!input(PROXIMITY))
{
disp(0x80);
while(input(PROXIMITY)); // Cekej, dokud starter neda ruku pryc
set_timer1(0); // Vynuluj citac odometrie
set_pwm1_duty(255); // Rychly rozjezd !!! Zkontrolovat na oscyloskopu
set_pwm2_duty(255);
disp(0x01);
while(get_timer1()<=4) // Ujed alespon 12cm
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(40);
if(read_adc()<THR) {cas=CASMIN; break;}; // Prejeli jsme caru vlevo
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(40);
if(read_adc()<THR) {cas=CASMAX; break;}; // Prejeli jsme caru vpravo
cas=CASAVR-CASMIN; // Cara je rovne
};
stav=rozjezd;
};
}
 
pom=0x80; // Zobrazeni pozice cary na displayi
for(n=CASMAX/8; n<cas; n+=CASMAX/8) pom>>=1;
disp(pom);
 
while(true) // Ve zbytku casu snimku cti krajni UV senzory a naraznik
{
if(BUMPER) // Sakra, do neceho jsme narazili a nevideli jsme to!
{
bum();
SaveLog(); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
set_pwm1_duty(200); // pomalu vpred
set_pwm2_duty(200);
output_low(MOT_L);
output_low(MOT_R);
cas=CASAVR-CASMIN;
};
set_adc_channel(LMAX); // Levy UV sensor
for(n=0;n<20;n++) if(input(HREF)) goto next_snap;
if(read_adc()<THR) cas=CASMIN;
set_adc_channel(RMAX); // Pravy UV sensor
for(n=0;n<20;n++) if(input(HREF)) goto next_snap;
if(read_adc()<THR) cas=CASMAX;
};
}
}
/roboti/istrobot/camerus/SW/876/pred_finale/diag.c
0,0 → 1,68
//--- Diagnostika cidel a vymazani EEPROM ---
void diag()
{
int8 n;
 
// Vymaz Black Box v EEPROM
for(n=0;n<255;n++) write_eeprom(n,0);
bb_l[0]=0; // Zapis na pozici 0 vzdalenost 0
bb_h[0]=0;
bb_f[0]=0;
write_eeprom(EEMAX,0); // Zapis do EEPROM pocet zaznamu 0, tedy jeden zaznam
for(n=0;n<=4;n++)
{
disp(0x55); // Blikni pro potvrzeni
delay_ms(200);
disp(0xAA);
delay_ms(200);
};
 
while(true)
{
if(!IRRX)
{
int8 ble;
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1);
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
ble=i2c_read(0);
i2c_stop();
disp(ble);
delay_ms(200);
}
else
{
i2c_start(); // Diagnostika sonaru
i2c_write(SONAR_ADR);
i2c_write(0x02); // dosah
i2c_write(0x03); // n*43mm
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x01); // zesileni
i2c_write(0x01); // male, pro eliminaci echa z minuleho mereni
i2c_stop();
 
i2c_start(); // Sonar Ping
i2c_write(0xE0);
i2c_write(0x0);
i2c_write(0x51); // 50 mereni v palcich, 51 mereni v cm, 52 v us
i2c_stop();
delay_ms(100);
i2c_start(); // Odraz ze sonaru
i2c_write(0xE0);
i2c_write(0x3);
i2c_stop();
i2c_start();
i2c_write(0xE1);
n=i2c_read(0);
i2c_stop();
disp(n); // Zobrazeni hodnoty ze sonaru a zaroven diagnostika predniho IR cidla
delay_ms(200);
}
}
}
/roboti/istrobot/camerus/SW/876/pred_finale/objizdka_L.c
0,0 → 1,183
// **** Objeti cihly vlevo **** LLLL
 
#define L_TOUCH 1 // Cara vlevo
#define R_TOUCH 2 // Cata vpravo
#define B_TOUCH 3 // Both
 
int8 n;
int8 r1,r2,rr;
int8 touch;
enum okolo_cihly {pred_carou,na_care,po_care};
okolo_cihly ridic; // V jakem jsme stavu objizdeni cihly
int8 vzdalenost;
int8 visualisation;
 
stav=cihla; // Dalsi prekazku uz nezaznamenavej (je to s velkou pravdepodobnosti cil)
odocounter=get_timer1();
 
cihla:
 
rr=RR_CIHLA; //!!! Rozumna rychlost pro objizdeni cihly (bylo by lepsi rychlost zvysovat) a pri detekci pohybu zase snizit
disp(0x99);
set_pwm1_duty(0); // zabrzdi levym kolem, prave vpred
set_pwm2_duty(255);
output_high(MOT_L);
output_low(MOT_R);
while(true) // Na zacatku se vyhni cihle, zatoc co muzes
{
cas=CASMIN-5; // jeste vic nez hodne do leva
 
if(BUMPER) // Narazili jsme do cihly, musime couvnout!
{
bum();
SaveLog(); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
brzda();
goto cihla; // Znovu zacni cihlu objizdet
};
 
set_pwm1_duty(0);
set_pwm2_duty(255); // !!! mozna prilis maly vykon pro rozjezd pro zatuhlou prevodovku
output_high(MOT_L); // leve kolo reverz
output_low(MOT_R); // prave kolo vpred
if(get_timer1()>(odocounter+5)) // konec zatacky?
{
disp(0x66);
break;
}
SetServoQ(cas);
delay_ms(18);
};
 
//------ Objeti cihly v konstantni vzdalenosti ------
touch=0; // Indikator detekce cary pri objizdeni
ridic=pred_carou;
cas=CASAVR-CASMIN; // rovne
output_low(MOT_L); // vpred
output_low(MOT_R);
visualisation=0;
while(true)
{
if(BUMPER) // Narazili jsme do cihly, musime couvnout!
{
bum();
SaveLog(); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
set_pwm1_duty(160); // vpred
set_pwm2_duty(160);
output_low(MOT_L);
output_low(MOT_R);
cas=CASMIN;
};
 
delta_bearing=bearing-bearing_offset;
visualisation=(delta_bearing & 0xF0) | (visualisation & 0x0F);
if(IRRX) // hrozi celni srazka s cihlou v prubehu objizdeni
{
cas=CASMIN;
}
else
{
if((vzdalenost!=0)||!input(PROXIMITY)||((delta_bearing>60)&&(delta_bearing<128))) // Udrzovani konstantni vzdalenosti od cihly
{
if(cas>(CASMIN+30)) cas-=30;
}
else
{
if(cas<(CASMAX-30)) cas+=30;
};
};
// Elektronicky diferencial
if(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimace
if(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoru
if(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92
 
if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeni
if (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN);
 
//!!! pro zatuhle prevodovky
// r1<<=1; // Rychlost je dvojnasobna
// r2<<=1; // Rozsah 2 az 184 pro rr=0
 
set_pwm1_duty(r1); // Nastav rychlost motoru
set_pwm2_duty(r2);
 
SetServoQ(cas);
 
i2c_start(); // Sonar Ping
i2c_write(SONAR_ADR);
i2c_write(0x0);
i2c_write(0x52); // mereni v us
i2c_stop();
 
for(n=1;n<=90;n++) // 18ms testovani cary do dalsi korekce serva
{
set_adc_channel(LMAX);
delay_us(100);
if(read_adc()<THR) touch|=L_TOUCH;
set_adc_channel(RMAX);
delay_us(100);
if(read_adc()<THR) touch|=R_TOUCH;
};
 
i2c_start(); // Odraz ze sonaru
i2c_write(SONAR_ADR);
i2c_write(0x3);
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR+1);
vzdalenost=i2c_read(0);
i2c_stop();
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1); // uhel 0-255
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
bearing=i2c_read(0);
i2c_stop();
 
if(touch==L_TOUCH) visualisation|=0x2;
if(touch==R_TOUCH) visualisation|=0x1;
if((touch==B_TOUCH)&&(ridic==pred_carou)) ridic=na_care;
if((ridic==na_care)&&(touch==0)) break;
if(ridic==na_care) touch=0;
disp(visualisation);
};
disp(0xC3);
 
set_pwm1_duty(0); //!!! pred zatuhlejma prevodovkama tam bylo 20 a 200
set_pwm2_duty(255);
output_high(MOT_L);
output_low(MOT_R);
delay_us(40);
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie
while (true) // Znovu se musime dotknout cary
{
for(n=1;n<=90;n++) // 18ms testovani cary do dalsi korekce serva
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(100);
if(read_adc()<THR) // Dotkli jsme se levym senzorem
{
disp(0xE0);
cas=CASAVR-CASMIN; // nastavime, ze cara je rovne
goto cara;
};
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(100);
if((get_timer1()>=(odocounter+2)) && (read_adc()<THR)) // Pravym senzorem nesmime caru prejet!
{
disp(0x07);
cas=CASMAX; // kdyz prejedem, tak nastavime, ze cara je vpravo
goto cara;
};
}
SetServoQ(CASMIN-5); // max. max. doleva L
}
 
cara:
 
output_low(MOT_L); // oba motory vpred
output_low(MOT_R);
/roboti/istrobot/camerus/SW/876/pred_soutezi_rano/camerus.c
0,0 → 1,633
//********* Robot Camerus pro IstRobot 2007 ************
//"$Id: camerus.c 253 2007-04-24 09:26:46Z kakl $"
//*****************************************************
 
#include ".\camerus.h"
 
#USE FAST_IO (C) // Brana C je ve FAST_IO modu, aby slo rychle cist z kamery
 
// Rychlostni konstanty
#define RR_CIHLA 50 // Rozumna rychlost pro objizdeni cihly
#define RR_PRERUSENI 50 // Rozumna rychlost pro priblizeni se k preruseni
#define BRZDNA_DRAHA 0x20 // Jak daleko pred problemem se zacne brzdit
#define TUHOS 100 // Jak dlouho se bude couvat po narazu na naraznik
#define ODODO_CIHLA 0xFFF
#define ODODO_TUNEL 0xFFF
#define ODODO_PRERUSENI 0xFFF
 
// Adresy IIC periferii
#define COMPAS_ADR 0xC0
#define CAMERA_ADR 0xDC
#define SONAR_ADR 0xE0
 
// A/D vstupy
#define RMAX 4 // AN4/RA5 - leve cidlo na vyjeti z cary
#define LMAX 3 // AN3/RA3 - prave cidlo na vyjeti z cary
#define CERVENA 2 // AN2/RA2 - cervene kroutitko
#define ZELENA 1 // AN1/RA0 - zelene kroutitko
#define MODRA 0 // AN0/RA1 - modre kroutitko
 
// I/O
#define HREF PIN_C5 // Signal HREF z kamery (v H po celou dobu radku)
#define PIX PIN_C6 // Vstup pro body z kamery (za trivstupim hradlem OR (dig. komparator))
#define SERVO PIN_B4 // Vystup na servo (1 az 2ms po cca 20ms (synchronizovano snimkovym kmitoctem))
#define MOT_L PIN_B5 // Smer otaceni leveho motoru; druhy pol je RC2
#define MOT_R PIN_B6 // Smer otaceni praveho motoru; druhy pol je RC1
#define MOT_1 PIN_C1 // PWM vystpy motoru
#define MOT_2 PIN_C2 //
#define DATA PIN_B2 // K modulu LEDbar data
#define CP PIN_B1 // K modulu LEDbar hodiny
//#define ODO PIN_C0 // Ze snimace z odometrie z praveho kola na TIMER1
// Jeden impuls je 31,25mm
#define IRRX !input(PIN_B0) // Vstup INT, generuje preruseni pri prekazce
#define IRTX PIN_B3 // Modulovani vysilaci IR LED na detekci prekazky
#define PROXIMITY PIN_C7 // Cidlo kratkeho dosahu na cihlu
#define BUMPER !input(PIN_A4) // Naraznik
 
#define CASMIN 6 // Rozsah radku snimace
#define CASMAX 192
#define CASAVR ((CASMAX+CASMIN) / 2)
 
#define EEMAX 255 // Konec EEPROM
#define MAXLOG 0x10 // Maximalni pocet zaznamu v logu
#if MAXLOG>(EEMAX/3)
#error Prekrocena velikost EEPROM
#endif
 
#define OFFSETO 0x9F //0x9F // Vystredeni serva pro objeti prekazky
 
#define THR 90 // Threshold pro UV cidla na caru
 
#byte INTCON = 0x0B // Interrupt configuration register
#bit GIE = INTCON.7
#bit PEIE = INTCON.6
#bit TMR0IE = INTCON.5
#bit INT0IE = INTCON.4
#bit RBIE = INTCON.3
#bit TMR0IF = INTCON.2
#bit INT0IF = INTCON.1
#bit RBIF = INTCON.0
 
enum stavy {start,rozjezd,jizda,cihla,pocihle,cil};
stavy stav; // Kde jsme na trati
int8 cas; // Cas hrany bila/cerna v radce
int8 stred; // Vystredeni kolecka
int16 odocounter; // Zaznamenani aktualniho stavu pocitadla odometrie
int16 last_log_odo; // Posledni stav odometrie poznamenany do logu
int16 last_log; // Cislo posledniho zaznamu v logu v EEPROM
int8 bb_h[MAXLOG]; // Cerna skrinka MSB
int8 bb_l[MAXLOG]; // Cerna skrinka LSB
int8 bb_f[MAXLOG]; // Cerna skrinka priznak (typ zaznamu)
int8 log; // Pocitadlo pro cernou skrinku
int8 rr; // Promenna na ulozeni Rozumne rychlost
int8 rrold;
int16 odo_preruseni, odo_cihla, odo_tunel; // Problemy na trati
 
// Zobrazeni jednoho byte na modulu LEDbar
inline void disp(int8 x)
{
int n;
 
for(n=0;n<=7;n++)
{
if (bit_test(x,0)) output_low(DATA); else output_high(DATA);
output_high(CP);
x>>=1;
output_low(CP);
}
}
 
// Blikani LEDbarem ve stilu Night Rider
void NightRider(int8 x)
{
int n,i,j;
 
for(j=0;j<x;j++)
{
i=0x01;
for(n=0;n<7;n++)
{
disp(i);
rotate_left(&i, 1);
delay_ms(40);
}
for(n=0;n<7;n++)
{
disp(i);
rotate_right(&i, 1);
delay_ms(40);
}
}
disp(i);
delay_ms(40);
i=0;
disp(i);
}
 
// Zaznam LOGu do EEPROM
void SaveLog(int8 xlog)
{
int8 n,i;
 
i=0;
for(n=0;n<=(log*3);n+=3) // Ulozeni Black Boxu do EEPROM
{
write_eeprom(n,bb_f[i]);
write_eeprom(n+1,bb_h[i]);
write_eeprom(n+2,bb_l[i]);
i++;
};
write_eeprom(EEMAX,xlog); // Zapis poctu zaznamu na konec EEPROM
}
 
// Zaznam do Logu do RAM
void LogLog(int8 reason, int16 log_delay)
{
int16 timer_pom;
 
timer_pom=get_timer1(); // Timer se musi vycist atomicky
bb_l[log]=make8(timer_pom,0); // Zaznam
bb_h[log]=make8(timer_pom,1);
bb_f[log]=reason; // Typ zaznamu
if(log<(MAXLOG-1)) log++; // Ukazatel na dalsi zaznam
last_log_odo=timer_pom+log_delay; // Dalsi mereni nejdrive po ujeti def. vzdalenosti
rr=rrold; // Problem skoncil, znovu jed Rozumnou Rychlosti
}
 
void ReadBlackBox()
{
last_log=read_eeprom(EEMAX); // Kolik zaznamu mame od minule poznamenano?
{
int8 n,i;
 
i=0;
for(n=0;n<=last_log;n++)
{
if(read_eeprom(i)==0) odo_tunel=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
if(read_eeprom(i)==0xFF) odo_cihla=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
if((read_eeprom(i)>0) && (read_eeprom(i)<0xFF)) odo_preruseni=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
}
}
}
 
 
// Brzdeni motorama stridou 1:1
void brzda()
{
int8 n,i;
 
set_pwm1_duty(0); // vypni PWM
set_pwm2_duty(0);
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_OFF);
for (n=0;n<200;n++)
{
output_low(MOT_L);
output_low(MOT_R);
output_high(MOT_1);
output_high(MOT_2);
delay_us(200);
output_high(MOT_L);
output_high(MOT_R);
output_low(MOT_1);
output_low(MOT_2);
delay_us(200);
}
output_low(MOT_L); // smer vpred
output_low(MOT_R);
setup_ccp1(CCP_PWM); // RC1 // Zapni PWM pro motory
setup_ccp2(CCP_PWM); // RC2
}
 
void SetServo(int8 angle)
{
int8 n;
 
for(n=0; n<10; n++)
{
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(angle);
delay_us(angle);
output_low(SERVO);
delay_ms(18);
}
}
 
inline void SetServoQ(int8 angle)
{
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(angle);
delay_us(angle);
output_low(SERVO);
}
 
// Couvni po narazu na naraznik
inline void bum()
{
set_pwm1_duty(0); // couvni, rovne dozadu
set_pwm2_duty(0);
output_high(MOT_L);
output_high(MOT_R);
disp(0xA5);
SetServo(CASAVR-CASMIN);
}
 
#include ".\diag.c"
 
//---------------------------- INT --------------------------------
#int_EXT
EXT_isr() // Preruseni od prekazky
{
unsigned int8 bearing, bearing_offset, delta_bearing;
 
set_pwm1_duty(0); // zabrzdi levym kolem, prave vypni
set_pwm2_duty(0);
output_high(MOT_L);
output_low(MOT_R);
// Ujistime se, ze prijaty signal je z naseho IR vysilace
output_high(IRTX); // Vypni LED na detekci prekazky
delay_ms(2);
if (IRRX) // stale nas signal?
{
output_low(MOT_L); // je odraz -> vpred
output_low(MOT_R);
return;
};
output_low(IRTX); // Zapni LED na detekci prekazky
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1); // 0-255 (odpovida 0-359)
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
bearing_offset=i2c_read(0); // Poznamenej hodnotu pred cihlou
i2c_stop();
 
delay_ms(9);
if (!IRRX) // stale nas signal?
{
output_low(MOT_L); // neni odraz -> vpred
output_low(MOT_R);
return;
};
 
rr=rrold; // Po cihle se pojede opet Rozumnou Rychlosti
if(stav!=cihla)
{
LogLog(0xFF,3); // Cihla
};
 
//!!! if(stav==cihla) while(true); // Zastav na furt, konec drahy
// if(stav==cihla) return; // Po druhe nic neobjizdej
// Pozor na rozjezd
 
if((stav==jizda)||(stav==cihla)) // Objed cihlu
{
#include ".\objizdka_L.c"
};
last_log_odo=get_timer1()+16; // Pul metru po cihle nezaznamenavej do LOGu
}
 
 
//---------------------------------- MAIN --------------------------------------
void main()
{
int8 offset; // Promena pro ulozeni offsetu
int8 r1; // Rychlost motoru 1
int8 r2; // Rychlost motoru 2
 
setup_adc_ports(ALL_ANALOG); // Zapnuti A/D prevodniku pro cteni kroutitek
setup_adc(ADC_CLOCK_INTERNAL);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // Casovac pro mereni casu hrany W/B v radce
setup_timer_1(T1_EXTERNAL); // Cita pulzy z odometrie z praveho kola
setup_timer_2(T2_DIV_BY_16,255,1); // Casovac PWM motoru
//!!! setup_timer_2(T2_DIV_BY_4,255,1); // Casovac PWM motoru
setup_ccp1(CCP_PWM); // RC1 // PWM pro motory
setup_ccp2(CCP_PWM); // RC2
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
 
set_tris_c(0b11111001); // Nastaveni vstup/vystup pro branu C, protoze se to nedela automaticky
 
set_pwm1_duty(0); // Zastav motory
set_pwm2_duty(0);
output_low(MOT_L); // Nastav smer vpred
output_low(MOT_R);
 
disp(0); // Zhasni LEDbar
 
if(BUMPER) // Kdyz nekdo na zacatku drzi naraznik, vymaz log a spust diagnostiku
{
diag();
}
 
output_low(IRTX); // Zapni LED na detekci prekazky
 
NightRider(1); // Zablikej, aby se poznalo, ze byl RESET
// Zaroven se musi pockat, nez se rozjede kamera, nez se do ni zacnou posilat prikazy
 
//... Nastaveni sonaru ...
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x02); // dosah
i2c_write(0x03); // n*43mm
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x01); // zesileni
i2c_write(0x01); // male, pro eliminaci echa z minuleho mereni
i2c_stop();
 
//... Nastaveni kamery ...
i2c_start(); // Soft RESET kamery
i2c_write(CAMERA_ADR); // Adresa kamery
i2c_write(0x12); // Adresa registru COMH
i2c_write(0x80 | 0x24); // Zapis ridiciho slova
i2c_stop();
 
i2c_start(); // BW
i2c_write(CAMERA_ADR);
i2c_write(0x28);
i2c_write(0b01000001);
i2c_stop();
 
/*
i2c_start(); // Contrast (nema podstatny vliv na obraz)
i2c_write(CAMERA_ADR);
i2c_write(0x05);
i2c_write(0xA0); // 48h
i2c_stop();
 
i2c_start(); // Band Filter (pokud by byl problem se zarivkama 50Hz)
i2c_write(CAMERA_ADR);
i2c_write(0x2D);
i2c_write(0x04 | 0x03);
i2c_stop();
*/
 
i2c_start(); // Fame Rate
i2c_write(CAMERA_ADR);
i2c_write(0x2B);
i2c_write(0x00); // cca 17ms (puvodni hodnota 5Eh = 20ms)
i2c_stop();
 
i2c_start(); // VSTRT
i2c_write(CAMERA_ADR);
i2c_write(0x19);
i2c_write(118); // prostredni radka
i2c_stop();
 
i2c_start(); // VEND
i2c_write(CAMERA_ADR);
i2c_write(0x1A);
i2c_write(118);
i2c_stop();
 
NightRider(1); // Musi se dat cas kamere na AGC a AEC
 
{ // Mereni expozice
int8 t1,t2;
 
i2c_start(); // Brightness, zacni od uplne tmy
i2c_write(CAMERA_ADR);
i2c_write(0x06);
i2c_write(0); // 80h default
i2c_stop();
delay_ms(50);
 
for(offset=0x04;offset<(255-0x04);offset+=0x04) // Zacni od jasu 10h
{
i2c_start(); // Brightness
i2c_write(CAMERA_ADR);
i2c_write(0x06);
i2c_write(offset); // 80h default
i2c_stop();
disp(offset);
delay_ms(50);
 
t1=0;
t2=0;
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z radky
delay_ms(5);
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z radky
set_timer0(0); // Vynuluj pocitadlo casu
if(!input(PIX)) continue;
while(input(PIX));
t1=get_timer0(); // Precti cas z citace casu hrany
set_timer0(0); // Vynuluj pocitadlo casu
while(!input(PIX));
t2=get_timer0();
 
if((t1>60) && (t1<140) && (t2>5) && (t2<=10)) break; // Vidis, co mas?
 
delay_ms(2); // Preskoc druhou radku z kamery
};
delay_ms(1000); // Nech chvili na displayi zmerenou hodnotu
}
 
set_adc_channel(CERVENA); // --- Kroutitko pro jas ---
delay_ms(1);
offset=read_adc();
offset &= 0b11111100; // Dva nejnizsi bity ignoruj
// offset += 0x70; // Jas nebude nikdy nizsi
disp(offset);
i2c_start(); // Brightness
i2c_write(CAMERA_adr);
i2c_write(0x06);
i2c_write(offset); // 80h default
i2c_stop();
delay_ms(1000); // Nech hodnotu chvili na displayi
 
set_adc_channel(ZELENA); // --- Kroutitko pro vykon motoru ---
delay_ms(1);
rr=read_adc()>>2; // 0-63 // Pokud by se zvetsil rozsah, tak zkontrolovat jakonasobeni!
rr+=27; // 27-90
//!!! rr=read_adc()>>1; // 0-128 // Pokud by se zvetsil rozsah, tak zkontrolovat jakonasobeni!
rrold=rr;
 
cas=CASAVR-CASMIN; // Inicializace promenych, aby neslo servo za roh
// a aby se to rozjelo jeste dneska
stav=start; // Jsme na startu
set_timer1(0); // Vynuluj citac odometrie
log=0; // Zacatek logu v cerne skrince
last_log_odo=0; // Posledni zaznam odometrie do logu
 
// ReadBlackBox(); // Vycteni zaznamu z Black Boxu
 
odo_cihla=ODODO_CIHLA-BRZDNA_DRAHA;
odo_tunel=ODODO_TUNEL-BRZDNA_DRAHA;
odo_preruseni=ODODO_PRERUSENI-BRZDNA_DRAHA;
 
// ........................... Hlavni smycka ................................
while(true)
{
int8 pom;
int8 n;
int8 gap;
int16 ododo;
 
gap=0; // Vynuluj pocitadlo preruseni
 
next_snap:
 
pom=0;
disable_interrupts(GLOBAL); //----------------------- Critical Section
while(input(HREF)); // Preskoc 1. radku
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z 2. radky
set_timer0(0); // Vynuluj pocitadlo casu
while(input(HREF)) // Po dobu vysilani radky cekej na hranu W/B
{
// !!!!Dodelat rozpoznani cerne cary napric pro zastaveni ?
if(!input(PIX)) // Pokud se X-krat za sebou precetla CERNA
if(!input(PIX))
// if(!input(PIX))
{
pom=get_timer0(); // Precti cas z citace casu hrany
break;
};
};
while(input(HREF)); // Pockej na shozeni signalu HREF
 
if((pom<CASMAX) && (pom>CASMIN)) cas=pom; // Orizni konce radku
// Na konci obrazovaho radku to blbne. Jednak chyba od apertury
// a vubec to nejak na kraji nefunguje.
 
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(cas);
delay_us(cas);
output_low(SERVO);
 
// Elektronicky diferencial 1. cast
if(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimace
if(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoru
if(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92
 
enable_interrupts(GLOBAL); //----------------------- End Critical Section
 
if(pom==0) // Kamera nevidi caru, poznamenej to do logu
{
if((cas>(CASMIN+30))&&(cas<(CASMAX-30))) // Nebyla minule cara moc u kraje?
if(last_log_odo<get_timer1()) // Aby nebyly zaznamy v logu prilis huste, musi se napred neco ujet od minuleho zaznamu
{
gap++;
}
}
else
{
if(gap>=2) // Trva preruseni cary alespon 2 snimky?
{
LogLog(gap,8); // Dalsi mereni nejdrive po ujeti 24 cm
rr=rrold; // Preruseni cary skoncilo, znovu jed Rozumnou Rychlosti
}
gap=0;
};
 
if(!input(PROXIMITY) && ((stav==jizda)||(stav==cihla))) // Tunel
{
if(last_log_odo<get_timer1()) // Aby nebyly zaznamy v logu prilis huste, musi se napred neco ujet od minuleho zaznamu
{
LogLog(0xDD,16); // Priznak tunelu; dalsi mereni nejdrive po ujeti 48 cm
rr=rrold; // Vjeli jsme do tunelu, znovu jed rychle
}
};
 
//ODODO
ododo=get_timer1();
if((ododo>odo_preruseni)&&(ododo<(odo_preruseni+8))) rr=RR_PRERUSENI;
if((ododo>odo_cihla)&&(ododo<(odo_cihla+8))) rr=RR_PRERUSENI;
if((ododo>odo_tunel)&&(ododo<(odo_tunel+8))) rr=RR_PRERUSENI;
 
// Elektronicky diferencial 2. cast
if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeni
if (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN); // rozsah 1 az 92 pro rr=0 // rozsah 1 az 154 pro rr=63
 
//!!! pro zatuhle prevodovky
// r1<<=1; // Rychlost je dvojnasobna
// r2<<=1; // Rozsah 2 az 184 pro rr=0
 
if ((stav==jizda)||(stav==cihla)||(stav==rozjezd)) //||(stav==pocihle)) // Jizda
{
set_pwm1_duty(r1);
set_pwm2_duty(r2);
}
else
{
set_pwm1_duty(0); // Zastaveni
set_pwm2_duty(0);
};
 
if((stav==rozjezd)&&(get_timer1()>10)) // musi ujet alespon 31cm
{
ext_int_edge(H_TO_L); // Nastav podminky preruseni od cihly
INT0IF=0; // Zruseni predesle udalosti od startera
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
stav=jizda;
};
 
if(stav==start) // Snimkuje, toci servem a ceka na start
{
set_adc_channel(MODRA); // Kroutitko na vystredeni predniho kolecka
Delay_ms(1);
stred=read_adc();
if(!input(PROXIMITY))
{
disp(0x80);
while(input(PROXIMITY)); // Cekej, dokud starter neda ruku pryc
set_timer1(0); // Vynuluj citac odometrie
set_pwm1_duty(255); // Rychly rozjezd !!! Zkontrolovat na oscyloskopu
set_pwm2_duty(255);
disp(0x01);
while(get_timer1()<=4) // Ujed alespon 12cm
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(40);
if(read_adc()<THR) {cas=CASMIN; break;}; // Prejeli jsme caru vlevo
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(40);
if(read_adc()<THR) {cas=CASMAX; break;}; // Prejeli jsme caru vpravo
cas=CASAVR-CASMIN; // Cara je rovne
};
stav=rozjezd;
};
}
 
pom=0x80; // Zobrazeni pozice cary na displayi
for(n=CASMAX/8; n<cas; n+=CASMAX/8) pom>>=1;
disp(pom);
 
while(true) // Ve zbytku casu snimku cti krajni UV senzory a naraznik
{
if(BUMPER) // Sakra, do neceho jsme narazili a nevideli jsme to!
{
bum();
SaveLog(log-1); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
set_pwm1_duty(200); // pomalu vpred
set_pwm2_duty(200);
output_low(MOT_L);
output_low(MOT_R);
cas=CASAVR-CASMIN;
};
set_adc_channel(LMAX); // Levy UV sensor
for(n=0;n<20;n++) if(input(HREF)) goto next_snap;
if(read_adc()<THR) cas=CASMIN;
set_adc_channel(RMAX); // Pravy UV sensor
for(n=0;n<20;n++) if(input(HREF)) goto next_snap;
if(read_adc()<THR) cas=CASMAX;
};
}
}
/roboti/istrobot/camerus/SW/876/pred_soutezi_rano/diag.c
0,0 → 1,68
//--- Diagnostika cidel a vymazani EEPROM ---
void diag()
{
int8 n;
 
// Vymaz Black Box v EEPROM
for(n=0;n<255;n++) write_eeprom(n,0);
bb_l[0]=0; // Zapis na pozici 0 vzdalenost 0
bb_h[0]=0;
bb_f[0]=0;
SaveLog(0); // Zapis do EEPROM pocet zaznamu 0, tedy jeden zaznam
for(n=0;n<=4;n++)
{
disp(0x55); // Blikni pro potvrzeni
delay_ms(200);
disp(0xAA);
delay_ms(200);
};
 
while(true)
{
if(!IRRX)
{
int8 ble;
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1);
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
ble=i2c_read(0);
i2c_stop();
disp(ble);
delay_ms(200);
}
else
{
i2c_start(); // Diagnostika sonaru
i2c_write(SONAR_ADR);
i2c_write(0x02); // dosah
i2c_write(0x03); // n*43mm
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x01); // zesileni
i2c_write(0x01); // male, pro eliminaci echa z minuleho mereni
i2c_stop();
 
i2c_start(); // Sonar Ping
i2c_write(0xE0);
i2c_write(0x0);
i2c_write(0x51); // 50 mereni v palcich, 51 mereni v cm, 52 v us
i2c_stop();
delay_ms(100);
i2c_start(); // Odraz ze sonaru
i2c_write(0xE0);
i2c_write(0x3);
i2c_stop();
i2c_start();
i2c_write(0xE1);
n=i2c_read(0);
i2c_stop();
disp(n); // Zobrazeni hodnoty ze sonaru a zaroven diagnostika predniho IR cidla
delay_ms(200);
}
}
}
/roboti/istrobot/camerus/SW/876/pred_soutezi_rano/objizdka_L.c
0,0 → 1,183
// **** Objeti cihly vlevo **** LLLL
 
#define L_TOUCH 1 // Cara vlevo
#define R_TOUCH 2 // Cata vpravo
#define B_TOUCH 3 // Both
 
int8 n;
int8 r1,r2,rr;
int8 touch;
enum okolo_cihly {pred_carou,na_care,po_care};
okolo_cihly ridic; // V jakem jsme stavu objizdeni cihly
int8 vzdalenost;
int8 visualisation;
 
stav=cihla; // Dalsi prekazku uz nezaznamenavej (je to s velkou pravdepodobnosti cil)
odocounter=get_timer1();
 
cihla:
 
rr=RR_CIHLA; //!!! Rozumna rychlost pro objizdeni cihly (bylo by lepsi rychlost zvysovat) a pri detekci pohybu zase snizit
disp(0x99);
set_pwm1_duty(0); // zabrzdi levym kolem, prave vpred
set_pwm2_duty(255);
output_high(MOT_L);
output_low(MOT_R);
while(true) // Na zacatku se vyhni cihle, zatoc co muzes
{
cas=CASMIN-5; // jeste vic nez hodne do leva
 
if(BUMPER) // Narazili jsme do cihly, musime couvnout!
{
bum();
SaveLog(log-1); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
brzda();
goto cihla; // Znovu zacni cihlu objizdet
};
 
set_pwm1_duty(0);
set_pwm2_duty(200); // !!! mozna prilis maly vykon pro rozjezd pro zatuhlou prevodovku
output_high(MOT_L); // leve kolo reverz
output_low(MOT_R); // prave kolo vpred
if(get_timer1()>(odocounter+5)) // konec zatacky?
{
disp(0x66);
break;
}
SetServoQ(cas);
delay_ms(18);
};
 
//------ Objeti cihly v konstantni vzdalenosti ------
touch=0; // Indikator detekce cary pri objizdeni
ridic=pred_carou;
cas=CASAVR-CASMIN; // rovne
output_low(MOT_L); // vpred
output_low(MOT_R);
visualisation=0;
while(true)
{
if(BUMPER) // Narazili jsme do cihly, musime couvnout!
{
bum();
SaveLog(log-1); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
set_pwm1_duty(160); // vpred
set_pwm2_duty(160);
output_low(MOT_L);
output_low(MOT_R);
cas=CASMIN;
};
 
delta_bearing=bearing-bearing_offset;
visualisation=(delta_bearing & 0xF0) | (visualisation & 0x0F);
if(IRRX) // hrozi celni srazka s cihlou v prubehu objizdeni
{
cas=CASMIN;
}
else
{
if((vzdalenost!=0)||!input(PROXIMITY)||((delta_bearing>60)&&(delta_bearing<128))) // Udrzovani konstantni vzdalenosti od cihly
{
if(cas>(CASMIN+30)) cas-=30;
}
else
{
if(cas<(CASMAX-30)) cas+=30;
};
};
// Elektronicky diferencial
if(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimace
if(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoru
if(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92
 
if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeni
if (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN);
 
//!!! pro zatuhle prevodovky
// r1<<=1; // Rychlost je dvojnasobna
// r2<<=1; // Rozsah 2 az 184 pro rr=0
 
set_pwm1_duty(r1); // Nastav rychlost motoru
set_pwm2_duty(r2);
 
SetServoQ(cas);
 
i2c_start(); // Sonar Ping
i2c_write(SONAR_ADR);
i2c_write(0x0);
i2c_write(0x52); // mereni v us
i2c_stop();
 
for(n=1;n<=90;n++) // 18ms testovani cary do dalsi korekce serva
{
set_adc_channel(LMAX);
delay_us(100);
if(read_adc()<THR) touch|=L_TOUCH;
set_adc_channel(RMAX);
delay_us(100);
if(read_adc()<THR) touch|=R_TOUCH;
};
 
i2c_start(); // Odraz ze sonaru
i2c_write(SONAR_ADR);
i2c_write(0x3);
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR+1);
vzdalenost=i2c_read(0);
i2c_stop();
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1); // uhel 0-255
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
bearing=i2c_read(0);
i2c_stop();
 
if(touch==L_TOUCH) visualisation|=0x2;
if(touch==R_TOUCH) visualisation|=0x1;
if((touch==B_TOUCH)&&(ridic==pred_carou)) ridic=na_care;
if((ridic==na_care)&&(touch==0)) break;
if(ridic==na_care) touch=0;
disp(visualisation);
};
disp(0xC3);
 
set_pwm1_duty(0); //!!! pred zatuhlejma prevodovkama tam bylo 20 a 200
set_pwm2_duty(240);
output_high(MOT_L);
output_low(MOT_R);
delay_us(40);
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie
while (true) // Znovu se musime dotknout cary
{
for(n=1;n<=90;n++) // 18ms testovani cary do dalsi korekce serva
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(100);
if(read_adc()<THR) // Dotkli jsme se levym senzorem
{
disp(0xE0);
cas=CASAVR-CASMIN; // nastavime, ze cara je rovne
goto cara;
};
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(100);
if((get_timer1()>=(odocounter+2)) && (read_adc()<THR)) // Pravym senzorem nesmime caru prejet!
{
disp(0x07);
cas=CASMAX; // kdyz prejedem, tak nastavime, ze cara je vpravo
goto cara;
};
}
SetServoQ(CASMIN-5); // max. max. doleva L
}
 
cara:
 
output_low(MOT_L); // oba motory vpred
output_low(MOT_R);
/roboti/istrobot/camerus/SW/876/robotchallenge/camerus.c
0,0 → 1,456
//********* Robot Camerus pro IstRobot 2007 ************
//"$Id: camerus.c 214 2007-03-23 14:55:54Z kakl $"
//*****************************************************
 
#include ".\camerus.h"
 
#USE FAST_IO (C) // Brana C je ve FAST_IO modu, aby slo rychle cist z kamery
 
// A/D vstupy
#define RMAX 4 // AN4/RA5 - leve cidlo na vyjeti z cary
#define LMAX 3 // AN3/RA3 - prave cidlo na vyjeti z cary
#define CERVENA 2 // AN2/RA2 - cervene kroutitko
#define ZELENA 1 // AN1/RA0 - zelene kroutitko
#define MODRA 0 // AN0/RA1 - modre kroutitko
 
// I/O
#define HREF PIN_C5 // Signal HREF z kamery (v H po celou dobu radku)
#define PIX PIN_C6 // Vstup pro body z kamery (za trivstupim hradlem OR (dig. komparator))
#define SERVO PIN_B4 // Vystup na servo (1 az 2ms po cca 20ms (synchronizovano snimkovym kmitoctem))
#define MOT_L PIN_B5 // Smer otaceni leveho motoru; druhy pol je RC2
#define MOT_R PIN_B6 // Smer otaceni praveho motoru; druhy pol je RC1
#define MOT_1 PIN_C1 // PWM vystpy motoru
#define MOT_2 PIN_C2 //
#define DATA PIN_B2 // K modulu LEDbar data
#define CP PIN_B1 // K modulu LEDbar hodiny
//#define ODO PIN_A4 // Ze snimace z odometrie z praveho kola / nove je to na RC0 na TIMER1
// Jeden impuls je 31,25mm
#define IRRX PIN_B0 // Vstup INT, generuje preruseni pri prekazce
#define IRTX PIN_B3 // Modulovani vysilaci IR LED na detekci prekazky
#define PROXIMITY PIN_C7 // Cidlo kratkeho dosahu na cihlu
 
#define CASMIN 6 // Rozsah radku snimace
#define CASMAX 192
#define CASAVR ((CASMAX+CASMIN) / 2)
 
#define OFFSETO 0x9F //0x9F // Vystredeni serva pro objeti prekazky
 
#define TRESHOLD 128
 
#byte INTCON = 0x0B // Interrupt configuration register
#bit GIE = INTCON.7
#bit PEIE = INTCON.6
#bit TMR0IE = INTCON.5
#bit INT0IE = INTCON.4
#bit RBIE = INTCON.3
#bit TMR0IF = INTCON.2
#bit INT0IF = INTCON.1
#bit RBIF = INTCON.0
 
enum stavy {start,rozjezd,jizda,cihla,pocihle,cil};
stavy stav; // Kde jsme na trati
int8 cas; // Cas hrany bila/cerna v radce
int8 stred; // Vystredeni kolecka
int16 odocounter; // Zaznamenani aktualniho stavu pocitadla odometrie
int8 rr; // Promenna na ulozeni Rozumne rychlost
int8 rrold;
 
// Zobrazeni jednoho byte na modulu LEDbar
inline void disp(int8 x)
{
int n;
 
for(n=0;n<=7;n++)
{
if (x & 1 == 1) output_low(DATA); else output_high(DATA);
output_high(CP);
x>>=1;
output_low(CP);
}
}
 
// Blikani LEDbarem ve stilu Night Rider
void NightRider(int8 x)
{
int n,i,j;
 
for(j=0;j<x;j++)
{
i=0x01;
for(n=0;n<7;n++)
{
disp(i);
rotate_left(&i, 1);
delay_ms(40);
}
for(n=0;n<7;n++)
{
disp(i);
rotate_right(&i, 1);
delay_ms(40);
}
}
disp(i);
delay_ms(40);
i=0;
disp(i);
}
 
// Brzdeni motorama stridou 1:1
void brzda()
{
int8 n,i;
 
set_pwm1_duty(0); // vypni PWM
set_pwm2_duty(0);
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_OFF);
for (n=0;n<200;n++)
{
output_low(MOT_L);
output_low(MOT_R);
output_high(MOT_1);
output_high(MOT_2);
delay_us(200);
output_high(MOT_L);
output_high(MOT_R);
output_low(MOT_1);
output_low(MOT_2);
delay_us(200);
}
output_low(MOT_L); // smer vpred
output_low(MOT_R);
setup_ccp1(CCP_PWM); // RC1 // Zapni PWM pro motory
setup_ccp2(CCP_PWM); // RC2
}
 
void SetServo(int8 angle)
{
int8 n;
 
for(n=0; n<14; n++)
{
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(angle);
delay_us(angle);
output_low(SERVO);
delay_ms(18);
}
}
 
inline void SetServoQ(int8 angle)
{
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(angle);
delay_us(angle);
output_low(SERVO);
}
 
#int_EXT
EXT_isr() // Preruseni od prekazky
{
set_pwm1_duty(0); // zabrzdi
set_pwm2_duty(0);
output_high(MOT_L);
output_high(MOT_R);
// Ujistime se, ze prijaty signal je z naseho IR vysilace
output_high(IRTX); // Vypni LED na detekci prekazky
delay_ms(2);
if (!input(IRRX)) // stale nas signal?
{
output_low(MOT_L); // je odraz -> vpred
output_low(MOT_R);
return;
};
output_low(IRTX); // Zapni LED na detekci prekazky
delay_ms(10);
if (input(IRRX)) // stale nas signal?
{
output_low(MOT_L); // neni odraz -> vpred
output_low(MOT_R);
return;
};
 
SetServo((CASAVR-CASMIN)); // rovne
delay_ms(100);
brzda();
 
//!!! if(stav==cihla) while(true); // Zastav na furt, konec drahy
// if(stav==cihla) return; // Po druhe nic neobjizdej
// Pozor na rozjezd
 
if(stav==jizda) // Objed cihlu
{
#include ".\objizdka_R.c"
}
}
 
 
//---------------------------------- MAIN --------------------------------------
void main()
{
int8 offset; // Promena pro ulozeni offsetu
int8 r1; // Rychlost motoru 1
int8 r2; // Rychlost motoru 2
 
setup_adc_ports(ALL_ANALOG); // Zapnuti A/D prevodniku pro cteni kroutitek
setup_adc(ADC_CLOCK_INTERNAL);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // Casovac pro mereni casu hrany W/B v radce
setup_timer_1(T1_EXTERNAL); // Cita pulzy z odometrie z praveho kola
setup_timer_2(T2_DIV_BY_16,255,1); // Casovac PWM motoru
setup_ccp1(CCP_PWM); // RC1 // PWM pro motory
setup_ccp2(CCP_PWM); // RC2
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
 
set_tris_c(0b11111001); // Nastaveni vstup/vystup pro branu C, protoze se nedela automaticky
 
set_pwm1_duty(0); // Zastav motory
set_pwm2_duty(0);
output_low(MOT_L); // Nastav smer vpred
output_low(MOT_R);
 
output_low(IRTX); // Zapni LED na detekci prekazky
 
NightRider(1); // Aby se poznalo, ze byl RESET
// taky se musi pockat, nez se rozjede kamera, nez se do ni zacnou posilat prikazy
 
//... Nastaveni kamery ...
i2c_start(); // Soft RESET kamery
i2c_write(0xC0); // Pro single slave musi mit vsechny zapisy adresu C0h
i2c_write(0x12); // Adresa registru COMH
i2c_write(0x80 | 0x24); // Zapis ridiciho slova
i2c_stop();
 
i2c_start(); // BW
i2c_write(0xC0);
i2c_write(0x28);
i2c_write(0b01000001);
i2c_stop();
 
/*
i2c_start(); // Contrast (nema podstatny vliv na obraz)
i2c_write(0xC0);
i2c_write(0x05);
i2c_write(0xA0); // 48h
i2c_stop();
 
i2c_start(); // Band Filter (pokud by byl problem se zarivkama 50Hz)
i2c_write(0xC0);
i2c_write(0x2D);
i2c_write(0x04 | 0x03);
i2c_stop();
*/
 
i2c_start(); // Fame Rate
i2c_write(0xC0);
i2c_write(0x2B);
i2c_write(0x00); // cca 17ms (puvodni hodnota 5Eh = 20ms)
i2c_stop();
 
i2c_start(); // VSTRT
i2c_write(0xC0);
i2c_write(0x19);
i2c_write(118); // prostredni radka
i2c_stop();
 
i2c_start(); // VEND
i2c_write(0xC0);
i2c_write(0x1A);
i2c_write(118);
i2c_stop();
 
NightRider(1); // Musi se dat cas kamere na AGC a AEC
 
{ // Mereni expozice
int8 t1,t2;
 
i2c_start(); // Brightness, zacni od uplne tmy
i2c_write(0xC0);
i2c_write(0x06);
i2c_write(0); // 80h default
i2c_stop();
delay_ms(50);
 
for(offset=0x04;offset<(255-0x04);offset+=0x04) // Zacni od jasu 10h
{
i2c_start(); // Brightness
i2c_write(0xC0);
i2c_write(0x06);
i2c_write(offset); // 80h default
i2c_stop();
disp(offset);
delay_ms(50);
 
t1=0;
t2=0;
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z radky
delay_ms(5);
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z radky
set_timer0(0); // Vynuluj pocitadlo casu
if(!input(PIX)) continue;
while(input(PIX));
t1=get_timer0(); // Precti cas z citace casu hrany
set_timer0(0); // Vynuluj pocitadlo casu
while(!input(PIX));
t2=get_timer0();
 
if((t1>60) && (t1<140) && (t2>5) && (t2<=10)) break; // Vidis, co mas?
 
delay_ms(2); // Preskoc druhou radku z kamery
};
delay_ms(1000); // Nech chvili na displayi zmerenou hodnotu
}
 
set_adc_channel(CERVENA); // --- Kroutitko pro jas ---
delay_ms(1);
offset=read_adc();
offset &= 0b11111100; // Dva nejnizsi bity ignoruj
// offset += 0x70; // Jas nebude nikdy nizsi
disp(offset);
i2c_start(); // Brightness
i2c_write(0xC0);
i2c_write(0x06);
i2c_write(offset); // 80h default
i2c_stop();
delay_ms(1000); // Nech hodnotu chvili na displayi
 
set_adc_channel(ZELENA); // --- Kroutitko pro vykon motoru ---
delay_ms(1);
rr=read_adc()>>2; // 0-31 // Pokud by se zvetsil rozsah, tak zkontrolovat jakonasobeni !!!
rrold=rr;
 
cas=CASAVR-CASMIN; // Inicializace promenych, aby neslo servo za roh
// a aby se to rozjelo jeste dneska
stav=start; // Jsme na startu
set_timer1(0); // Vynuluj citac odometrie
 
// ........................... Hlavni smycka ................................
while(true)
{
int8 pom;
int8 n;
 
next_snap:
 
pom=0;
disable_interrupts(GLOBAL); //----------------------- Critical
while(input(HREF)); // Preskoc 1. radku
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z 2. radky
set_timer0(0); // Vynuluj pocitadlo casu
while(input(HREF)) // Po dobu vysilani radky cekej na hranu W/B
{
// !!!!Dodelat rozpoznani cerne cary napric pro zastaveni ?
if(!input(PIX)) // Pokud se X-krat za sebou precetla CERNA
if(!input(PIX))
// if(!input(PIX))
{
pom=get_timer0(); // Precti cas z citace casu hrany
break;
};
};
while(input(HREF)); // Pockej na shozeni signalu HREF
 
if((pom<CASMAX) && (pom>CASMIN)) cas=pom; // Orizni konce radku
// Na konci obrazovaho radku to blbne. Jednak chyba od apertury
// a vubec to nejak na kraji nefunguje.
 
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(cas);
delay_us(cas);
output_low(SERVO);
 
// Elektronicky diferencial
if(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimace
if(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoru
if(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92
 
enable_interrupts(GLOBAL); //----------------------- Critical
 
if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeni
if (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN);
 
// r1<<=1; // Rychlost je dvojnasobna
// r2<<=1; // Rozsah 2 az 184
 
/* Nerozumna rychlost po cihle
if ((stav==cihla)&&(get_timer1()>(odocounter+5))) // Snizime rychlost po ujeti
{
rr=rrold;
stav=pocihle;
};
*/
if ((stav==jizda)||(stav==cihla)||(stav==rozjezd)) //||(stav==pocihle)) // Jizda
{
set_pwm1_duty(r1);
set_pwm2_duty(r2);
}
else
{
set_pwm1_duty(0); // Zastaveni
set_pwm2_duty(0);
};
 
if((stav==rozjezd)&&(get_timer1()>10)) // musi ujet alespon 31cm
{
ext_int_edge(H_TO_L); // Nastav podminky preruseni od cihly
INT0IF=0; // Zruseni predesle udalosti od startera
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
stav=jizda;
};
 
if(stav==start) // Snimkuje, toci servem a ceka na start
{
set_adc_channel(MODRA); // Kroutitko na vystredeni predniho kolecka
Delay_ms(1);
stred=read_adc();
if(!input(PROXIMITY))
{
disp(0x80);
while(input(PROXIMITY)); // Cekej, dokud starter neda ruku pryc
set_timer1(0); // Vynuluj citac odometrie
set_pwm1_duty(255); // Rychly rozjezd !!! Zkontrolovat na oscyloskopu
set_pwm2_duty(255);
disp(0x01);
while(get_timer1()<=4) // Ujed alespon 12cm
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(40);
if(read_adc()<TRESHOLD) {cas=CASMIN; break;}; // Prejeli jsme caru vlevo
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(40);
if(read_adc()<TRESHOLD) {cas=CASMAX; break;}; // Prejeli jsme caru vpravo
cas=CASAVR-CASMIN; // Cara je rovne
};
stav=rozjezd;
};
}
 
pom=0x80; // Zobrazeni pozice cary na displayi
for(n=CASMAX/8; n<cas; n+=CASMAX/8) pom>>=1;
disp(pom);
 
while(true) // Ve zbytku casu snimku cti krajni UV senzory
{
set_adc_channel(LMAX); // Levy UV sensor
for(n=0;n<20;n++) if(input(HREF)) goto next_snap;
if(read_adc()<TRESHOLD) cas=CASMIN;
set_adc_channel(RMAX); // Pravy UV sensor
for(n=0;n<20;n++) if(input(HREF)) goto next_snap;
if(read_adc()<TRESHOLD) cas=CASMAX;
};
}
}
/roboti/istrobot/camerus/SW/876/robotchallenge/objizdka_R.c
0,0 → 1,167
// **** Objeti cihly vpravo **** RRRR
int8 n,i;
int16 j;
 
set_adc_channel(RMAX);
 
SetServo(CASMIN); // max. doleva L
set_pwm1_duty(0); // vzad
set_pwm2_duty(0);
output_low(MOT_L);
output_high(MOT_R);
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie
while(get_timer1()<(odocounter+8)); // Popojed definovanou vzdalenost
set_pwm1_duty(0); // reverz (zabrzdi)
set_pwm2_duty(255);
output_low(MOT_L);
output_low(MOT_R);
delay_ms(215);
brzda();
 
disp(1);
SetServo((CASAVR-CASMIN)); // rovne S
set_pwm1_duty(160); // vpred
set_pwm2_duty(160);
output_low(MOT_L);
output_low(MOT_R);
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie
for(n=1;n<=7;n++)
{
while(get_timer1()<(odocounter+n)); // Popojed
SetServoQ((CASAVR-CASMIN));
};
 
i=0;
 
disp(2);
set_pwm1_duty(130);
set_pwm2_duty(140);
odocounter=get_timer1();
for(n=1;n<=10;n++)
{
while(get_timer1()<(odocounter+n));
SetServoQ((CASAVR-CASMIN)-i);
set_pwm1_duty(130-i);
i+=8;
};
 
disp(3);
odocounter=get_timer1();
for(n=1;n<=7;n++)
{
while(get_timer1()<(odocounter+n));
SetServoQ((CASAVR-CASMIN)-i);
set_pwm1_duty(130-i);
i-=8;
};
 
disp(4);
odocounter=get_timer1();
for(n=1;n<=7;n++)
{
while(get_timer1()<(odocounter+n));
SetServoQ((CASAVR-CASMIN)-i);
set_pwm1_duty(130-i);
i+=8;
};
 
disp(5);
odocounter=get_timer1();
//!!!!for(n=1;n<=5;n++)
for(n=1;n<=4;n++)
{
while(get_timer1()<(odocounter+n));
SetServoQ((CASAVR-CASMIN)-i);
set_pwm1_duty(130-i);
i-=16;
};
 
disp(6);
set_pwm1_duty(80); // vpred
set_pwm2_duty(80);
output_low(MOT_L);
output_low(MOT_R);
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie
for(n=1;n<=3;n++)
{
while(get_timer1()<(odocounter+n));
SetServoQ((CASAVR-CASMIN));
};
 
disp(7);
while(true)
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(40);
if(read_adc()<TRESHOLD) {delay_us(600); if(read_adc()<TRESHOLD) {cas=CASMIN; break;}; }; // Prejeli jsme caru vlevo
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(40);
if(read_adc()<TRESHOLD) {delay_us(600); if(read_adc()<TRESHOLD) {cas=CASMAX; break;}; }; // Prejeli jsme caru vpravo
}
 
 
if(cas==CASMIN)
{
set_adc_channel(RMAX); // Pravy UV sensor
for(j=0;j<10000;j++)
{
if(input(HREF)) {SetServoQ(CASMIN); while(input(HREF));}; // doleva
if (read_adc()<TRESHOLD) break;
}
}
else
{
set_adc_channel(LMAX); // Levy UV sensor
for(j=0;j<10000;j++)
{
if(input(HREF)) {SetServoQ(CASMAX); while(input(HREF));}; // doprava
if (read_adc()<TRESHOLD) break;
}
}
 
set_adc_channel(RMAX); // Pravy UV sensor
 
set_pwm1_duty(0); // zabrzdi
set_pwm2_duty(0);
output_high(MOT_L);
output_high(MOT_R);
SetServo(CASAVR-CASMIN); // doprostred
delay_ms(100);
brzda();
// Tady jsou s velkou pravdepodobnosti obe cidla za carou a jsme kolmo k care
 
SetServo(CASMIN); // max. doleva L
set_pwm1_duty(0); // vzad
set_pwm2_duty(0);
output_low(MOT_L);
output_high(MOT_R);
while (read_adc()>TRESHOLD);
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie
while(get_timer1()<(odocounter+4)); // Popojed definovanou vzdalenost
set_pwm1_duty(0); // reverz (zabrzdi)
set_pwm2_duty(255);
output_low(MOT_L);
output_low(MOT_R);
SetServo(CASAVR-CASMIN); // doprostred
delay_ms(100);
brzda();
 
set_pwm1_duty(255); // max. vpred
set_pwm2_duty(255);
output_low(MOT_L);
output_low(MOT_R);
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie
while(get_timer1()<(odocounter+2)) // Ujed kousek
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(40);
if(read_adc()<TRESHOLD) {cas=CASMIN; break;}; // Prejeli jsme caru vlevo
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(40);
if(read_adc()<TRESHOLD) {cas=CASMAX; break;}; // Prejeli jsme caru vpravo
cas=CASAVR-CASMIN; // Cara je rovne
};
 
stav=cihla; // Stav po objeti cihly, uz zadna cihla asi nebude
//odocounter=get_timer1(); // Poznamenej aktualni stav odometrie
//rr=60; // Nerozumna rychlost pro rozjeti
/roboti/istrobot/camerus/SW/876/zatuhle_prevodovky/camerus.c
0,0 → 1,632
//********* Robot Camerus pro IstRobot 2007 ************
//"$Id: camerus.c 252 2007-04-24 08:53:01Z kakl $"
//*****************************************************
 
#include ".\camerus.h"
 
#USE FAST_IO (C) // Brana C je ve FAST_IO modu, aby slo rychle cist z kamery
 
// Rychlostni konstanty
#define RR_CIHLA 25 // Rozumna rychlost pro objizdeni cihly
#define RR_PRERUSENI 20 // Rozumna rychlost pro priblizeni se k preruseni
#define BRZDNA_DRAHA 0x20 // Jak daleko pred problemem se zacne brzdit
#define TUHOS 100 // Jak dlouho se bude couvat po narazu na naraznik
#define ODODO_CIHLA 0xFFF
#define ODODO_TUNEL 0xFFF
#define ODODO_PRERUSENI 0xFFF
 
// Adresy IIC periferii
#define COMPAS_ADR 0xC0
#define CAMERA_ADR 0xDC
#define SONAR_ADR 0xE0
 
// A/D vstupy
#define RMAX 4 // AN4/RA5 - leve cidlo na vyjeti z cary
#define LMAX 3 // AN3/RA3 - prave cidlo na vyjeti z cary
#define CERVENA 2 // AN2/RA2 - cervene kroutitko
#define ZELENA 1 // AN1/RA0 - zelene kroutitko
#define MODRA 0 // AN0/RA1 - modre kroutitko
 
// I/O
#define HREF PIN_C5 // Signal HREF z kamery (v H po celou dobu radku)
#define PIX PIN_C6 // Vstup pro body z kamery (za trivstupim hradlem OR (dig. komparator))
#define SERVO PIN_B4 // Vystup na servo (1 az 2ms po cca 20ms (synchronizovano snimkovym kmitoctem))
#define MOT_L PIN_B5 // Smer otaceni leveho motoru; druhy pol je RC2
#define MOT_R PIN_B6 // Smer otaceni praveho motoru; druhy pol je RC1
#define MOT_1 PIN_C1 // PWM vystpy motoru
#define MOT_2 PIN_C2 //
#define DATA PIN_B2 // K modulu LEDbar data
#define CP PIN_B1 // K modulu LEDbar hodiny
//#define ODO PIN_C0 // Ze snimace z odometrie z praveho kola na TIMER1
// Jeden impuls je 31,25mm
#define IRRX !input(PIN_B0) // Vstup INT, generuje preruseni pri prekazce
#define IRTX PIN_B3 // Modulovani vysilaci IR LED na detekci prekazky
#define PROXIMITY PIN_C7 // Cidlo kratkeho dosahu na cihlu
#define BUMPER !input(PIN_A4) // Naraznik
 
#define CASMIN 6 // Rozsah radku snimace
#define CASMAX 192
#define CASAVR ((CASMAX+CASMIN) / 2)
 
#define EEMAX 255 // Konec EEPROM
#define MAXLOG 0x10 // Maximalni pocet zaznamu v logu
#if MAXLOG>(EEMAX/3)
#error Prekrocena velikost EEPROM
#endif
 
#define OFFSETO 0x9F //0x9F // Vystredeni serva pro objeti prekazky
 
#define THR 90 // Threshold pro UV cidla na caru
 
#byte INTCON = 0x0B // Interrupt configuration register
#bit GIE = INTCON.7
#bit PEIE = INTCON.6
#bit TMR0IE = INTCON.5
#bit INT0IE = INTCON.4
#bit RBIE = INTCON.3
#bit TMR0IF = INTCON.2
#bit INT0IF = INTCON.1
#bit RBIF = INTCON.0
 
enum stavy {start,rozjezd,jizda,cihla,pocihle,cil};
stavy stav; // Kde jsme na trati
int8 cas; // Cas hrany bila/cerna v radce
int8 stred; // Vystredeni kolecka
int16 odocounter; // Zaznamenani aktualniho stavu pocitadla odometrie
int16 last_log_odo; // Posledni stav odometrie poznamenany do logu
int16 last_log; // Cislo posledniho zaznamu v logu v EEPROM
int8 bb_h[MAXLOG]; // Cerna skrinka MSB
int8 bb_l[MAXLOG]; // Cerna skrinka LSB
int8 bb_f[MAXLOG]; // Cerna skrinka priznak (typ zaznamu)
int8 log; // Pocitadlo pro cernou skrinku
int8 rr; // Promenna na ulozeni Rozumne rychlost
int8 rrold;
int16 odo_preruseni, odo_cihla, odo_tunel; // Problemy na trati
 
// Zobrazeni jednoho byte na modulu LEDbar
inline void disp(int8 x)
{
int n;
 
for(n=0;n<=7;n++)
{
if (bit_test(x,0)) output_low(DATA); else output_high(DATA);
output_high(CP);
x>>=1;
output_low(CP);
}
}
 
// Blikani LEDbarem ve stilu Night Rider
void NightRider(int8 x)
{
int n,i,j;
 
for(j=0;j<x;j++)
{
i=0x01;
for(n=0;n<7;n++)
{
disp(i);
rotate_left(&i, 1);
delay_ms(40);
}
for(n=0;n<7;n++)
{
disp(i);
rotate_right(&i, 1);
delay_ms(40);
}
}
disp(i);
delay_ms(40);
i=0;
disp(i);
}
 
// Zaznam LOGu do EEPROM
void SaveLog(int8 log)
{
int8 n,i;
 
i=0;
for(n=0;n<=(log*3);n+=3) // Ulozeni Black Boxu do EEPROM
{
write_eeprom(n,bb_f[i]);
write_eeprom(n+1,bb_h[i]);
write_eeprom(n+2,bb_l[i]);
i++;
};
write_eeprom(EEMAX,log); // Zapis poctu zaznamu na konec EEPROM
}
 
// Zaznam do Logu do RAM
void LogLog(int8 flag, int16 gap)
{
int16 timer_pom;
 
timer_pom=get_timer1(); // Timer se musi vycist atomicky
bb_l[log]=make8(timer_pom,0); // Zaznam
bb_h[log]=make8(timer_pom,1);
bb_f[log]=flag; // Typ zaznamu
if(log<MAXLOG) log++; // Ukazatel na dalsi zaznam
last_log_odo=timer_pom+gap; // Dalsi mereni nejdrive po ujeti def. vzdalenosti
rr=rrold; // Problem skoncil, znovu jed Rozumnou Rychlosti
}
 
void ReadBlackBox()
{
last_log=read_eeprom(EEMAX); // Kolik zaznamu mame od minule poznamenano?
{
int8 n,i;
 
i=0;
for(n=0;n<=last_log;n++)
{
if(read_eeprom(i)==0) odo_tunel=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
if(read_eeprom(i)==0xFF) odo_cihla=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
if((read_eeprom(i)>0) && (read_eeprom(i)<0xFF)) odo_preruseni=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
}
}
}
 
 
// Brzdeni motorama stridou 1:1
void brzda()
{
int8 n,i;
 
set_pwm1_duty(0); // vypni PWM
set_pwm2_duty(0);
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_OFF);
for (n=0;n<200;n++)
{
output_low(MOT_L);
output_low(MOT_R);
output_high(MOT_1);
output_high(MOT_2);
delay_us(200);
output_high(MOT_L);
output_high(MOT_R);
output_low(MOT_1);
output_low(MOT_2);
delay_us(200);
}
output_low(MOT_L); // smer vpred
output_low(MOT_R);
setup_ccp1(CCP_PWM); // RC1 // Zapni PWM pro motory
setup_ccp2(CCP_PWM); // RC2
}
 
void SetServo(int8 angle)
{
int8 n;
 
for(n=0; n<10; n++)
{
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(angle);
delay_us(angle);
output_low(SERVO);
delay_ms(18);
}
}
 
inline void SetServoQ(int8 angle)
{
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(angle);
delay_us(angle);
output_low(SERVO);
}
 
// Couvni po narazu na naraznik
inline void bum()
{
set_pwm1_duty(0); // couvni, rovne dozadu
set_pwm2_duty(0);
output_high(MOT_L);
output_high(MOT_R);
disp(0xA5);
SetServo(CASAVR-CASMIN);
}
 
#include ".\diag.c"
 
//---------------------------- INT --------------------------------
#int_EXT
EXT_isr() // Preruseni od prekazky
{
unsigned int8 bearing, bearing_offset, delta_bearing;
 
set_pwm1_duty(0); // zabrzdi levym kolem, prave vypni
set_pwm2_duty(0);
output_high(MOT_L);
output_low(MOT_R);
// Ujistime se, ze prijaty signal je z naseho IR vysilace
output_high(IRTX); // Vypni LED na detekci prekazky
delay_ms(2);
if (IRRX) // stale nas signal?
{
output_low(MOT_L); // je odraz -> vpred
output_low(MOT_R);
return;
};
output_low(IRTX); // Zapni LED na detekci prekazky
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1); // 0-255 (odpovida 0-359)
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
bearing_offset=i2c_read(0); // Poznamenej hodnotu pred cihlou
i2c_stop();
 
delay_ms(9);
if (!IRRX) // stale nas signal?
{
output_low(MOT_L); // neni odraz -> vpred
output_low(MOT_R);
return;
};
 
rr=rrold; // Po cihle se pojede opet Rozumnou Rychlosti
if(stav!=cihla)
{
LogLog(0xFF,3); // Cihla
};
 
//!!! if(stav==cihla) while(true); // Zastav na furt, konec drahy
// if(stav==cihla) return; // Po druhe nic neobjizdej
// Pozor na rozjezd
 
if((stav==jizda)||(stav==cihla)) // Objed cihlu
{
#include ".\objizdka_L.c"
};
last_log_odo=get_timer1()+16; // Pul metru po cihle nezaznamenavej do LOGu
}
 
 
//---------------------------------- MAIN --------------------------------------
void main()
{
int8 offset; // Promena pro ulozeni offsetu
int8 r1; // Rychlost motoru 1
int8 r2; // Rychlost motoru 2
 
setup_adc_ports(ALL_ANALOG); // Zapnuti A/D prevodniku pro cteni kroutitek
setup_adc(ADC_CLOCK_INTERNAL);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // Casovac pro mereni casu hrany W/B v radce
setup_timer_1(T1_EXTERNAL); // Cita pulzy z odometrie z praveho kola
//!!! setup_timer_2(T2_DIV_BY_16,255,1); // Casovac PWM motoru
setup_timer_2(T2_DIV_BY_4,255,1); // Casovac PWM motoru
setup_ccp1(CCP_PWM); // RC1 // PWM pro motory
setup_ccp2(CCP_PWM); // RC2
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
 
set_tris_c(0b11111001); // Nastaveni vstup/vystup pro branu C, protoze se to nedela automaticky
 
set_pwm1_duty(0); // Zastav motory
set_pwm2_duty(0);
output_low(MOT_L); // Nastav smer vpred
output_low(MOT_R);
 
disp(0); // Zhasni LEDbar
 
if(BUMPER) // Kdyz nekdo na zacatku drzi naraznik, vymaz log a spust diagnostiku
{
diag();
}
 
output_low(IRTX); // Zapni LED na detekci prekazky
 
NightRider(1); // Zablikej, aby se poznalo, ze byl RESET
// Zaroven se musi pockat, nez se rozjede kamera, nez se do ni zacnou posilat prikazy
 
//... Nastaveni sonaru ...
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x02); // dosah
i2c_write(0x03); // n*43mm
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x01); // zesileni
i2c_write(0x01); // male, pro eliminaci echa z minuleho mereni
i2c_stop();
 
//... Nastaveni kamery ...
i2c_start(); // Soft RESET kamery
i2c_write(CAMERA_ADR); // Adresa kamery
i2c_write(0x12); // Adresa registru COMH
i2c_write(0x80 | 0x24); // Zapis ridiciho slova
i2c_stop();
 
i2c_start(); // BW
i2c_write(CAMERA_ADR);
i2c_write(0x28);
i2c_write(0b01000001);
i2c_stop();
 
/*
i2c_start(); // Contrast (nema podstatny vliv na obraz)
i2c_write(CAMERA_ADR);
i2c_write(0x05);
i2c_write(0xA0); // 48h
i2c_stop();
 
i2c_start(); // Band Filter (pokud by byl problem se zarivkama 50Hz)
i2c_write(CAMERA_ADR);
i2c_write(0x2D);
i2c_write(0x04 | 0x03);
i2c_stop();
*/
 
i2c_start(); // Fame Rate
i2c_write(CAMERA_ADR);
i2c_write(0x2B);
i2c_write(0x00); // cca 17ms (puvodni hodnota 5Eh = 20ms)
i2c_stop();
 
i2c_start(); // VSTRT
i2c_write(CAMERA_ADR);
i2c_write(0x19);
i2c_write(118); // prostredni radka
i2c_stop();
 
i2c_start(); // VEND
i2c_write(CAMERA_ADR);
i2c_write(0x1A);
i2c_write(118);
i2c_stop();
 
NightRider(1); // Musi se dat cas kamere na AGC a AEC
 
{ // Mereni expozice
int8 t1,t2;
 
i2c_start(); // Brightness, zacni od uplne tmy
i2c_write(CAMERA_ADR);
i2c_write(0x06);
i2c_write(0); // 80h default
i2c_stop();
delay_ms(50);
 
for(offset=0x04;offset<(255-0x04);offset+=0x04) // Zacni od jasu 10h
{
i2c_start(); // Brightness
i2c_write(CAMERA_ADR);
i2c_write(0x06);
i2c_write(offset); // 80h default
i2c_stop();
disp(offset);
delay_ms(50);
 
t1=0;
t2=0;
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z radky
delay_ms(5);
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z radky
set_timer0(0); // Vynuluj pocitadlo casu
if(!input(PIX)) continue;
while(input(PIX));
t1=get_timer0(); // Precti cas z citace casu hrany
set_timer0(0); // Vynuluj pocitadlo casu
while(!input(PIX));
t2=get_timer0();
 
if((t1>60) && (t1<140) && (t2>5) && (t2<=10)) break; // Vidis, co mas?
 
delay_ms(2); // Preskoc druhou radku z kamery
};
delay_ms(1000); // Nech chvili na displayi zmerenou hodnotu
}
 
set_adc_channel(CERVENA); // --- Kroutitko pro jas ---
delay_ms(1);
offset=read_adc();
offset &= 0b11111100; // Dva nejnizsi bity ignoruj
// offset += 0x70; // Jas nebude nikdy nizsi
disp(offset);
i2c_start(); // Brightness
i2c_write(CAMERA_adr);
i2c_write(0x06);
i2c_write(offset); // 80h default
i2c_stop();
delay_ms(1000); // Nech hodnotu chvili na displayi
 
set_adc_channel(ZELENA); // --- Kroutitko pro vykon motoru ---
delay_ms(1);
//!!! rr=read_adc()>>2; // 0-63 // Pokud by se zvetsil rozsah, tak zkontrolovat jakonasobeni!
rr=read_adc()>>3; // 0-31 // Pokud by se zvetsil rozsah, tak zkontrolovat jakonasobeni!
rrold=rr;
 
cas=CASAVR-CASMIN; // Inicializace promenych, aby neslo servo za roh
// a aby se to rozjelo jeste dneska
stav=start; // Jsme na startu
set_timer1(0); // Vynuluj citac odometrie
log=0; // Zacatek logu v cerne skrince
last_log_odo=0; // Posledni zaznam odometrie do logu
 
// ReadBlackBox(); // Vycteni zaznamu z Black Boxu
 
odo_cihla=ODODO_CIHLA-BRZDNA_DRAHA;
odo_tunel=ODODO_TUNEL-BRZDNA_DRAHA;
odo_preruseni=ODODO_PRERUSENI-BRZDNA_DRAHA;
 
// ........................... Hlavni smycka ................................
while(true)
{
int8 pom;
int8 n;
int8 gap;
int16 ododo;
 
gap=0; // Vynuluj pocitadlo preruseni
 
next_snap:
 
pom=0;
disable_interrupts(GLOBAL); //----------------------- Critical Section
while(input(HREF)); // Preskoc 1. radku
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z 2. radky
set_timer0(0); // Vynuluj pocitadlo casu
while(input(HREF)) // Po dobu vysilani radky cekej na hranu W/B
{
// !!!!Dodelat rozpoznani cerne cary napric pro zastaveni ?
if(!input(PIX)) // Pokud se X-krat za sebou precetla CERNA
if(!input(PIX))
// if(!input(PIX))
{
pom=get_timer0(); // Precti cas z citace casu hrany
break;
};
};
while(input(HREF)); // Pockej na shozeni signalu HREF
 
if((pom<CASMAX) && (pom>CASMIN)) cas=pom; // Orizni konce radku
// Na konci obrazovaho radku to blbne. Jednak chyba od apertury
// a vubec to nejak na kraji nefunguje.
 
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(cas);
delay_us(cas);
output_low(SERVO);
 
// Elektronicky diferencial 1. cast
if(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimace
if(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoru
if(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92
 
enable_interrupts(GLOBAL); //----------------------- End Critical Section
 
if(pom==0) // Kamera nevidi caru, poznamenej to do logu
{
if((cas>(CASMIN+30))&&(cas<(CASMAX-30))) // Nebyla minule cara moc u kraje?
if(last_log_odo<get_timer1()) // Aby nebyly zaznamy v logu prilis huste, musi se napred neco ujet od minuleho zaznamu
{
gap++;
}
}
else
{
if(gap>=2) // Trva preruseni cary alespon 2 snimky?
{
LogLog(gap,8); // Dalsi mereni nejdrive po ujeti 24 cm
rr=rrold; // Preruseni cary skoncilo, znovu jed Rozumnou Rychlosti
}
gap=0;
};
 
if(input(PROXIMITY) && ((stav==jizda)||(stav==cihla))) // Tunel
{
if(last_log_odo<get_timer1()) // Aby nebyly zaznamy v logu prilis huste, musi se napred neco ujet od minuleho zaznamu
{
LogLog(0,16); // Priznak tunelu; dalsi mereni nejdrive po ujeti 48 cm
rr=rrold; // Vjeli jsme do tunelu, znovu jed rychle
}
};
 
//ODODO
ododo=get_timer1();
if((ododo>odo_preruseni)&&(ododo<(odo_preruseni+8))) rr=RR_PRERUSENI;
if((ododo>odo_cihla)&&(ododo<(odo_cihla+8))) rr=RR_PRERUSENI;
if((ododo>odo_tunel)&&(ododo<(odo_tunel+8))) rr=RR_PRERUSENI;
 
// Elektronicky diferencial 2. cast
if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeni
if (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN); // rozsah 1 az 92 pro rr=0 // rozsah 1 az 154 pro rr=63
 
//!!! pro zatuhle prevodovky
r1<<=1; // Rychlost je dvojnasobna
r2<<=1; // Rozsah 2 az 184 pro rr=0
 
if ((stav==jizda)||(stav==cihla)||(stav==rozjezd)) //||(stav==pocihle)) // Jizda
{
set_pwm1_duty(r1);
set_pwm2_duty(r2);
}
else
{
set_pwm1_duty(0); // Zastaveni
set_pwm2_duty(0);
};
 
if((stav==rozjezd)&&(get_timer1()>10)) // musi ujet alespon 31cm
{
ext_int_edge(H_TO_L); // Nastav podminky preruseni od cihly
INT0IF=0; // Zruseni predesle udalosti od startera
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
stav=jizda;
};
 
if(stav==start) // Snimkuje, toci servem a ceka na start
{
set_adc_channel(MODRA); // Kroutitko na vystredeni predniho kolecka
Delay_ms(1);
stred=read_adc();
if(!input(PROXIMITY))
{
disp(0x80);
while(input(PROXIMITY)); // Cekej, dokud starter neda ruku pryc
set_timer1(0); // Vynuluj citac odometrie
set_pwm1_duty(255); // Rychly rozjezd !!! Zkontrolovat na oscyloskopu
set_pwm2_duty(255);
disp(0x01);
while(get_timer1()<=4) // Ujed alespon 12cm
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(40);
if(read_adc()<THR) {cas=CASMIN; break;}; // Prejeli jsme caru vlevo
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(40);
if(read_adc()<THR) {cas=CASMAX; break;}; // Prejeli jsme caru vpravo
cas=CASAVR-CASMIN; // Cara je rovne
};
stav=rozjezd;
};
}
 
pom=0x80; // Zobrazeni pozice cary na displayi
for(n=CASMAX/8; n<cas; n+=CASMAX/8) pom>>=1;
disp(pom);
 
while(true) // Ve zbytku casu snimku cti krajni UV senzory a naraznik
{
if(BUMPER) // Sakra, do neceho jsme narazili a nevideli jsme to!
{
bum();
SaveLog(log-1); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
set_pwm1_duty(200); // pomalu vpred
set_pwm2_duty(200);
output_low(MOT_L);
output_low(MOT_R);
cas=CASAVR-CASMIN;
};
set_adc_channel(LMAX); // Levy UV sensor
for(n=0;n<20;n++) if(input(HREF)) goto next_snap;
if(read_adc()<THR) cas=CASMIN;
set_adc_channel(RMAX); // Pravy UV sensor
for(n=0;n<20;n++) if(input(HREF)) goto next_snap;
if(read_adc()<THR) cas=CASMAX;
};
}
}
/roboti/istrobot/camerus/SW/876/zatuhle_prevodovky/diag.c
0,0 → 1,67
//--- Diagnostika cidel a vymazani EEPROM ---
void diag()
{
int8 n;
 
// Vymaz Black Box v EEPROM
for(n=0;n<255;n++) write_eeprom(n,0);
bb_l[0]=0; // Zapis na pozici 0 vzdalenost 0
bb_h[0]=0;
SaveLog(0); // Zapis do EEPROM pocet zaznamu 0, tedy jeden zaznam
for(n=0;n<=4;n++)
{
disp(0x55); // Blikni pro potvrzeni
delay_ms(200);
disp(0xAA);
delay_ms(200);
};
 
while(true)
{
if(!IRRX)
{
int8 ble;
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1);
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
ble=i2c_read(0);
i2c_stop();
disp(ble);
delay_ms(200);
}
else
{
i2c_start(); // Diagnostika sonaru
i2c_write(SONAR_ADR);
i2c_write(0x02); // dosah
i2c_write(0x03); // n*43mm
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x01); // zesileni
i2c_write(0x01); // male, pro eliminaci echa z minuleho mereni
i2c_stop();
 
i2c_start(); // Sonar Ping
i2c_write(0xE0);
i2c_write(0x0);
i2c_write(0x51); // 50 mereni v palcich, 51 mereni v cm, 52 v us
i2c_stop();
delay_ms(100);
i2c_start(); // Odraz ze sonaru
i2c_write(0xE0);
i2c_write(0x3);
i2c_stop();
i2c_start();
i2c_write(0xE1);
n=i2c_read(0);
i2c_stop();
disp(n); // Zobrazeni hodnoty ze sonaru a zaroven diagnostika predniho IR cidla
delay_ms(200);
}
}
}
/roboti/istrobot/camerus/SW/876/zatuhle_prevodovky/objizdka_L.c
0,0 → 1,183
// **** Objeti cihly vlevo **** LLLL
 
#define L_TOUCH 1 // Cara vlevo
#define R_TOUCH 2 // Cata vpravo
#define B_TOUCH 3 // Both
 
int8 n;
int8 r1,r2,rr;
int8 touch;
enum okolo_cihly {pred_carou,na_care,po_care};
okolo_cihly ridic; // V jakem jsme stavu objizdeni cihly
int8 vzdalenost;
int8 visualisation;
 
stav=cihla; // Dalsi prekazku uz nezaznamenavej (je to s velkou pravdepodobnosti cil)
touch=0; // Indikator detekce cary pri objizdeni
 
cihla:
 
rr=RR_CIHLA; //!!! Rozumna rychlost pro objizdeni cihly (bylo by lepsi rychlost zvysovat) a pri detekci pohybu zase snizit
disp(0x99);
set_pwm1_duty(0); // zabrzdi levym kolem, prave vpred
set_pwm2_duty(255);
output_high(MOT_L);
output_low(MOT_R);
odocounter=get_timer1();
while(true) // Na zacatku se vyhni cihle, zatoc co muzes
{
cas=CASMIN-5; // jeste vic nez hodne do leva
 
if(BUMPER) // Narazili jsme do cihly, musime couvnout!
{
bum();
SaveLog(log-1); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
brzda();
goto cihla; // Znovu zacni cihlu objizdet
};
 
set_pwm1_duty(0);
set_pwm2_duty(255); // !!! mozna prilis maly vykon pro rozjezd pro zatuhlou prevodovku
output_high(MOT_L); // leve kolo reverz
output_low(MOT_R); // prave kolo vpred
if(get_timer1()>(odocounter+5)) // konec zatacky?
{
disp(0x66);
break;
}
SetServoQ(cas);
delay_ms(18);
};
 
//------ Objeti cihly v konstantni vzdalenosti ------
ridic=pred_carou;
cas=CASAVR-CASMIN; // rovne
output_low(MOT_L); // vpred
output_low(MOT_R);
visualisation=0;
while(true)
{
if(BUMPER) // Narazili jsme do cihly, musime couvnout!
{
bum();
SaveLog(log-1); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
set_pwm1_duty(160); // vpred
set_pwm2_duty(160);
output_low(MOT_L);
output_low(MOT_R);
cas=CASMIN;
};
 
delta_bearing=bearing-bearing_offset;
visualisation=(delta_bearing & 0xF0) | (visualisation & 0x0F);
if(IRRX) // hrozi celni srazka s cihlou v prubehu objizdeni
{
cas=CASMIN;
}
else
{
if((vzdalenost!=0)||!input(PROXIMITY)||((delta_bearing>60)&&(delta_bearing<128))) // Udrzovani konstantni vzdalenosti od cihly
{
if(cas>(CASMIN+20)) cas-=20;
}
else
{
if(cas<(CASMAX-20)) cas+=20;
};
};
// Elektronicky diferencial
if(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimace
if(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoru
if(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92
 
if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeni
if (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN);
 
//!!! pro zatuhle prevodovky
r1<<=1; // Rychlost je dvojnasobna
r2<<=1; // Rozsah 2 az 184 pro rr=0
 
set_pwm1_duty(r1); // Nastav rychlost motoru
set_pwm2_duty(r2);
 
SetServoQ(cas);
 
i2c_start(); // Sonar Ping
i2c_write(SONAR_ADR);
i2c_write(0x0);
i2c_write(0x52); // mereni v us
i2c_stop();
 
for(n=1;n<=90;n++) // 18ms testovani cary do dalsi korekce serva
{
set_adc_channel(LMAX);
delay_us(100);
if(read_adc()<THR) touch|=L_TOUCH;
set_adc_channel(RMAX);
delay_us(100);
if(read_adc()<THR) touch|=R_TOUCH;
};
 
i2c_start(); // Odraz ze sonaru
i2c_write(SONAR_ADR);
i2c_write(0x3);
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR+1);
vzdalenost=i2c_read(0);
i2c_stop();
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1); // uhel 0-255
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
bearing=i2c_read(0);
i2c_stop();
 
if(touch==L_TOUCH) visualisation|=0x2;
if(touch==R_TOUCH) visualisation|=0x1;
if((touch==B_TOUCH)&&(ridic==pred_carou)) ridic=na_care;
if((ridic==na_care)&&(touch==0)) break;
if(ridic==na_care) touch=0;
disp(visualisation);
};
disp(0xC3);
 
set_pwm1_duty(0); //!!! pred zatuhlejma prevodovkama tam bylo 20 a 200
set_pwm2_duty(255);
output_high(MOT_L);
output_low(MOT_R);
delay_us(40);
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie
while (true) // Znovu se musime dotknout cary
{
for(n=1;n<=90;n++) // 18ms testovani cary do dalsi korekce serva
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(100);
if(read_adc()<THR) // Dotkli jsme se levym senzorem
{
disp(0xE0);
cas=CASAVR-CASMIN; // nastavime, ze cara je rovne
goto cara;
};
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(100);
if((get_timer1()>=(odocounter+2)) && (read_adc()<THR)) // Pravym senzorem nesmime caru prejet!
{
disp(0x07);
cas=CASMAX; // kdyz prejedem, tak nastavime, ze cara je vpravo
goto cara;
};
}
SetServoQ(CASMIN-5); // max. max. doleva L
}
 
cara:
 
output_low(MOT_L); // oba motory vpred
output_low(MOT_R);
/roboti/istrobot/camerus/SW/876/zmensena brzdna draha na 0x15/camerus.c
0,0 → 1,634
//********* Robot Camerus pro IstRobot 2007 ************
//"$Id: camerus.c 253 2007-04-24 09:26:46Z kakl $"
//*****************************************************
 
#include ".\camerus.h"
 
#USE FAST_IO (C) // Brana C je ve FAST_IO modu, aby slo rychle cist z kamery
 
// Rychlostni konstanty
#define RR_CIHLA 50 // Rozumna rychlost pro objizdeni cihly
#define RR_PRERUSENI 50 // Rozumna rychlost pro priblizeni se k preruseni
#define BRZDNA_DRAHA 0x15 // Jak daleko pred problemem se zacne brzdit
#define TUHOS 100 // Jak dlouho se bude couvat po narazu na naraznik
#define ODODO_CIHLA 0xFFF
#define ODODO_TUNEL 0xFFF
#define ODODO_PRERUSENI 0xFFF
 
// Adresy IIC periferii
#define COMPAS_ADR 0xC0
#define CAMERA_ADR 0xDC
#define SONAR_ADR 0xE0
 
// A/D vstupy
#define RMAX 4 // AN4/RA5 - leve cidlo na vyjeti z cary
#define LMAX 3 // AN3/RA3 - prave cidlo na vyjeti z cary
#define CERVENA 2 // AN2/RA2 - cervene kroutitko
#define ZELENA 1 // AN1/RA0 - zelene kroutitko
#define MODRA 0 // AN0/RA1 - modre kroutitko
 
// I/O
#define HREF PIN_C5 // Signal HREF z kamery (v H po celou dobu radku)
#define PIX PIN_C6 // Vstup pro body z kamery (za trivstupim hradlem OR (dig. komparator))
#define SERVO PIN_B4 // Vystup na servo (1 az 2ms po cca 20ms (synchronizovano snimkovym kmitoctem))
#define MOT_L PIN_B5 // Smer otaceni leveho motoru; druhy pol je RC2
#define MOT_R PIN_B6 // Smer otaceni praveho motoru; druhy pol je RC1
#define MOT_1 PIN_C1 // PWM vystpy motoru
#define MOT_2 PIN_C2 //
#define DATA PIN_B2 // K modulu LEDbar data
#define CP PIN_B1 // K modulu LEDbar hodiny
//#define ODO PIN_C0 // Ze snimace z odometrie z praveho kola na TIMER1
// Jeden impuls je 31,25mm
#define IRRX !input(PIN_B0) // Vstup INT, generuje preruseni pri prekazce
#define IRTX PIN_B3 // Modulovani vysilaci IR LED na detekci prekazky
#define PROXIMITY PIN_C7 // Cidlo kratkeho dosahu na cihlu
#define BUMPER !input(PIN_A4) // Naraznik
 
#define CASMIN 6 // Rozsah radku snimace
#define CASMAX 192
#define CASAVR ((CASMAX+CASMIN) / 2)
 
#define EEMAX 255 // Konec EEPROM
#define MAXLOG 0x10 // Maximalni pocet zaznamu v logu
#if MAXLOG>(EEMAX/3)
#error Prekrocena velikost EEPROM
#endif
 
#define OFFSETO 0x9F //0x9F // Vystredeni serva pro objeti prekazky
 
#define THR 90 // Threshold pro UV cidla na caru
 
#byte INTCON = 0x0B // Interrupt configuration register
#bit GIE = INTCON.7
#bit PEIE = INTCON.6
#bit TMR0IE = INTCON.5
#bit INT0IE = INTCON.4
#bit RBIE = INTCON.3
#bit TMR0IF = INTCON.2
#bit INT0IF = INTCON.1
#bit RBIF = INTCON.0
 
enum stavy {start,rozjezd,jizda,cihla,pocihle,cil};
stavy stav; // Kde jsme na trati
int8 cas; // Cas hrany bila/cerna v radce
int8 stred; // Vystredeni kolecka
int16 odocounter; // Zaznamenani aktualniho stavu pocitadla odometrie
int16 last_log_odo; // Posledni stav odometrie poznamenany do logu
int16 last_log; // Cislo posledniho zaznamu v logu v EEPROM
int8 bb_h[MAXLOG]; // Cerna skrinka MSB
int8 bb_l[MAXLOG]; // Cerna skrinka LSB
int8 bb_f[MAXLOG]; // Cerna skrinka priznak (typ zaznamu)
int8 log; // Pocitadlo pro cernou skrinku
int8 rr; // Promenna na ulozeni Rozumne rychlost
int8 rrold;
int16 odo_preruseni, odo_cihla, odo_tunel; // Problemy na trati
 
// Zobrazeni jednoho byte na modulu LEDbar
inline void disp(int8 x)
{
int n;
 
for(n=0;n<=7;n++)
{
if (bit_test(x,0)) output_low(DATA); else output_high(DATA);
output_high(CP);
x>>=1;
output_low(CP);
}
}
 
// Blikani LEDbarem ve stilu Night Rider
void NightRider(int8 x)
{
int n,i,j;
 
for(j=0;j<x;j++)
{
i=0x01;
for(n=0;n<7;n++)
{
disp(i);
rotate_left(&i, 1);
delay_ms(40);
}
for(n=0;n<7;n++)
{
disp(i);
rotate_right(&i, 1);
delay_ms(40);
}
}
disp(i);
delay_ms(40);
i=0;
disp(i);
}
 
// Zaznam LOGu do EEPROM
void SaveLog()
{
int8 n,i,xlog;
 
i=0;
for(n=0;n<=(log*3);n+=3) // Ulozeni Black Boxu do EEPROM
{
write_eeprom(n,bb_f[i]);
write_eeprom(n+1,bb_h[i]);
write_eeprom(n+2,bb_l[i]);
i++;
};
if(log>0) {xlog=log-1;} else {xlog=0;};
write_eeprom(EEMAX,xlog); // Zapis poctu zaznamu na konec EEPROM
}
 
// Zaznam do Logu do RAM
void LogLog(int8 reason, int16 log_delay)
{
int16 timer_pom;
 
timer_pom=get_timer1(); // Timer se musi vycist atomicky
bb_l[log]=make8(timer_pom,0); // Zaznam
bb_h[log]=make8(timer_pom,1);
bb_f[log]=reason; // Typ zaznamu
if(log<(MAXLOG-1)) log++; // Ukazatel na dalsi zaznam
last_log_odo=timer_pom+log_delay; // Dalsi mereni nejdrive po ujeti def. vzdalenosti
rr=rrold; // Problem skoncil, znovu jed Rozumnou Rychlosti
}
 
void ReadBlackBox()
{
last_log=read_eeprom(EEMAX); // Kolik zaznamu mame od minule poznamenano?
{
int8 n,i;
 
i=0;
for(n=0;n<=last_log;n++)
{
if(read_eeprom(i)==0) odo_tunel=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
if(read_eeprom(i)==0xFF) odo_cihla=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
if((read_eeprom(i)>0) && (read_eeprom(i)<0xFF)) odo_preruseni=MAKE16(read_eeprom(i+2),read_eeprom(i+1));
}
}
}
 
 
// Brzdeni motorama stridou 1:1
void brzda()
{
int8 n,i;
 
set_pwm1_duty(0); // vypni PWM
set_pwm2_duty(0);
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_OFF);
for (n=0;n<200;n++)
{
output_low(MOT_L);
output_low(MOT_R);
output_high(MOT_1);
output_high(MOT_2);
delay_us(200);
output_high(MOT_L);
output_high(MOT_R);
output_low(MOT_1);
output_low(MOT_2);
delay_us(200);
}
output_low(MOT_L); // smer vpred
output_low(MOT_R);
setup_ccp1(CCP_PWM); // RC1 // Zapni PWM pro motory
setup_ccp2(CCP_PWM); // RC2
}
 
void SetServo(int8 angle)
{
int8 n;
 
for(n=0; n<10; n++)
{
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(angle);
delay_us(angle);
output_low(SERVO);
delay_ms(18);
}
}
 
inline void SetServoQ(int8 angle)
{
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(angle);
delay_us(angle);
output_low(SERVO);
}
 
// Couvni po narazu na naraznik
inline void bum()
{
set_pwm1_duty(0); // couvni, rovne dozadu
set_pwm2_duty(0);
output_high(MOT_L);
output_high(MOT_R);
disp(0xA5);
SetServo(CASAVR-CASMIN);
}
 
#include ".\diag.c"
 
//---------------------------- INT --------------------------------
#int_EXT
EXT_isr() // Preruseni od prekazky
{
unsigned int8 bearing, bearing_offset, delta_bearing;
 
set_pwm1_duty(0); // zabrzdi levym kolem, prave vypni
set_pwm2_duty(0);
output_high(MOT_L);
output_low(MOT_R);
// Ujistime se, ze prijaty signal je z naseho IR vysilace
output_high(IRTX); // Vypni LED na detekci prekazky
delay_ms(2);
if (IRRX) // stale nas signal?
{
output_low(MOT_L); // je odraz -> vpred
output_low(MOT_R);
return;
};
output_low(IRTX); // Zapni LED na detekci prekazky
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1); // 0-255 (odpovida 0-359)
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
bearing_offset=i2c_read(0); // Poznamenej hodnotu pred cihlou
i2c_stop();
 
delay_ms(9);
if (!IRRX) // stale nas signal?
{
output_low(MOT_L); // neni odraz -> vpred
output_low(MOT_R);
return;
};
 
rr=rrold; // Po cihle se pojede opet Rozumnou Rychlosti
if(stav!=cihla)
{
LogLog(0xFF,3); // Cihla
};
 
//!!! if(stav==cihla) while(true); // Zastav na furt, konec drahy
// if(stav==cihla) return; // Po druhe nic neobjizdej
// Pozor na rozjezd
 
if((stav==jizda)||(stav==cihla)) // Objed cihlu
{
#include ".\objizdka_L.c"
};
last_log_odo=get_timer1()+16; // Pul metru po cihle nezaznamenavej do LOGu
}
 
 
//---------------------------------- MAIN --------------------------------------
void main()
{
int8 offset; // Promena pro ulozeni offsetu
int8 r1; // Rychlost motoru 1
int8 r2; // Rychlost motoru 2
 
setup_adc_ports(ALL_ANALOG); // Zapnuti A/D prevodniku pro cteni kroutitek
setup_adc(ADC_CLOCK_INTERNAL);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // Casovac pro mereni casu hrany W/B v radce
setup_timer_1(T1_EXTERNAL); // Cita pulzy z odometrie z praveho kola
setup_timer_2(T2_DIV_BY_16,255,1); // Casovac PWM motoru
//!!! setup_timer_2(T2_DIV_BY_4,255,1); // Casovac PWM motoru
setup_ccp1(CCP_PWM); // RC1 // PWM pro motory
setup_ccp2(CCP_PWM); // RC2
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
 
set_tris_c(0b11111001); // Nastaveni vstup/vystup pro branu C, protoze se to nedela automaticky
 
set_pwm1_duty(0); // Zastav motory
set_pwm2_duty(0);
output_low(MOT_L); // Nastav smer vpred
output_low(MOT_R);
 
disp(0); // Zhasni LEDbar
 
if(BUMPER) // Kdyz nekdo na zacatku drzi naraznik, vymaz log a spust diagnostiku
{
diag();
}
 
output_low(IRTX); // Zapni LED na detekci prekazky
 
NightRider(1); // Zablikej, aby se poznalo, ze byl RESET
// Zaroven se musi pockat, nez se rozjede kamera, nez se do ni zacnou posilat prikazy
 
//... Nastaveni sonaru ...
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x02); // dosah
i2c_write(0x03); // n*43mm
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x01); // zesileni
i2c_write(0x01); // male, pro eliminaci echa z minuleho mereni
i2c_stop();
 
//... Nastaveni kamery ...
i2c_start(); // Soft RESET kamery
i2c_write(CAMERA_ADR); // Adresa kamery
i2c_write(0x12); // Adresa registru COMH
i2c_write(0x80 | 0x24); // Zapis ridiciho slova
i2c_stop();
 
i2c_start(); // BW
i2c_write(CAMERA_ADR);
i2c_write(0x28);
i2c_write(0b01000001);
i2c_stop();
 
/*
i2c_start(); // Contrast (nema podstatny vliv na obraz)
i2c_write(CAMERA_ADR);
i2c_write(0x05);
i2c_write(0xA0); // 48h
i2c_stop();
 
i2c_start(); // Band Filter (pokud by byl problem se zarivkama 50Hz)
i2c_write(CAMERA_ADR);
i2c_write(0x2D);
i2c_write(0x04 | 0x03);
i2c_stop();
*/
 
i2c_start(); // Fame Rate
i2c_write(CAMERA_ADR);
i2c_write(0x2B);
i2c_write(0x00); // cca 17ms (puvodni hodnota 5Eh = 20ms)
i2c_stop();
 
i2c_start(); // VSTRT
i2c_write(CAMERA_ADR);
i2c_write(0x19);
i2c_write(118); // prostredni radka
i2c_stop();
 
i2c_start(); // VEND
i2c_write(CAMERA_ADR);
i2c_write(0x1A);
i2c_write(118);
i2c_stop();
 
NightRider(1); // Musi se dat cas kamere na AGC a AEC
 
{ // Mereni expozice
int8 t1,t2;
 
i2c_start(); // Brightness, zacni od uplne tmy
i2c_write(CAMERA_ADR);
i2c_write(0x06);
i2c_write(0); // 80h default
i2c_stop();
delay_ms(50);
 
for(offset=0x04;offset<(255-0x04);offset+=0x04) // Zacni od jasu 10h
{
i2c_start(); // Brightness
i2c_write(CAMERA_ADR);
i2c_write(0x06);
i2c_write(offset); // 80h default
i2c_stop();
disp(offset);
delay_ms(50);
 
t1=0;
t2=0;
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z radky
delay_ms(5);
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z radky
set_timer0(0); // Vynuluj pocitadlo casu
if(!input(PIX)) continue;
while(input(PIX));
t1=get_timer0(); // Precti cas z citace casu hrany
set_timer0(0); // Vynuluj pocitadlo casu
while(!input(PIX));
t2=get_timer0();
 
if((t1>60) && (t1<140) && (t2>5) && (t2<=10)) break; // Vidis, co mas?
 
delay_ms(2); // Preskoc druhou radku z kamery
};
delay_ms(1000); // Nech chvili na displayi zmerenou hodnotu
}
 
set_adc_channel(CERVENA); // --- Kroutitko pro jas ---
delay_ms(1);
offset=read_adc();
offset &= 0b11111100; // Dva nejnizsi bity ignoruj
// offset += 0x70; // Jas nebude nikdy nizsi
disp(offset);
i2c_start(); // Brightness
i2c_write(CAMERA_adr);
i2c_write(0x06);
i2c_write(offset); // 80h default
i2c_stop();
delay_ms(1000); // Nech hodnotu chvili na displayi
 
set_adc_channel(ZELENA); // --- Kroutitko pro vykon motoru ---
delay_ms(1);
rr=read_adc()>>2; // 0-63 // Pokud by se zvetsil rozsah, tak zkontrolovat jakonasobeni!
rr+=27; // 27-90
//!!! rr=read_adc()>>1; // 0-128 // Pokud by se zvetsil rozsah, tak zkontrolovat jakonasobeni!
rrold=rr;
 
cas=CASAVR-CASMIN; // Inicializace promenych, aby neslo servo za roh
// a aby se to rozjelo jeste dneska
stav=start; // Jsme na startu
set_timer1(0); // Vynuluj citac odometrie
log=0; // Zacatek logu v cerne skrince
last_log_odo=0; // Posledni zaznam odometrie do logu
 
// ReadBlackBox(); // Vycteni zaznamu z Black Boxu
 
odo_cihla=ODODO_CIHLA-BRZDNA_DRAHA;
odo_tunel=ODODO_TUNEL-BRZDNA_DRAHA;
odo_preruseni=ODODO_PRERUSENI-BRZDNA_DRAHA;
 
// ........................... Hlavni smycka ................................
while(true)
{
int8 pom;
int8 n;
int8 gap;
int16 ododo;
 
gap=0; // Vynuluj pocitadlo preruseni
 
next_snap:
 
pom=0;
disable_interrupts(GLOBAL); //----------------------- Critical Section
while(input(HREF)); // Preskoc 1. radku
while(!input(HREF)); // Cekej nez se zacnou posilat pixely z 2. radky
set_timer0(0); // Vynuluj pocitadlo casu
while(input(HREF)) // Po dobu vysilani radky cekej na hranu W/B
{
// !!!!Dodelat rozpoznani cerne cary napric pro zastaveni ?
if(!input(PIX)) // Pokud se X-krat za sebou precetla CERNA
if(!input(PIX))
// if(!input(PIX))
{
pom=get_timer0(); // Precti cas z citace casu hrany
break;
};
};
while(input(HREF)); // Pockej na shozeni signalu HREF
 
if((pom<CASMAX) && (pom>CASMIN)) cas=pom; // Orizni konce radku
// Na konci obrazovaho radku to blbne. Jednak chyba od apertury
// a vubec to nejak na kraji nefunguje.
 
output_high(SERVO); // Odvysilani impuzu 1 az 2ms pro servo
delay_us(1000);
delay_us(stred);
delay_us(stred);
delay_us(stred);
delay_us(cas);
delay_us(cas);
output_low(SERVO);
 
// Elektronicky diferencial 1. cast
if(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimace
if(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoru
if(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92
 
enable_interrupts(GLOBAL); //----------------------- End Critical Section
 
if(pom==0) // Kamera nevidi caru, poznamenej to do logu
{
if((cas>(CASMIN+30))&&(cas<(CASMAX-30))) // Nebyla minule cara moc u kraje?
if(last_log_odo<get_timer1()) // Aby nebyly zaznamy v logu prilis huste, musi se napred neco ujet od minuleho zaznamu
{
gap++;
}
}
else
{
if(gap>=2) // Trva preruseni cary alespon 2 snimky?
{
LogLog(gap,8); // Dalsi mereni nejdrive po ujeti 24 cm
rr=rrold; // Preruseni cary skoncilo, znovu jed Rozumnou Rychlosti
}
gap=0;
};
 
if(!input(PROXIMITY) && ((stav==jizda)||(stav==cihla))) // Tunel
{
if(last_log_odo<get_timer1()) // Aby nebyly zaznamy v logu prilis huste, musi se napred neco ujet od minuleho zaznamu
{
LogLog(0xDD,16); // Priznak tunelu; dalsi mereni nejdrive po ujeti 48 cm
rr=rrold; // Vjeli jsme do tunelu, znovu jed rychle
}
};
 
//ODODO
ododo=get_timer1();
if((ododo>odo_preruseni)&&(ododo<(odo_preruseni+8))) rr=RR_PRERUSENI;
if((ododo>odo_cihla)&&(ododo<(odo_cihla+8))) rr=RR_PRERUSENI;
if((ododo>odo_tunel)&&(ododo<(odo_tunel+8))) rr=RR_PRERUSENI;
 
// Elektronicky diferencial 2. cast
if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeni
if (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN); // rozsah 1 az 92 pro rr=0 // rozsah 1 az 154 pro rr=63
 
//!!! pro zatuhle prevodovky
// r1<<=1; // Rychlost je dvojnasobna
// r2<<=1; // Rozsah 2 az 184 pro rr=0
 
if ((stav==jizda)||(stav==cihla)||(stav==rozjezd)) //||(stav==pocihle)) // Jizda
{
set_pwm1_duty(r1);
set_pwm2_duty(r2);
}
else
{
set_pwm1_duty(0); // Zastaveni
set_pwm2_duty(0);
};
 
if((stav==rozjezd)&&(get_timer1()>10)) // musi ujet alespon 31cm
{
ext_int_edge(H_TO_L); // Nastav podminky preruseni od cihly
INT0IF=0; // Zruseni predesle udalosti od startera
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
stav=jizda;
};
 
if(stav==start) // Snimkuje, toci servem a ceka na start
{
set_adc_channel(MODRA); // Kroutitko na vystredeni predniho kolecka
Delay_ms(1);
stred=read_adc();
if(!input(PROXIMITY))
{
disp(0x80);
while(input(PROXIMITY)); // Cekej, dokud starter neda ruku pryc
set_timer1(0); // Vynuluj citac odometrie
set_pwm1_duty(255); // Rychly rozjezd !!! Zkontrolovat na oscyloskopu
set_pwm2_duty(255);
disp(0x01);
while(get_timer1()<=4) // Ujed alespon 12cm
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(40);
if(read_adc()<THR) {cas=CASMIN; break;}; // Prejeli jsme caru vlevo
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(40);
if(read_adc()<THR) {cas=CASMAX; break;}; // Prejeli jsme caru vpravo
cas=CASAVR-CASMIN; // Cara je rovne
};
stav=rozjezd;
};
}
 
pom=0x80; // Zobrazeni pozice cary na displayi
for(n=CASMAX/8; n<cas; n+=CASMAX/8) pom>>=1;
disp(pom);
 
while(true) // Ve zbytku casu snimku cti krajni UV senzory a naraznik
{
if(BUMPER) // Sakra, do neceho jsme narazili a nevideli jsme to!
{
bum();
SaveLog(); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
set_pwm1_duty(200); // pomalu vpred
set_pwm2_duty(200);
output_low(MOT_L);
output_low(MOT_R);
cas=CASAVR-CASMIN;
};
set_adc_channel(LMAX); // Levy UV sensor
for(n=0;n<20;n++) if(input(HREF)) goto next_snap;
if(read_adc()<THR) cas=CASMIN;
set_adc_channel(RMAX); // Pravy UV sensor
for(n=0;n<20;n++) if(input(HREF)) goto next_snap;
if(read_adc()<THR) cas=CASMAX;
};
}
}
/roboti/istrobot/camerus/SW/876/zmensena brzdna draha na 0x15/diag.c
0,0 → 1,68
//--- Diagnostika cidel a vymazani EEPROM ---
void diag()
{
int8 n;
 
// Vymaz Black Box v EEPROM
for(n=0;n<255;n++) write_eeprom(n,0);
bb_l[0]=0; // Zapis na pozici 0 vzdalenost 0
bb_h[0]=0;
bb_f[0]=0;
write_eeprom(EEMAX,0); // Zapis do EEPROM pocet zaznamu 0, tedy jeden zaznam
for(n=0;n<=4;n++)
{
disp(0x55); // Blikni pro potvrzeni
delay_ms(200);
disp(0xAA);
delay_ms(200);
};
 
while(true)
{
if(!IRRX)
{
int8 ble;
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1);
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
ble=i2c_read(0);
i2c_stop();
disp(ble);
delay_ms(200);
}
else
{
i2c_start(); // Diagnostika sonaru
i2c_write(SONAR_ADR);
i2c_write(0x02); // dosah
i2c_write(0x03); // n*43mm
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x01); // zesileni
i2c_write(0x01); // male, pro eliminaci echa z minuleho mereni
i2c_stop();
 
i2c_start(); // Sonar Ping
i2c_write(0xE0);
i2c_write(0x0);
i2c_write(0x51); // 50 mereni v palcich, 51 mereni v cm, 52 v us
i2c_stop();
delay_ms(100);
i2c_start(); // Odraz ze sonaru
i2c_write(0xE0);
i2c_write(0x3);
i2c_stop();
i2c_start();
i2c_write(0xE1);
n=i2c_read(0);
i2c_stop();
disp(n); // Zobrazeni hodnoty ze sonaru a zaroven diagnostika predniho IR cidla
delay_ms(200);
}
}
}
/roboti/istrobot/camerus/SW/876/zmensena brzdna draha na 0x15/objizdka_L.c
0,0 → 1,183
// **** Objeti cihly vlevo **** LLLL
 
#define L_TOUCH 1 // Cara vlevo
#define R_TOUCH 2 // Cata vpravo
#define B_TOUCH 3 // Both
 
int8 n;
int8 r1,r2,rr;
int8 touch;
enum okolo_cihly {pred_carou,na_care,po_care};
okolo_cihly ridic; // V jakem jsme stavu objizdeni cihly
int8 vzdalenost;
int8 visualisation;
 
stav=cihla; // Dalsi prekazku uz nezaznamenavej (je to s velkou pravdepodobnosti cil)
odocounter=get_timer1();
 
cihla:
 
rr=RR_CIHLA; //!!! Rozumna rychlost pro objizdeni cihly (bylo by lepsi rychlost zvysovat) a pri detekci pohybu zase snizit
disp(0x99);
set_pwm1_duty(0); // zabrzdi levym kolem, prave vpred
set_pwm2_duty(255);
output_high(MOT_L);
output_low(MOT_R);
while(true) // Na zacatku se vyhni cihle, zatoc co muzes
{
cas=CASMIN-5; // jeste vic nez hodne do leva
 
if(BUMPER) // Narazili jsme do cihly, musime couvnout!
{
bum();
SaveLog(); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
brzda();
goto cihla; // Znovu zacni cihlu objizdet
};
 
set_pwm1_duty(0);
set_pwm2_duty(200); // !!! mozna prilis maly vykon pro rozjezd pro zatuhlou prevodovku
output_high(MOT_L); // leve kolo reverz
output_low(MOT_R); // prave kolo vpred
if(get_timer1()>(odocounter+5)) // konec zatacky?
{
disp(0x66);
break;
}
SetServoQ(cas);
delay_ms(18);
};
 
//------ Objeti cihly v konstantni vzdalenosti ------
touch=0; // Indikator detekce cary pri objizdeni
ridic=pred_carou;
cas=CASAVR-CASMIN; // rovne
output_low(MOT_L); // vpred
output_low(MOT_R);
visualisation=0;
while(true)
{
if(BUMPER) // Narazili jsme do cihly, musime couvnout!
{
bum();
SaveLog(); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
set_pwm1_duty(160); // vpred
set_pwm2_duty(160);
output_low(MOT_L);
output_low(MOT_R);
cas=CASMIN;
};
 
delta_bearing=bearing-bearing_offset;
visualisation=(delta_bearing & 0xF0) | (visualisation & 0x0F);
if(IRRX) // hrozi celni srazka s cihlou v prubehu objizdeni
{
cas=CASMIN;
}
else
{
if((vzdalenost!=0)||!input(PROXIMITY)||((delta_bearing>60)&&(delta_bearing<128))) // Udrzovani konstantni vzdalenosti od cihly
{
if(cas>(CASMIN+30)) cas-=30;
}
else
{
if(cas<(CASMAX-30)) cas+=30;
};
};
// Elektronicky diferencial
if(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimace
if(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoru
if(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92
 
if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeni
if (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN);
 
//!!! pro zatuhle prevodovky
// r1<<=1; // Rychlost je dvojnasobna
// r2<<=1; // Rozsah 2 az 184 pro rr=0
 
set_pwm1_duty(r1); // Nastav rychlost motoru
set_pwm2_duty(r2);
 
SetServoQ(cas);
 
i2c_start(); // Sonar Ping
i2c_write(SONAR_ADR);
i2c_write(0x0);
i2c_write(0x52); // mereni v us
i2c_stop();
 
for(n=1;n<=90;n++) // 18ms testovani cary do dalsi korekce serva
{
set_adc_channel(LMAX);
delay_us(100);
if(read_adc()<THR) touch|=L_TOUCH;
set_adc_channel(RMAX);
delay_us(100);
if(read_adc()<THR) touch|=R_TOUCH;
};
 
i2c_start(); // Odraz ze sonaru
i2c_write(SONAR_ADR);
i2c_write(0x3);
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR+1);
vzdalenost=i2c_read(0);
i2c_stop();
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1); // uhel 0-255
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
bearing=i2c_read(0);
i2c_stop();
 
if(touch==L_TOUCH) visualisation|=0x2;
if(touch==R_TOUCH) visualisation|=0x1;
if((touch==B_TOUCH)&&(ridic==pred_carou)) ridic=na_care;
if((ridic==na_care)&&(touch==0)) break;
if(ridic==na_care) touch=0;
disp(visualisation);
};
disp(0xC3);
 
set_pwm1_duty(0); //!!! pred zatuhlejma prevodovkama tam bylo 20 a 200
set_pwm2_duty(240);
output_high(MOT_L);
output_low(MOT_R);
delay_us(40);
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie
while (true) // Znovu se musime dotknout cary
{
for(n=1;n<=90;n++) // 18ms testovani cary do dalsi korekce serva
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(100);
if(read_adc()<THR) // Dotkli jsme se levym senzorem
{
disp(0xE0);
cas=CASAVR-CASMIN; // nastavime, ze cara je rovne
goto cara;
};
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(100);
if((get_timer1()>=(odocounter+2)) && (read_adc()<THR)) // Pravym senzorem nesmime caru prejet!
{
disp(0x07);
cas=CASMAX; // kdyz prejedem, tak nastavime, ze cara je vpravo
goto cara;
};
}
SetServoQ(CASMIN-5); // max. max. doleva L
}
 
cara:
 
output_low(MOT_L); // oba motory vpred
output_low(MOT_R);
/roboti/istrobot/camerus/SW/876/objizdka_L.c
0,0 → 1,183
// **** Objeti cihly vlevo **** LLLL
 
#define L_TOUCH 1 // Cara vlevo
#define R_TOUCH 2 // Cata vpravo
#define B_TOUCH 3 // Both
 
int8 n;
int8 r1,r2,rr;
int8 touch;
enum okolo_cihly {pred_carou,na_care,po_care};
okolo_cihly ridic; // V jakem jsme stavu objizdeni cihly
int8 vzdalenost;
int8 visualisation;
 
stav=cihla; // Dalsi prekazku uz nezaznamenavej (je to s velkou pravdepodobnosti cil)
odocounter=get_timer1();
 
cihla:
 
rr=RR_CIHLA; //!!! Rozumna rychlost pro objizdeni cihly (bylo by lepsi rychlost zvysovat) a pri detekci pohybu zase snizit
disp(0x99);
set_pwm1_duty(0); // zabrzdi levym kolem, prave vpred
set_pwm2_duty(255);
output_high(MOT_L);
output_low(MOT_R);
while(true) // Na zacatku se vyhni cihle, zatoc co muzes
{
cas=CASMIN-5; // jeste vic nez hodne do leva
 
if(BUMPER) // Narazili jsme do cihly, musime couvnout!
{
bum();
SaveLog(); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
brzda();
goto cihla; // Znovu zacni cihlu objizdet
};
 
set_pwm1_duty(0);
set_pwm2_duty(255); // !!! mozna prilis maly vykon pro rozjezd pro zatuhlou prevodovku
output_high(MOT_L); // leve kolo reverz
output_low(MOT_R); // prave kolo vpred
if(get_timer1()>(odocounter+5)) // konec zatacky?
{
disp(0x66);
break;
}
SetServoQ(cas);
delay_ms(18);
};
 
//------ Objeti cihly v konstantni vzdalenosti ------
touch=0; // Indikator detekce cary pri objizdeni
ridic=pred_carou;
cas=CASAVR-CASMIN; // rovne
output_low(MOT_L); // vpred
output_low(MOT_R);
visualisation=0;
while(true)
{
if(BUMPER) // Narazili jsme do cihly, musime couvnout!
{
bum();
SaveLog(); // Zapis Black Boxu do EEPROM
delay_ms(TUHOS); //!!! Zatuhle prevodovky
set_pwm1_duty(160); // vpred
set_pwm2_duty(160);
output_low(MOT_L);
output_low(MOT_R);
cas=CASMIN;
};
 
delta_bearing=bearing-bearing_offset;
visualisation=(delta_bearing & 0xF0) | (visualisation & 0x0F);
if(IRRX) // hrozi celni srazka s cihlou v prubehu objizdeni
{
cas=CASMIN;
}
else
{
if((vzdalenost!=0)||!input(PROXIMITY)||((delta_bearing>60)&&(delta_bearing<128))) // Udrzovani konstantni vzdalenosti od cihly
{
if(cas>(CASMIN+30)) cas-=30;
}
else
{
if(cas<(CASMAX-30)) cas+=30;
};
};
// Elektronicky diferencial
if(cas<CASAVR) {r1=cas-CASMIN; r2=CASAVR-CASMIN;}; // Normovani vystupni hodnoty radkoveho snimace
if(cas==CASAVR) {r1=cas-CASMIN; r2=cas-CASMIN;}; // pro rizeni rychlosti motoru
if(cas>CASAVR) {r1=CASAVR-CASMIN; r2=CASMAX-cas;}; // Rozsah 1 az 92
 
if (r1>(CASAVR-CASMIN-rr)) r1=(r1<<1)+rr-(CASAVR-CASMIN); // Neco jako nasobeni
if (r2>(CASAVR-CASMIN-rr)) r2=(r2<<1)+rr-(CASAVR-CASMIN);
 
//!!! pro zatuhle prevodovky
// r1<<=1; // Rychlost je dvojnasobna
// r2<<=1; // Rozsah 2 az 184 pro rr=0
 
set_pwm1_duty(r1); // Nastav rychlost motoru
set_pwm2_duty(r2);
 
SetServoQ(cas);
 
i2c_start(); // Sonar Ping
i2c_write(SONAR_ADR);
i2c_write(0x0);
i2c_write(0x52); // mereni v us
i2c_stop();
 
for(n=1;n<=90;n++) // 18ms testovani cary do dalsi korekce serva
{
set_adc_channel(LMAX);
delay_us(100);
if(read_adc()<THR) touch|=L_TOUCH;
set_adc_channel(RMAX);
delay_us(100);
if(read_adc()<THR) touch|=R_TOUCH;
};
 
i2c_start(); // Odraz ze sonaru
i2c_write(SONAR_ADR);
i2c_write(0x3);
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR+1);
vzdalenost=i2c_read(0);
i2c_stop();
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1); // uhel 0-255
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
bearing=i2c_read(0);
i2c_stop();
 
if(touch==L_TOUCH) visualisation|=0x2;
if(touch==R_TOUCH) visualisation|=0x1;
if((touch==B_TOUCH)&&(ridic==pred_carou)) ridic=na_care;
if((ridic==na_care)&&(touch==0)) break;
if(ridic==na_care) touch=0;
disp(visualisation);
};
disp(0xC3);
 
set_pwm1_duty(0); //!!! pred zatuhlejma prevodovkama tam bylo 20 a 200
set_pwm2_duty(255);
output_high(MOT_L);
output_low(MOT_R);
delay_us(40);
odocounter=get_timer1(); // Poznamenej aktualni stav odometrie
while (true) // Znovu se musime dotknout cary
{
for(n=1;n<=90;n++) // 18ms testovani cary do dalsi korekce serva
{
set_adc_channel(LMAX); // Levy UV sensor
delay_us(100);
if(read_adc()<THR) // Dotkli jsme se levym senzorem
{
disp(0xE0);
cas=CASAVR-CASMIN; // nastavime, ze cara je rovne
goto cara;
};
set_adc_channel(RMAX); // Pravy UV sensor
delay_us(100);
if((get_timer1()>=(odocounter+2)) && (read_adc()<THR)) // Pravym senzorem nesmime caru prejet!
{
disp(0x07);
cas=CASMAX; // kdyz prejedem, tak nastavime, ze cara je vpravo
goto cara;
};
}
SetServoQ(CASMIN-5); // max. max. doleva L
}
 
cara:
 
output_low(MOT_L); // oba motory vpred
output_low(MOT_R);
/roboti/istrobot/camerus/SW/876/diag.c
0,0 → 1,68
//--- Diagnostika cidel a vymazani EEPROM ---
void diag()
{
int8 n;
 
// Vymaz Black Box v EEPROM
for(n=0;n<255;n++) write_eeprom(n,0);
bb_l[0]=0; // Zapis na pozici 0 vzdalenost 0
bb_h[0]=0;
bb_f[0]=0;
write_eeprom(EEMAX,0); // Zapis do EEPROM pocet zaznamu 0, tedy jeden zaznam
for(n=0;n<=4;n++)
{
disp(0x55); // Blikni pro potvrzeni
delay_ms(200);
disp(0xAA);
delay_ms(200);
};
 
while(true)
{
if(!IRRX)
{
int8 ble;
 
i2c_start(); // Cteni kompasu
i2c_write(COMPAS_ADR);
i2c_write(0x1);
i2c_stop();
i2c_start();
i2c_write(COMPAS_ADR+1);
ble=i2c_read(0);
i2c_stop();
disp(ble);
delay_ms(200);
}
else
{
i2c_start(); // Diagnostika sonaru
i2c_write(SONAR_ADR);
i2c_write(0x02); // dosah
i2c_write(0x03); // n*43mm
i2c_stop();
i2c_start();
i2c_write(SONAR_ADR);
i2c_write(0x01); // zesileni
i2c_write(0x01); // male, pro eliminaci echa z minuleho mereni
i2c_stop();
 
i2c_start(); // Sonar Ping
i2c_write(0xE0);
i2c_write(0x0);
i2c_write(0x51); // 50 mereni v palcich, 51 mereni v cm, 52 v us
i2c_stop();
delay_ms(100);
i2c_start(); // Odraz ze sonaru
i2c_write(0xE0);
i2c_write(0x3);
i2c_stop();
i2c_start();
i2c_write(0xE1);
n=i2c_read(0);
i2c_stop();
disp(n); // Zobrazeni hodnoty ze sonaru a zaroven diagnostika predniho IR cidla
delay_ms(200);
}
}
}
/roboti/istrobot/camerus/SW/876/camerus.PJT
0,0 → 1,57
[PROJECT]
Target=camerus.HEX
Development_Mode=
Processor=0x876A
ToolSuite=CCS
 
[Directories]
Include=C:\Program Files\PICC\devices\;C:\Program Files\PICC\Dr
Library=
LinkerScript=
 
[Target Data]
FileList=C:\dokumenty\svn\Kaklik\roboti\istrobot\camerus\SW\876\camerus.c
BuildTool=C-COMPILER
OptionString=+FM
AdditionalOptionString=
BuildRequired=1
 
[camerus.c]
Type=4
Path=
FileList=
BuildTool=
OptionString=
AdditionalOptionString=
 
[mru-list]
1=camerus.c
 
[Windows]
0=0000 camerus.c 0 0 796 451 3 0
 
[Opened Files]
1=C:\dokumenty\svn\Kaklik\roboti\istrobot\camerus\SW\876\camerus.c
2=C:\dokumenty\svn\Kaklik\roboti\istrobot\camerus\SW\876\camerus.h
3=C:\Program Files\PICC\devices\16F876A.h
4=C:\dokumenty\svn\Kaklik\roboti\istrobot\camerus\SW\876\objizdka_L.c
5=C:\dokumenty\svn\Kaklik\roboti\istrobot\camerus\SW\876\diag.c
6=
[debugperif]
selected=Analog/Digital Conv
[debugram]
autoread=1
[debugeedata]
autoread=1
[debugbreak]
count=0
[pcwdebug]
watchcol0=75
[debugwatch]
count=0
[debugexpr]
expr=
sideeffects=0
[Units]
Count=1
1=C:\dokumenty\svn\Kaklik\roboti\istrobot\camerus\SW\876\camerus.c (main)
/roboti/istrobot/camerus/SW/876/camerus.h
0,0 → 1,16
#include <16F876A.h>
#device adc=8
 
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
 
#use delay(clock=20000000)
#use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3,force_hw)
 
/roboti/istrobot/camerus/SW/876
Property changes:
Added: svn:ignore
+*.bak
+*.BAK
+*.cof
+*.err
+*.hex
+*.lst
+*.sta
+*.sym
+*.tre
/roboti/istrobot/camerus/DOC/camerus.pdf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/camerus/DOC/Camerus.doc
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/camerus/DOC/CAMERUS.DSN
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/camerus/DOC/prevodovky/prevodovka.fcb
0,0 → 1,137
G90 G40
 
M40
M6 T1
M3 S6000
 
 
 
G0 X0Y0 Z2.5
G1 Z-3.4 F100.0
G0 Z50.
X12.49 Y-10.
Z2.5
G1 Z-3.4
G0 Z50.
X21 Y-25.4
Z2.5
G1 Z-3.4
G0 Z50.
X12.49
Z2.5
G1 Z-3.4
G0 Z50.
X4
Z2.5
G1 Z-3.4
G0 Z50.
M30
M9
M6 T2
M3 S6000
G0 X-3.071 Y-10.594
G0 Z2.5
G1 Z0 F100.0
X-7.035 Y-11.131 Z-0.5
X-5.053 Y-10.863
X-3.071 Y-10.594
G2 X-1.383 Y-11.879 I-2.87 J-12.081
G1 X0.599 Y-26.511 F200.0
G3 X24.381 I12.49 J-24.9
G1 X26.363 Y-11.879
G3 X4.84 Y1.725 I12.49 J-10.
G2 X3.435 Y2.05 I4.293 J2.563
G3 X-1.249 Y-3.8 I0 J0
G2 X-0.625 Y-5.1 I-1.561 J-4.75
G3 X-1.383 Y-11.879 I12.49 J-10.
G2 X-2.668 Y-13.567 I-2.87 J-12.081 F100.0
G1 X-3.071 Y-10.594 F200.0
X-7.035 Y-11.131 Z-1. F100.0
X-5.053 Y-10.863
X-3.071 Y-10.594
G2 X-1.383 Y-11.879 I-2.87 J-12.081
G1 X0.599 Y-26.511 F200.0
G3 X24.381 I12.49 J-24.9
G1 X26.363 Y-11.879
G3 X4.84 Y1.725 I12.49 J-10.
G2 X3.435 Y2.05 I4.293 J2.563
G3 X-1.249 Y-3.8 I0 J0
G2 X-0.625 Y-5.1 I-1.561 J-4.75
G3 X-1.383 Y-11.879 I12.49 J-10.
G2 X-2.668 Y-13.567 I-2.87 J-12.081 F100.0
G1 X-3.071 Y-10.594 F200.0
X-7.035 Y-11.131 Z-1.5 F100.0
X-5.053 Y-10.863
X-3.071 Y-10.594
G2 X-1.383 Y-11.879 I-2.87 J-12.081
G1 X0.599 Y-26.511 F200.0
G3 X24.381 I12.49 J-24.9
G1 X26.363 Y-11.879
G3 X4.84 Y1.725 I12.49 J-10.
G2 X3.435 Y2.05 I4.293 J2.563
G3 X-1.249 Y-3.8 I0 J0
G2 X-0.625 Y-5.1 I-1.561 J-4.75
G3 X-1.383 Y-11.879 I12.49 J-10.
G2 X-2.668 Y-13.567 I-2.87 J-12.081 F100.0
G1 X-3.071 Y-10.594 F200.0
X-7.035 Y-11.131 Z-2. F100.0
X-5.053 Y-10.863
X-3.071 Y-10.594
G2 X-1.383 Y-11.879 I-2.87 J-12.081
G1 X0.599 Y-26.511 F200.0
G3 X24.381 I12.49 J-24.9
G1 X26.363 Y-11.879
G3 X4.84 Y1.725 I12.49 J-10.
G2 X3.435 Y2.05 I4.293 J2.563
G3 X-1.249 Y-3.8 I0 J0
G2 X-0.625 Y-5.1 I-1.561 J-4.75
G3 X-1.383 Y-11.879 I12.49 J-10.
G2 X-2.668 Y-13.567 I-2.87 J-12.081 F100.0
G1 X-3.071 Y-10.594 F200.0
X-7.035 Y-11.131 Z-2.5 F100.0
X-5.053 Y-10.863
X-3.071 Y-10.594
G2 X-1.383 Y-11.879 I-2.87 J-12.081
G1 X0.599 Y-26.511 F200.0
G3 X24.381 I12.49 J-24.9
G1 X26.363 Y-11.879
G3 X4.84 Y1.725 I12.49 J-10.
G2 X3.435 Y2.05 I4.293 J2.563
G3 X-1.249 Y-3.8 I0 J0
G2 X-0.625 Y-5.1 I-1.561 J-4.75
G3 X-1.383 Y-11.879 I12.49 J-10.
G2 X-2.668 Y-13.567 I-2.87 J-12.081 F100.0
G1 X-3.071 Y-10.594 F200.0
X-7.035 Y-11.131 Z-3. F100.0
X-5.053 Y-10.863
X-3.071 Y-10.594
G2 X-1.383 Y-11.879 I-2.87 J-12.081
G1 X0.599 Y-26.511 F200.0
G3 X24.381 I12.49 J-24.9
G1 X26.363 Y-11.879
G3 X4.84 Y1.725 I12.49 J-10.
G2 X3.435 Y2.05 I4.293 J2.563
G3 X-1.249 Y-3.8 I0 J0
G2 X-0.625 Y-5.1 I-1.561 J-4.75
G3 X-1.383 Y-11.879 I12.49 J-10.
G2 X-2.668 Y-13.567 I-2.87 J-12.081 F100.0
G1 X-3.071 Y-10.594 F200.0
X-7.035 Y-11.131 Z-3.5 F100.0
X-5.053 Y-10.863
X-3.071 Y-10.594
G2 X-1.383 Y-11.879 I-2.87 J-12.081
G1 X0.599 Y-26.511 F200.0
G3 X24.381 I12.49 J-24.9
G1 X26.363 Y-11.879
G3 X4.84 Y1.725 I12.49 J-10.
G2 X3.435 Y2.05 I4.293 J2.563
G3 X-1.249 Y-3.8 I0 J0
G2 X-0.625 Y-5.1 I-1.561 J-4.75
G3 X-1.383 Y-11.879 I12.49 J-10.
G2 X-2.668 Y-13.567 I-2.87 J-12.081 F100.0
G0 z50
M6 T1
G0 X0 Y0 Z50
 
 
M30
/roboti/istrobot/camerus/DOC/prevodovky/README.txt
0,0 → 1,3
Pøevodovka 5:1 pro motor speed 300
 
Pøi zalepování ložisek je nutno dbát, aby ložisko v èele u motoru bylo na stranì motoru srovnáno s rovinou èela, jinak by docházelo k vyklánìní osy pøevodovky.
/roboti/istrobot/camerus/DOC/Fotky/P3110001.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/camerus/DOC/Fotky/P3110002.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/camerus/DOC/Fotky/P3110003.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/camerus/DOC/Fotky/P3110004.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/camerus/DOC/Fotky/P3180013.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/camerus/DOC/Fotky/P3180014.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/camerus/DOC/Fotky/P3180015.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/camerus/DOC/Fotky/P3180024.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/camerus/DOC/Fotky/P3180025.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/camerus/DOC/Fotky/P3180026.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/camerus/DOC/Fotky/P3180027.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/camerus/DOC/Fotky/P3180028.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/camerus/ToDo.txt
0,0 → 1,11
- Tlaèítko na vypnutí, pøípadnì (IRDA)
- vyrobit modul na oci
 
- Udìlat podsvìtlení, aby se robot líbil porotì.
+- modul s LED, nebo neosadit stabilizator do modulu LEDrobot
+
+- vymyslet postup kalibrace kamery (jak vizualizovat co kamera vidi)
+ - co pouzit LEDbar?
+
+- projit problemy lonske konstrukce
/roboti/istrobot/camerus/HW/CAM_AMA/BOARD.pdf
0,0 → 1,159
%PDF-1.3
%Ç쏢
5 0 obj
<</Length 6 0 R/Filter /FlateDecode>>
stream
+óIššrÐJÒ˹Zj»ç—³°è$g–H›KƒjÒPC>g¥DÝÖM*¦m¸vaŒ¸ÎAwj2QéЈŠÓ`Ë'Ã%K­cöNò“iXÎÊÄêâ­[JÍ"M4CC¤vsaÙ
+­(Ÿ~¯±Ú±¯­hÿ\Èã&õ*ÃïêW)†½¢¢cºJÓU[Þ9]¥\Û«¾"㦹ÛtUGãÅ骎MϜ`
+Z·ÞHòþœpßÆ
+ SMʘj
+Z&½³¢ºî†NS@“t§[æ°é%ͽ2Ê$±YNÑKÂTSpšnt>Ïwb1ס'7égQ¯æÁ)
+Z&íòlwýp»ÉGÞ1]5øŸØïöjziÁÍÆIWâ y­lüô èkƒÔ6ønoÔF¥»†mM'CûVÕ7
+Ö'ñ½…Û%‰>ºÎAö^«®²äáÄN9yo1úÜᵅÓ
+óhLÍ9h™TÞ@ôdØþ³™oåá)]IŠ3~ªÆ`ydhå¥üL%‡8Í¢o‚tIÞÍ,X™  {³ôf2³Pz`ðkf1'÷×S‚ƒÌ,xÁ6:›úfyJW’šYƒå™f̓s͂=®Z[&ΒÑsÁ؆Œ¹M©-<UµEyú8õ çV“Jº¨-$>)¼´ššsÐ2)¾d¾
+O]½¾†çá)]I*¥¼ëɎ›Ö/åg*qP2‹Ö–Y·ø¼©zU£¶ð㥇Y´¶8™Y(c ¶Ž0‹}Þ™YP[è¶{š´¶8­$5³ Ë3Í,šç ®9îðDm©ðáóS¾ŸpíÖ^¨%N•¾ÁDzštTÓ5¼¶Tx9hjÎAˤ§¬Z[˜kKpÐJRÑ{jmÑrÞ³sµÔ8(™EûF˜ÂOÁ»™Ežº.ö0 kKp™…ÒQM×ðÚÂBkjÎAf©-4K?Íý ³<¥+IÍ,ˆÁrN3‹-"ñ%â ¢l[ê==Ñi=Ï
+eÛ¢Ì3HŒƒpfŠµ8e·žˆ¤½€ñ•8h™½ÇØõlW¤ §¿:-—²É=­'byD——ò3•8(™ÅF†[ôDäÝ̂¶…Åô0‹¶-ÎAfJwë‰HG˜Åú=ã 3 {.áš„<éri˜m Ë3Í,šç ݔ‰9“›2ñmI¯cò][
+<B¤Ž¨3j‹1Vúœƒ°rš§šÝµE‰>Îð±ÔŒƒ–IOñ³.‡zëYÂÃóð”®$½}·ÜÙº¿¢”Ÿ©ÄAÉ,¬- ²Ý¥àÝÌ"uD÷Žö0 kKp™…R| ïfÛẑšq™EÚš¥Ÿf€~†YžÒ•¤fÆ@y¦™Åò`Ä&'$`vM&U_ÿþ?(=&ûϤç™>÷°ï@Ïç9‰Ÿ¡Ò'ᬜ}™2O'5’Óv†KqbܘFzè«“ÎAˤS4`]ç‚"…óˆ<<¤+Iq¨­o²<Ðe¥üL%â‚UÛÜ,\$±Å¢MÍÒë©fárÍbÌE 㠙°:\:Ô,J\°âacLÍ9h™tŠ†CÍ¢)À,ÁA+IEï©fÑòˆ./åg*qmœ·d
+–¢Lì>M³(Ÿ1Ӎ™l#L隱pú t‘t¦ÛøJ´\
+f¦@³8-—r· òŽùm–í|E)?S‰ƒôCúõºX©¶Áé˜%-VZe²XzJ„Ž•ÞÆÖãLƒy¦|ùÍ ×þ#ô›g:§ÊÍí[Þª®]hˆÆú–ŽÇÂodúeÞxúV”!ôVhbçñŒ ±X9„Ö±XšÎˆœ­d'^¢•”Ó1U/çgÜóoç+qÐÒó#(ŁÓh×s ¯ÄAˤ²˜;§p.)OŠ+ž‡§t%é¥g ËVê+Jù™JgÙ¹£÷ûpôþp't¸ÙÿOrNÿHîòï?r—ÿù/96¤cC%M©¦øúÛ+Ƀ4¾ðþŽøHG¼ÿ訂/÷æÇvý»íá ÞqXoÔç^xï?ò“2à>þÒýú®_yû%ÏÀä-8_º™ê#yC¾¿zCâã­ª'¸zCú×`ñ/Góu¬¯ðdüüO=›òIyÄ0Rïwõ7¶˜Õ©ØsÖÍlv<Å_ó-ýí/ëË<XuC·y¸ZilÓÞýör?X㠕¼fDsñM|É÷ýGþ¸ØúÕý—îá{ýÊï7ûëv»ð&Îoù–Þò¿â“üó_ÿv„¬“¾ï[Ä·_Å7ë𼮪Å|Éßÿ¿ñßx…ÿÞçûw)'Ÿöú$õè¯Z£›mm6¯úªšéÏ~×cÿ#!ðþÎøHg¼ÿè,ƒ;©¡s–äð[}¿:Ïáq"Ήðg`'Jä3'ò9é¬
+>Ò ï?:cáãëqí¥P<\u¾"œñKwH”2ðbV–Î‰Eœµ—77Äö
+1Gç"ŽÎZÌ¥™.úÆAx7ç¦_XócJ̹Z–ÈÌ%Û²‹æ¤ië!¿lýeWE*÷—¹¤·W8§þçô£™t×ö+ËÝõüwŽåÃ¥ã/ä|¤œ+­ß:áú49óÅjs_ׯÜþý»ã燈>ÿ¼ÄA׏ÇñÓޚoGð€ƒãISsJWÙšÿÆ1 éà‡÷?pðÇJAKþõ(~÷Ët¸Esê${W¿Žñ‘áxÿÑ!~¼.›ñc=®_ûáß??,.»Íjƒ4Bws'}ð®õÂh{åLìX“óqÀɇŒ2Cóß80å#áòþŽpùHGɼÿè(8@ïþ þö‘6?×ÇãÒ!::Jýف<?;°ç§c…n}Ðz4Ñ_<xèWÇ
+I™äõ“é£wºÜìú‘¯?‹+Ñì¢4|»Övð
+µwºdíúŅkËÙº_ØÖíbµv\§¾îÎ9-—ÚµoÏKæ>qõÜǏ¸´s“»_U—/³›~ÁÝôKéô:¼þ
+wîîKQõ@|·Ÿ˜×ƒœÌ(ñóù§£-vˆáûI÷6oί¼™ÞG›1øuÊZ²ˆa„ƒÓ,b1‘G9|XÞ8c ÌCkŒƒ–Ieƀeî§ë+YçȔkè“Y[Ra#¼:7€u_™kzëáÂ2Ç$sZ< õNIIæ´ð¥bsZXsÖ9­Éù-Ì$9-½P]¥xw7'-Ãd®—¬ïdÑÇ=ðCâcŽj3ªxŽÎAœ­Û“>î>¼säëf”êl/MbþÌ#筗™ë¥*Ê÷ÓùF»ý3Ÿ{ü’s·ÎAË¥’é,9á12¨×“{@ª¤åb\Ýn©I*8ИÒnéّ!Z3ô-DÍБ¥ŒåyºŽ™gˆqvïàî.XÍÝ]*—·úd¾[ ³8ÎA뻾’ôΐ-“îÐR9ÐT}œ»wb»thli—°³f×sA+ùAºÁþ£vÿ%6å/ çòïƧ`d֛ÚÚ1¾Úà·)öqã|Ó¿¦™ré#íöËà ÎKìQƲGU.ñåœT 0w=¯Ç/1•ÊT°×¤Û×=×tî>ù4)V—ó?ӌ>ÒåAëRqEF:Ԃõ
+͟ÊeßH†Ù–>|ìsnðn<xÄ?ݑ¥x؛×CҌ+øИ\©±+Zòý ¤‡Ùèw)Ÿ\E¼œeljÑr)ö™l\›lzŒÝÁü”¯R®RÏi+œ\±å
+gȹ¶+š°oÏ9(y®š'ð|é>@÷émêㆵK;²þ«êíªûã.çݽYéíK¦×–qPÜ%
+Ö3iÀ§{잮K}‡ëWéJÒÈ%bìÔk¤©)­$uBæRIFÍ0™Mÿür¸¿ø$¹]‘̓íºlu÷EºÇl(¨ó•8ȝ{)=L—¹ù~»(S9h¹´ù•™Ý݇{äá!]IN<£UÓe¥üL%¢)¹Î…¯ÜœÑ/~ÅéŽÐ¿e•§yÓ÷Vï@=ƒM^ô¬Ã‰'Ä­$½œáë[8Bø™×o¾µuO÷ºþË¥-ÅÈ7îç}±‡k8"—ÆWâ åÒÃ¥óöáå£ú‡¿13m´\*ÉàùöËõjÜí«t%i\®kNxz¹®n*Ëu÷$]Iê®ÞtiÖ¥aK¡¦<蕻Û×(ÅiR+}”R͒ý£ãž`ñ „ŸëdºMø‹'sºŸøÃ¿)wêiW%±Ê‹î;:œôNi堕¤—3¼uۓÔoW9Rë¯ïÞ¼í7Xÿü–ìæ^¶”nV¿•˜_ã+qÐréáÒù
+Kñ1¨Ûnv$¶£ùw_PÍWŒ›s¯9Ç¥å_œ_醻ks¢®©èæÒ5ï_ÝTã:ù},„ÜýÍ¡C¬Ñré®oaU·×áµö)]IŽ±ö¾P©û›ÃtV’^ÎíeºŠ§VRŠ¿9ÏöæPj¥R~ÆÉ`î{¤sð‚õ³-éÁ<üP·’ÌÃÏ3Qö`Ô ³p—WyÙÙ¹ÎAËýRE:uåɈ{¿Œ¯ÄAË¥Ø3¶ñ+ÙR@Óç´’ôòºßKuõȃqÐJÒ˹'Õ(å'O
+Ôš§|3åW÷иëòÃïåEܒʻ<¹}UYåU¤=œô¾P堕¤—3\6ǓÔysXóNß]:y'²ñÏn@mL¹¹´zj5å·¦œUÏ{My¯^Îêeo©yª˜ÿ5ÏÎé]TpÐr).~íìÍST¯€Ý¿JW’Æ%²æ¦º¼ã
+ZIz9w÷V­žZMyЋ©÷¯1 ­»´¹.ïÀa–ìð÷áJMÃÄ1kgº5÷‹kjº‡÷Ãï:¦Cæ8¼ÃTNeÞè¹À‡“ÞelÓJÒËî¢óIê8:½ót‡Òïî¤í7'ÿüvæænž*ížZOùí)gÝóÞSÞ»—³{Ù÷ÜyªßhödfìîmtºÚÚ¼Ku3]–ýÅû’û/´6ßHÌ*¥ëÅ¿úIÆ5æú.¸¥wQÁAË¥»¾9¸¡¦[œƒV’†gæpÿÉÝ©û›£éΔîL9ÓÏtO­¤<sž1ìÍQis]ށûIÆîZӃáò[SGϑÌÃÒx‰TrtôCxÉ– ÍñoÄ¿¹ÆaÑÝÝùðÆ3·»ßµ¿º°øC/ã[oÐûê°·ó=ÒòÝ~–7wU‹EJåþ²ßVwZÓN»5jÁAáÖVÝ%­;å[
+|K¾láÁÖ^׏ï>nÚªKuö¨ëŒúÀkË»Ÿ!÷FŠ;Rܑb,—žÚôÜ̔ß,]ÉNh˳›9¹éWÅ7W´6‡M, wÃﹸòtŸºC奮EáĄïubÂç–ËëNW¤î¤NLÊA+I/çênPrSبAùJmÅ¥›.“*¥{Ö,µÍó³¥ülž÷âåÑR~¦éiÇÉ+êü­xš’zEÑ÷É8hýxxPa5n:áLç+q{cѧk¨ÔÏK½¿Ž¯Ò•¤×ð{Й4œ)îi©á¢Ã ͯqÐJÒËyZj‹|ªq16áMÏæšFãâ[VËÌÉLïÆT¶:^•’«Ü=+Njv©3Ň ”ºIÙU´Ù™É\Ÿ4DžcíM¼Ø6¹¹KCj±FÑ\wôV„’ØæhFÕA >ƒV’^ÎpjOR§!Ÿ>g¢Ÿ¹}þ¾~|w1jîâCi±­GJÌo9#gÆAË¥‡KQö<}n>CًÉL:|оI ùêäšOžéË{Âû…•­*òÔ=VóÜI÷ ›7ŽrÜ mÞ1æcÐÓ{ÔêÃœþՏÅr}Eo>4Ç9f–맇—W÷G³O·:ÉN<Þéx™Çð1£ó•8h¹ž(‡Ž?Ýgå3ù¯­¯^-§ÅÅt‘˜㠕¤—sOÞ)QJŽ[¹Qr`n€%6—º<»œxՁqÐJÒËùpWßv¹ó"Dã+qÐr—œÝ6UŠE >øñè|9¯ï4SܙâÎc¹ô´ÔXöAòü>¤+ىšêÁÂ]2%j™sÐrŸH­–)ѤD-sZ.•¼Åj™¦p¼Ü«ç!]IÞ9‡î¦®µÌ9h%éåÜÝ'—’µìáÊà qõëèáZc: ¡ søWî‡Þöäî1{j2Z÷)ÈÖz|¯(Ë&ñn.2ꘂ¯#ç+qmrW©}i)é†óøsZ.ÝÝefx
+#å!KW’^?,ï£Û—–—ò3•8H¯Ç3™e{ù×ÑëÆ}s’ýcºí©ÔÃŒûº Û¶ÜS%MuÒçD}bÜÿDC| `þ ꍢò›tÑÆærZþ«‘4`¨;0Ÿ$¼H0ÓõÍÏ3]¸WW¥º<p“/o_Îûë;w¤¸#ÅX.=<µé¹™)¿Yº’Ø‰?ªÍt¼æòpqW}k’»‡¹„Äûd!=æK›mu¶ßVw ©^—uvÖ9(œFª;ôä>b–ÜJ|–Ôx˜û…̲j
+GÊC–®$½¼ÜÇËÊ3^QÊÏTâ }Ÿš/®š‡
+I¹¶X)DKZ¹¶yùwŠ•r@‹z¬”k>¥!-B,–†ŒÐf±4dF,–†D­òX)DKZs­b<µNÍ5‘ºÍ¢3[Ç,ÿN±²ïQ‰à¹Æ± ;ÓÙ÷Gˆ”{`‘ÊciޙÁ•C¨Íb%mGM!®­Ey,–†ìQ‹¥!g
+Ùs­ÚSíµXR#û£öîé]°X9d2$¿ 8êŞÜ|XtFÞxªán;þ·ýKˆû”R!8÷™On‡?ß3Dc±bÓðx„ôôœ3îyíKˆÿ·×íÌ|¤ý73Þú#’þ³´‰“*˜·±=C6ÿÍ(Ùn#YgdëtÌÉ3DÙCš·Êsòô Eˆ¿ KCf
+y¤ƒkÚæ#¤R÷;ÅÒØ·1¤æ0d¼Þ)VÒ6¶2rFÒ6¶œë±GFË%)×cÏÖQmKCŠ=Ÿˆ¥!›µ+‡Œ°µ¶ϒZ,†p‚‹Úö–-Š /͛ÅҐå±X ÿ¨…Œ\ž‘Jj±4dŒGIG²ÛxԃÃû’›÷üL3êΑú’¾Í–B܍ç›RÛ|ØïœÖ*‹¥!3j•ÅÊ!´µÅJÚ´VY¬”ƒ‘´y­B~Ô+•t¤\»EQnÕf±4dX¬’-jÛDyê-B
+¶ XIÕcõXÒRÈñÐVBÛö°5ZrÚºäqU§?¶ÚÚbåÚú|ؚý–BFÎÁHÚÌÖÌÏØ#f–a¤\=[‡Ú<C`+æÀcådÑf!5Z>L…ÝjÔQ¥!-ìVs-Õ¿A#–†·›ÇJ!Z‹•´!^ŽwJh3çú葃£ä’{äú°ò´‘BÒ7Æ3äi±…Ýú÷}
++*µyžÒ•¤R
+1M—•ò3•8ˆ‹}¸Ynv³o|Q<¶u4Kð•8HZÆý4é~˜®ÝÍ|%Z.ÅKg›l˜×ٜƒV’"g»Ç˜¦kÌȃq+SÁõ=l‘ËQ½T–Kø†îb[Çciƒ¯ÄAh›K‹ë*Þ:_‰ƒ–KçKuÉAbLáØ"éJRè=-Ë3_QÊÏTâ m‘q碶ÈÅãMZ;}êlëX[‚¯ÄAh›K‹ë*Ñ_‰ƒ–KÇKu‰Ó S@m ZI
+MAÍâ´’93³hÙú+Jù™J¤fÙ£É=öhrÉÒL»5¹G&×ùJ´ÔA^¥Öä’Òݜ–šqÐr)n÷´&—)°ÉuZIŠRX“«eë¯(åg*q¾D%õD%õDÅ{¢â=іz¢-õDÛüC*óæ=Ñæ=іz¢-õD›÷D[ê‰6ï‰6Ômó«t%)Já=Qñž¨¤ž¨xOTf¸{‚=шiDcqðßu²€÷œjOä|%W¬ƒRÚL‰7©_‰ƒ–I¥÷ ®iw­jOä´’¥(Ã&@£”Ÿ©ÄAÙ,ì‰FL#3‹_ÿª=‘ó•8ÈÍBi3]¤3Ì¢©¹Yj5³È³f
+쉜ƒV’ºYÃ&@£”Ÿ©ÄA4Kókkók•ï{…ï— ây£6ÿÁWâ %ÒêÒÍuù¤eð•8h¹t©®»Nk
+qº®3ò`”Í‚—HƒŽf‘ƒ·©ú¨–8^¢à+q›Ò9M×ôIËà+q›å®øªkºágz4éJR7 cœ®ëŒ<qÇüÙäGÈFPù«CZgÓYà~Æ&7øJd—PJ¿–Óhêå##R3Z.Ýõòi:54¹ÁA+I‘³î1Óe¥üL%JfÑæõ”Æ0‹tªT--d|%2³PZ‡éaKÍ8h¹Ô̂Cå™ÂfyJW’šY4Æaº¬”Ÿ©ÄAz½ÍQ½mñ©o,× m:Ë»·-ÎWâ ¹\ÀÖ® Ïö ®Íßkç+qÐ2©´Ã֒5¶-ÎA+I¡wZ ›¤ˆR~¦e³°m11d¼›YŽj‰ÓÎÎWâ 7 ¥›ëÚü½v¾¹Y¤=¶ó@S˜éÑ<¤+IÝ,ˆaSZQÊÏT⠚¥uÿ&ºÙ¿‰Œåΐ®c‘¢·¡Â,ÎWâ ¹=¤í.m¦«ù7Qð•8h™TŠB]R<¦@³8­$E)ŠÅèÝtõy0ÊfáKÄ ½–ÊNÄSÕÅ/)K|‰œƒÜ,”6ÓÕü›(øJäf©ÕÌ"/SàKä´’Ô͂½›®Þ#ÆA0ËÿñãÿZÛS=endstream
+endobj
+6 0 obj
+17999
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 612 792]
+/Rotate 0/Parent 3 0 R
+/Resources<</ProcSet[/PDF]
+/ExtGState 8 0 R
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+/Rotate 0>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+>>
+endobj
+7 0 obj
+<</Type/ExtGState
+/OPM 1>>endobj
+8 0 obj
+<</R7
+7 0 R>>
+endobj
+2 0 obj
+<</Producer(GPL Ghostscript 8.15)
+/CreationDate(D:20070312220102)
+/ModDate(D:20070312220102)
+/Title(BOARD.bin)
+/Creator(PScript5.dll Version 5.2)
+/Author(Jakub)>>endobj
+xref
+0 9
+0000000000 65535 f
+0000018313 00000 n
+0000018431 00000 n
+0000018245 00000 n
+0000018105 00000 n
+0000000015 00000 n
+0000018084 00000 n
+0000018361 00000 n
+0000018402 00000 n
+trailer
+<< /Size 9 /Root 1 0 R /Info 2 0 R
+/ID [(ý*iš@kŒìïǃ¼þ)(ý*iš@kŒìïǃ¼þ)]
+>>
+startxref
+18608
+%%EOF
/roboti/istrobot/camerus/HW/CAM_PROFI/BOARD.PHO
0,0 → 1,315
*
*
G04 PADS Layout (Build Number 2006.45.1) generated Gerber (RS-274-X) file*
G04 PC Version=2.1*
*
%IN "LEDpanel.pcb"*%
*
%MOIN*%
*
%FSLAX35Y35*%
*
*
*
*
G04 PC Standard Apertures*
*
*
G04 Thermal Relief Aperture macro.*
%AMTER*
1,1,$1,0,0*
1,0,$1-$2,0,0*
21,0,$3,$4,0,0,45*
21,0,$3,$4,0,0,135*
%
*
*
G04 Annular Aperture macro.*
%AMANN*
1,1,$1,0,0*
1,0,$2,0,0*
%
*
*
G04 Odd Aperture macro.*
%AMODD*
1,1,$1,0,0*
1,0,$1-0.005,0,0*
%
*
*
G04 PC Custom Aperture Macros*
*
*
*
*
*
*
G04 PC Aperture Table*
*
%ADD024C,0.001*%
%ADD025C,0.01*%
*
*
*
*
G04 PC Copper Outlines (0)*
G04 Layer Name LEDpanel.pcb - dark (0)*
%LPD*%
*
*
G04 PC Area=Custom_Thermal*
*
G04 PC Custom Flashes*
G04 Layer Name LEDpanel.pcb - flashes*
%LPD*%
*
*
G04 PC Circuitry*
G04 Layer Name LEDpanel.pcb - circuitry*
%LPD*%
*
G54D24*
G01X120000Y179100D02*
X120003D01*
X651200D02*
X651203D01*
X651200Y120000D02*
X651203D01*
X651200Y179100D02*
X651203D01*
G54D25*
X120000D02*
X651200D01*
Y120000*
X120000*
Y179100*
Y212000D02*
X367827D01*
X120000D02*
X130000Y214500D01*
Y209500*
X120000Y212000*
X651200D02*
X403373D01*
X651200D02*
X641200Y209500D01*
Y214500*
X651200Y212000*
X120000Y184100D02*
Y217000D01*
X651200Y184100D02*
Y217000D01*
X373782Y214812D02*
X371509D01*
X371509D02*
X371282Y212000D01*
X371509Y212312*
X371509D02*
X372191Y212625D01*
X372873*
X373555Y212312*
X373555D02*
X374009Y211687D01*
X374009D02*
X374236Y210750D01*
X374009Y210125*
X373782Y209187*
X373782D02*
X373327Y208562D01*
X373327D02*
X372645Y208250D01*
X371964*
X371282Y208562*
X371282D02*
X371055Y208875D01*
X370827Y209500*
X376736Y214812D02*
X379236D01*
X379236D02*
X377873Y212312D01*
X377873D02*
X378555D01*
X378555D02*
X379009Y212000D01*
X379236Y211687*
X379236D02*
X379464Y210750D01*
Y210125*
X379236Y209187*
X379236D02*
X378782Y208562D01*
X378782D02*
X378100Y208250D01*
X377418*
X376736Y208562*
X376736D02*
X376509Y208875D01*
X376282Y209500*
X381509Y213562D02*
X381964Y213875D01*
X382645Y214812*
X382645D02*
Y208250D01*
X384918Y213250D02*
Y213562D01*
X384918D02*
X385145Y214187D01*
X385145D02*
X385373Y214500D01*
X385827Y214812*
X385827D02*
X386736D01*
X386736D02*
X387191Y214500D01*
X387418Y214187*
X387418D02*
X387645Y213562D01*
X387645D02*
Y212937D01*
X387645D02*
X387418Y212312D01*
X387418D02*
X386964Y211375D01*
X384691Y208250*
X387873*
X389918Y212625D02*
Y208250D01*
Y211375D02*
X390600Y212312D01*
X390600D02*
X391055Y212625D01*
X391736*
X392191Y212312*
X392191D02*
X392418Y211375D01*
Y208250*
Y211375D02*
X393100Y212312D01*
X393100D02*
X393555Y212625D01*
X394236*
X394691Y212312*
X394691D02*
X394918Y211375D01*
Y208250*
X396964Y214812D02*
X397191Y214500D01*
X397418Y214812*
X397418D02*
X397191Y215125D01*
X396964Y214812*
X397191Y212625D02*
Y208250D01*
X399464Y214812D02*
Y208250D01*
X672000Y120000D02*
Y142800D01*
Y120000D02*
X669500Y130000D01*
X674500*
X672000Y120000*
Y179100D02*
Y156300D01*
Y179100D02*
X674500Y169100D01*
X669500*
X672000Y179100*
X656200Y120000D02*
X677000D01*
X656200Y179100D02*
X677000D01*
X662909Y152362D02*
X660636D01*
X660636D02*
X660409Y149550D01*
X660636Y149862*
X660636D02*
X661318Y150175D01*
X662000*
X662682Y149862*
X662682D02*
X663136Y149237D01*
X663136D02*
X663364Y148300D01*
X663136Y147675*
X662909Y146737*
X662909D02*
X662455Y146112D01*
X662455D02*
X661773Y145800D01*
X661091*
X660409Y146112*
X660409D02*
X660182Y146425D01*
X659955Y147050*
X668364Y150175D02*
X668136Y149237D01*
X668136D02*
X667682Y148612D01*
X667682D02*
X667000Y148300D01*
X666773*
X666091Y148612*
X666091D02*
X665636Y149237D01*
X665636D02*
X665409Y150175D01*
Y150487*
X665409D02*
X665636Y151425D01*
X666091Y152050*
X666773Y152362*
X666773D02*
X667000D01*
X667000D02*
X667682Y152050D01*
X668136Y151425*
X668364Y150175*
Y148612*
X668364D02*
X668136Y147050D01*
X667682Y146112*
X667682D02*
X667000Y145800D01*
X666545*
X665864Y146112*
X665864D02*
X665636Y146737D01*
X670409Y151112D02*
X670864Y151425D01*
X671545Y152362*
X671545D02*
Y145800D01*
X673591Y150175D02*
Y145800D01*
Y148925D02*
X674273Y149862D01*
X674273D02*
X674727Y150175D01*
X675409*
X675864Y149862*
X675864D02*
X676091Y148925D01*
Y145800*
Y148925D02*
X676773Y149862D01*
X676773D02*
X677227Y150175D01*
X677909*
X678364Y149862*
X678364D02*
X678591Y148925D01*
Y145800*
X680636Y152362D02*
X680864Y152050D01*
X681091Y152362*
X681091D02*
X680864Y152675D01*
X680636Y152362*
X680864Y150175D02*
Y145800D01*
X683136Y152362D02*
Y145800D01*
X0Y0D02*
M02*
/roboti/istrobot/camerus/HW/CAM_PROFI/BOARD.rep
0,0 → 1,13
 
 
Photo-Plotter Apertures Report
==============================
Position Width Hgt/ID Shape Qty
======== ===== ====== ===== ===
24 1 0 RND 4
25 10 0 RND 26
 
 
 
 
 
/roboti/istrobot/camerus/HW/CAM_PROFI/DRILL.DRL
0,0 → 1,43
%
T1C.035F197S55
X014Y014506
X014Y015494
X01946Y015494
X01946Y014506
X022219Y013728
X022219Y017228
X02492Y015494
X02492Y014506
X03038Y014506
X03038Y015494
X033113Y017228
X033113Y013728
X03584Y014506
X03584Y015494
X038509Y016198
X037509Y016198
X0381Y0142
X0391Y0142
X0413Y014506
X0413Y015494
X039509Y016198
X043339Y017228
X043339Y013728
X044675Y013728
X044675Y017228
X04676Y015494
X04676Y014506
X05222Y014506
X05222Y015494
X054953Y017228
X054953Y013728
X05768Y014506
X05768Y015494
X06314Y015494
X06314Y014506
T2C.12598F035S794
X0168Y0134
X0278Y0136
X0494Y0134
X0604Y0134
M30
/roboti/istrobot/camerus/HW/CAM_PROFI/DRILL.lst
0,0 → 1,46
Drill Listing
=============
Drill: .035 Tool: 1 Feed: 197 Speed: 550
X 140000 Y 145062
X 140000 Y 154937
X 194600 Y 154937
X 194600 Y 145062
X 222186 Y 137284
X 222186 Y 172284
X 249200 Y 154937
X 249200 Y 145062
X 303800 Y 145062
X 303800 Y 154937
X 331129 Y 172284
X 331129 Y 137284
X 358400 Y 145062
X 358400 Y 154937
X 385087 Y 161979
X 375087 Y 161979
X 381000 Y 142000
X 391000 Y 142000
X 413000 Y 145062
X 413000 Y 154937
X 395087 Y 161979
X 433392 Y 172284
X 433392 Y 137284
X 446753 Y 137284
X 446753 Y 172284
X 467600 Y 154937
X 467600 Y 145062
X 522200 Y 145062
X 522200 Y 154937
X 549530 Y 172284
X 549530 Y 137284
X 576800 Y 145062
X 576800 Y 154937
X 631400 Y 154937
X 631400 Y 145062
 
Drill: .12598 Tool: 2 Feed: 35 Speed: 794
X 168000 Y 134000
X 278000 Y 136000
X 494000 Y 134000
X 604000 Y 134000
 
End of Listing
/roboti/istrobot/camerus/HW/CAM_PROFI/DRILL.rep
0,0 → 1,13
 
 
Drill Sizes Report
==================
Tool Size Pltd Feed Speed Qty
==== ==== ==== ==== ===== ===
1 35 x 197 550 35
2 125.98 x 35 794 4
 
 
 
 
 
/roboti/istrobot/camerus/HW/CAM_PROFI/V2.PHO
0,0 → 1,1574
*
*
G04 PADS Layout (Build Number 2006.45.1) generated Gerber (RS-274-X) file*
G04 PC Version=2.1*
*
%IN "LEDpanel.pcb"*%
*
%MOIN*%
*
%FSLAX35Y35*%
*
*
*
*
G04 PC Standard Apertures*
*
*
G04 Thermal Relief Aperture macro.*
%AMTER*
1,1,$1,0,0*
1,0,$1-$2,0,0*
21,0,$3,$4,0,0,45*
21,0,$3,$4,0,0,135*
%
*
*
G04 Annular Aperture macro.*
%AMANN*
1,1,$1,0,0*
1,0,$2,0,0*
%
*
*
G04 Odd Aperture macro.*
%AMODD*
1,1,$1,0,0*
1,0,$1-0.005,0,0*
%
*
*
G04 PC Custom Aperture Macros*
*
*
*
*
*
*
G04 PC Aperture Table*
*
%ADD012R,0.07X0.07*%
%ADD013C,0.23622*%
%ADD025C,0.01*%
%ADD031C,0.07*%
%ADD042C,0.045*%
%ADD043R,0.066X0.066*%
%ADD044C,0.066*%
%ADD045R,0.065X0.065*%
%ADD046C,0.08268*%
%ADD047C,0.035*%
%ADD048C,0.025*%
*
*
*
*
G04 PC Copper Outlines (0)*
G04 Layer Name LEDpanel.pcb - dark (0)*
%LPD*%
*
*
G04 PC Area=ANP000000*
G75*
G36*
G01*
X648700Y123000D02*
Y176100D01*
G03*
X648200Y176600I-500J-0D01*
G01*
X555558D01*
G03*
X555136Y175833I0J-500D01*
G02*
X545345Y167138I-5606J-3548D01*
G03*
X545029Y167250I-316J-388D01*
G01*
X451254D01*
G03*
X450939Y167138I0J-500D01*
G02*
X442568I-4186J5147D01*
G03*
X442252Y167250I-316J-388D01*
G01*
X437893D01*
G03*
X437578Y167138I0J-500D01*
G02*
X429207I-4186J5147D01*
G03*
X428891Y167250I-316J-388D01*
G01*
X400923D01*
G03*
X400492Y166497I0J-500D01*
G02*
X400837Y165229I-2155J-1268D01*
G01*
Y158729D01*
G02*
X398337Y156229I-2500J0D01*
G01*
X391837D01*
G02*
X390587Y156564I0J2500D01*
G03*
X389837Y156131I-250J-433D01*
G01*
Y151057D01*
G03*
X389984Y150703I500J-0D01*
G01*
X392541Y148146D01*
G03*
X392894Y148000I353J354D01*
G01*
X394500D01*
G02*
X397000Y145500I0J-2500D01*
G01*
Y138750D01*
G03*
X397500Y138250I500J0D01*
G01*
X399969D01*
G03*
X400323Y138396I0J500D01*
G01*
X407054Y145127D01*
G03*
X407200Y145481I-354J354D01*
G01*
Y148363D01*
G02*
X408401Y150499I2500J-0D01*
G03*
X408527Y151245I-260J427D01*
G02*
X417600Y158470I4473J3692D01*
G03*
X417643Y158421I397J304D01*
G01*
X425022Y151042D01*
G03*
X425204Y150926I354J353D01*
G02*
X426748Y149940I-1462J-3991D01*
G01*
X432634Y144054D01*
G03*
X433016Y143908I353J353D01*
G02*
X439605Y139612I376J-6623D01*
G03*
X440541I468J175D01*
G02*
X447130Y143908I6212J-2327D01*
G03*
X447512Y144054I28J499D01*
G01*
X452463Y149005D01*
G02*
X454579Y150156I3005J-3005D01*
G03*
X454827Y150291I-105J489D01*
G01*
X462957Y158421D01*
G03*
X463000Y158470I-354J353D01*
G02*
X472073Y151245I4600J-3533D01*
G03*
X472199Y150499I386J-319D01*
G02*
X473089Y149571I-1299J-2136D01*
G03*
X473526Y149313I437J242D01*
G01*
X476186D01*
G03*
X476539Y149459I-0J500D01*
G01*
X485022Y157942D01*
G02*
X488027Y159187I3005J-3005D01*
G01*
X518061D01*
G03*
X518390Y159310I0J500D01*
G02*
X526673Y151245I3810J-4373D01*
G03*
X526799Y150499I386J-319D01*
G02*
X528000Y148363I-1299J-2136D01*
G01*
Y141763D01*
G02*
X525500Y139263I-2500J-0D01*
G01*
X518900D01*
G02*
X516400Y141763I0J2500D01*
G01*
Y148363D01*
G02*
X516915Y149883I2500J-0D01*
G03*
X516518Y150687I-397J304D01*
G01*
X489995D01*
G03*
X489641Y150541I-0J-500D01*
G01*
X481158Y142058D01*
G02*
X478153Y140813I-3005J3005D01*
G01*
X473526D01*
G03*
X473089Y140555I0J-500D01*
G02*
X470900Y139263I-2189J1208D01*
G01*
X464300D01*
G02*
X461800Y141763I0J2500D01*
G01*
Y144036D01*
G03*
X460946Y144389I-500J-0D01*
G01*
X459552Y142995D01*
G02*
X457437Y141844I-3005J3005D01*
G03*
X457188Y141709I104J-489D01*
G01*
X453522Y138043D01*
G03*
X453376Y137661I354J-353D01*
G02*
X440541Y134958I-6623J-376D01*
G03*
X439605I-468J-176D01*
G02*
X426769Y137661I-6213J2327D01*
G03*
X426623Y138043I-499J29D01*
G01*
X421839Y142828D01*
G03*
X421657Y142944I-354J-354D01*
G02*
X420113Y143930I1462J3991D01*
G01*
X419654Y144389D01*
G03*
X418800Y144036I-354J-353D01*
G01*
Y141763D01*
G02*
X416300Y139263I-2500J-0D01*
G01*
X413418D01*
G03*
X413064Y139117I-0J-500D01*
G01*
X404942Y130995D01*
G02*
X401937Y129750I-3005J3005D01*
G01*
X378747D01*
G02*
X375742Y130995I-0J4250D01*
G01*
X366995Y139742D01*
G02*
X365750Y142747I3005J3005D01*
G01*
Y143486D01*
G03*
X365604Y143839I-500J-0D01*
G01*
X365054Y144389D01*
G03*
X364200Y144036I-354J-353D01*
G01*
Y141763D01*
G02*
X361700Y139263I-2500J-0D01*
G01*
X355100D01*
G02*
X352600Y141763I0J2500D01*
G01*
Y148363D01*
G02*
X353801Y150499I2500J-0D01*
G03*
X353927Y151245I-260J427D01*
G02*
X363000Y158470I4473J3692D01*
G03*
X363043Y158421I397J304D01*
G01*
X373005Y148459D01*
G02*
X374250Y145453I-3005J-3006D01*
G01*
Y144714D01*
G03*
X374396Y144361I500J0D01*
G01*
X380361Y138396D01*
G03*
X380714Y138250I353J354D01*
G01*
X384500D01*
G03*
X385000Y138750I-0J500D01*
G01*
Y142045D01*
G03*
X384854Y142398I-500J-0D01*
G01*
X381728Y145523D01*
G02*
X380337Y148882I3359J3359D01*
G01*
Y156131D01*
G03*
X379587Y156564I-500J0D01*
G02*
X378337Y156229I-1250J2165D01*
G01*
X371837D01*
G02*
X369337Y158729I0J2500D01*
G01*
Y165229D01*
G02*
X369841Y166734I2500J0D01*
G03*
X369441Y167535I-400J301D01*
G01*
X335959D01*
G03*
X335621Y167403I0J-500D01*
G02*
X326638I-4492J4882D01*
G03*
X326299Y167535I-339J-368D01*
G01*
X227016D01*
G03*
X226678Y167403I0J-500D01*
G02*
X216581Y175833I-4492J4882D01*
G03*
X216158Y176600I-423J267D01*
G01*
X123000D01*
G03*
X122500Y176100I0J-500D01*
G01*
Y123000D01*
G03*
X123000Y122500I500J0D01*
G01*
X648200D01*
G03*
X648700Y123000I-0J500D01*
G37*
G74*
*
*
G04 PC Void Outlines (0)*
G04 Layer Name LEDpanel.pcb - clear (0)*
%LPC*%
*
*
G04 PC Area=ANP000000*
G75*
G36*
G01*
X627590Y159310D02*
G02*
X635873Y151245I3810J-4373D01*
G03*
X635999Y150499I386J-319D01*
G02*
X637200Y148363I-1299J-2136D01*
G01*
Y141763D01*
G02*
X634700Y139263I-2500J-0D01*
G01*
X628100D01*
G02*
X625600Y141763I0J2500D01*
G01*
Y148363D01*
G02*
X626115Y149883I2500J-0D01*
G03*
X625718Y150687I-397J304D01*
G01*
X599595D01*
G03*
X599241Y150541I-0J-500D01*
G01*
X590758Y142058D01*
G02*
X587753Y140813I-3005J3005D01*
G01*
X582726D01*
G03*
X582289Y140555I0J-500D01*
G02*
X580100Y139263I-2189J1208D01*
G01*
X573500D01*
G02*
X571000Y141763I0J2500D01*
G01*
Y148363D01*
G02*
X571515Y149883I2500J-0D01*
G03*
X571118Y150687I-397J304D01*
G01*
X569150D01*
G03*
X568796Y150541I-0J-500D01*
G01*
X556299Y138043D01*
G03*
X556153Y137661I353J-353D01*
G02*
X549907Y143908I-6623J-376D01*
G03*
X550288Y144054I28J499D01*
G01*
X564177Y157942D01*
G02*
X567182Y159187I3005J-3005D01*
G01*
X572661D01*
G03*
X572990Y159310I0J500D01*
G02*
X581273Y151245I3810J-4373D01*
G03*
X581399Y150499I386J-319D01*
G02*
X582289Y149571I-1299J-2136D01*
G03*
X582726Y149313I437J242D01*
G01*
X585786D01*
G03*
X586139Y149459I-0J500D01*
G01*
X594622Y157942D01*
G02*
X597627Y159187I3005J-3005D01*
G01*
X627261D01*
G03*
X627590Y159310I0J500D01*
G37*
G74*
*
G75*
G36*
G01*
X617000Y172750D02*
Y163750D01*
G02*
X614500Y161250I-2500J0D01*
G01*
X585682D01*
G02*
X583182Y163750I-0J2500D01*
G01*
Y172750D01*
G02*
X585682Y175250I2500J0D01*
G01*
X614500D01*
G02*
X617000Y172750I0J-2500D01*
G37*
G74*
*
G75*
G36*
G01*
X330753Y143908D02*
G02*
X324506Y137661I376J-6623D01*
G03*
X324361Y138043I-499J29D01*
G01*
X311863Y150541D01*
G03*
X311510Y150687I-353J-354D01*
G01*
X309482D01*
G03*
X309085Y149883I-0J-500D01*
G02*
X309600Y148363I-1985J-1520D01*
G01*
Y141763D01*
G02*
X307100Y139263I-2500J-0D01*
G01*
X300500D01*
G02*
X298311Y140555I0J2500D01*
G03*
X297874Y140813I-437J-242D01*
G01*
X294547D01*
G02*
X291542Y142058I-0J4250D01*
G01*
X283059Y150541D01*
G03*
X282705Y150687I-354J-354D01*
G01*
X254882D01*
G03*
X254485Y149883I-0J-500D01*
G02*
X255000Y148363I-1985J-1520D01*
G01*
Y141763D01*
G02*
X252500Y139263I-2500J-0D01*
G01*
X245900D01*
G02*
X243400Y141763I0J2500D01*
G01*
Y148363D01*
G02*
X244601Y150499I2500J-0D01*
G03*
X244727Y151245I-260J427D01*
G02*
X253010Y159310I4473J3692D01*
G03*
X253339Y159187I329J377D01*
G01*
X284673D01*
G02*
X287678Y157942I-0J-4250D01*
G01*
X296161Y149459D01*
G03*
X296514Y149313I353J354D01*
G01*
X297874D01*
G03*
X298311Y149571I-0J500D01*
G02*
X299201Y150499I2189J-1208D01*
G03*
X299327Y151245I-260J427D01*
G02*
X307610Y159310I4473J3692D01*
G03*
X307939Y159187I329J377D01*
G01*
X313477D01*
G02*
X316482Y157942I0J-4250D01*
G01*
X330371Y144054D01*
G03*
X330753Y143908I354J353D01*
G37*
G74*
*
G75*
G36*
G01*
X221810D02*
G02*
X215563Y137661I376J-6623D01*
G03*
X215417Y138043I-499J29D01*
G01*
X202920Y150541D01*
G03*
X202566Y150687I-354J-354D01*
G01*
X200282D01*
G03*
X199885Y149883I-0J-500D01*
G02*
X200400Y148363I-1985J-1520D01*
G01*
Y141763D01*
G02*
X197900Y139263I-2500J-0D01*
G01*
X191300D01*
G02*
X189111Y140555I0J2500D01*
G03*
X188674Y140813I-437J-242D01*
G01*
X183947D01*
G02*
X180942Y142058I-0J4250D01*
G01*
X172459Y150541D01*
G03*
X172105Y150687I-354J-354D01*
G01*
X145682D01*
G03*
X145285Y149883I-0J-500D01*
G02*
X145800Y148363I-1985J-1520D01*
G01*
Y141763D01*
G02*
X143300Y139263I-2500J-0D01*
G01*
X136700D01*
G02*
X134200Y141763I0J2500D01*
G01*
Y148363D01*
G02*
X135401Y150499I2500J-0D01*
G03*
X135527Y151245I-260J427D01*
G02*
X141719Y160476I4473J3692D01*
G03*
X141850Y160454I148J478D01*
X141967Y160393I287J410D01*
G02*
X143810Y159310I-1967J-5456D01*
G03*
X144139Y159187I329J377D01*
G01*
X174073D01*
G02*
X177078Y157942I-0J-4250D01*
G01*
X185561Y149459D01*
G03*
X185914Y149313I353J354D01*
G01*
X188674D01*
G03*
X189111Y149571I-0J500D01*
G02*
X190001Y150499I2189J-1208D01*
G03*
X190127Y151245I-260J427D01*
G02*
X198410Y159310I4473J3692D01*
G03*
X198739Y159187I329J377D01*
G01*
X204534D01*
G02*
X207539Y157942I-0J-4250D01*
G01*
X221428Y144054D01*
G03*
X221810Y143908I353J353D01*
G37*
G74*
*
G75*
G36*
G01*
X189000Y172750D02*
Y163750D01*
G02*
X186500Y161250I-2500J0D01*
G01*
X142955D01*
G02*
X142273Y161345I-0J2500D01*
G03*
X142154Y161363I-136J-481D01*
X142048Y161420I-287J-409D01*
G02*
X140455Y163750I907J2330D01*
G01*
Y172750D01*
G02*
X142955Y175250I2500J0D01*
G01*
X186500D01*
G02*
X189000Y172750I0J-2500D01*
G37*
G74*
*
*
G04 PC Copper Outlines (1)*
G04 Layer Name LEDpanel.pcb - dark (1)*
%LPD*%
*
*
G04 PC Area=Custom_Thermal*
*
G04 PC Custom Flashes*
G04 Layer Name LEDpanel.pcb - flashes*
%LPD*%
*
*
G04 PC Circuitry*
G04 Layer Name LEDpanel.pcb - circuitry*
%LPD*%
*
G54D12*
G01X391000Y142000D03*
G54D13*
X604000Y134000D03*
X168000D03*
X278000Y136000D03*
X494000Y134000D03*
G54D25*
X614000Y171250D02*
Y166000D01*
X611818*
X610182Y171250D02*
Y166000D01*
Y171250D02*
X607818D01*
X610182Y168750D02*
X608727D01*
X610182Y166000D02*
X607818D01*
X606182Y171250D02*
Y166000D01*
Y171250D02*
X604909D01*
X604364Y171000*
X604000Y170500*
X603818Y170000*
X603636Y169250*
Y168000*
X603818Y167250*
X604000Y166750*
X604364Y166250*
X604909Y166000*
X606182*
X602000Y169500D02*
Y164250D01*
Y168750D02*
X601636Y169250D01*
X601273Y169500*
X600727*
X600364Y169250*
X600000Y168750*
X599818Y168000*
Y167500*
X600000Y166750*
X600364Y166250*
X600727Y166000*
X601273*
X601636Y166250*
X602000Y166750*
X596000Y169500D02*
Y166000D01*
Y168750D02*
X596364Y169250D01*
X596727Y169500*
X597273*
X597636Y169250*
X598000Y168750*
X598182Y168000*
Y167500*
X598000Y166750*
X597636Y166250*
X597273Y166000*
X596727*
X596364Y166250*
X596000Y166750*
X594364Y169500D02*
Y166000D01*
Y168500D02*
X593818Y169250D01*
X593455Y169500*
X592909*
X592545Y169250*
X592364Y168500*
Y166000*
X590727Y168000D02*
X588545D01*
Y168500*
X588727Y169000*
X588909Y169250*
X589273Y169500*
X589818*
X590182Y169250*
X590545Y168750*
X590727Y168000*
Y167500*
X590545Y166750*
X590182Y166250*
X589818Y166000*
X589273*
X588909Y166250*
X588545Y166750*
X586909Y171250D02*
Y166000D01*
X186000Y171250D02*
Y166000D01*
X183455Y171250D02*
X186000Y167750D01*
X185091Y169000D02*
X183455Y166000D01*
X180364Y171250D02*
X181818Y166000D01*
X180364Y171250D02*
X178909Y166000D01*
X181273Y167750D02*
X179455D01*
X177273Y171250D02*
Y166000D01*
X174727Y171250D02*
X177273Y167750D01*
X176364Y169000D02*
X174727Y166000D01*
X173091Y171250D02*
Y166000D01*
X170909*
X169273Y171250D02*
Y166000D01*
X167636Y171250D02*
Y166000D01*
X165091Y171250D02*
X167636Y167750D01*
X166727Y169000D02*
X165091Y166000D01*
X159091Y170000D02*
Y170250D01*
X158909Y170750*
X158727Y171000*
X158364Y171250*
X157636*
X157273Y171000*
X157091Y170750*
X156909Y170250*
Y169750*
X157091Y169250*
X157455Y168500*
X159273Y166000*
X156727*
X154000Y171250D02*
X154545Y171000D01*
X154909Y170250*
X155091Y169000*
Y168250*
X154909Y167000*
X154545Y166250*
X154000Y166000*
X153636*
X153091Y166250*
X152727Y167000*
X152545Y168250*
Y169000*
X152727Y170250*
X153091Y171000*
X153636Y171250*
X154000*
X149818D02*
X150364Y171000D01*
X150727Y170250*
X150909Y169000*
Y168250*
X150727Y167000*
X150364Y166250*
X149818Y166000*
X149455*
X148909Y166250*
X148545Y167000*
X148364Y168250*
Y169000*
X148545Y170250*
X148909Y171000*
X149455Y171250*
X149818*
X144182D02*
X146000Y166000D01*
X146727Y171250D02*
X144182D01*
X648700Y123000D02*
Y176100D01*
G75*
G03X648200Y176600I-500J-0D01*
G01X555558*
G03X555136Y175833I0J-500*
G01X545345Y167138D02*
G03X555136Y175833I4185J5147D01*
G01X545345Y167138D02*
G03X545029Y167250I-316J-388D01*
G01X451254*
G03X450939Y167138I0J-500*
G01X442568D02*
G03X450939I4185J5147D01*
G01X442568D02*
G03X442252Y167250I-316J-388D01*
G01X437893*
G03X437578Y167138I0J-500*
G01X429207D02*
G03X437578I4185J5147D01*
G01X429207D02*
G03X428891Y167250I-316J-388D01*
G01X400923*
G03X400492Y166497I0J-500*
G01X400837Y165229D02*
G03X400492Y166497I-2500J0D01*
G01X400837Y165229D02*
Y158729D01*
X398337Y156229D02*
G03X400837Y158729I0J2500D01*
G01X398337Y156229D02*
X391837D01*
X390587Y156564D02*
G03X391837Y156229I1250J2165D01*
G01X390587Y156564D02*
G03X389837Y156131I-250J-433D01*
G01Y151057*
G03X389984Y150703I500J-0*
G01X392541Y148146*
G03X392894Y148000I353J354*
G01X394500*
X397000Y145500D02*
G03X394500Y148000I-2500J0D01*
G01X397000Y145500D02*
Y138750D01*
G03X397500Y138250I500J0*
G01X399969*
G03X400323Y138396I0J500*
G01X407054Y145127*
G03X407200Y145481I-354J354*
G01Y148363*
X408401Y150499D02*
G03X407200Y148363I1299J-2136D01*
G01X408401Y150499D02*
G03X408527Y151245I-260J427D01*
G01X417600Y158470D02*
G03X408527Y151245I-4600J-3533D01*
G01X417600Y158470D02*
G03X417643Y158421I397J304D01*
G01X425022Y151042*
G03X425204Y150926I354J353*
G01X426748Y149940D02*
G03X425204Y150926I-3006J-3005D01*
G01X426748Y149940D02*
X432634Y144054D01*
G03X433016Y143908I353J353*
G01X439605Y139612D02*
G03X433016Y143908I-6213J-2327D01*
G01X439605Y139612D02*
G03X440541I468J175D01*
G01X447130Y143908D02*
G03X440541Y139612I-377J-6623D01*
G01X447130Y143908D02*
G03X447512Y144054I28J499D01*
G01X452463Y149005*
X454579Y150156D02*
G03X452463Y149005I889J-4156D01*
G01X454579Y150156D02*
G03X454827Y150291I-105J489D01*
G01X462957Y158421*
G03X463000Y158470I-354J353*
G01X472073Y151245D02*
G03X463000Y158470I-4473J3692D01*
G01X472073Y151245D02*
G03X472199Y150499I386J-319D01*
G01X473089Y149571D02*
G03X472199Y150499I-2189J-1208D01*
G01X473089Y149571D02*
G03X473526Y149313I437J242D01*
G01X476186*
G03X476539Y149459I-0J500*
G01X485022Y157942*
X488027Y159187D02*
G03X485022Y157942I0J-4250D01*
G01X488027Y159187D02*
X518061D01*
G03X518390Y159310I0J500*
G01X526673Y151245D02*
G03X518390Y159310I-4473J3692D01*
G01X526673Y151245D02*
G03X526799Y150499I386J-319D01*
G01X528000Y148363D02*
G03X526799Y150499I-2500J-0D01*
G01X528000Y148363D02*
Y141763D01*
X525500Y139263D02*
G03X528000Y141763I0J2500D01*
G01X525500Y139263D02*
X518900D01*
X516400Y141763D02*
G03X518900Y139263I2500J-0D01*
G01X516400Y141763D02*
Y148363D01*
X516915Y149883D02*
G03X516400Y148363I1985J-1520D01*
G01X516915Y149883D02*
G03X516518Y150687I-397J304D01*
G01X489995*
G03X489641Y150541I-0J-500*
G01X481158Y142058*
X478153Y140813D02*
G03X481158Y142058I0J4250D01*
G01X478153Y140813D02*
X473526D01*
G03X473089Y140555I0J-500*
G01X470900Y139263D02*
G03X473089Y140555I0J2500D01*
G01X470900Y139263D02*
X464300D01*
X461800Y141763D02*
G03X464300Y139263I2500J-0D01*
G01X461800Y141763D02*
Y144036D01*
G03X460946Y144389I-500J-0*
G01X459552Y142995*
X457437Y141844D02*
G03X459552Y142995I-890J4156D01*
G01X457437Y141844D02*
G03X457188Y141709I104J-489D01*
G01X453522Y138043*
G03X453376Y137661I354J-353*
G01X440541Y134958D02*
G03X453376Y137661I6212J2327D01*
G01X440541Y134958D02*
G03X439605I-468J-176D01*
G01X426769Y137661D02*
G03X439605Y134958I6623J-376D01*
G01X426769Y137661D02*
G03X426623Y138043I-499J29D01*
G01X421839Y142828*
G03X421657Y142944I-354J-354*
G01X420113Y143930D02*
G03X421657Y142944I3006J3005D01*
G01X420113Y143930D02*
X419654Y144389D01*
G03X418800Y144036I-354J-353*
G01Y141763*
X416300Y139263D02*
G03X418800Y141763I0J2500D01*
G01X416300Y139263D02*
X413418D01*
G03X413064Y139117I-0J-500*
G01X404942Y130995*
X401937Y129750D02*
G03X404942Y130995I0J4250D01*
G01X401937Y129750D02*
X378747D01*
X375742Y130995D02*
G03X378747Y129750I3005J3005D01*
G01X375742Y130995D02*
X366995Y139742D01*
X365750Y142747D02*
G03X366995Y139742I4250J-0D01*
G01X365750Y142747D02*
Y143486D01*
G03X365604Y143839I-500J-0*
G01X365054Y144389*
G03X364200Y144036I-354J-353*
G01Y141763*
X361700Y139263D02*
G03X364200Y141763I0J2500D01*
G01X361700Y139263D02*
X355100D01*
X352600Y141763D02*
G03X355100Y139263I2500J-0D01*
G01X352600Y141763D02*
Y148363D01*
X353801Y150499D02*
G03X352600Y148363I1299J-2136D01*
G01X353801Y150499D02*
G03X353927Y151245I-260J427D01*
G01X363000Y158470D02*
G03X353927Y151245I-4600J-3533D01*
G01X363000Y158470D02*
G03X363043Y158421I397J304D01*
G01X373005Y148459*
X374250Y145453D02*
G03X373005Y148459I-4250J0D01*
G01X374250Y145453D02*
Y144714D01*
G03X374396Y144361I500J0*
G01X380361Y138396*
G03X380714Y138250I353J354*
G01X384500*
G03X385000Y138750I-0J500*
G01Y142045*
G03X384854Y142398I-500J-0*
G01X381728Y145523*
X380337Y148882D02*
G03X381728Y145523I4750J0D01*
G01X380337Y148882D02*
Y156131D01*
G03X379587Y156564I-500J0*
G01X378337Y156229D02*
G03X379587Y156564I0J2500D01*
G01X378337Y156229D02*
X371837D01*
X369337Y158729D02*
G03X371837Y156229I2500J0D01*
G01X369337Y158729D02*
Y165229D01*
X369841Y166734D02*
G03X369337Y165229I1996J-1505D01*
G01X369841Y166734D02*
G03X369441Y167535I-400J301D01*
G01X335959*
G03X335621Y167403I0J-500*
G01X326638D02*
G03X335621I4491J4882D01*
G01X326638D02*
G03X326299Y167535I-339J-368D01*
G01X227016*
G03X226678Y167403I0J-500*
G01X216581Y175833D02*
G03X226678Y167403I5605J-3548D01*
G01X216581Y175833D02*
G03X216158Y176600I-423J267D01*
G01X123000*
G03X122500Y176100I0J-500*
G01Y123000*
G03X123000Y122500I500J0*
G01X648200*
G03X648700Y123000I-0J500*
G01X635873Y151245D02*
G03X627590Y159310I-4473J3692D01*
G01X635873Y151245D02*
G03X635999Y150499I386J-319D01*
G01X637200Y148363D02*
G03X635999Y150499I-2500J-0D01*
G01X637200Y148363D02*
Y141763D01*
X634700Y139263D02*
G03X637200Y141763I0J2500D01*
G01X634700Y139263D02*
X628100D01*
X625600Y141763D02*
G03X628100Y139263I2500J-0D01*
G01X625600Y141763D02*
Y148363D01*
X626115Y149883D02*
G03X625600Y148363I1985J-1520D01*
G01X626115Y149883D02*
G03X625718Y150687I-397J304D01*
G01X599595*
G03X599241Y150541I-0J-500*
G01X590758Y142058*
X587753Y140813D02*
G03X590758Y142058I0J4250D01*
G01X587753Y140813D02*
X582726D01*
G03X582289Y140555I0J-500*
G01X580100Y139263D02*
G03X582289Y140555I0J2500D01*
G01X580100Y139263D02*
X573500D01*
X571000Y141763D02*
G03X573500Y139263I2500J-0D01*
G01X571000Y141763D02*
Y148363D01*
X571515Y149883D02*
G03X571000Y148363I1985J-1520D01*
G01X571515Y149883D02*
G03X571118Y150687I-397J304D01*
G01X569150*
G03X568796Y150541I-0J-500*
G01X556299Y138043*
G03X556153Y137661I353J-353*
G01X549907Y143908D02*
G03X556153Y137661I-377J-6623D01*
G01X549907Y143908D02*
G03X550288Y144054I28J499D01*
G01X564177Y157942*
X567182Y159187D02*
G03X564177Y157942I0J-4250D01*
G01X567182Y159187D02*
X572661D01*
G03X572990Y159310I0J500*
G01X581273Y151245D02*
G03X572990Y159310I-4473J3692D01*
G01X581273Y151245D02*
G03X581399Y150499I386J-319D01*
G01X582289Y149571D02*
G03X581399Y150499I-2189J-1208D01*
G01X582289Y149571D02*
G03X582726Y149313I437J242D01*
G01X585786*
G03X586139Y149459I-0J500*
G01X594622Y157942*
X597627Y159187D02*
G03X594622Y157942I0J-4250D01*
G01X597627Y159187D02*
X627261D01*
G03X627590Y159310I0J500*
G01X617000Y172750D02*
Y163750D01*
X614500Y161250D02*
G03X617000Y163750I0J2500D01*
G01X614500Y161250D02*
X585682D01*
X583182Y163750D02*
G03X585682Y161250I2500J0D01*
G01X583182Y163750D02*
Y172750D01*
X585682Y175250D02*
G03X583182Y172750I-0J-2500D01*
G01X585682Y175250D02*
X614500D01*
X617000Y172750D02*
G03X614500Y175250I-2500J0D01*
G01X324506Y137661D02*
G03X330753Y143908I6623J-376D01*
G01X324506Y137661D02*
G03X324361Y138043I-499J29D01*
G01X311863Y150541*
G03X311510Y150687I-353J-354*
G01X309482*
G03X309085Y149883I-0J-500*
G01X309600Y148363D02*
G03X309085Y149883I-2500J-0D01*
G01X309600Y148363D02*
Y141763D01*
X307100Y139263D02*
G03X309600Y141763I0J2500D01*
G01X307100Y139263D02*
X300500D01*
X298311Y140555D02*
G03X300500Y139263I2189J1208D01*
G01X298311Y140555D02*
G03X297874Y140813I-437J-242D01*
G01X294547*
X291542Y142058D02*
G03X294547Y140813I3005J3005D01*
G01X291542Y142058D02*
X283059Y150541D01*
G03X282705Y150687I-354J-354*
G01X254882*
G03X254485Y149883I-0J-500*
G01X255000Y148363D02*
G03X254485Y149883I-2500J-0D01*
G01X255000Y148363D02*
Y141763D01*
X252500Y139263D02*
G03X255000Y141763I0J2500D01*
G01X252500Y139263D02*
X245900D01*
X243400Y141763D02*
G03X245900Y139263I2500J-0D01*
G01X243400Y141763D02*
Y148363D01*
X244601Y150499D02*
G03X243400Y148363I1299J-2136D01*
G01X244601Y150499D02*
G03X244727Y151245I-260J427D01*
G01X253010Y159310D02*
G03X244727Y151245I-3810J-4373D01*
G01X253010Y159310D02*
G03X253339Y159187I329J377D01*
G01X284673*
X287678Y157942D02*
G03X284673Y159187I-3005J-3005D01*
G01X287678Y157942D02*
X296161Y149459D01*
G03X296514Y149313I353J354*
G01X297874*
G03X298311Y149571I-0J500*
G01X299201Y150499D02*
G03X298311Y149571I1299J-2136D01*
G01X299201Y150499D02*
G03X299327Y151245I-260J427D01*
G01X307610Y159310D02*
G03X299327Y151245I-3810J-4373D01*
G01X307610Y159310D02*
G03X307939Y159187I329J377D01*
G01X313477*
X316482Y157942D02*
G03X313477Y159187I-3005J-3005D01*
G01X316482Y157942D02*
X330371Y144054D01*
G03X330753Y143908I354J353*
G01X215563Y137661D02*
G03X221810Y143908I6623J-376D01*
G01X215563Y137661D02*
G03X215417Y138043I-499J29D01*
G01X202920Y150541*
G03X202566Y150687I-354J-354*
G01X200282*
G03X199885Y149883I-0J-500*
G01X200400Y148363D02*
G03X199885Y149883I-2500J-0D01*
G01X200400Y148363D02*
Y141763D01*
X197900Y139263D02*
G03X200400Y141763I0J2500D01*
G01X197900Y139263D02*
X191300D01*
X189111Y140555D02*
G03X191300Y139263I2189J1208D01*
G01X189111Y140555D02*
G03X188674Y140813I-437J-242D01*
G01X183947*
X180942Y142058D02*
G03X183947Y140813I3005J3005D01*
G01X180942Y142058D02*
X172459Y150541D01*
G03X172105Y150687I-354J-354*
G01X145682*
G03X145285Y149883I-0J-500*
G01X145800Y148363D02*
G03X145285Y149883I-2500J-0D01*
G01X145800Y148363D02*
Y141763D01*
X143300Y139263D02*
G03X145800Y141763I0J2500D01*
G01X143300Y139263D02*
X136700D01*
X134200Y141763D02*
G03X136700Y139263I2500J-0D01*
G01X134200Y141763D02*
Y148363D01*
X135401Y150499D02*
G03X134200Y148363I1299J-2136D01*
G01X135401Y150499D02*
G03X135527Y151245I-260J427D01*
G01X141719Y160476D02*
G03X135527Y151245I-1719J-5539D01*
G01X141719Y160476D02*
G03X141850Y160454I148J478D01*
X141967Y160393I287J410*
G01X143810Y159310D02*
G03X141967Y160393I-3810J-4373D01*
G01X143810Y159310D02*
G03X144139Y159187I329J377D01*
G01X174073*
X177078Y157942D02*
G03X174073Y159187I-3005J-3005D01*
G01X177078Y157942D02*
X185561Y149459D01*
G03X185914Y149313I353J354*
G01X188674*
G03X189111Y149571I-0J500*
G01X190001Y150499D02*
G03X189111Y149571I1299J-2136D01*
G01X190001Y150499D02*
G03X190127Y151245I-260J427D01*
G01X198410Y159310D02*
G03X190127Y151245I-3810J-4373D01*
G01X198410Y159310D02*
G03X198739Y159187I329J377D01*
G01X204534*
X207539Y157942D02*
G03X204534Y159187I-3005J-3005D01*
G01X207539Y157942D02*
X221428Y144054D01*
G03X221810Y143908I353J353*
G01X189000Y172750D02*
Y163750D01*
X186500Y161250D02*
G03X189000Y163750I0J2500D01*
G01X186500Y161250D02*
X142955D01*
X142273Y161345D02*
G03X142955Y161250I682J2405D01*
G01X142273Y161345D02*
G03X142154Y161363I-136J-481D01*
X142048Y161420I-287J-409*
G01X140455Y163750D02*
G03X142048Y161420I2500J0D01*
G01X140455Y163750D02*
Y172750D01*
X142955Y175250D02*
G03X140455Y172750I-0J-2500D01*
G01X142955Y175250D02*
X186500D01*
X189000Y172750D02*
G03X186500Y175250I-2500J0D01*
G54D31*
G01X381000Y142000D03*
G54D42*
X391000D02*
Y142485D01*
X391485*
X385087Y148882*
Y161979*
X222186Y172285D02*
X331129D01*
X385087Y170000D02*
X387087Y172000D01*
X549245*
X549530Y172285*
X549530*
X446753*
X385087Y170000D02*
X382802Y172285D01*
X331129*
X385087Y161979D02*
Y170000D01*
X446753Y172285D02*
X446753D01*
X446753*
X433392D02*
X446753D01*
X549530*
G54D43*
X194600Y145063D03*
X358400D03*
X140000D03*
X467600D03*
X522200D03*
X303800D03*
X249200D03*
X576800D03*
X631400D03*
X413000D03*
G54D44*
X194600Y154937D03*
X358400D03*
X140000D03*
X467600D03*
X522200D03*
X303800D03*
X249200D03*
X576800D03*
X631400D03*
X413000D03*
G54D45*
X395087Y161979D03*
X385087D03*
X375087D03*
G54D46*
X222186Y137285D03*
Y172285D03*
X446753Y137285D03*
Y172285D03*
X331129Y137285D03*
Y172285D03*
X549530Y137285D03*
Y172285D03*
X433392Y137285D03*
Y172285D03*
G54D47*
X140000Y154937D02*
X174073D01*
X194600Y145063D02*
X183947D01*
X174073Y154937*
X194600D02*
X204534D01*
X222186Y137285*
X303800Y145063D02*
X294547D01*
X284673Y154937*
X249200D02*
X284673D01*
X303800D02*
X313477D01*
X378747Y134000D02*
X401937D01*
X413000Y145063*
X378747Y134000D02*
X370000Y142747D01*
Y145453*
X359458Y155995*
X358400Y154937*
X331129Y137285D02*
X313477Y154937D01*
X423742Y146935D02*
X423119D01*
X414058Y155995*
X467600Y154937D02*
X466542Y155995D01*
X467600Y145063D02*
X478153D01*
X488027Y154937*
X522200*
X433392Y137285D02*
X423742Y146935D01*
X446753Y137285D02*
X455468Y146000D01*
X456547*
X466542Y155995*
X413000Y154937D02*
X414058Y155995D01*
X549530Y137285D02*
X567182Y154937D01*
X576800*
Y145063D02*
X587753D01*
X597627Y154937*
X631400*
G54D48*
X626332Y150131D02*
X629067Y147396D01*
X636468Y150131D02*
X633733Y147396D01*
X636468Y139995D02*
X633733Y142730D01*
X626332Y139995D02*
X629067Y142730D01*
X244132Y150131D02*
X246867Y147396D01*
X254268Y150131D02*
X251533Y147396D01*
X254268Y139995D02*
X251533Y142730D01*
X244132Y139995D02*
X246867Y142730D01*
X517132Y150131D02*
X519867Y147396D01*
X527268Y150131D02*
X524533Y147396D01*
X527268Y139995D02*
X524533Y142730D01*
X517132Y139995D02*
X519867Y142730D01*
X134932Y150131D02*
X137667Y147396D01*
X145068Y150131D02*
X142333Y147396D01*
X145068Y139995D02*
X142333Y142730D01*
X134932Y139995D02*
X137667Y142730D01*
X353332Y150131D02*
X356067Y147396D01*
X363468Y139995D02*
X360733Y142730D01*
X353332Y139995D02*
X356067Y142730D01*
X370069Y156961D02*
X372789Y159681D01*
X370069Y166997D02*
X372789Y164277D01*
X380105Y156961D02*
X377385Y159681D01*
X390069Y156961D02*
X392789Y159681D01*
X400105Y166997D02*
X397385Y164277D01*
X400105Y156961D02*
X397385Y159681D01*
G74*
X0Y0D02*
M02*
/roboti/istrobot/camerus/HW/CAM_PROFI/V2.rep
0,0 → 1,22
 
 
Photo-Plotter Apertures Report
==============================
Position Width Hgt/ID Shape Qty
======== ===== ====== ===== ===
12 70 0 SQR 1
13 236.22 0 RND 4
25 10 0 RND 306
31 70 0 RND 1
42 45 0 RND 17
43 66 0 SQR 10
44 66 0 RND 10
45 65 0 SQR 3
46 82.68 0 RND 10
47 35 0 RND 32
48 25 0 RND 25
 
 
 
 
 
/roboti/istrobot/camerus/HW/PCB/LEDpanel.pcb
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/camerus/HW/SCH/LEDPANEL.DSN
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/camerus/HW/SCH/LEDPANEL.ONL
0,0 → 1,274
(PCB LEDPANEL
(description
(timeStamp "2007 03 11 21 45 48")
(program "CAPTURE.EXE" (Version "10.5.0.p001 CIS - D"))
(source "Original data from OrCAD/CAPTURE schematic")
(title "LEDpanel")
(date "Sunday, March 11, 2007")
(document "D:\\KAKLIK\\PROJEKTY\\ROBOTI\\ISTROBOT\\CAMERUS\\HW\\SCH\\LEDPANEL.DSN")
(revision "")
(organization "")
(address1 "")
(address2 "")
(address3 "")
(address4 "")
(partvaluecombine "{Value}")
(pcbfootprintcombine "{Device},{Value}@{PCB Footprint}"))
(structure )
(placement
(component JUMP3
(place J1
(property
("PCB Footprint" JUMP3)
(Device JUMP3)
(timestamp 000003DB)
("Source Package" JUMP3)
(Value JUMP3))))
(component RL090
(place R1
(property
("PCB Footprint" RL090)
(Device R)
(timestamp 000000CF)
("Source Package" RL090)
(Value RL090)))
(place R2
(property
("PCB Footprint" RL090)
(Device R)
(timestamp 000000DF)
("Source Package" RL090)
(Value RL090)))
(place R3
(property
("PCB Footprint" RL090)
(Device R)
(timestamp 000000EF)
("Source Package" RL090)
(Value RL090)))
(place R4
(property
("PCB Footprint" RL090)
(Device R)
(timestamp 000000FF)
("Source Package" RL090)
(Value RL090)))
(place R5
(property
("PCB Footprint" RL090)
(Device R)
(timestamp 0000010F)
("Source Package" RL090)
(Value RL090))))
(component LED5mm
(place D10
(property
("PCB Footprint" LED5)
(Device LED)
(timestamp 000000B6)
("Source Package" LED5mm)
(Value LED5mm)))
(place D1
(property
("PCB Footprint" LED5)
(Device LED)
(timestamp 00000026)
("Source Package" LED5mm)
(Value LED5mm)))
(place D2
(property
("PCB Footprint" LED5)
(Device LED)
(timestamp 00000036)
("Source Package" LED5mm)
(Value LED5mm)))
(place D3
(property
("PCB Footprint" LED5)
(Device LED)
(timestamp 00000046)
("Source Package" LED5mm)
(Value LED5mm)))
(place D4
(property
("PCB Footprint" LED5)
(Device LED)
(timestamp 00000056)
("Source Package" LED5mm)
(Value LED5mm)))
(place D5
(property
("PCB Footprint" LED5)
(Device LED)
(timestamp 00000066)
("Source Package" LED5mm)
(Value LED5mm)))
(place D6
(property
("PCB Footprint" LED5)
(Device LED)
(timestamp 00000076)
("Source Package" LED5mm)
(Value LED5mm)))
(place D7
(property
("PCB Footprint" LED5)
(Device LED)
(timestamp 00000086)
("Source Package" LED5mm)
(Value LED5mm)))
(place D8
(property
("PCB Footprint" LED5)
(Device LED)
(timestamp 00000096)
("Source Package" LED5mm)
(Value LED5mm)))
(place D9
(property
("PCB Footprint" LED5)
(Device LED)
(timestamp 000000A6)
("Source Package" LED5mm)
(Value LED5mm))))
(component "C-ELYT-CE025X6"
(place C1
(property
("PCB Footprint" CE025X6)
(Device "C-ELYT")
(timestamp 000003AA)
("Source Package" "C-ELYT-CE025X6")
(Value 1000uF))))
(component HOLE_M3
(place M1
(property
("PCB Footprint" HOLE_M3)
(Device PAD)
(timestamp 00000619)
("Source Package" HOLE_M3)
(Value HOLE_M3)))
(place M2
(property
("PCB Footprint" HOLE_M3)
(Device PAD)
(timestamp 00000643)
("Source Package" HOLE_M3)
(Value HOLE_M3)))
(place M3
(property
("PCB Footprint" HOLE_M3)
(Device PAD)
(timestamp 0000066D)
("Source Package" HOLE_M3)
(Value HOLE_M3)))
(place M4
(property
("PCB Footprint" HOLE_M3)
(Device PAD)
(timestamp 00000697)
("Source Package" HOLE_M3)
(Value HOLE_M3)))))
(library
(image RL090
(property
(sourcelib C:\\LIBRARY\\ORCAD9X\\COM_RLC.OLB)
(Device R))
(pin 999 1
(property
(pinname 1)
(pintype 4)))
(pin 999 2
(property
(pinname 2)
(pintype 4))))
(image "C-ELYT-CE025X6"
(property
(sourcelib C:\\LIBRARY\\ORCAD9X\\COM_RLC.OLB)
(Device "C-ELYT"))
(pin 999 A
(property
(pinname A)
(pintype 4)))
(pin 999 C
(property
(pinname C)
(pintype 4))))
(image HOLE_M3
(property
(sourcelib C:\\LIBRARY\\ORCAD9X\\PAD.OLB)
(Device PAD))
(pin 999 1
(property
(pinname PIN)
(pintype 4))))
(image JUMP3
(property
(sourcelib C:\\LIBRARY\\ORCAD9X\\JUMP.OLB)
(Device JUMP3))
(pin 999 1
(property
(pinname 1)
(pintype 4)))
(pin 999 2
(property
(pinname 2)
(pintype 4)))
(pin 999 3
(property
(pinname 3)
(pintype 4))))
(image LED5mm
(property
(sourcelib C:\\LIBRARY\\ORCAD9X\\COM_OPTO.OLB)
(Device LED))
(pin 999 A
(property
(pinname A)
(pintype 4)))
(pin 999 C
(property
(pinname C)
(pintype 4)))))
(network
(net VCC
(property
(nettype S))
(pins
R3-2 C1-A J1-2 R5-2 R1-2 R2-2 R4-2))
(net GND
(property
(nettype S))
(pins
D8-C C1-C D4-C M1-1 D2-C M3-1 M4-1 D6-C J1-3
J1-1 M2-1 D10-C))
(net N00380
(pins
R1-1 D1-A))
(net N00388
(pins
D1-C D2-A))
(net N00433
(pins
D4-A D3-C))
(net N00446
(pins
D3-A R2-1))
(net N00494
(pins
R3-1 D5-A))
(net N00649
(pins
D5-C D6-A))
(net N00715
(pins
D7-A R4-1))
(net N00793
(pins
R5-1 D9-A))
(net N00822
(pins
D9-C D10-A))
(net N00885
(pins
D7-C D8-A)))
)
/roboti/istrobot/camerus/HW/SCH/LEDPANEL.asc
0,0 → 1,51
*PADS-PCB*
*PART*
C1 C-ELYT,1000uF@CE025X6
D1 LED,LED5mm@LED5
D10 LED,LED5mm@LED5
D2 LED,LED5mm@LED5
D3 LED,LED5mm@LED5
D4 LED,LED5mm@LED5
D5 LED,LED5mm@LED5
D6 LED,LED5mm@LED5
D7 LED,LED5mm@LED5
D8 LED,LED5mm@LED5
D9 LED,LED5mm@LED5
J1 JUMP3,JUMP3@JUMP3
M1 PAD,HOLE_M3@HOLE_M3
M2 PAD,HOLE_M3@HOLE_M3
M3 PAD,HOLE_M3@HOLE_M3
M4 PAD,HOLE_M3@HOLE_M3
R1 R,RL090@RL090
R2 R,RL090@RL090
R3 R,RL090@RL090
R4 R,RL090@RL090
R5 R,RL090@RL090
 
*NET*
*SIGNAL* VCC
R3.2 C1.A J1.2 R5.2 R1.2 R2.2 R4.2
*SIGNAL* GND
D8.C C1.C D4.C M1.1 D2.C M3.1 M4.1 D6.C
J1.3 J1.1 M2.1 D10.C
*SIGNAL* N00380
R1.1 D1.A
*SIGNAL* N00388
D1.C D2.A
*SIGNAL* N00433
D4.A D3.C
*SIGNAL* N00446
D3.A R2.1
*SIGNAL* N00494
R3.1 D5.A
*SIGNAL* N00649
D5.C D6.A
*SIGNAL* N00715
D7.A R4.1
*SIGNAL* N00793
R5.1 D9.A
*SIGNAL* N00822
D9.C D10.A
*SIGNAL* N00885
D7.C D8.A
*END*
/roboti/istrobot/camerus/HW/SCH/LEDPANEL_0.DBK
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/camerus
Property changes:
Added: svn:ignore
+*.bak
+*.BAK
+*.cof
+*.err
+*.hex
+*.lst
+*.sta
+*.sym
+*.tre
/roboti/istrobot/cholerik/cholerik.c
0,0 → 1,276
// Program pro MiniSumo na R-Day 2006
//"$Id$"
 
#include "cholerik.h"
 
#define THRESHOLD 15 // rozhodovaci uroven pro okraj areny
// 0-15 (od 0.25 do 0.75 Vdd)
// 0V cerna; 5V bila
 
#define KOLIKRAT 3//10
 
//motory //Napred vypnout potom zapnout!
#define FR output_low(PIN_B5); output_high(PIN_B4) // Vpred
#define FL output_low(PIN_B7); output_high(PIN_B6)
#define BR output_low(PIN_B4); output_high(PIN_B5) // Vzad
#define BL output_low(PIN_B6); output_high(PIN_B7)
#define STOPR output_low(PIN_B4);output_low(PIN_B5) // Zastav
#define STOPL output_low(PIN_B6);output_low(PIN_B7)
 
//cidla
#define SIDE_R !input(PIN_A7) // Sensory na soupere
#define SIDE_L !input(PIN_A4)
#define FRONT !input(PIN_A6)
#define BACK !input(PIN_B3)
#define GRAVITY !input(PIN_A1)
// PIN_A3 Prave cidlo na okraj areny (C1OUT)
// PIN_A2 Leve cidlo na okraj areny (C2OUT)
 
#DEFINE SOUND_HI PIN_B1 // komplementarni vystupy pro piezo pipak
#DEFINE SOUND_LO PIN_B2
 
// makro pro PWM
#define GO(motor, direction, power) if(get_timer0()<=power) \
{direction##motor;} else {stop##motor;}
 
unsigned int8 majak=0;
unsigned int8 sl=0;
unsigned int8 sr=0;
unsigned int8 b=0;
unsigned int8 f=0;
unsigned int8 g=0;
int1 arena_l=FALSE;
int1 arena_r=FALSE;
int1 diag=FALSE;
 
#int_TIMER0
TIMER0_isr()
{
int1 stav;
 
stav = ((majak & 0b1) == 0b1);
if (((SIDE_R && stav) || (!SIDE_R && !stav))) {if (sr<255) sr++;} else {sr=0;};
if (((SIDE_L && stav) || (!SIDE_L && !stav))) {if (sl<255) sl++;} else {sl=0;};
if (((BACK && stav) || (!BACK && !stav))) {if (b<255) b++;} else {b=0;};
if (((FRONT && stav) || (!FRONT && !stav))) {if (f<255) f++;} else {f=0;};
majak++;
stav = ((majak & 0b1) == 0b1);
 
if (!C1OUT) arena_r=TRUE; else arena_r=FALSE;
if (!C2OUT) arena_l=TRUE; else arena_l=FALSE;
 
if (stav)
{
set_pwm1_duty(27); // 1:1
}
else
{
set_pwm1_duty(55); // 1:0
};
setup_comparator(NC_NC_NC_NC); // inicializace komparatoru
if (GRAVITY) {if (g<255) g++;} else g=0;
setup_comparator(A3_VR_A2_VR); // inicializace komparatoru
if (g>3 && !diag) {FL; FR; while(TRUE);}; // kdyz nas preklopi, nedej se
}
 
// Primitivni Pipani
void beep(unsigned int16 period, unsigned int16 length)
{
unsigned int16 nn;
 
disable_interrupts(GLOBAL);
for(nn=length; nn>0; nn--)
{
output_high(SOUND_HI);output_low(SOUND_LO);
delay_us(period);
output_high(SOUND_LO);output_low(SOUND_HI);
delay_us(period);
}
enable_interrupts(GLOBAL);
}
 
/**** DIAG ********************************************************************/
inline void diagnostika()
{
unsigned int16 n;
 
setup_comparator(NC_NC_NC_NC); // inicializace komparatoru
if (GRAVITY)
{
setup_comparator(A3_VR_A2_VR); // inicializace komparatoru
diag=TRUE;
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
while (true) // Diagnostika cidel
{
if (g>100) beep(800,100);
Delay_ms(50);
if (arena_l) {beep(1000,200); delay_ms(10);beep(1000,200);};
Delay_ms(50);
if (arena_r) {beep(2000,300); delay_ms(10);beep(2000,300);};
Delay_ms(50);
 
if (sr>10) beep(3000,400);
Delay_ms(50);
if (f>10) beep(4000,500);
Delay_ms(50);
if (sl>10) beep(5000,500);
Delay_ms(50);
if (b>10) beep(6000,600);
Delay_ms(50);
if((g>100) && arena_l && arena_r) break; // Preklopen na zada a bily papir na obou cidlech na okraj areny
};
 
while(TRUE) // Diagnostika podvozku
{
for (n=500; n<800; n+=100)
{
beep(n,n); //beep UP
};
Delay_ms(1000);
//zastav vse
STOPL; STOPR;
//pravy pas
FR; Delay_ms(1000); STOPR; Delay_ms(1000);
BR; Delay_ms(1000); STOPR; Delay_ms(1000);
Beep(880,100); Delay_ms(1000);
//levy pas
FL; Delay_ms(1000); STOPL; Delay_ms(1000);
BL; Delay_ms(1000); STOPL; Delay_ms(1000);
Beep(880,100); Delay_ms(1000);
//oba pasy
FL; FR; Delay_ms(1000); STOPL; STOPR; Delay_ms(1000);
BL; BR; Delay_ms(1000); STOPL; STOPR; Delay_ms(1000);
};
};
}
 
/**** MAIN ********************************************************************/
void main()
{
unsigned int16 n; // for FOR
 
STOPL; STOPR; // zastavi motory
 
setup_oscillator(OSC_8MHZ|OSC_INTRC); // CPU clock 8MHz
setup_adc_ports(NO_ANALOGS); // komparatory vypnuty
setup_adc(ADC_OFF);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4); // Casovac pro SW PWM a cteni cidel
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DIV_BY_1,54,1); // Casovac pro PWM pro IR sensory cca 36kHz
setup_ccp1(CCP_PWM); // HW PWM ON
set_pwm1_duty(27); // 1:1
setup_comparator(A3_VR_A2_VR); // inicializace komparatoru
setup_comparator(NC_NC_NC_NC); // inicializace komparatoru
setup_vref(VREF_HIGH|THRESHOLD); // 16 kroku od 0.25 do 0.75 Vdd
 
Beep(1000,200); //double beep
Delay_ms(50);
Beep(1000,200);
diagnostika();
 
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
 
for (n=1;n<=5;n++) // 5s do zacatku souboje
{
Delay_ms(670); // 5,25s
Beep(1000,200);
}
 
/*----- Main Loop ------------------------------------------------------------*/
while(true) // hlavni smycka
{
LOOP:
 
GO(L, F, 150); GO(R, F, 150);
 
if (arena_r)
{
BL; BR;
delay_ms(180);
STOPL; BR;
for(n=0; n<5000; n++)
{
if (!arena_r || arena_l) {BL; BR;};
};
FL; BR;
delay_ms(100);
STOPL; STOPR;
}
 
if (arena_l)
{
BL; BR;
delay_ms(180);
BL; STOPR;
for(n=0; n<5000; n++)
{
if (!arena_l || arena_r) {BL; BR;};
};
BL; FR;
delay_ms(100);
STOPL; STOPR;
}
 
if (sr>KOLIKRAT) // Nepritel vpravo
{
FL; FR; // popojed rovne
for(n=0; n<5000; n++)
{
if (arena_l || arena_r) {BL; BR; delay_ms(100); goto LOOP;};
};
FL; BR; // otoc se na nej
for(n=0; n<10000; n++)
{
if (arena_l || arena_r) {BL; BR; delay_ms(100); goto LOOP;};
if (f>5)
{
FL; FR; // vytlac ho
};
if (sl>5) {BL; FR;};
if (sr>5) {FL; BR;};
};
}
 
if (sl>KOLIKRAT) // Nepritel vlevo
{
FL; FR; // popojed rovne
for(n=0; n<5000; n++)
{
if (arena_l || arena_r) {BL; BR; delay_ms(100); goto LOOP;};
};
BL; FR; // otoc se na nej
for(n=0; n<10000; n++)
{
if (arena_l || arena_r) {BL; BR; delay_ms(100); goto LOOP;};
if (f>5)
{
FL; FR; // vytlac ho
};
if (sl>5) {BL; FR;};
if (sr>5) {FL; BR;};
};
}
 
if (f>KOLIKRAT) // Nepritel vpredu
{
BL; FR;
delay_ms(110);
FL; BR;
delay_ms(50);
STOPL; STOPR;
}
 
if (b>KOLIKRAT) // Nepritel vzadu
{
BL; FR;
delay_ms(110);
FL; BR;
delay_ms(50);
STOPL; STOPR;
}
 
} // while(true)
}
Property changes:
Added: svn:keywords
+Id Rev
\ No newline at end of property
/roboti/istrobot/cholerik/cholerik.hex
0,0 → 1,214
:1000000000308A0049290000FF00030E8301A1008F
:100010007F08A0000A08A8008A01A00E0408A20018
:100020007708A3007808A4007908A5007A08A6003C
:100030007B08A700831383128B1E20280B193328FB
:10004000220884002308F7002408F8002508F90096
:100050002608FA002708FB0028088A00210E8300E2
:10006000FF0E7F0E09008A11352829080139013C4D
:1000700003193C2800303D280130F8007818422848
:100080003B1043283B14831685178312851B4A288F
:100090003B185128831685178312851F56283B1855
:1000A00056282B0F54285528AB0A5728AB01831626
:1000B00005168312051A5E283B1865288316051657
:1000C0008312051E6A283B186A282A0F68286928A7
:1000D000AA0A6B28AA01831686158312861972282C
:1000E0003B187928831686158312861D7E283B18B7
:1000F0007E282C0F7C287D28AC0A7F28AC01831633
:1001000005178312051B86283B188D2883160517B3
:100110008312051F92283B1892282D0F90289128B2
:10012000AD0A9328AD01A90A29080139013C031938
:100130009B2800309C280130F8007818A1283B103B
:10014000A2283B1483161C1BA9288312AF14AB28CA
:1001500083168312AF1083169C1BB22883122F14B0
:10016000B428831683122F103B1CB9281B3095002E
:10017000BB2837309500073083169C0005080630F1
:10018000F700F70BC12800001C0883120D1383161B
:10019000851483128518D1282E0FCF28D028AE0AB7
:1001A000D228AE010A3083169C0005080C38850061
:1001B0000630F700F70BDA2800001C0883120D1335
:1001C0002E08033C0318F7282F19F72883168613E7
:1001D000831286138316061383120617831686125C
:1001E000831286128316061283120616F6280B1146
:1001F0008A1120280830BA02031C09293A308400E9
:100200000310800C00080319092907290000800B3E
:10021000062900340B138B138B1B0B293708B900ED
:100220003608B800B808031D1829B908031933297E
:100230008316861083128614831606118312061104
:100240003408BA00FA2083160611831206158316A5
:100250008610831286103408BA00FA203808031971
:10026000B903B8031229C0308B0400343530840040
:100270000008031948290230F800F701F70B3E295E
:10028000F80B3D299730F700F70B4429800B3B29E9
:10029000003484011F308305703083168F001F12D5
:1002A0009F121B0880399B0007309C008312A90114
:1002B000AA01AB01AC01AD01AE012F10AF102F119F
:1002C000831606138312061383168613831286136E
:1002D0008316061283120612831686128312861262
:1002E000723083168F001F129F121B0880399B00EB
:1002F00083121F1094128316061186140612003002
:1003000083129400831694000108C03901388100DB
:10031000831290010030F8000438920036308316C2
:1003200092000610831206100C3097001B309500C7
:100330000A3083169C0005080C3885000630F7004B
:10034000F70BA02900001C0883120D130730831639
:100350009C0005080630F700F70BAC2900001C08CC
:1003600083120D138F3083169D0003308312B50066
:10037000E830B400B701C830B6000A213230B50009
:1003800036210330B500E830B400B701C830B600FC
:100390000A21073083169C0005080630F700F70B8A
:1003A000CF2900001C0883120D13831685148312B5
:1003B00085189C2B0A3083169C0005080C38850094
:1003C0000630F700F70BE22900001C0883120D131A
:1003D0002F158B16C0308B042E08643C0318F829A7
:1003E0000330B5002030B400B7016430B6000A21F4
:1003F0003230B50036212F1C102A0330B500E8300A
:10040000B400B701C830B6000A210A30B500362161
:100410000330B500E830B400B701C830B6000A2197
:100420003230B5003621AF1C2A2A0730B500D03053
:10043000B4000130B7002C30B6000A210A30B500F4
:1004400036210730B500D030B4000130B7002C3071
:10045000B6000A213230B50036212B080A3C0318B9
:100460003A2A0B30B500B830B4000130B7009030F4
:10047000B6000A213230B50036212D080A3C031897
:100480004A2A0F30B500A030B4000130B700F43074
:10049000B6000A213230B50036212A080A3C03187A
:1004A0005A2A1330B5008830B4000130B700F43058
:1004B000B6000A213230B50036212C080A3C031858
:1004C0006A2A1730B5007030B4000230B7005830D7
:1004D000B6000A213230B50036212E08643C0318DC
:1004E000752A2F1C752AAF18762AEC290130B30023
:1004F000F430B2003308033C031C922A031D842A03
:1005000032081F3C031C922A3308B5003208B4009D
:100510003308B7003208B6000A216430B207031866
:10052000B30A7A2A0430B400FA30B5003621B40B8D
:10053000942A8316061383120613831686138312D6
:1005400086138316061283120612831686128312EE
:10055000861283168612831286128316061283125F
:1005600006160430B400FA30B5003621B40BB32AB5
:1005700083160612831206128316861283128612BF
:100580000430B400FA30B5003621B40BC22A831609
:100590000612831206128316861283128616043000
:1005A000B400FA30B5003621B40BD12A83160612F6
:1005B0008312061283168612831286120430B40048
:1005C000FA30B5003621B40BE02A0330B5007030A4
:1005D000B400B7016430B6000A210430B400FA3028
:1005E000B5003621B40BEF2A8316861383128613C7
:1005F00083160613831206170430B400FA30B500D0
:100600003621B40BFE2A83160613831206138316B3
:100610008613831286130430B400FA30B5003621F5
:10062000B40B0D2B83160613831206138316861341
:10063000831286170430B400FA30B5003621B40BAB
:100640001C2B83160613831206138316861383123C
:1006500086130430B400FA30B5003621B40B2B2BCE
:100660000330B5007030B400B7016430B6000A2121
:100670000430B400FA30B5003621B40B3A2B83169F
:1006800086138312861383160613831206178316A6
:1006900086128312861283160612831206160430FF
:1006A000B400FA30B5003621B40B512B8316061373
:1006B000831206138316861383128613831606127B
:1006C0008312061283168612831286120430B40037
:1006D000FA30B5003621B40B682B8316061383124B
:1006E0000613831686138312861783160612831247
:1006F000061283168612831286160430B400FA306E
:10070000B5003621B40B7F2B831606138312061314
:10071000831686138312861383160612831206121B
:1007200083168612831286120430B400FA30B500A4
:100730003621B40B962B762A8B16C0308B04B10170
:100740000130B000B108031DBC2B3008053C031C70
:10075000BC2B0530B2008630B5003621B20BAB2B76
:100760000330B500E830B400B701C830B6000A2144
:10077000B00A0319B10AA22B0108963C031CC92B2D
:1007800083168613831286138316061383120617A5
:10079000D12B831606138312061383168613831236
:1007A00086130108963C031CDE2B831686128312E7
:1007B00086128316061283120616E62B831606127D
:1007C000831206128316861283128612AF1C522CD5
:1007D0008316061383120613831686138312861755
:1007E0008316061283120612831686128312861649
:1007F000B430B50036218316061383120613831610
:10080000861383128613831606128312061283162A
:10081000861283128616B101B0013108133C031C05
:100820002F2C031D172C3008873C031C2F2CAF1CCA
:100830001B2C2F1C2B2C83160613831206138316D6
:1008400086138312861783160612831206128316E6
:10085000861283128616B00A0319B10A0D2C83166C
:1008600086138312861383160613831206178316C4
:1008700006128312061283168612831286166430BD
:10088000B5003621831606138312061383168613CA
:10089000831286138316061283120612831686129B
:1008A000831286122F1CBE2C831606138312061386
:1008B0008316861383128617831606128312061276
:1008C0008316861283128616B430B500362183163D
:1008D0000613831206138316861383128617831654
:1008E0000612831206128316861283128612B10133
:1008F000B0013108133C031C9B2C031D832C3008D2
:10090000873C031C9B2C2F1C872CAF1C972C831619
:100910000613831206138316861383128617831613
:100920000612831206128316861283128616B00AE6
:100930000319B10A792C8316061383120613831642
:1009400086138312861783168612831286128316E5
:100950000612831206166430B5003621831606137C
:1009600083120613831686138312861383160612C8
:100970008312061283168612831286122B080A3CF3
:1009800003186E2D8316861383128613831606139F
:100990008312061783168612831286128316061296
:1009A00083120616B101B0013108133C031CFA2C66
:1009B000031DDE2C3008873C031CFA2C2F18E22C78
:1009C000AF1CF62C831606138312061383168613A8
:1009D0008312861783160612831206128316861256
:1009E000831286166430B5003621BC2BB00A031979
:1009F000B10AD42C8316861383128613831606132A
:100A000083120617831606128312061283168612A5
:100A100083128616B101B0013108273C031C6E2DEC
:100A2000031D162D30080F3C031C6E2D2F181A2D98
:100A3000AF1C2E2D831606138312061383168613FE
:100A400083128617831606128312061283168612E5
:100A5000831286166430B5003621BC2B2D08053C68
:100A60000318422D831686138312861383160613EA
:100A700083120617831686128312861283160612B5
:100A8000831206162A08053C0318562D83160613F2
:100A90008312061383168613831286178316861213
:100AA0008312861283160612831206162B08053C43
:100AB00003186A2D83168613831286138316061372
:100AC00083120617831606128312061283168612E5
:100AD00083128616B00A0319B10A0C2D2A080A3CA3
:100AE00003181E2E8316861383128613831606138D
:100AF0008312061783168612831286128316061235
:100B000083120616B101B0013108133C031CAA2D53
:100B1000031D8E2D3008873C031CAA2D2F18922D03
:100B2000AF1CA62D83160613831206138316861395
:100B300083128617831606128312061283168612F4
:100B4000831286166430B5003621BC2BB00A031917
:100B5000B10A842D83160613831206138316861397
:100B60008312861783168612831286128316061244
:100B700083120616B101B0013108273C031C1E2E5A
:100B8000031DC62D30080F3C031C1E2E2F18CA2D26
:100B9000AF1CDE2D831606138312061383168613ED
:100BA0008312861783160612831206128316861284
:100BB000831286166430B5003621BC2B2D08053C07
:100BC0000318F22D831686138312861383160613D9
:100BD0008312061783168612831286128316061254
:100BE000831206162A08053C0318062E83160613E0
:100BF00083120613831686138312861783168612B2
:100C00008312861283160612831206162B08053CE1
:100C100003181A2E8316861383128613831606135F
:100C20008312061783160612831206128316861283
:100C300083128616B00A0319B10ABC2D2D080A3C8E
:100C40000318582E83160613831206138316861371
:100C50008312861783168612831286128316061253
:100C6000831206166E30B500362183168613831262
:100C70008613831606138312061783160612831231
:100C8000061283168612831286163230B50036217C
:100C90008316061383120613831686138312861394
:100CA0008316061283120612831686128312861288
:100CB0002C080A3C0318922E83160613831206137F
:100CC0008316861383128617831686128312861262
:100CD00083160612831206166E30B500362183166F
:100CE0008613831286138316061383120617831640
:100CF000061283120612831686128312861632306B
:100D0000B500362183160613831206138316861345
:100D10008312861383160612831206128316861216
:080D200083128612BC2B630054
:04400E00383FFC3FFC
:00000001FF
;PIC16F88
/roboti/istrobot/cholerik/cholerik.PJT
0,0 → 1,43
[PROJECT]
Target=tank.HEX
Development_Mode=
Processor=0x688F
ToolSuite=CCS
 
[Directories]
Include=C:\Program Files\PICC\devices\;C:\Program Files\PICC\drivers\;C:\library\CCS;
Library=
LinkerScript=
 
[Target Data]
FileList=D:\KAKLIK\projekty\roboti\istrobot\cholerik\cholerik.c
BuildTool=C-COMPILER
OptionString=+FM
AdditionalOptionString=
BuildRequired=1
 
[tank.c]
Type=4
Path=
FileList=
BuildTool=
OptionString=
AdditionalOptionString=
 
[mru-list]
1=tank.c
 
[Windows]
0=0000 tank.c 0 0 796 451 3 0
 
[Opened Files]
1=D:\KAKLIK\projekty\roboti\istrobot\cholerik\cholerik.c
2=
3=C:\Program Files\PICC\devices\16F88.h
4=
5=
6=
7=
[Units]
Count=1
1=D:\KAKLIK\projekty\roboti\istrobot\cholerik\cholerik.c (main)
/roboti/istrobot/cholerik/cholerik.h
0,0 → 1,19
#include <16F88.h>
#device adc=8
 
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOPUT //No Power Up Timer
#FUSES MCLR //Master Clear pin enabled
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOFCMEN //Fail-safe clock monitor disabled
#FUSES NOIESO //Internal External Switch Over mode disabled
#FUSES CCPB0 //Vystup PWM
 
#use delay(clock=8000000)
 
/roboti/istrobot/camerusII/HW/PCB/WhiteLEDPanel.pcb
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/camerusII/HW/WHITELEDPANEL.DSN
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/camerusII/HW/WHITELEDPANEL.asc
0,0 → 1,49
*PADS-PCB*
*PART*
D1 LED,LED5mm@LED5
D10 LED,LED5mm@LED5
D2 LED,LED5mm@LED5
D3 LED,LED5mm@LED5
D4 LED,LED5mm@LED5
D5 LED,LED5mm@LED5
D6 LED,LED5mm@LED5
D7 LED,LED5mm@LED5
D8 LED,LED5mm@LED5
D9 LED,LED5mm@LED5
J1 SCW2,ARK210/2@ARK210/2
J2 UNIPAD2,UNIPAD2@UNIPAD2
M1 PAD,HOLE_M3@HOLE_M3
M2 PAD,HOLE_M3@HOLE_M3
M3 PAD,HOLE_M3@HOLE_M3
M4 PAD,HOLE_M3@HOLE_M3
P1 R-TRIM,100@PT6V
R1 R,20@RL090
 
*NET*
*SIGNAL* N00284
D2.A D1.C
*SIGNAL* N00288
D2.C D3.A
*SIGNAL* N00294
D3.C D4.A
*SIGNAL* N00302
D4.C D5.A
*SIGNAL* N00312
D5.C D6.A
*SIGNAL* N00324
D6.C D7.A
*SIGNAL* N00338
D7.C D8.A
*SIGNAL* N00354
D8.C D9.A
*SIGNAL* N00372
D9.C D10.A
*SIGNAL* N00482
P1.3 D10.C J2.1 J2.2 P1.1
*SIGNAL* N00504
P1.2 R1.1
*SIGNAL* VCC
D1.A J1.2
*SIGNAL* GND
R1.2 M2.1 M3.1 J1.1 M1.1 M4.1
*END*
/roboti/istrobot/3Orbis/dokumentace/Video/3Orbis_kmitani.wmv
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/3Orbis.doc
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/fotky/prevodovka.jpg
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/fotky/P1010003.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/fotky/P1010004.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/fotky/P1010005.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/fotky/P1010006.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/fotky/P4090008.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/fotky/P4140001.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/fotky/soutezni verze/P5030001.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/fotky/soutezni verze/P5030002.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/fotky/soutezni verze/P5030003.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/fotky/soutezni verze/P5030004.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/fotky/soutezni verze/P5070003.JPG
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/3Orbis/3Orbis.pdf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/3Orbis/HBRIDGE01A/Hbridge.PDF
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/3Orbis/HBRIDGE01A/V2.PDF
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/3Orbis/LEDBAR01A/LEDBAR01A.pdf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/3Orbis/LEDBAR01A/T1.PDF
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/3Orbis/LEDBAR01A/V2.PDF
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/3Orbis/LEDROBOT01A/LEDROBOT_T1_AMA.pdf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/3Orbis/LEDROBOT01A/LEDROBOT_V2_AMA.pdf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/3Orbis/LEDROBOT01A/LEDROBOT_V2_REAL.pdf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/3Orbis/LEDROBOT01A/LEDrobot.PDF
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/3Orbis/LEDROBOT01A/sch.pdf
0,0 → 1,625
+%âãÏÓ
+0000000016 00000 n
+0000000867 00000 n
+0000001186 00000 n
+0000001407 00000 n
+0000001511 00000 n
+0000001716 00000 n
+0000002199 00000 n
+0000002221 00000 n
+0000004469 00000 n
+0000004491 00000 n
+0000006703 00000 n
+0000006725 00000 n
+0000008760 00000 n
+0000008782 00000 n
+0000010871 00000 n
+0000010893 00000 n
+0000012958 00000 n
+0000012980 00000 n
+0000015104 00000 n
+0000015126 00000 n
+0000017235 00000 n
+0000017257 00000 n
+0000019265 00000 n
+0000039523 00000 n
+0000000952 00000 n
+0000001165 00000 n
+stream
+H‰b`````ÞÁÓ|°(-ÄbP "ùû=XwÈ\``Òi`àèc`/a`h4``üw€ÃŒAaCæÃYˆŒ ³X 4Ë1°˜df`˜w
+stream
+H‰ŒW]o7|Ÿ_ÁG鐝ð{8÷fÇIp±ÑâîÁȃ²^Ç6´ èÎÈýúT“Ý=\í¬²0 O-ÙÅ®âWÓ‹??8óƒqæ³±c6_Œ³æ­y÷‹5¿¿qæ·?Ðá“|ƒ7Ó<³7)ºÑ›Í”Ó8›‡ýâX2ÊIèê¨5ù±xj¾ý{ømðóh£q.è8zoü˜
+[¥²­—¬O£sfƒû#ĉ:dD!êáꁵñn,±EӀؒÔøŸýûß÷¼¿ýó+óööOãÓWÆ[[Ëkf³)tl#k’&º 46Ëjs¥yûæÅËÓ)Ł
+ҜpHOQ”†ðúÅë7ÿz] Ž
+wP\*A;£ë9PÕé˜Iã8у‡qOI-õŒ$ä xŠÄ|J9…z.*%ãJš­Ê Û>öŒT“Ôº.ÐR9<ÁwŽA£`ÌE˜j‘õ»nöÝ ÐÒ‘¨0Ó2Άv1s^šqÊi¨"æULcjdKç8ÙÝ𱥏24äV–*ž©Î]Y×D½%’HëQ×׿¿ÑR%fÚȋEXˆnÉqAÒãoIaÓÅQ¬™9Ւ8Q'm¥+e‰d¤´ŒÛ-P’éS­†È@bH7ðº!‘
+ý#Cz/𢱹óâ£p›q[]/qqªD‡à¦R"Ù&Vƒp¤¸°ø7ãºîb)3ã6,GJJ}ÆÕ"üâz‹Ÿµô.Ÿ³ˆ
+àyq袜Â(Å«Atð͉3UÀ2W‘Ù`^ñÇ£
+™§¼´bßw¡Œ”˜q•#%£._²§þ{Ÿ³ÇG*RÏÙ\¦º+¡ÀÁ]xx‚Qº„»ƒap•!yª%òk-¶£^@U!¡nŒʼQ߉ŠEm-”ýÉP‰˸ËIõ“Eô µ#ªÖÄc%¿fñg²ˆîÆéÄ¢X/´Å¢# ‹°E½&€úpì,b$B²L l­8”êY)­©Þ|*Pˆó°Ë)õ W‡è—Ò9Äø¼Cà¯çòºC›¸ta8„kÛ.V,½š«@‘"˜•Jl³A˜Å¤èðÕÖΡÒÛS:o$„“éS­ÞàjWoŸ÷¦D*ÁÎx±)J\¼9Æxà¸@™qtž*ÉU!ëPÜ4jlU¯ÌìMÄþ›—ÆLÇÉP‰˸-”sê3&‹è—yqˆáYƒˆ|Žç ò(žÑ†œRÁ†¥†1!¼BÓLÜ
+stream
+ñ$RܪK+N )"œÓõ¤(¹Š˜M;D2/“UЫ—ZÙÄÑÅÍvÂN<a_u³—ö_O?Ïh´èJ1сF£×ÑYW—%:ç2â13(Fbm©NۈHÂ$‡è³Æ´:xÅ8rêp~ã²¾ÜÁƜé¢â'NŘp=ýT9¦2ç7ìãå›ÿž/Ã7*ʼnï¼8+x‰=ϗÆ"¢Šmƒ* u‘3bÊ|ÀE%âì&$\ÐëiÂ?hÙlü(³€«œÏJøf; 2¨ëªíðÊøÌ)£‡—ÿÜ·Ã,|ÿ_ˆUz€¸hr&äæ⌟&…³hJ.uŒcÜr"¤Ä5Õ«T#`ÜïiŽ_Š>Kcö^
+Žh<I˜÷ÿ5aÔ34‘‡çñÕÒ²3Y:på|̗¦Kh ÀÔc’±gҁp~AP€Ú„•ë3Jb\åÒÛ_7Æ%k‹‰¯—ÂA(ß©lâ
+Rc<àäX—Vãá˜õ[ÊLIöè—dbÔ¼6²ƒ•"A:×cÊ$*V”Â¥w3¤cÅ)¢0uQ¥Ðû
+è2
+܄‰ë R_1ü€cÓK …¸(£§ytÄ)•™`³P©•Õ¸»e\¾žþ¥-W>wÖ÷2ñóÒ³rÁD”
+ªÁZÓøû0&œ¢Ò¸a¾qB¯í§ó·øîË_¿ÿ„*ÎiÎO³Žå1•PٻӞûÃ
+|ÓK&GÏR;<´
+ÔHö(w«P{p’~`ˆ‹ï]@ž0ðú×ÓÄØRV9œa]L°X54•MLÎ[ã'÷Àºt7žŽY¿¥ô äP93H¬žb$VéCá9øcQñ\SRN}ԜI VWBf†‰o‚ã^;™êªðQŠ"XŒ”a9ˆËæ×·…‹õKXÂSDîå
+dl{ÄvÔ­tsªô ë¡V™®*ӅÙNãÕxܸ&™ 6rµßôó.ZÆ>±¾Yza[­Ô8W>JÇÆÊþœ0ëËKvâÒÛ¦zÊ8šuläjoô«å7öŒ}÷nGßÙ¬Ô8W>JûΦTWn½p+®x‡Xρs1;ëØìLí7ýn¿ñMû@ƾ{·£ïlvgƹªðQ:v¦R]¹ð‹×ì¬õ27=¶ch¤jm´‹e߬mÖcW†Z¨ÈnÙøU>Jû¦¦t,‹ïm‘my_ì›M 4Rµ6ÚvSÆ:ÐfÝ=³ÔLe$Æ©ªðQÚw4¥¤÷ù•£e}Ë2Müò÷Í#ÌpÛvñ^p¦D2Œ¦Dlö;¬7uS®vցŒµø½'®l
+-DéYœø„¾mS¹0Ëát ú·“°7Ì=
+stream
+H‰œWˎ7 ¼÷WÌq×À
+­G«¥cb ^Ø°Ç@€ =$f.É!¿Ÿ¢DRêÇ´'Á^¶F"U$K{Oø3ÓèNý><¼Ìç?‡ñôdµÎŸÎ·Ÿ?~ùB?¿?ÖgÓi
+dPüûÙÌX‘Xì'cÝã8ß¹¯Ö•ðæÄêp2cè®ñL‘¯ ßŸ‘Ñxzš()Èl͘Fõq¾Ë¿sµÀØR(/ö~>_‡‡ïßùëU*Mf§Ï?hRc0³ë“\’NiZsÀð gæƁÎËAßÉì
+yŸzpøž=ýCžÞ²¯ª+â›&3õ͉ˆ7]eW“ªëŒw$Ê®T¢ ÓKqc'ÑÅþZq6Q‰
+E)ƒ+°)‹•ÒWgÑΔäk÷¢Tçі÷žêâÖu h´P+Úk ÆaN&+3âL§dÑ{͙Tÿ:ą„âGôiöZ¶Âà ²è(=bÈH¼V(G²!Óé¹¾€‚§^ÒÈãnçF>š§Šù
+…|5d~Õ«’Ÿ'lUò3f¥fW€ú$¤çU+áÒ-ÌJ(?Ð{ªdÛ]ñâ¦Ì!Æ:›aŸw[1?gs0aÊåá{xþúòÉ­[
+stream
+7ü3“*7c™š“E˜Õm}ØÝŠ ]Kªfãg»`O—HŽéT .Y§à51Äaêgüú… „ (!ßzm²¯¾þôñógÙYµáçF
+úù`uÛVÜð8~ m(ä´Ì6á:~ž(í@0Ø>k¸7s²@¡Ìk2‰2Šq)BÛÐZ-¡Ágd×ð˜15ԙ‹Ée™Ì¬UàicªÀ£eæRf‚2¯d’(£x”À5ÅLG°ºI?°Õn*ƒ"žYºÑ»–ì:tüT³²ë@a6Z’
+µ`žX’E•mWBË;9ÍV:†:c#kÁRÙ3­Dåð°[s )3A™—3E•=ʀoÓ2ûÉ ó‚Oœ°uYHx×õ>WY ô€`îÍ¥öabn.|2úä‡èጟݥ©ÓÌ3™dMÉTPÄëyVçhš;¤ã=;•¡ö1c©Ar¹f–Òñ~ž;¤gWÌö¨þ0û$™Š0¢mÚ]"E֑„ê*3Ô`Ì¢uPûÈdÒ]*…Ã$T“
+·`žZ’YØN·i°Yˆ¦Å$šHÉê܌Ešô §Nà²f›Œ¤‰8W!S+¦™5YtÕö£¥Uì;½^ÇF³qÆŸB4qÆ3ÞðÊ4q—üðVjÅð«¯r^I|w~Íù5.Xã4ߌ3æøՕ*ø—=—ÐÆ+ñ}Ëž‘pý·T×ã»ål…'ä ‚?~ø!þ”/½jdÄ.Û{ó‘=Ä1qÀ¥´^?f
+stream
+µueü:£æ£µjën·z}ÃãRE¨~KL/«»»§´\¬X¼*ñõ+Ô"hM?ÂÎW¤¤Ão‚‰Ï‘CkjÓ^۴߸OH«{^Ö+gÃ
+¥9…hE«ç
+ÏæÌMøm-Ï\]b§ç€~¨%ò;“£G1hdó»®oæL}wêj}TZ/Ë<,g@‹-ØRÃY‰yÞ^zøv§C&ýF©iJ›Üºœl΍»ÓÒ)'~ç-jv˜ìµó ˜ýþVRÀÎ’N‘(ã]ÿøÐ|w.³;ÿüñ×OŸ´g”ƒ;Ïàý\Á· ÿ¼7àÄýc£Âê1)(R}@\ÞÇf^‘g®†Œ2‘S%&¤ŒuN/uÒ €H¨ŽàâˆòÁà•ólyÊA°ÐT@CMžá˜Ó-àQ¯Ì©M Ë1c.Fƒ#¨ á¨\Qa^¨ÝÐÀ+‡í3†Ú—è‚Lu*;!»DUÙçELfÜC;–£ ‹*PSÂtWG~Éîà›íEw>éÚ1y;zØ B²êA(%…®:
+*6½kƬØÁ9$ü>x¿ã÷ìKäW"½£~÷þó‡ßò—öPèMõÇëû«w[Ú3ËyµýlTf¾—6KÊ´÷9.¸pã£g›¾”SŽü@µÀnÇãÊ8sqí¥¬ýd“ò9EZªÜÒPîŒÎH¹Hõš”?ú|uJ(‘½TÚ¯)i uö'„|œvû"Lôà+‹Þ~ÐïÚÚégH·q
+€ $íY¤s# ¶õ˜èUjmß~ÅÚ:¶u@´uu”¶îiÎB”ÖÖ=|Óm®è° Žî $Y·!M µ£+…)::vtÚÑሎîiò6z³¯Éêm‚Ú…=m
+stream
+H‰„Wۊ$E}¯¯¨Ça’¼UVÖ£®\]Ü^VD‘ñ÷È8™Õ]ÓËÂŠ“'.y‰éýôÅyòs™Wëìç-º’}œ·4Ÿ_ÈBÜBøŸ?¦ÓS~8ÿ5?›½£ŸÎÏÓϧ§oßş—Néá—óÓôÕy
+ì5ÿøÍBr¹Ìkr)Î/SðÅmð2µµKûX–¡:_ùƒXxàÅ=/w
+,€V¨Þ­F[W—îÖèÖ<rž"XTÞæjä5xO}àA•v‚@$‚^¥ %ïÕâr×ÓÐ9dODË(4MÍ«$"fä(ààoB«¢÷œÛ¸Ð§µéñeÚª«ë¦x[ÝWb6ä]œŸ' \ݺ–YýòJŸÎÊ*è™V n-¡›££žT_… 6(«š¯HÚ ~žþì!lڙ#BjXƒ¨.”RáÄYL í€ÐcZ2}ÛnhˆIÍP-¾ÁlXÖíÎMÔ^2µ%ÏÊD;9-ÅÊ\ìU€¢4 5“$ŒZ’mqÑg3Rϔî(H9°ü d”9êF-L·ä^¤"õ4ó‚xõj™UJä݈âत€XPEË(tl£²è 2âÞF‚Ñ)%»Õ[:—jo£\]zÞÇÆÊ`h"¥Iàh´†eÑîÛíõµÐ€4« %\õ Pù‚ ^½X 2ŠxM¨˜$×ꤌ€XMýDȨR
+‘øF’öÃÉY/ÝZ\­ »•Ny0 ¾Èù©¾g1W˜dQ5ɚbRNؔòÕ[7–¸½yÃõ͋‹WïŸë+w—‰hª^½Døƒ?}ç*ïùë·ÊHz}éîŠ-£wò=ºu•i¨Ó=IÍÕµ»ï€xU®CQ­Yî^ãûàŽ¬‘èànzRXÜڊ"·ðEðœbP™‚ ͒y§¨IÀ•ÍX#U+v֛&•e=¯TyãÝt雄.¥&õq“îñþï¯oš”ϝqé]€‡ §s,IÈåþÓ0ÄâÊ>*_îR'ڜqGmÍj%(íʋim)¢šQZèøY(ðßo3U赉*¬tÞæéCÓZܲ‰+5­óùKÙÚë"ÏêïÞ®Õ/åt¾yT¯òv Õ=рm¥ƒ¢±™Ÿ™:¬Ô;yž˜é³N‹€ïðÆÀÛw¸T3ð¡gïŪøx;·dù"Ž{|·"íìҒšÝ†@=1zb>}ûýÃcY½?ýðA·[†îXÏ:ïXå›ï¿¼.5ê«4ÐêÛMIÝÑ^†°†ÿ±ì‡ÕÕ « Þp<“´è^#ÿÍ “¢Â=ô<)$2‰#Ýziiûÿ3/Q©$j#Y[÷RR@¬¨Ž¢fPÊ7¨F½¶™AQáۆ+&Ù¡‹Ÿßܶ 
+FÒjRKéÒ[î¤îiû6 Bý€”+ª£¨”>O¿a [å¶\]¸Ì±WŽ®áÜ+WªÛzå!É
+¥æ(ÕR­œ§/{å‚ËC倴r€¨œ:Jå¥\9ÅµJ\üx°qílââÞ>5è
+{|Rmïí]O
+¬K«3„ºÇÆÓÙÖÚG~@oaÞT„aT¡LªÝ“ŸúÆ+®uŽÑVê©PycUó…¤QñXȇê(¤ß‚´¨€5,u–°@°4½0JîÍЈu]õ…ªQt ‹ÒtJ¥¨ra/͊‰Q­2é©Õ†7˜uä’yÀœ)ä¥tg±®±®ÖÝ,·›(ϖ‘Nòz{µžž
+stream
+Mûç=ËkÊ`#øyÑÝZCT’<„i¢‹b<ÒÔ¤>ž Zi¤LXÌ´Á³"hE:¬5î°6]´Õ±ü †[3£Gù[Ä #å‘àYzñ<sÁ‹¬d)Ñxþe§È¿tSSߒÖMÆnšË>¢°²×t/оòoØÚÃoîґò ÉOőì§ôj[äâY›locO”Åõ,«Öª¦ZGי*e5TO–á²+ëg{²žøÚZ‚Ž
+Y·yšµÛp~hT¹ù#¶ò;6Š¤üGXÖê^C“ÛäžøMO‘ãB%4Õµ>Œ›H‰sõ—~Ô³ùL$DíGhkóȘÓØZ„K§þ}½ëûÿµþý/ùJ¡©qŒZÆ´˜`ýŠ!øapɏ %‡º/!ÅôóS]ÊnLìÙoøVâ§iD ºÌ—tØ
+ݵ1V†±Å•¢–†šÜ4Tӗ—ƒ¹ò¬¨?ô9ʤ‰¡’÷Ùymi_çÊ}㋮ìù†o%~šZ? ÓWÙLƎæÛK›1ËqëuÆç2í„vΗ é¦qw@¬,ÁÀØB5ß¾“sËMäòÍWO;šoc,mÆ,Çý¨É)ÛJâøIbö
+Ý·1–†±Æ•‚~”Ç6•ñ“Š%Æ(†yba°Åå¶5<cSžn“­06tßÆXÆW
+;ñ´šlI‡±bø6ÆÒfŒÀrܼþhèÍǚ~^ô°xÀ$¸bÈÙ$bhs
+stream
+H‰\WKÚó¼
+¼JŸã
+ò.wwÓ
+¾Ÿÿ}ðbìòìëßÇ•Ø ê«¬Ú2¬ê
+pqQŒ!_ӕWM¦siÙ¡ù%ª’æÄV9){A™‚î'‚ؽ<-E±Ÿ2î…àû¡/)
+®šNçºi`z&º’êÆjåED“bϟZö32l=…´îòö!Í]ö¢_)$®"ÈtӎÍ3ÓËd…äP’±Ï3Êx$¤_ü'¸—%fñâÀ6Ýò™Ã·<ǵã^F[W»|~¹mEçëQZ±<N}ÐmÓ5É–u§Èz[å™pD†Þ›énÞ+"ëmIù+ȯ|~¹mE™/«ô ºmÇæšd˺5²ÝÊ-ë²QûSÝU¶hñEÝw™SÑ#)íP
+stream
+F >@2±uh@=,˜Ä’ß ŸIeyŘ-è‡íœÏv´±îD,Ät§hó+,Ârù![-g¤{#¹¨ÆkÎÁd\P–b0Æ¢
+Zl:͵æóUìÄaùy!ˆES›ùú‰ù’Øb#6ãmètie1k¾„™Ø"§(d–š?q6Ìãd£Ž ;{/ÁŠ¦:™Á^v˜†ùkõÄ”a ŽÐ %lêd3ÛlCwŽQË^7c?2µâ>¥PµÃ|Õì@ ñ$×ӂSt\ún/ñ`ÄTF©/†òN5þ„÷qštzST«¡j²š¦.0?B$`g»‹-ÿI7ÅB¦Eò=%ˉpÆå?Úx—(–úÑ8zJôÕb›œ‰ Ž8€©åŒ÷&ö~žìtP„Šv¹C٣ܲ<ì»h†ó‰ÄãE¼„7)Œ+Õh=Ogés‘!¦ŠÅeÙ ìVÎXÝ\õÓ¨ÄìÁMêJC(~MeTGõôm¦6:MWEº/ž×e™¬‘Ç”‘LÊ,e©ºB]e¹êsúÞñýÕwÓL6W ûa g¿Û¸²ÃhÇ9¦ ¸L*…P8“F6š@Ï2-¤5ô
+5Ñnjá(§é2}Eÿ¢tK€É"z›èͤ‹™bžh[E;Óiñ­ø·Œ’½¥]’)²PVsVõr=ÓyI‰UÚ“qNV՗Õ&uú–Úa µ>„ “?︝pû¼¾•¾Fß~_‹y Ýø c…^HáìÝL|ލÜqoàC
+eìb)Ri,#3•*¨†jÉe´…vrßGG¥é:ç&zr~\ #Å8¦§E‰¨ëÅÑ"ΊŸ¤U†Èβ›L£äY"gËù²Qò¤ü‡¼,?3™J°ÒKé­Ä+ve”2U™£lS®(WÔÉê õKK°¥Ò²ÂÒjùÞú„5՚kͳN±®³´~äâî|p÷=tQ.‘ykÅ@%Fœ§¸Ÿ§¢Xf îTÑD+ÅsÔ"ú¨µ–áb8å C‰g¬ß/‹Äp™Mc¨bÀo–Håuþ¥(oãšr”k;Şk-¡´P\·„b?A å˜ïÊþŠ]žÀ§òY•íø»LQtM쒹ÜǔTÕ ›ÜŠ}²†žÃáàét+h5÷q½Îsa<%ӏ҄9ÜEƒåçXŠgÄ'¸Æ÷x%~KÅJ)Öb Õá
+^ã[ÑW­²$XºÑ_D¹âQ „²›«J}Hª‘XFSäËuqsЮã¼ü=gß.öÉl¥Cͧ2¾ÏajÌ%˜¯:•3T
+IO!N¹ÈÓ­N&+6þ/â©2™gÚA¾ÝGx¤Ël–DsçŒå¾˜Àb Ó&ž
+'ž:€r—IækØl–¢Ê܀$žõf{l—X‡&Zî{<Â7ç<U³D»še& ¯8'
+DãƒçËhÇQ4¾fڇ,¤ª„Wùa®6ÿÆÝýOØ͘†_á ®ò;Ž0ZÇ@_Žh6³¤‡ë½€<s—Ù‹‚QfÎÀ8ÅN«
+pè×¾}Pâ¾+±ÄE܀Ÿõ÷ɽVãýÿò†Ýn$$ø[ĚÁgÊ9¦փ’ç¶
+]÷DhücøËغ ‡õcøm6ÿ¯jMÃ4^‹óœwÖþÃ}µWuUáuÎÙçÜ  Ä … %!¤@!$$òŠ —W
+¥ï˜ET¢í ÞHO0Œ¡GéQ´m„<|šû¢}!ðW`*P QºÀr €e´=Å}1ÆGòF
+ù‡Ñz³È¾ùöšmô0påzñ65XShäCèwFMâ6è³×j¤è ~%tÁ%ëP^Š~™ªÜËWo0`A?ãìRëiœ¥‰b£ý&ÖRŠ1çÛ1Çà\ mÁ3ZUjmv=êÁTùw°˜­x.Æنúéè7rÊC`‡î¤£ô£4Eÿ"½ÎÀú‹um´š×[ìW6Ý
+å~:g¦NÅó¤XG©\!…ÇäóÂ1 [Ž»có™â˜qYÆw9ǽö¯“c*Æ8{¢“îgäDl¹Ìç6óyØ«R%x⸂c–ís™ý±&}‚3¡xjÜZ3åD©*Ö+\v}ãÕtc–Y+Sji®ø6Þ®?¤â
+Æ»ÁÊBù€iÁº7ÅîÔ»Kݧ£Ý»ÔÑÓ]î=jfÓ:•ÏÉ|ó!ýXÞ£EÒ¾^Ö1Úl^Ǿ#J{kÕ„?aw¹(ƒÏ÷QÖ1Ø؁ó=°”}"÷‚èn¾øN4öÀÏ|US…ñÞ Ü7›úËûb:ÃöóR‡;•™uf1Õ[”%
+‘k[i﯃íá½÷?F}ýä‰v/~†6êvµÒA:"ã‚û–ãõ_øV’1»mx¼:Ù'H”?I_Èþx‹p|±/0¦ Åò=ÑIϙ…TŒ3Tç SUˆ3 Œqý
+Ùô"ïë=ô ÎW%rS%rÉøÙ׍&¬gò:`„á£&ºÛ Çårí³…“cwðù1é^Žkò0¿'öPDŒ¡9V9UCWm"ObÞ]ÐmÅùÍÄÙ݉þÃTÞ&̽zî;ß2üFàóâ R¢–ï’6ð;óïR1Ÿ*Ç3ü{à‡m”ŽûBCìÝŒw 姪H]‚ÃZŠ‘@OJ}6½¦7w!nù=%¶Ð#¢ˆ²Œñ4Xô§tñ;œÕOh¿Ñ–‰Wh¿h¡*–E"2ðÎ5šñ¶dýEz€õúkk($¦¢%}S,£ÆqÄÞï©·x{~æ÷'#ÐÿCŒ« ½M!£gk;ʟØG¹œ£Ù.fˆ¹”.ûÅAÚêÂc³ž¿ÍǞÂ^.w³¶Æìtm¼}r<.úq±Ÿ¦ٗ4‡»òõjjjõ?Ñ,c}Wk@‚9@¹Zp@áç4Wòq wüí `œ˜@/[P þp̑ñv›@oÛ0öYðIþ.`è3i"3tà7n]<x®Ûéãa&Qwùy
+†·=ü<óMÓàO±ø4ÃÚL!ßãØ¿‘Ð߃1=2æÉÏӚžìé ÚEʔ>tŒ_£»àw€ËqœÌ¬î†ÿȾÏìïfà!éßR@ÅдK4\.2£M ÈéK]jWkŒú‘ÔÇöÏÑ#Vï¸i^½WöîkO²~’Ç̓X<즭 1í¯ì?O[ÖK¨{éVYé!ºÏØ'm"cÙZ„;ÐGÀÖ!²O#&_ÄY¸­ìߗªòìz3=ˆÕO@þâü:‘ýŠ9e½»?î¾x÷öÅ „»âe‚ À3\ŽÅ·ÊÝb>߉÷˜Ì¹¤ÃÓæ晸y6.ò]sû1ÿŸ€³ó
+ð³D×?BùQèÛغH¢Zõ® Ý/T_¿¯Àéý×D×Q׎9ý¯7kPþxå?ƒÏ‚kÐþ=ôÛ
+€Ç‰ÀôßËà÷È-ß¡ÿu¾ý÷ǝ2Þ,+aç0ðiðÞoˆ;fw?{`ﷆ»ÿ=±©¾%neÇøfz ï¾hü·Ïg}㸌ýTx¦R?c½؀AÃð?X,~<X²kÖ›3ÀY4Ølí’trÍÚ,).wÄ¥Iñdq©Ã òž=Ïi–ã4ÿ%G=n¦Ã#Ç:< -+ÌÜ»oV댁Æ@ú- ÿ‹ñjm"»Â÷Þq<v²‰Ç q<ã81³$ȃ<qCq!Y4f‘(ي ¢]QvP‹Qm%
+•Jñ÷3ç|÷Þ3wî<LºÁ”ýŠØ(%2éòˆ0ÁœŽ¨‚c Ä87"˜˜@Év"'G϶B™,ÉfˆËàïl:•aÓ9öÀ¹Ðjö)¹Œûû'ì¼s'q;ÛÀAà0\f3›Äþ1ö»ì.T‘2 ´ç€`ÙG`‰}Ès?0ö!XbwpZwÀ6|!Rv›ÝFi7â•Õ!Ãñ—¥¹4íÌ.L;Žü@‚ý!þpžœ`Pür_¨œÝ$:À0ØMt~“(@Ðtfx·àÝ"pètÿ<À °qàà)T  °°ßÇ1L‚]ûêäP>û{ŸÌƤN°ßööžaË~mØk°nØqö^Ü-“Pòm$X ¶ ù öˁ‡œ ÙÙ¦G—A hNf6ŠãÛe:¹BÆñܓYœ|f؟’·-DÝ)«¾•Xc
+ځQ`Hf¨‹Qø ƒmà2 ´o3€Ù(g`dWºÄ‹Faeé¢ùÃ^ŒÝÃ<j‘ä’üÒ*ᄋÚܴѝt³J’ïuâ°[ì š=øeö?¾Ì&֐•g'H.ÄÉ´=X$'èé¸ïŠÊ£?"nV­&>Z
+[…O?~¼”¸,Ü.!.v6wmD3[Ü·@¦9¼Õ üÐ5%æJ0¸s]‘ÿ¤$L4.ÿ‘ ƒòM×ùZY‚ÈU_‚ +†tÈU%¿;nH q6.ïçfPþ¶«Aîr‰ÎTbs GªM^çÛ$¯Bõ®­²CŸƒrеY®M©–ò6ƒr9Jð§Üù(vžËÔë6:ÜP™ ;Ôâ)±El+Ā¸@ôˆ²X$Š³,‹dɱ¼dÉ´X,f‹ÉÂ,Ä2+‘œTýøB%³Ì7ü}„?!†/1Î ã¹F-Œ¬&z®a‘õu4¢n#‘­Šþ`½7A3_Ù¤gxë¨îˆHs^å$Ää:½ÒÑŦW[ú)=ETg‡”4·$h’‡ꎕ-C„RûÁc…Ü~åà±h”8ó÷AÇ
+{õWë_@iö?ۜÏùEú©Èúý¢¨àN²(Ѹ^im¢_ÐÏÃõCô7і!aý"¼ŽÇ…õÑh$A7:¢Ð{ÐaÅÜ3t7Q¸Ž(wJw6¥+E{èJ¸Îj%¥†®Ôj5t&Êuý±’p}I‰¡™­˜¡‰ÍVþS3^
+Mi©¡É×ȸ¡Ï׸F_aH\.HÜ.CBç—!qÑ9†dã3IYZrä©äˆ1’@Ÿi\)MöäMö$4þÿwë¬óûé@Mt[k¸Óîð†;ýèÞN]Ûª(ýÛ¢<¡è‚¯cë¶ÜnéÔ£ÞÎz}›·^é¯i}Aº•§k¼õý¤5ÜÜÒߪvÖÇkԚ°wK}t ¡iIåscy:֒¦tÖÄ;[ÂÇj¨|Aº’§øX•|¬J>VƒÚ`ŒEŒ5ÞÔÒo!uѕ­);À²2±^;
+=Ѻ|©{…±xk<Îý…Ã&þ§1ËÕ_òÖéÙO½z9ÄS¸§x*a[:åÜ_ã)¦?K§$„íÞ:âïÙÛCœáoÖ§~1lõìážbìmȅuuK}¬‡ˆ>}D¾²©¥_í৤/{ËÊ
+É¿šì£DÂ÷ò%³R ¹ÉÏãLÉúEr’äÀ†÷ËV“ù;œuØv-'Ã*f9Y8÷ëy« V6ç¶æµ¬+컲¶å¾–×UÐQø:ë5ïÍzÃvÈ|Z<%]sÞf·Ì·²îØæÌq›2f¹³³gǬªÇ»¤ÜJ‰U²2ëIÙ#X£j¢
+QQÚI÷ûG²ýÓ Ý~^</Ÿ¶í&m¤Šoȕ‹ùùŽ<‰™½Ås}¹Rþâ@…]òy‹Eó†®}{ã=u;o¼uóõïß·ïüùýûV·±ÔD—ÿ›írŠê:ãø9çÞ»w÷îÞ»/–e¹^X]ÅU •‡kh¸Î˜i­œj4´ÙÙ ¬Vq55A ‚"*65>ªŽZ5º‰˜0Zi3mJƉ¦©}(Ii71•ÒN…¥ß½€ÚLfv÷0û`Îùÿß÷ýϙЅøÈm¸q}м÷>ßóÕ}\ŠË¾|¥NÕõô´1¢ˆ"S
+/f…éj²“ìÓÓghl@:†Ps÷µ½[Õ!,ÃoÝ£ð–,füH™ –…!L¢©çáÍh´ªå~¿v¶Q·æ'°POˆ‚þ¯¨Ó±ÙàœäaëìÞÅ{þ’±–ÞðL儳ßë ©ûËCˆfaú\ÉyšyZ×Á\Ñu°×õ7<ì\®[lsEæ
+k…m«µÓzÏ}/龛»bºd#IÊ’Iн7r±P`=¬†‘ûŠ[2
+z®Çã¶{<n½ÇMa¢w{(^¢ä؅Cfsµñ’AR”t(L8c$¡ö£ÖwMHFž©pb[> ‘U¤šÐ¤L„d¶óÑ‚@AýyÂ@L4?6¼+ZÕ³ÃK½9Ýo®ºGùAãUž‰‚8¸f’#ŗ ŠäädgAy5° ö€˜Ž…Í咄I¿ÜÿÕÉ}jà˶ÿ|Ô;øýï}Qjnž·¼ëõî{Åá74Ø~{«¿ù…ӝǶ,{
+”\2ÒG;AI?êU¦0¼“–¯ãégÅ¥â«Iԝ+„2{‘sÿš½Žo°oM:ΙRC—ÉÄñfšÅ^žÃª@
+ü³ìBiˆÇÙ­ç ]íäJ$¥ÊD‡äah)·FBò*™ÈوOcÀ‡‘Oð_ÓtWÏlIìÅín8Çô†iQü³wÆy#b 8
+Å0èȀ¶£
+9ª#¸”#ár[®S%B“ŒÍ}ôç¸zª|¬úŠ¼©¾%­v‡«Ï­š1ßn5E¢ue¯4Ú[SúÏ®ï Õ4Å¿¸yu¿áÚW¾¦òˆýY_µ¼¦¶Vn»^ÒR:.½»£+þ¯>رÜ)0í@”ë \)·Ÿ;ÅÝà˜ùÔ|þç4eo!NG±ŒÑD±ˆãx¾‡¢íES<"O³TÜ õ0 +FDÓðÔc¤£¤øÕä YÆ(ܨxVIõf±S²Ù& Q‰ãy{"‘ EÚÌQܨ)÷ ¨ç÷€õú7ƒyb@U,¨O÷Ó`<‹ÅÚiãùc‹5ÀGG>VL3TêôE''ç©cª”…ï(vN1¸ œâ p©X§´AVÃ&Ïg8¼"%bòÖp-9øæµk­ñl:N]úÁñø@c÷pL£öáæm`¹_Ižç~-¹!ù-Û ÛÜMîÓ$½Áæ2OuS†L&ÓÔ¸R`=ÁftXm¶³Ån¶ÙÍü§ØÌFÉ¡˜›‰ÙlQØáðXÓK÷ªÞx/-yx1$¬ª…-€]š]¹q5ÉÖN¸UYðnpñÌsÛ·ùqÂÿûñ±#Õ!>̏#ƒ"<aޭקûiTk@ãòà“Æ7ÚR)89ì,trßóï:ö­¨imn\Ú8åÔrkøRAí®.¬_»}àWÃx£Ð°­ûèþ–‚|'ùúLüÕãƒ]ßÕò'uª-5Às2šŠZ”ÉáD<‡UsçÈ?².–ÃT[¤/³Ékõë<›õuž›ú" @·N–½rŠJ¶8ERø…<+%áސª@l`¤$&U²óHU¨mRDдà¢%DhšfTŒp@1æ'„V%T'Ð Q2ñ‚lšÅƕCWC6#—EE–õMÖ¦—ŽU µªý͛ŠD!Wå۟PzxÁ5mnxÉìç_&³;KZ‡ú»Ú?ÇïÜúEógù;ž[sì膊Óô"sYæ‚Ìg¾üÃò—âÿþ}Cìu<WâSWO¾?ôYðtaôÐÞsçԙ² ¨u2'€ÙՊ¹›Ç4<ˆž6‘j»Ï$˜6p|„¢ˆzì­ÁSÄmÑG G8„C„ʇe®†›hs ²`yނØs :í8¼Úûb`´Ñ«n€T£C”ŽõæX­¹Ë¨¶Æxl^Žå2Uó`+ýßæÆÝqküaôÓf܏¯Psá"¨r"T9yQ&º£äf;qšs®s®¯û[&cÈÄU¨
+WÒkõå¦5Ü:¾"ajÀt~“©–«ã·'üF¼f³¦B¹[<²[]d9C]¦Ë>ÕRšÌ!Ʌ¸$)ýp:N·¦H:fŠdå¥È6DI‰"ø#EX0²b‰â]¿ãŠœ‡¼Ÿ·LŒ8¥‡â Ž¦§¥èÞª,Û¸5̈u£1;ŒZbM9Ä>Ÿ/;klڍ·kïØìO¸áIkà²Õ+ú®tõ‡WÖoÞºÜõr]¸tóÖâ’-³æ6-Út²¹¦ú•”¶·ìðí;‡‹÷¤MëÞÒ9‚0îÚy/.­}#´¼¾vhdASÁÛkNŸK‹‰Z☊ÞS²f¹ç;K½ÅÔ
+çJw‰·Â]%5º·Iû§Üî~gŸ<(Û¾ë<älvR³ÒŠtd²Ú¾¼ ­+EÖÉS¤sHíU`ŠÁ½ G1kU;Ԅv@& LüFwš¦²×ª¢'>’VTD"6ù¯s@ƞlF㈡ š¡µÞó ÉΚ¬Â+m­¢"}XSСI»ºÙY¹lQÕœӱòâf¯íŒm¨øúè™Ûä×Ç×®o9UYu/*~2¿ú“ÕœkIë?¹ƒ…ýñ¿Æÿÿ<~áì*ë»4ª„t0«£}Ú½f¦"Ó Ò±¢Ë£©<¬£!»g |DÔ yD?v»(Wi‰ ڝ" yÞ‚çeˆñTᇝ€8OF†áÎT3—Ef,)Ë3„L¡D_jxIØB5 7˜kº.á¾`Ò3…x Y(”šÎ ¸üÿ¸®بŽ+úæóþïíßëݵwýÖö®?KÀ?>‹×å)€#p6q\
+Ø°È))?@š¶“F RH.%à”¸L¨í"®¥VM#hªðQ@-É
+9ÄóRH Ân1eNÒn™a<„T€jº4ƒ[.’†zzŽ^¥dEt!S­×ΈW5²CC›;ìâ9o;D,î²_¸˜Ù¬ü|°á€ß.ôÍHFg\O°k´“ŸƒDÒ9Ñg‰p‡Ä;##¶‘‘N>#ÁÑu}ê·ëúBÏ5-<AíD‡€ár¾dþoDm­©T‰
+H˜¸Ã$Z$ˆWþ/üôÈØÛ¿¸Œþ¹§6?·’ºW‹N¥gá&Ô5øòOޏuÁíx Î×ie–f=¥µó V´Ë›dềµ|‹Ü®¾Æ¿¦
+E^™øŠJCÞ ,»]¡ÒҒ.7‚SÊ …œœä‹
+ó"Q-0!2¬Š!«^l¡×ª_ï&GÒch€Þ0–ø$gœñ» ½ƒDQé ƒ¿Ùp
+e ´ ¿NÇUXYA³Å(‹wœåq±ˆ§'†kÒ¿»1š¾øöQ4sø¯hBõéÊá]ïþ}ñê›[~ù7ŒË¿øê,úþG7ÐwŽ]ûà‰î7¤¿ØùÛô­×OA|ïƒlŒØá|6™Q#͔2Žw:BvNC!wò‚Žq¿‡¾ö;£œ^^6ós
+É%Aâ%*QÁï ø° *š¢+DÈòz¼n/rHv¹lÐù¤Ü0ò*Î0‹Á^Káو,d{³½@#0@$®/ €c„÷¡ÿiZ߸¦ý™îüpsúŠï|§|vògß{¦7ý'~(+øôóés#‡Óéw—VôN)Ÿ}ëÐÍÿ”†
+2BÑ¢H¡7(6Šš3µu¡¢`ÔPâ.[ôµIG
+ -§“Ö4SÛÅ_hÌ¢9¹\.´¨#’͋J-ˆøô`˜óÚÝaxÙã6D˜åó‘0ÊU#'t!9æ
+¦m«÷Öû O˜uýÓjª,YY•‘O”edqIFD22ÊH_À’æ$ÝQeð;ø£<`rëv®›ëãè$(«ê¹«ÜmŽw°¸Ô ­«*ÍãYS­m‰±ÔC?±–µÒyz˜e+°uêƒÏÈR+C%MÇr¼RXƒ×
+ôkq[퇹4.)“AKžéwyÙú³Æš"‘Iöûk­²"K
+O(5xÅÃó0 @hEáxLU‰“‚UÄÑ<Ý´—ñ¨›ïãÏð×xÊϕؚZ&"¨JŸHļÅTUcü"ë±x ðÌÖQÆÕX(%Ì Ö zg±1ÒÂk¡0%GBJGñGÉŽ2ÈÑ—¦5Z)ÊzÀã¦S·LðÇ)kù9qÀϕ“^zãÛ¨êŠKùž85=q¶ñ÷#0̊Ǿ~Yx£Ö¶×
+ a@Aa?ÑÙ5Œ/!ql~õ7v÷6 ¾_ûõýÝøæçi:î=Z
+‡ƒÍ2„F¡MèºVà õÚeZ„7ó=8WÜÆÛµ¹óÁhq¤G„é™ ¹B$Îqf}ÊÀÅÞú4gVä̊´R„0bo̊œIVã¶i
+ñ´SòÂðû½0#93¦˜_ž͙|öÙMq)„0"©G¯Ð¸ÿÊ# ŽçfM÷P7Þ
+Âa†Q¯ÂÌÉ@¯ô¶DzSmð4ÌP3ÛÌ7)‹Õ垖Àr}I¨)¼7p+Á(MkQ÷¥ ˜PwEä9«`ÁX¬Í®µÉ€¨àY€ZBÅ*‚xvÇ®U@ÍRj¬¥V ]¨æªÿù9«÷­ëVÿ‰¹õgÞ|çµ÷¬[ø´½~ÉúÉ_>´~|~µüÖú¯uU¡p¾gý“Ê1-“ÿ»)j2«ÛÕÕ^<G™ã]¦,ó2‚…¤zŽ¶´2BþBº;_#‚c¥Mgæ ²ý̳Ûp^Ë¢€à8SÁ%T\z`ޚK?³®Z»Ðó¿~#3wÒKÖn¶_ÒÚ{×^°²Ù_Ðh߶Ö}nØé1ˆT1°Ï"4ה5ABZMAKáSÜÚBFëþGª‚ù^OQq•Jî#ÅUJ~–ó3<ÿcO$•{ŸWò3ynv‘”fÌ6
+­k žå7I›åí®]ò!÷I¹OþXúHV$Q4TÙ«ª²*‹¼ƱßåÐTÅ-²:Ïû¡`4 bEö™éº,K\4%udŒDG¢;A'ŠôüÙÅIAUð}pP'T“üÂ2HC…TÎNiÂxZ 9ÔÑ>@‚0]œ)§ee²ªM&ñ:í2"Aš„‚iIƒ!™išŠRTc43–Ž‘š &<qzïÄmOWÅcÇðžËïnyçóJÏ~piñº¦²Øœ¿£cÛÎ?tÜ*gû6½I&毷:Ѥ—öÕ Îìzº²vóŒïì U¦uø#æS`êrÊ2® W0]ôs “,®¦Óߤg9çF¦NKÔ/¤—:[#M%»=R‰;•À º8Y#Wŧ%§Ol1–Ä'×O»WKOyÛõÍÂ÷y«²>ѕÜAïv»÷È/+Û/&¸Ê}ÑdBr l Z˜s:;P2Qk $Âe¯BßõSe
+2P#jCh?rG6“eѨŸf£e|8šÍ§¨RTªˆ¥4”ÒÙ9;iêï*_W£J63ã
+NŸ©¤âiD¡R™NÈhOmWVä5Z¢8•ª®ª©©„ãÏëTŸ7àg¶7€Ä©Ö7Ý˶>󳅍­S¬5 V­üîçß?þ¿l¿|êäécé:ô§æî-;†^¿bÝ?‚n)ë^nz¢kÚô•ñÀ·Æ×oæwO®z÷iï+/,k¨¬\]2åü†õ×»ž»ß¡ò¾²ÉI5˜nGáx@N9X†ïÃ]=6 ô¦Ã@x"h°Ï£ŽÃS®÷H.çIè*ÙÁÌm²¹¼ŸTʪšh+ì±"Ì+̺OzxŸDÁ1¨ªDx©Nӕ’›™fî*ÇøIëðCë¨b¦põÌlnƒüSöcÙ)RXíÃÌïMáŒáG†¿ÑÛüþn?íwÛúŠ¼Ëû®ŒôðÉø Z¹¹Bj— Èp›+ 6çÚÈ«2m—ž´†n¼g=ì¸4ãÔ֛½lÿ£3XŽ¿‚Üwè†Ggß:ÿíKÈKöÎCõ©‡½»¨ÿ˜3'²hUB']År±MÜÍíæ÷‹Å{¢`ˆ"f@Ê`ÏëMto`֋1Ë#ÌÞ1\@+íjÇÙ½P’näP7·Ÿƒ{„L76KÒË1zÿcLVTƒmdq9Ê~ÀÖ{, ”²«Gh;‘£”ÎÁLçx2tå.Áú©¡à]ý±©„E˜‹À„r$âÚ8KÉplÿ>ËkˆLk}ßÕÙ?JJàc56”PÃmnÍfdb¨2Ç•?žxmPXT†ö½}2t«»cÓ&¦ÔÖ)AŠrn uí3§•R)µTKéiªFMk5ú,j†:K›¡7SMj³Ö¤+‡¹Ã2¦@<‡ÎÊ%ˆ"ï–dYôz4Íç躯oxjKé™EM%³ÙâêÂǀ^„(å¸¨O÷ú|º&ò|Ô§©©¢,ŠêUUãEN÷±²ª@\±>‘¥uE¹Äqê´®iªJq¡@ ¤<Σ”A‰põÁ0)-è5 „P0؇öžÉ×ìPp^ˆ0
+fõùÓۧݭÜ#DHÊ6¤¿:2€{æåïOP‰wJÊåËp™zyÄ{ßÈà•¸Psé}Ã_ä–„Åq_9,Ϝ¬ôˆ&kÖÙ>|–8Гs GƒÉS  ˜*v8zÃzþʇ‰P >y¿!^Pvû÷Öº ÖµbgÀk]…”xìÐ>MÐ͆¬Ýß{Žþ%`RfŸÑ>cèøHfÌ{p“Y
+E2ˆü.ÕJ=u¨–®ãêø:÷d©Z«õ¸4|¹Hy•çÎÏc՟9@äŸ1"7¢N1¥Îaœ”Òj˜ÉÜdüǙÜ"&õ
+-Ò"m%jgžæV «¤vm=³…#Ía£¶Ñ³ƒÙãü?ÕåÜÄu…ñ{ïîj¥}i¥•´Zyåµlٖ-@6–cĈx) Æ`BÒDÁ$°I9Òig I!@2Áí ù#´…Bë6ƒChqS3¤¡fJ ÁHÚØàLâšé8î@,¹÷®¡€¤Õ½Z½Ïùs¾o·‹î°ŸvŸ§/ØÿAf¿&]uߢûíýÒM÷8LÃqߣ(^–§$ŠP–E—[Q°et ‘§…ã¡MFŠƒS”<àÀýÀA!QÌ( P¸Ð)
+_ÎdPôvv§*÷f[ÐúSvÛúêúÅpK¦näâÇWÖçf!¡µϽ6L«nsKäM]ñ8Ó^ã 8;ï@‡iH!iGÛ9®(ŠG8xϚ<HãVCs^Crg'b¯8RŸ™
+ @À`5@hô´©ä÷õÊ7A¬›
+J”$é”ځ™>ÿ.®³`z17Q§ø’eò2P
+Ù (,NðMF•b-š.ÎðÌÒs‹Ä•bŸí–ï.’dè¥$^vb²xÖ0Z﯀ Ðå,”åK.(»LWƒk³‹v½ìŸc»Ù/ØQ–&±›ÇR¬–¯¿VÝF*‰5u&Ùk9 r<@‹u¨’5®ê±€aÌ çZÔ¤]›®¬oúôµ†·c'2yGÖoxïýŸm|wëoßü~ßHí˜?Iwg ÷'ÿù|Ï']8fµ¸s1Y^³ærè^´J1)ÇB~µšYëXÁÛe C»¯1w=öÜ=Y+קºëSõù'õeîËô¶Þa4엁:EU­÷ëDùtg‹¼WF²Lçè x¸KÁp©¦5áÅ¥ñ6Š?:QX'«$Ñ€†¯B³f¸4þPÈîÕb´.Ó;WNG£Ãé¨å¾2½h©d&„¤'’ØY2$Ý|6TL.², Y}‘zæ̸ðuvz>¿%8ÒÏßòܛ™4_˜´hûÏÂE꾓ÐÀ½@€‘ìì9¯õÌ*¸kë´UȜWðxÚÌ\*8aæzЩŴ2ÍÔÖi»…_‹E{@ŒˆmZ§FkäßEF<h)Á©sЋ¢…¦l€ÛぞQŤÕBPèW¸ÜHHÊ'ÅÉjrºoÁߵϯ…g@ C`7œŠFÿGwÕÀ6qÝñ{wïÞÝ»³;œ}q›ø+Bì$$¤Ä´ÐÀh…° BŽ ߃0²iµŽ¥t(£jG`ˆn6Bð6 šM€´–)aê*Ñ©TöX¤hCÙ*ê°ÿ;'€4MŠîٗ;ù½ÿÿÿûªÓ˜¢C ãV_WÇÄ|2ÀÌÏìN¹5P‰È )uú9øŸò®.‡ÁêHè¡ÊDe²º
+:J%ŽèºŸŸ¸u“> J€wJ˜(ö!Žˆ+DŠˆ>Žûp?Ä71Ä£˜çpÃ7Œ›äÉvÀ Y_ëGÐd¾c“ÝÑîªLx8ÅËÙlߺïÁÑûŸÀ0>89þUTkíÑÉK5b1"ÎÆ ñ(zeQ”0æ±èâ]å!V`]T%¶/•HEzAÌ!¤
+™EëíÍöÜBVH-´ïÑ+äøcr›Ü‘þM¾=NEó„H”‚‹©,G$â–$"`·(*
+tËú+B
+”U•SðyT0 –Ê°¤BAKO {€
+ð&7Ý$²)5 f[>ÐjH~±¾Ù¬å¬Z3¤ò™/åü#ÙmÀ¯¹ÝuÖÞð±—ÿq֟eZ,óÄà˜Ï\ 4zçÎxzÿ³ñß/~ùêߑkåß_•gå
+ÓËXèã!gD§Š¬HŠ@´¨N~T 8'
+6hpßdF>;Â\
+aƒÆs3 ™ÉRÅGÀàdÆ2™¸•6FÁÌ 2hÑ¥âRºV\K1àÇ¥UC%8Ûr9®Çlá¼S¯\þ32öÜýîñ‘ ݇Îìà](vxÇø­Üî~• ûÕ¯^»üáЪƒ W .:÷Rjö“.¤aÂIü ^Š×ãm˜P]¦2µ»tjç©,Qu¡e=2’Kƒ.äâKõÿ«ÙΆK5²À½ðºVãA¯óÂÁi¿ïvt^b¦·e&a‘w%t÷àÉ9êW½0çé§g¿à.ÁÑí jߎ5Ô¯éÈ}Ä´¡rÀYØÿ t=µ—ºKkéWè¼ðòÒu¥{éaz |Úõ³©¿ìÔ[èóÎX4õc¯èç—ñ¼V_ZNÓ´’VÓ¶´½Mn£mJ›Úfk³g£ÙXA,Ž…Ÿ¨
+ŒÅÂÞ¬2ä<ÞQëàÜÝÅ]DmCòÞ²Ã‡Ç&&œ±èâ?«ÜõÐiºs”XzçžM}çÞ2¯åkxjþlŒ€^;WeÈâiÐé‰Ë¼8”¨®xÌIŠ§G"N¼—Už°Ï›)
+^rÁK¼µÌ±çEA»©ÑG´SÚY-­5dû·2a1(^F^l7Ü"ñ3óõ3_e}2›2[J3*v›l£ÈœÌ‚IÀª`”ü`Y*YZú2Ü'…ÕGG2tқÙ&ji¨zkûOšë¸ÕñpKË7WŒÿ`¼iosõ£ôxjì©ekZ6ëM u& qEƒ¾`dû¹j,!G‚ñÓls$D,ˆqwt2}c ï$wÇWuqqa¢ØáÓu] …ãàÁŸÞÖ'¢åqb'K%#,Õ¬ Ö°6ÒF;„v±›tÓ¡G|’ƒt@x\<ÈFÈýºá¨åˆpLü!œ¿Í^€Óì58gy‘]‚ß°·á-ö\cŸÀ,+c`b>ð°(DX-käy&]õÄM:–v†”3,2—(2”–È.Á…òY)¦nA ”˜-L41UHD
+öWׇ¶”ò±+X¬Ê²¤8T}Wàr:Ã*sáƒ,É)le.«•9UU’¬fC @†€ ×40Ië'd§®ê®IºE·Ö«ºJw¨¯«T$«^–IýŒ¿Rå U׃R¥Ô,6Ii‰J8c¬BÆÅÒúqpSòÖT&ft9š3>evº@™îì›Ñ|ÊLÆO<ÜÿÂB£»’L
+ò¤pTü˜ÌR!%BLL?þ@,
+û{ºzogcành„füN íýЃëïEO<»à1´ºpìv³þÓq\™IÁ®v‚ W¢@Σ„Q0à3.‚<o#ZüiþÝTE'ÝjÿêÎzl cþ™ß  'r^¥'Ÿ¹'j|~‡œüPð ™Ù§¯—òûKëÿtõgR»”:a>r?g¾üÏC¸"
+stream
+8;Z]"?&l'1%#0TFak9j9B!o<l-#@3BjekYMTV%Flj>7ajlGk.:94:0^D\(&l'AXs9
+:gESUX.UTH(%cCZ%+*%o$>>?ILq3+$a9DJK!J9p^?3%Na#=&ClCB*f+"S+m"hN-l/
+7f/c$[`',<1)$:mA8q=K2H_Qe4ida#/\NZ#lr?>XhOKa6f;0YVa*Wl3U!6ZB!)X_-
+0g5c0N'#<`K;Tl9l1auXl-%4Dp,Wm1rY.Af=clVGp6(Cp_R:2@bANbT)(gL'QU%/f
+)KEq&Kci\BFY\&+_NmGEm2\_26O&D"9oHhZ0d)+QK%Sb>`#pG5`'%b8De0rKVKa=6
+.?.kn6?Qt@DTn4M)Vi,+*+ia8:kI2@Z<)]$MWUg*h1<(N&!jma*mg5./^To^ZC8re
+<02$`MVBT1/V'cA=Eg9]TfTh#_\+A7,oGrVesfXpUD_%L1gq\Uo0ha%E;+<L6*p9C
+5\81mD0u_aU5ZTROmWuC^;Go"EZ%^'p+nH79kNTe2+TK>(BZKoL.i.,Qc#.4/fZV7
+K@7Tt-U9L5CXarsW[*>.5Y.N*F;d^U+rh3rp-S<q4_h78@tIT`pp-1./;VTC^eM<A
+V.0SV=3!&A5V[Lp>J(.h(DUHd!Y4TL:t[+W)5Z7ITRtW?o5gS7_V?27hW;7WK+;LF
+PT5gu'+"2aIg0XMe_-,X1e65u*[q,#UY<AngW,?iD$!\^mBsX]poZmjKf*pFOQL@N
+3nmQO:Tm)tj=!eQPV(Faj7I#S!kG)K41/E8K4r<*F.*ZX"m@L-$_aml.7a7?F(D#E
+b@O/bO[$3K6'h<j!p\!di>/AJ?qCcZ\TfH@-g)+3*SOYX'UI&\L-rnu#POhalSe#,
+OBY#/Fo[Ad`\*RNKrR8@4U#8s@$ppbTKDE^[M.AJlK1?WL`@G64i\(<>c5u@K";)'
+Tp.?>'01UM1_+VFfDAG4M>V/<0f84k:HgXN?0ersK-H!_:hj$gW]lXaObV6^EL[&(
+stream
+J,g]g+e/h_!_gCtO=0f)$P%cIi8Zdfc5&3j_8$7g.@L`YKUJNGBP\poR=_;Dl'P(T
+(7Boo^^S:71(MN]ZQX/+Cbu.lK"p74pe1T%s.DY%&\1TdJhr54.M9au6>79n6`Q:4
+PbLSZTLEE(8E@'*1mg_*eTnN*;*'V3+gm-EEetX%;Bo$ur2ss*N`.-!.kG_q6GDD'
+dKoL!8Ka#EV,@V!\j8ZFbp6EE<9cn=N6j<M8Q?[#7"dq'1>0nf;(&;QU6bUD')c@\
+9-d\DA=cZ0Q>gIM$$;cd2O@&a;X,Nn_a<?V-PVE%?Sf]idH6WRZqHGq]Zm<uCi"]?
+Stg(<gV-H9NB<SA\T=sN)Il%(BDIak7/H&mV!kmDUo4X;8;]V>P(]I1aRc(K1^ue>
+gF/(+GaKo$qneLWDrQ#;5\S(\$q'4Q,85`-8;S(=Z"WSBOV*FM)4,?B],R<gbPN=#
+0000000000 65535 f
+0000039662 00000 n
+0000040863 00000 n
+0000040884 00000 n
+0000040904 00000 n
+0000041478 00000 n
+0000041529 00000 n
+0000041559 00000 n
+0000041601 00000 n
+0000041666 00000 n
+0000041729 00000 n
+0000041752 00000 n
+0000041804 00000 n
+0000041846 00000 n
+0000041922 00000 n
+0000041977 00000 n
+0000042026 00000 n
+0000042062 00000 n
+0000042139 00000 n
+0000042205 00000 n
/roboti/istrobot/3Orbis/dokumentace/3Orbis/Master(main).pdf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/roboti/istrobot/3Orbis/dokumentace/3Orbis/PIC16F84DIL1801A/PIC16F84DIL1801A.pdf
0,0 → 1,15216
+%âãÏÓ
+0000000016 00000 n
+0000001288 00000 n
+0000001836 00000 n
+0000002058 00000 n
+0000002272 00000 n
+0000002485 00000 n
+0000003269 00000 n