/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í loisek je nutno dbát, aby loisko 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 |
+óIrÐJÒ˹Zj»ç³°è$gïHKjÒPC>g¥DÝÖM*¦m¸va¸ÎAwj2QéÐÓ`Ë'Ã%KcöNòiXÎÊÄêâ[JÍ"M4CC¤vsaÙ |
+(~¯±Ú±¯hÿ\Èã&õ*ÃïêW)½¢¢cºJÓU[Þ9]¥\Û«¾"㦹ÛtUGãÅéªMÏ` |
+Z·ÞHòþpßÆ |
+ SMʘj |
+Z&½³¢ºîNS@t§[æ°é%ͽ2Ê$±YNÑKÂTSpnt>Ïwb1ס'7égQ¯æÁ) |
+Z&íòlwýp»ÉGÞ1]5øŸØïöjziÁÍÆIWâ ylüô èkÔ6ønoÔF¥»mM'CûVÕ7 |
+Ö'ñ½ Û%>ºÎAö^«®²äáÄN9yo1úÜáµ Ó |
+óhLÍ9hTÞ@ôdØþ³oåá)]I3~ªÆ`ydhå¥üL%Â8Í¢otIÞÍ,X {³ôf2³Pz`ðkf1'÷ÃSÌ,xÁ6:úfyJWYåfÍsÍ=®Z[&ÎÑsÁعM©-<UµEyú8õ çVJº¨-$>)¼´sÐ2)¾d¾ |
+O]½¾çá)]I*¥¼ëÉÖ/åg*qP2ÖY·ø¼©zU£¶ðã¥Y´¶8Y(c ¶0}ÞYP[è¶{´¶8$5³ Ë3Í,ç ®9îðDm©ðáóS¾píÖ^¨%N¾ÁDztTÓ5¼¶Tx9hjÎAˤ§¬Z[kKpÐJRÑ{jmÑrÞ³sµÔ8(EûFÂOÁ»Eº.ö0kKp ÒQM×ðÚÂBkjÎAf©-4K?Í ý³<¥+IÍ,ÁrN3-"ñ%â ¢l[ê==Ñi=Ï |
+eÛ¢Ì3Hpfµ8e·¤½ñ8h½ÇØõlW¤ §¿:-²É='byDò38(ÅF[ôDäÝ̶ Åô0¶-ÎAfJwëHGÅú=ã 3{.á<érimË3Í,ç Ý92ñmI¯cò][ |
+<B¤¨3j1Vú°r§ÝµE>Îð ±ÔIOñ³.zëYÂÃóð®$½}·ÜÙº¿¢©ÄAÉ,¬-²Ý¥àÝÌ"uD÷ö0kKp R| ïfÛáºqEÚ¥f~YÒ¤fÆ@y¦Åò`Ä&'$`vM&U_ÿþ?(=&ûϤç>÷°ï@Ïç9¡Ò'á¬}2O'5ÓvKqbÜFzè«ÎAˤS4`]ç" ó<<¤+Iq¨o²<Ðe¥üL%âUÛÜ,\$±Å¢MÍÒë©fárÍbÌEã °:\:Ô,J\°âacLÍ9htCÍ¢)À,ÁA+IEï©fÑò./åg*qm·d |
+¢Lì>M³(1Ól#Lé±pú tt¦ÛøJ´\ |
+f ¦@³8-r· òùmí|E)?SôCúõºX©¶Áé%-VZe²XzJÞÆÃãLy¦|ùÍ ×þ#ô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ã ¼fDsñM|É÷ýGþ¸ØúÕýîá{ýÊï7ûëv»ð&ÎoùÞò¿âüó_ÿv¬¾ï[Ä·_Å7ë𼮪Å|Éßÿ¿ñßx ÿÞçûw)'öú$õè¯Z£mm6¯úªéÏ~×cÿ#!ðþÎøHg¼ÿè,;©¡säï©ð[}¿:Ïáq"Îðg`'Jä3'ò9é¬ |
+>Òï?:cáãëqí¥P<\u¾"ñKwH2ð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=®_ûáß??,.»Íj4Bws'}ð®õÂ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ί¼ÞG1øuÊZ²aÓ,b1G9|XÞ8c ÌCkIeÆeî§ë+YçÈkèY[Ra#¼:7u_kzëáÂ2Ç$sZ< õNIIæ´ð¥bsZXsÖ9Éù-Ì$9-½P]¥xw7'-Ãd®¬ïdÑÇ=ðCâcj3ªxÎAÛ>î>¼säëfêl/MbþÌ#çë¥*Ê÷ÓùF»ý3{üs·ÎAË¥é,9á12¨×{@ª¤åb\Ýn©I*8ÐÒnéÙ!Z3ô-DÍÐÂ¥åyºgqvïàî.XÍÝ]*·úd¾[ ³8ÎA뻾ôÎ-îÐR9ÐT}»wb»thli°³f×sA+ùAºÁþ£vÿ%6å/çòïƧ`dÖÚÚ1¾Úà·)öqã|Ó¿¦ré#íöËà ÎKìQƲGU.ñåT0w=¯Ç/1ÊT°×¤Û×=×tî>ù4)Vó?Ó>ÒåAëRqEF:Ôõ |
+ÍÊeßHÙ>|ìsnðn<xÄ?Ý¥xØ×CÒ+øÐ\©±+Zòý¤Ùèw)\E¼eÇÑr)öl\lzÝÁü¯R®RÏi+\±å |
+gȹ¶+°oÏ9(y®'ð|é>@÷émêãµK;²þ«êíªûã.çݽYéíK¦×qPÜ% |
+Ö3iÀ§{ì®K}ëWéJÒÈ%bìÔk¤©)$uBæRIFÍ0Mÿü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ÍWs¯9Ç¥å__é»ks¢®©èæÒ5ï_ÝTã:ù},ÜýÍ¡C¬Ñré®oaU·×áµö)]I±ö¾P©ûÃtV^Îíeº§VR¿9ÏöæPj¥R~ÆÉ`î{¤sðõ³-éÁ<üP·ÌÃÏ3Qö`Ô³pWyÙÙ¹Î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÷VZMyЩ÷¯1 »´¹.ïÀaìð÷áJMÃÄ1kgº5÷kjº÷Ãï:¦Cæ8¼ÃTNeÞè¹ÀÞelÓJÒËî¢óIê8:½ótÒïî¤í7'ÿüvææn*íZOùí)gÝóÞSÞ»³{Ù÷ÜyªßhödfìîmtºÚÚ¼Ku3]ýÅûû/´6ßHÌ*¥ëÅ¿úIÆ5æú.¸¥wQÁAË¥»¾9¸¡¦[VgæpÿÉÝ©û£éÎîL9ÓÏtO¤<s1ìÍQis]ÞûIÆîZÓáò[SGÏÌÃÒxTrtôCxÉ ÍñoÄ¿¹ÆaÑÝÝùðÆ3·»ßµ¿º°øC/ã[oÐûê°·ó=ÒòÝ~7wUEJåþ²ßVwZÓN»5jÁAáÖVÝ%;å[ |
+|K¾láÁÖ^×ï>nÚªKuö¨ëúÀkË»!÷F;RÜb,ÚôÜÌß,]ÉNh˳9¹éWÅ7W´6M,wÃﹸòtºC奮EáÄïubÂçËëNW¤î¤NLÊA+I/çênPrSبAùJmÅ¥.*¥{Ö,µÍó³¥ül÷âåÑR~¦éiÇÉ+êüxzEÑ÷É8hýxxPa5n:áLç+q{cѧk¨ÔÏK½¿¯Ò¤×ð{Ð4)îi©á¢Ã ͯqÐJÒËyZj|ªq16áMÏæFãâ[VËÌÉLïÆT¶:^«Ü=+Njv©3źIÙU´ÙÉ\4Dcí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÷7rÜ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Ý6UE>øñè|9¯ï4SÜâÎc¹ô´ÔXöAòü>¤+ÙêÁÂ]2%jsÐrH)ѤD-sZ.¼Åj¦p¼Ü«ç!]IÞ9µÌ9h%éåÜÝ'µìáÊÃqõëèáZc:¡søWîÞöäî1{j2Z÷)ÈÖz|¯(Ë&ñn.2ê¯#ç+qmrW©}i)éóøsZ.ÝÝefx |
+#å!KW^?,ï£Ûò38H¯Ç3e{ù×ÑëÆ}sýcºí©ÔÃûº Û¶ÜS%MuÒçD}bÜÿDC| `þ ê¢òtÑÆærZþ«4`¨;0Â$¼H0ÓõÍÏ3]¸WW¥º<p/o_Îûë;w¤¸#ÅX.=<µé¹)¿YºØ ?ªÍt¼æòpqW}k»¹Äûd!=æKmu¶ßVw ©^uvÖ9(Fª;ôä>bï¥ÜJ|Ôxû ̲j |
+GÊC®$½¼ÜÇËÊ3^QÊÏTâ }/® |
+I¹¶X)DKZ¹¶yùwr@z¬k>¥!-B,Ðf±4dF,DòX)DKZsb<µ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±4dGIG²ÛxÔÃû÷üL3êÎú¾ÍBάçRÛ|Ø ïÖ*¥!3jÅÊ!´µÅJÚ´VY¬´yB~Ô+t¤\»EQnÕf±4dX¬-jÛDyê-B |
+¶XIÕcõXÒRÈñÐVBÛö°5ZrÚºäqU§?¶ÚÚbåÚú|ØýÂBFÎÁHÚÌÖÌÏØ#fa¤\=[Ú<C`+æÀcådÑf!5Z>L ÝjÔQ¥!-ìVs-Õ¿A#·ÇJ!Z´!^wJh3çúè£ä{äú°ò´BÒ7Æ3äi± Ýú÷} |
++*µyÒ¤R |
+1Mò38}¸Ynv³o|Q<¶u4Kð8HZÆý4é~®ÝÍ|%Z.ÅKgl×ÙV"g»Ç¦kÌÈq+SÁõ=lËQ½TKøîb[Çci¯ÄAhKë*Þ:_KçKuÉAbLáØ"éJRè=-Ë3_QÊÏTâ mq碶ÈÅãMZ;}êlëX[¯ÄAhKë*Ñ_KÇKuÓ S@m ZI |
+MAÍâ´93³hÙú+JùJ¤fÙ£É=öhrÉÒL»5¹G&×ùJ´ÔA^¥ÖäÒÝqÐr)n÷´&)°ÉuZIRX«eë¯(åg*q¾D%õD%õDÅ{¢â=Ñz¢-õDÛüC*óæ=Ñæ=Ñz¢-õD÷D[ê6ï6ï¶Ômó«t%)Já=Qñ¨¤¨xOTf¸{=ÑiDcqðßu²÷jOä|%W¬RÚL7©_I¥÷ ®iwjOä´¥(Ã&@£©ÄAÙ,ìFL#3_ÿª=ó8ÈÍBi3]¤3Ì¢©¹Yj5³È³f |
+ìVºYÃ&@£©ÄA4Kókkókï{ ïây£6ÿÁWâ %ÒêÒÍuù¤eð8h¹t©®»Nk |
+qº®3ò`ÍHf·©ú¨8^¢à+qÒ9M×ôIËà+qå®øªkºágz4éJR7c®ë<qÇüÙäGÈFPù«CZgÓYà~Æ&7øJdPJ¿Óhêå##R3Z.Ýõòi:54¹ÁA+I³î1Óe¥üL%JfÑæõÆ0tªT--d|%2³PZéaKÍ8h¹ÔÌCåÂfyJWY4Æaº¬©ÄAz½ÍQ½mñ©o,×m:Ë»·-ÎWâ ¹\ÀÖ®Ïö ®Íßkç+qÐ2©´ÃÖ5¶-ÎA+I¡wZ¤R~¦e³°m11d¼YjÓÎÎWâ 7¥ëÚü½v¾¹Y¤=¶ó@SéÑ<¤+IÝ,aSZQÊÏTâ ¥uÿ&ºÙ¿åήc¢·¡Â,ÎWâ ¹=¤í.m¦«ù7Qð8hTB]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 |
+Hb`````ÞÁ Ó|°(- ÄbP"ùû=XwÈ\``Òi`àèc`/a`h4``üwÃAaCæÃY³X 4Ë1°df`w |
+stream |
+HW]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<ÁwA£`ÌEjõ»nöÝ ÐÒ¨0Ó2Îv1s^qÊi¨"æULcjdKç8ÙÝð±¥24äV*©Î]Y×D½%HëQ×׿¿ÑR%fÚÈEXnÉqAÒãoIaÓÅQ¬9Õ8Q'm¥+ed¤´Û-PéSÈ@bH7ðº! |
+ý#Cz/𢱹óâ£pq[]/qqªDà¦R"Ù&Vp¤¸°ø7ãºîb)3ã6,GJJ}ÆÕ"üâzµô.³ |
+àyqè¢Â(Å«AtðÍ3UÀ2WÙ`^ñÇ£ |
+§¼´bßw¡q#%£._²§þ{³ÇG*RÏÙ\¦º+¡ÀÁ]xxQº»ap!yª%òk-¶£^@U!¡nʼQßEm-ýÉP˸ËIõEôµ#ªÖÄc%¿fñg²îÆéÄ¢X/´Å¢#°E½&úpì,b$B²L l8êY)©Þ|*Pó°Ë)õ WèÒ9Äø¼Cà¯çòºC¸ta8kÛ.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*Åï¼8+x=ÏÆ"¢m*u3bÊ|ÀE%âì&$\ÐëiÂ?hÙlü(³«ÏJøf; 2¨ëªíðÊøÌ)£ÿÜ·Ã,|ÿ_Uz¸hr&äæâ& ³hJ.ucÜr"¤Ä5Õ«T#`Üïi_>Kcö^ |
+h<I÷ÿ5aÔ34çñÕÒ²3Y:på|̦KhÀÔc±gÒp~APÚë3Jb\åÒÛ_7Æ%k¯ÂA(ß©lâ |
+Rc<àäXVãáõ[ÊLIöè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³å1PÙ»Óûà |
+|ÓK&GÏR;<´ |
+ÔHö(w«P{p~`ï]@0ðú×ÓÄØRV9a]L°X54MLÎ[ã'÷Àºt7Y¿¥ô äP93H¬b$VéCá9øcQñ\SRN}ÔIVWBfoã^;êªðQ"Xa9Ëæ×· õKXÂSDîå |
+dl{ÄvÔÂtsªô ë¡V®*Ó ÙNãÕxܸ& 6rµßôó.ZÆ>±¾Yza[Ô8W>JÇÆÊþ0ëËKvâÒÛ¦zÊ8uläjoô«å7ö}÷nGßÙ¬Ô8W>JûΦTWn½p+®xXÏs1;ëØìLí7ýn¿ñMû@ƾ{·£ïlvgƹªðQ:v¦R]¹ð×ì¬õ27=¶ch¤jm´e߬mÖcWZ¨ÈnÙøU>Jû¦¦t,ïmmy_ìM 4Rµ6ÚvSÆ:ÐfÝ=³ÔLe$Æ©ªðQÚw4¥¤÷ù£e}Ë2Müò÷Í#ÌpÛvñ^p¦D2¦Dlö;¬7uS®vÖµø½'®l |
+-DéYø¾mS¹0Ëátú·°7Ì= |
+stream |
+HWË7¼÷WÌq×À |
+G«¥cb ^Ø°Ç@ =$f.É!¿¢DRêÇ´'Á^¶F"U$K{Oø3ÓèNý><¼Ìç?ñôdµÎÎï·?~ùB?¿?ÖgÓi |
+dPüûÙÌXXì'cÝã8ß¹¯ÖðæÄêp2cè®ñL¯ ßÑxz()ÈlÍFõq¾Ë¿sµÀØR(/ö~>_ïßùëU*Mf§Ï?hRc0³ë\NiZsÀð gæÆÎËAßÉì |
+yzpø=ý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Û]ñâ¦Ì!Æ:aw[1?gs0aÊåá{xþúòÉ[ |
+stream |
+7ü3*7cEÕm}ØÝ]Kªfãg»`OHéT.Y§à51Äaêgüú (!ßzm²¯¾þôñógÙYµáçF |
+úù`uÛVÜ ð8~ m(ä´Ì6á:~(í@0Ø>k¸7s²@¡Ìk22q)BÛÐZ-¡Ágd×ð15ÔÉe̬UàicªÀ£eæRf2¯d(£xÀ5ÅLG°ºI?°Õn*"YºÑ»ì:tüT³²ë@a6Z |
+µ`XEmWBË;9ÍV::c#kÁRÙ3Dåð°[s )3A3E=ÊoÓ2ûÉ óO°uYHx×õ>WY ô`îÍ¥öabn.|2úäèáÝ¥©ÓÌ3dMÉTPÄëyVçh;¤ã=;¡ö1c©Ar¹fÒñ~;¤gWÌö¨þ0û$0¢mÚ]"EÖê*3Ô`Ì¢uPûÈdÒ]* Ã$T |
+·`ZYØ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ÃYyÞ^zøv§C&ýF©iJܺlλÓÒ)'~ç-jvìµó ýþVRÀÎN(ã]ÿøÐ|w.³;ÿüñ×O´g;Ïàý\Á·ÿ¼7àÄýc£Âê1)(R}@\ÞÇf^g®2S%&¤uN/uÒ H¨àâòÁàólyÊA°ÐT@CMáÓ-àQ¯Ì©MË1c.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 |
+HWÛ$E}¯¯¨Ça¼UVÖ£®\]Ü^VDñ÷È8Õ]ÓËÂî'.yéýôÅyòsWëìç-º}·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}àAv@$^¥ %ïÕâr×ÓÐ9dODË(4MÍ«$"fä(ààoB«¢÷۸ЧµéñeÚª«ë¦x[ÝWb6ä]' \ݺYýòJÎÊ*èV n-¡££T_ 6(«¯HÚ~þì!lÚ#BjX¨.RáÄYLíÐcZ2}ÛnhIÍP-¾ÁlXÖíÎMÔ^2µ%ÏÊD;9-ÅÊ\ìU¢4 5$ZmqÑg3RÏî(H9°ü d9êF-L·ä^¤"õ4óxõjUJäÝâतXPEË(tl£²è 2âÞFÑ)%»Õ[:jo£\]zÞÇÆÊ`h"¥Iàh´eÑîÛíõµÐ4« %\õPù ^½X 2xM¨$×ê¤XMýDȨR |
+øFöÃÉY/ÝZ\»Ny0¾Èù©¾g1WdQ5ÉbRNØòÕ[7¸½yÃõÍWïë+whª^½Dø?}ç*ïùë·ÊHz}éî-£wò=ºui¨Ó=IÍÕµ»ïxU®CQYî^ãûà¬èà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ÞTaT¡LªÝúÆ+®uÑVê©PycUó ¤QñXÃê(¤ß´¨5,u°@°4½0JîÍÐu]õ ªQtÒtJ¥¨ra/ÍQ2é©Õ7uä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[äâYlocOÅõ,«Öª¦ZG×*e5TOá²+ëg{²øÚZ |
+Y·yµÛp~hT¹ù#¶ò;6¤üGXÖê^CÛäøMOãB%4Õµ>Hsõ~Ô³ùL$DíGhkóÈÓØZK§þ}½ëûÿµþý/ùJ¡©qZÆ´`ý!øapÉ%º/!ÅôóS]ÊnLìÙoøVâ§iD ºÌtØ |
+ݵ1V±Å¢Ü4TÓ¹ò¬¨?ô9ʤ¡÷Ùymi_çÊ}ã®ìùo%~Z? ÓWÙLÆæÛK1ËqëuÆç2ívÎ é¦qw@¬,ÁÀØB5ß¾sËMäòÍWO;oc,mÆ,Çý¨É)ÛJâøIbö |
+Ý·1±Æ~Ç6ñ%Æ(yba°Åå¶5<cSn06tßÆ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åEDbÏ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ÝwSÑ#)íP |
+stream |
+F>@2±uh@=,Äß IeyÅ-èíÏv´±îD,Ät§hó+,Ârù![-g¤{#¹¨ÆkÎÁd\Pb0Æ¢ |
+Zl:͵æóUìÄaùy!ESùúùØb#6ãmèt ie1k¾Ø"§(d?q6Ìãd£;{/Á¦:Á^vùkõÄaÐ %lêd3ÛlCwQË^7c?2µâ>¥PµÃ|Õì@ñ$×ÓSt\ún/ñ`ÄTF©/òN5þ÷qtzST«¡j²¦.0?B$`g»-ÿI7ÅB¦Eò=%ËpÆå?Úx(úÑ8zJôÕb 8©å÷&ö~ìtPv¹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* P8F6@Ï2-¤5ô |
+5Ñnjá(§é2}Eÿ¢tKÉ"zèͤbh[E;Óiñø·½¥])²PVsVõr=ÓyIUÚ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ò¤ü¼,?3J°ÒKéÄ+ve2U£lS®(WÔÉê õKK°¥Ò²ÂÒjùÞú5ÕkͳN±®³´~äâî|p÷=tQ.y kÅ@%F§¸§¢XfîTÑD+ÅsÔ"ú¨µáb8å Cg¬ß/ÄpMc¨ bÀoHåuþ¥(oãrk;Åk-¡´P\·b?AåïÊþ]À§òYíø»LQtMì¹ÜÇTÕ Ü}²Ãáàét+h5÷q½Îsa<%ÓÒ9ÜEåçXgÄ'¸Æ÷x%~KÅJ)Öb Õá |
+^ã[ÑW²$XºÑ_D¹âQ²«J}HªXFSäËuqsЮã¼ü=gß.öÉl¥Cͧ2¾ÏajÌ%¯:3T |
+IO!N¹ÈÓN&+6þ/â©2gÚA¾ÝGx¤ËlDsçå¾À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`*PQºÀr e´=Å}1ÆGòF |
+ùÑz³È¾ùömô0påzñ65XShäCèwFMâ6è³×j¤è ~%tÁ%ëP^~ªÜËWo0`A?ãìRëi¥b£ý&ÖR1çÛ1Çà\ mÁ3ZUjmv=êÁ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}ãÕtcY+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:"ãûãõ_øV1»mx¼:Ù'H?I_Èþxp|±/0¦ Åò=ÑIÏ T3TçSU3 qý |
+Ùô"ïë=ô ÎW%rS%rÉøÙ×&¬gò:`á£&ºÛÃårí³ cwðù1é^kò0¿'öPD¡9V9UCWm"ObÞ]ÐmÅùÍÄÙÝþÃTÞ&̽zî;ß2üFàóâR¢ï 6ð;óïR1*Ç3ü{àmûBCìÝw 姪H]ÃZ@OJ}6½¦7w!nù=%¶Ð#¢²ñ4Xô§tñ;ÕOh¿ÑWh¿h¡*E"2ðÎ5ñ¶dýEzõúkk($¦¢%}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ëÆ@ú- ÿñjm"»Â÷Þ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\f 3Äþ1ö»ì.T2 ´ç`Ù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 ¶ùöËÙÙ¦GA hN f6ÂãÛ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ÎTbsGªM^çÛ$¯Bõ®²CrеY®M©ò6r9Jð§Üù(vËÔë6:ÜP ;Ôâ)±El+ĸ@ô²X$³,dɱ¼dÉ´X,fÉÂ,Ä2+TýøB%³Ì7ü}?!/1Î ã¹F-¬&z®aõu4¢n#þ`½7A3_Ù¤gxë¨îHs^å$Ää:½ÒÑŦW[ú)=ETg4·$hê-CRûÁc Ü~åà±h8ó÷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Ñ9dã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Ú`E5ÞÔÒ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·Ì·²îØæÌq2f¹³³gǬªÇ»¤ÜJU²2ëIÙ#X£j¢ |
+QQÚI÷ûG²ýÓ Ý~^</¶í&m¤oÈùù<½Ås}¹Rþâ@ ]òyEó®}{ã=u;o¼uóõïß·ïüùýûV·±ÔDÿírê:ãø9çÞ»w÷îÞ»/e¹^X]ÅU kh¸Îij4´ÙÙ ¬Vq55A "*65>ªZ5º0Zi3mJƦ©}(Ii71ÒN ¥ß½ÚLfv÷0û`Îùÿß÷ýÏÐ øÈm¸q}м÷>ßóÕ}\˾|¥NÕõô´1¢"S |
+/f éj²ìÓÓghl@:Ps÷µ½[Õ!,ÃoÝ£ð,füH !L¢©çáÍh´ªå~¿v¶Q·æ'°POþ¯¨Ó±ÙàäaëìÞÅ{þ±ÞðLå³ßë ©ûËCfaú\ÉyyZ×Á\Ñu°×õ7<ì\®[lsEæ |
+k m«µÓzÏ}/é¾»bºd#IÊIн7r±P`=¬û[2 |
+z®Çã¶{<n½ÇMa¢w{(^¢äØ CfsµñARt(L8c$¡ö£ÖwMHF©pb[> U¤Ð¤Ld¶óÑ@AýyÂ@L4?6¼+ZÕ³ÃK½9Ýo®ºGùAãU8¸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ܨ)÷ ¨ç÷õú7yb@U,¨O÷Ó`<ÅÚiãùc5ÀGG>VL3Têô E''ç©cª ï(vN1¸âp©X§´AVÃ&Ïg8¼"%bòÖp-9øæµkñl:N]úÁñø@c÷pL£öáæm`¹_Iç~-¹!ù-Û ÛÜMîÓ$½Áæ2OuSL&ÓÔ¸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Às2ZÉáD<UsçÈ?².ÃT[¤/³Ékõë<õuú"@·N½rJ¶8ERø <+%áÞª@l`¤$&U²óHU¨mRDдà¢%DhfTÅp@1æ'V%T'Ð Q2ñlÅÆCWC6#EEõMÖ¦U µªýÍD!WåÛPzxÁ5mnxÉìç_&³;KZú»Ú?ÇïÜúEógù;[sìèÓô"sYæÌg¾üÃòâÿþ}Cìu<WâSWO¾?ôYðtaôÐÞsçÔ²¨u2'ÙÕ¹Ç4<6 j»Ï$6p|¢zìÁSÄmÑGG8CÊe®hs ²`yÞØs :í8¼Úûb`´Ñ«nT£CõæX¹Ë¨¶Æxl^å2Uó`+ýßæÆÝqküaôÓfܯPsá"¨r"T9yQ&º£äf;qs®s®¯û[&cÈÄU¨ |
+WÒkõå¦5Ü:¾"ajÀt~©«ã·'üF¼f³¦B¹[<²[]d9C]¦Ë>ÕRÌ!É ¸$)ýp:N·¦H:fdå¥È6DI"ø#EX0²bâ]¿ã¼·L8¥â ¦§¥èÞª,Û¸5Ìu£1;ZbM9Ä>/;klÚ·kïØìO¸áIkà²Õ+ú®tõWÖoÞºÜõr]¸tóÖâ-³æ6-Út²¹¦ú¶·ìðí;÷¤MëÞÒ90îÚy/.}#´¼¾vhdASÁÛkNKZâÞ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áÎT3Ef,)Ë3L¡D_jxIØB5 7kº.á¾`Ò3 x Y(θüÿ¸®Ø¨+úæóþïíßëݵwýÖö®?KÀ?>×å)#p6q\ |
+Ø°È))?@¶ F RH.%à¸L¨í"®¥VM#hªðQ@-É |
+9ÄóRH  n1eNÒna<Tjº4[.zz^¥dEt !S×ÎW5²CC;ìâ9o;D,î²_¸Ù¬ü|°áß.ôÍHFg\O°k´DÒ9ÑgpÄ;##¶N>#ÁÑu}ê·ëúBÏ5-<AíDár¾dþoDm©T |
+H¸Ã$Z$Wþ/üôÈØÛ¿¸þ¹§6?·ºWN¥gá&Ô5øòOÞ uÁíxÎ×ief=¥µóV´Ëdỵ|Ü®¾Æ¿¦ |
+E^øJCÞ ,»]¡ÒÒ.7SÊ ä |
+ó"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Øá|6Q#Í2w:BvNC!wòq¿¾ö;£^^6ós |
+É%Aâ%*QÁïø° *¢+DÈòz¼n/rHv¹lÐù¤Ü0ò*Î0Á^KáÙ,d{³½@#0@$®/ c÷¡ÿiZ߸¦ýîüpsúï|§|vògß{¦7ý'~(+øôóés#ÓéwVôN)}ëÐÍÿ |
+2BÑ¢H¡7(63µu¡¢`ÔPâ.[ôµIG |
+ -§Ö4SÛÅ_hÌ¢9¹\.´¨#ÍJ-øô`óÚÝaxÙã6Dåó0ÊU#'t!9æ |
+¦m«÷ÖûOuýÓjª,YYOedqIFD22ÊH_Àæ$ÝQeð;ø£<`rëv®ëãè$(«ê¹«Ümw°¸Ô «*ÍãYSm±ÔC?±µÒyze+°uêÏÈR+C%MÇr¼RX× |
+ôkq[í¹4.)AKéwyÙú³Æ"Iöûk ²"K |
+O(5xÅÃó0 @hEáxLUUÄÑ<Ý´ñ¨ïãÏð×xÊÏØZ&"¨JHļÅTUcü"ë±xðÌÖQÆÕX(%Ì Ö zg±1ÒÂk¡0%GBJ GñGÉ2ÈѦ5Z)ÊzÀã¦SÎLðÇ)kù9qÀÏ^zãÛ¨êKù85=q¶ñ÷#0ÌǾ~Yx£Ö¶× |
+ a@Aa?ÑÙ5/!ql~õ7v÷6 ¾_ûõýÝøæçi:î=Z |
+Í2F¡MèºVà õÚeZ7ó=8WÜÆÛµ¹óÁhq¤Gé ¹B$Îqf}ÊÀÅÞú4gVäÌ´R0boÌIVã¶i |
+ñ´SòÂðû½0#93¦_Í|öÙMq)0"©G¯Ð¸ÿÊ#çfM÷P7Þ |
+ÂaQ¯ÂÌÉ@¯ô¶DzSmð4ÌP3ÛÌ7)ÕåÀr}I¨)¼7p+Á(MkQ÷¥ PwEä9«`ÁX¬Í®µÉ¨ àYZBÅ*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Øé1T1°Ï"4×5ABZMAKáSÜÚBFëþGªù^OQqJî#ÅUJ~ó3<ÿcO${Wò3ynvfÌ6 |
+kå7Iåí®]ò!÷I¹OþXúHV$Q4TÙ«ª²*¼Æ±ßåÐTÅ-²:Ïû¡`4 bEöéº,K\4%udDG¢;A'ôüÙÅIAUð}pP'TüÂ2HC TÎNiÂxZ9ÔÑ>@0])§ee²ªM&ñ:í2"AiI!iRTc43 &<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»÷È/+Û/&¸Ê}ÑdBrlZs:;P2Qk $Âe¯BßõSe |
+2P#jCh?r G6eѨf£e|8ͧ¨RTª¥4ÒÙ9;iêï*_W£J63ã |
+N©¤âiD¡RNÈhOmWVä5Z¢8ª®ª©©ãÏëT7àg¶7Ä©Ö7Ý˶>ó³ S¬5Vüîçß?þ¿l¿|êäécé:ô§æî-;^¿bÝ?n)ë^nz¢kÚôñÀ·Æ×oæwO®z÷iï+/,k¨¬\]2åüõ×»»ß¡ò¾²ÉI5nGáx@N9XïÃ]=6 ô¦Ã@x"h°Ï£ÃS®÷H.çIè*ÙÁÌm²¹¼Tʪh+ì±"Ì+̺OzxDÁ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ÇÙ½PnäP7·{L76KÒË1zÿcLVTmdq9Ê~ÀÖ{,²«Gh;£ÎÁLçx2tå.Áú©¡à]ý±©EÀr$âÚ8KÉplÿ>ËkL k}ÃÕÙ?JJàc56PÃmnÍ fdb¨2Ç?xmPXTö½}2t«»cÓ&¦ÔÖ)Arn uí3§R)µTKéiªFMk5ú,j:K¡7SMj³Ö¤+¹Ã2¦@<ÎÊ%"ïdYôz4Íç躯oxjKéEM%³Ùâê ÂÇ^(帨O÷ú|º&ò|Ô§©©¢,êUUãEN÷±²ª@\±>¥uE¹Äqê´®iªJq¡@ ¤<ΣApõÁ0)-è5P0ØöÉ×ìPp^0 |
+fõùÓÛ§ÝÜ#DHÊ6¤¿:2{æåïOPwJÊåËpzyÄ{ßÈà¸Psé}Ã_äÅq_9,Ϭô&kÖÙ>|8Ðs GÉS *v8zÃzþÊP>y¿!^Pvû÷ÖºÖµbgÀk] xìÐ>MÐͬÝß{þ%`RfÑ>cèøHfÌ{pY |
+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Ù-@6cÄx)Æ`BÒDÁ$°I 9Òig I!@2Áíù#´ Bë6ChqS3¤¡fJ ÁHÚØàLâé8î@,¹÷®¡¤Õ½Z½Ïùs¾o·î°v§/ØÿAf¿&]uߢûíýÒM÷8LÃqߣ(^§$PE[Q°et § ã¡MFS<àÀýÀ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ðMFb-.ÎðÌÒsÄbíï.dè¥$^vb²xÖ0Zï¯ Ðå,åK.(»LWk³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`7FÿGwÕÀ6qÝñ{wïÞÝ»³;}qø+Bì$$¤Ä´ÐÀh °B ß0²iµ¥t(£jG`n6Bð6 M´)aê*Ñ©TöX¤hCÙ*ê°ÿ;'4MîÙ;ù½ÿÿÿûªÓ¢C ãV_WÇÄ|2ÀÌÏìN¹5PÈ )uú9øò®.ÁêHè¡ÊDe²º |
+æ |
+:J%躸u> JwJ(ö!+D>ûp?Ä71Ä£çpÃ7äÉvÀ Y_ëGÐd¾cÝÑîªLx8ÅËÙlߺïÁÑûÀ0>89þUTkíÑÉK5b1"ÎÆ ñ(zeQ0æ±èâ]å!V`]T%¶/HEzAÌ!¤ |
+EëíÍöÜBVH-´ïÑ+äøcrÜþM¾=NEóH©,G$â$"`·(* |
+tËú+B |
+USðyT0 Ê°¤BAKO{ |
+ð&7Ý$²)5f[>Ð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ü^×ãmP]¦2µ»tjç©,Qu¡e=2K.äâKõÿ«ÙÎK5²À½ðºVãA¯óÂÁi¿ïvt^b¦·e&aw%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ºsXzç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}22[J3*vl£ÈÌIÀª`ü`Y*YZú2Ü' ÕGG2tÒÙ&ji¨zkûOë¸ÕñpKË7Wÿ`¼iosõ£ôxjì©ekZ6ëM u& qE¾`dû¹j,!GñÓls$D,qwt2}cï$wÇWuqqa¢ØáÓu] ãàÁÞÖ'¢åqb'K%#,Õ¬ Ö°6ÒF;v±tÓ¡G|t@x\<ÈFÈýºá¨åpLü!¿Í^Óì58gy]ß°·á-ö\cÀ,+c`b>ð°(DX-käy&]õÄM:v3,2(2È.Á òY)¦nA -L4 1UHD |
+öW׶ò±+X¬Ê²¤8T}Wàr:Ã*sá,É)le.«9UU¬fC @ ×40Ië'd§®ê®IºE·Ö«ºJw¨¯«T$«^Iý¿Rå U×R¥Ô,6IiJ8c¬BÆÅÒúqpSòÖT&ft93>evº@îìÑ|ÊLÆO<ÜÿÂB £»L |
+ò¤pTüÌR!%BLL?þ@, |
+û{ºzogcànhfü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 |