Sběrnice pro robota

Odpovědět
Plecharts
Příspěvky: 1
Registrován: 24 úno 2013, 13:40

Sběrnice pro robota

Příspěvek od Plecharts »

Ahoj,
právě stavím většího robota a chci aby byl co nejvíce modulární, tedy že můžu vždy vyměnit pouze jeden modul, který se stará o specifickou funkci. Když jsem toto řešil v minulosti, používal jsem pakety po vzoru NMEA-0183, což bohužel znamená že je jeden master a jeden slave, i když se počet slave zařízení dá zvednout. Dále jsem používal I2C, což je sice dobrá sběrnice, ale začíná mít problémy v okamžik kdy něco začne vytvářet rušení, což se na robotech děje celkem často. Dále má problémy s dlouhými dráty, což je bohužel věc kterou neobejdu, plánovaná délka vedení je asi 2 metry.

V současnosti uvažuji o https://code.google.com/p/robbus/, ale vypadá to že ten projekt je mrtvý (poslední update před rokem a něco). Nevíte někdo o podobné alternativě, která umožnuje komunikaci alespoň jedoho master s více slave moduly po vedení alespoň 2 metry v relativně zarušeném prostředí?
Uživatelský avatar
Dex
Administrátor
Příspěvky: 1519
Registrován: 16 úno 2013, 14:26

Re: Sběrnice pro robota

Příspěvek od Dex »

Ahoj,

v principu bych otázku "sběrnice" rozdělil na hw a sw vrstvu.

Robbus je vlastně hw vrstva z CANu (používaný např. v autech) a odolnost proti rušení je značná. Pokud jde o sw vrstvu tak existuje nějaký popis protokolu a pokud vím, tak ho i několik lidí používá. Pochopitelně by šla použít sw část přímo z CANu ovšem to již není jednoduchá záležitost. Proto také vznikl Robbus. Existují ale i roboti používající celý CAN a slyšel jsem, že to funguje hezky ;) Samozřejmě není problem se "jen" inspirovat a navrhnout si vlastní protokol.

U většího robota bych asi použil čistokrevný Ethernet. Pochopitelně u mne hraje významnou roli i fakt, že mu rozumím. Odolný proti rušený je dostatečně, některé prvky (např. switche) je možné pořídit velmi levně. Snadno se pomocí WiFi propojí s okolním světem. Pro vlastní komunikaci existuje dostatek různých a dobře dokumentovaných protokolů atd. atd. Na malého robota se to ale nehodí to je myslím jasné.

Mno a pak je tu ještě další (nikoliv poslední) možná cesta, kterou se chci vydat u středně velkého robota já. Moduly pracující s menším objemem dat (a těch bývá většina) propojím pomocí RS485. Fyzická vrstva je dobře dokumentovaná. Vlastní protokol ovšem nijak definovaný není a je na každém jak si ho navrhne či kde se inspiruje. Jde o průmyslovou sběrnici takže je opět hodně odolná proti rušení.

Na toto téma se dá diskutovat hodiny ale snad jsem alespoň nastínil některé možnosti ;)
"all your robots are belong to us"
robodoupe.cz
48858
Příspěvky: 7
Registrován: 25 čer 2013, 21:18

Re: Sběrnice pro robota

Příspěvek od 48858 »

Zdravím,
Robbus používám již několik let a jsem s ním spokojen. Splňuje to, co od něho očekávám.
Jestli je projekt mrtvý nebo není nedokážu posoudit a je mi to v podstatě jedno. Neočekávám, že mi někdo naservíruje hotovou implementaci pro mou konkrétní potřebu, těžiště projektu vidím ve zpracovaném konzistentním návrhu a ukázkové implementaci stavového automatu. Naohýbat pro konkrétní aplikaci a procesor už nebývá větší problém.
Rád bych ještě vyzdvihl výhody fyzické vrstvy CANu oproti zmiňované fyzické vrstvě RS485. Nic vám nebrání na nich použít vlastní paketový protokol ála NMEA doplněný o adresu. Ascii komunikace nebude z pohledu přeneseného objemu dat tak efektivní jako binární, ale pokud vám to nevadí, nemusí to být pro začátek špatná volba.
Výhoda CANu (mám na mysli pouze jeho fyzickou vrstvu) oproti RS485 (též hw layer) spočívá hlavně v tom, že nepotřebuje arbitráž transmit/receive. RS485 potřebuje ještě jeden pin, kterým přepínám příjem/vysílání a pokud se mi jeden z modulů na sběrnici sekne při vysílání, tak celou sběrnici zablokuje.
CAN nic takového nepotřebuje na druhou stranu, vše co vysílám také přijmu. Buď to můžu ignorovat a zahodit nebo použít pro kontrolu, že data byla v pořádku odeslána a nikdo komunikaci nerušil (jedná se vlastně o cdma známé z počátků ethernetu po koaxu - 10base2, pro pamětníky).
Pomocí pár hradel a jednoho rc článku se dá ale zpětný příjem docela jednoduše odfiltrovat. Používám hlavně na straně pc jako mastera, nebo v případě, že přenáším protokol, který je určený pro čistou seriovou linku, třeba implementace AVR bootloaderu podle AN109, který s úspěchem používám pro robbus moduly založené na AVR. Stačí aktivovat bootloader a po CANu nahrát nový program.
Odpovědět