roboforum.ru

Технический форум по робототехнике.


Обсуждение реализации шлюз-контроллера [ORFA]

Разработка стандартизированных модулей для домашнего робостроения.
Правила форума
Правила раздела OpenRobotics

Re: Обсуждение реализации шлюз-контроллера

Сообщение Vooon » 08 май 2009, 06:05

Допилил pyOR, добавил установочный скрипт.
Качаем архив здесь: http://hg.vehq.ru/pyor/
потом python setup.py install
и все.

Для проверки накидал простенький скрипт:

Код: Выделить всёРазвернуть
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
from PyQt4 import Qt
from optparse import OptionParser

# interface lib
import serial
import pyor
from pyor import testio

CDEV='/dev/rfcomm0'
BAUD=115200

SP_H=0x60
SP_M=0x40
SP_L=0x20

SR_L = 0x60
SR_R = 0x61
DR_L = 0x62
DR_R = 0x63

FWD = 0x00
BKWD = 0x01

REGIO = False

class JoyButton(Qt.QPushButton):

    def __init__(self, parent=None, req=None, lp=None, rp=None, ld=None, rd=None):
        Qt.QPushButton.__init__(self, parent)

        self.r = req
        self.lp = lp
        self.rp = rp
        self.ld = ld
        self.rd = rd

        self.connect(self, Qt.SIGNAL("pressed()"), self.sl_pressed)
        self.connect(self, Qt.SIGNAL("released()"), self.sl_released)

    def sl_pressed(self):
        if REGIO:
            self.r.set_reg(register=DR_L, data=self.ld)
            self.r.set_reg(register=DR_R, data=self.rd)
            self.r.set_reg(register=SR_L, data=self.lp)
            self.r.set_reg(register=SR_R, data=self.rp)
        else:
            l = self.r.localhost
            with self.r.transaction():
                self.r.i2cwrite_req(l, [DR_L, self.ld])
                self.r.i2cwrite_req(l, [DR_R, self.rd])
                self.r.i2cwrite_req(l, [SR_L, self.lp])
                self.r.i2cwrite_req(l, [SR_R, self.rp])
            self.r.response()

    def sl_released(self):
        if REGIO:
            self.r.set_reg(register=SR_L, data=0)
            self.r.set_reg(register=SR_R, data=0)
        else:
            l = self.r.localhost
            with self.r.transaction():
                self.r.i2cwrite_req(l, [SR_L, 0])
                self.r.i2cwrite_req(l, [SR_R, 0])
            self.r.response()


class JoyCtl(Qt.QWidget):
    def __init__(self, req, parent=None):
        Qt.QWidget.__init__(self, parent)

        self.layout = Qt.QGridLayout(self)

        # name, key, y_pos, x_pos, l_dir, l_pwm, r_dir, r_pwm
        btn_names = (
            ("l fw",    "7", 0, 0, FWD,   SP_L, FWD,    SP_H, ),
            ("fw",      "8", 0, 1, FWD,   SP_H, FWD,    SP_H, ),
            ("r fw",    "9", 0, 2, FWD,   SP_H, FWD,    SP_L, ),
            ("l",       "4", 1, 0, BKWD,  SP_M, FWD,    SP_M, ),
            ("r",       "6", 1, 2, FWD,   SP_M, BKWD,   SP_M, ),
            ("l bw",    "1", 2, 0, BKWD,  SP_L, BKWD,   SP_H, ),
            ("bw",      "2", 2, 1, BKWD,  SP_H, BKWD,   SP_H, ),
            ("r fw",    "3", 2, 2, BKWD,  SP_H, BKWD,   SP_L, ), )

        for b in btn_names:
            btn = JoyButton("%s (%s)" % (b[0], b[1], ),
                            req=req,
                            ld=b[4], lp=b[5],
                            rd=b[6], rp=b[7]
                            )
            btn.setShortcut(Qt.QKeySequence(b[1]))
            self.layout.addWidget(btn, b[2], b[3])


class MainWindow():

    def __init__(self, req):
        self.req = req

        self.app = Qt.QApplication(sys.argv)

        self.window = Qt.QWidget()
        self.window.setWindowTitle("QTiger")

        self.layout = Qt.QVBoxLayout()
        self.window.setLayout(self.layout)

        # hack
        cdev = self.req.ser.ser.port
        baud = self.req.ser.ser.baudrate
        self.port_label = Qt.QLabel("Port: %s, baud: %s" % (cdev, baud, ))
        self.layout.addWidget(self.port_label)

        ver = self.req.protocol_version
        local = self.req.localhost
        freq = self.req.busfreq
        self.dev_label = Qt.QLabel("Protocol ver: %s; Local: 0x%02x; I<sup>2</sup>C freq: %s kHz" % (ver, local, freq, ))
        self.layout.addWidget(self.dev_label)

        self.joy_ctl = JoyCtl(self.req)
        self.layout.addWidget(self.joy_ctl)

    def start(self):
        self.window.show()
        self.app.exec_()


def main():
    parser = OptionParser()
    parser.add_option("-p", "--port", dest="port", help="communication port",
                      metavar="FILE", default=CDEV)
    parser.add_option("-b", "--baud", dest="baud", help="baud rate",
                      metavar="N", default=BAUD)
    (options, args) = parser.parse_args()

    ser = serial.Serial(options.port, options.baud, timeout=1)
    logio = testio.LogIO(ser)
    req = pyor.Request(logio)
    req.localhost = 0x10
    req.busfreq = 100

    gui_ = MainWindow(req)
    gui_.start()

if __name__ == "__main__":
    main()
Вложения
.png
qtiger.py
(4.24 КиБ) Скачиваний: 397
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: Обсуждение реализации шлюз-контроллера

Сообщение =DeaD= » 08 май 2009, 07:49

А чем питон крут? его как например потом с OpenCV интегрировать?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Обсуждение реализации шлюз-контроллера

Сообщение Vooon » 08 май 2009, 07:56

Просто на нем очень легко дается быстрое прототипирование.
Можно дописать демона, слушающего TCP/Unix порт и далее работать откуда угодно (уж с сетью вроде ни где нет проблем)

Привязки к питону входят в opencv, загляни в примеры.
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: Обсуждение реализации шлюз-контроллера

Сообщение =DeaD= » 08 май 2009, 08:54

Хм, наверное надо будет как-нибудь изучить, пока свободного времени =>0 :(
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение blindman » 17 май 2009, 11:47

Я так понимаю, что идеологически правильно будет ипользовать ORFA и в прошивках модулей, управляемых по I2C?
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение =DeaD= » 17 май 2009, 13:03

Если модуль не представляет атомарную функцию использование ORFA обязательно, иначе - желательно.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение blindman » 17 май 2009, 13:12

Надо бы ядро ORFA в отдельную либу выделить, чтобы не было в одной куче с драйверами.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение =DeaD= » 17 май 2009, 13:16

Однозначно и драйвера все поделить по разным либам.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение Vooon » 17 май 2009, 13:31

Для слейва думаю нужно написать отдельный главный файл, с работой в качестве I2C слейва.
А драйверы да, было бы неплохо вынести.
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение blindman » 17 май 2009, 13:45

Vooon писал(а):Для слейва думаю нужно написать отдельный главный файл, с работой в качестве I2C слейва.

+1.
Тогда написание прошивки для такого устройства сведется к написанию одного или нескольких драйверов + функция инициализации.

Добавлено спустя 7 минут 36 секунд:
Если уж еще дальше идти - то вынести всю работу с регистрами МК в отдельные либы, по 1 на МК :) тогда можно будет просто подлинковывать нужные библиотеки, без перекомпиляции
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение =DeaD= » 17 май 2009, 14:10

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

Что скажете? Иначе как унификацию отслеживать потом?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение blindman » 17 май 2009, 14:20

Я вообще за то чтоб либы компилировались раз и навсегда. Гораздо проще для разработки - скомпилировал, кинул в определенное место хедеры и либы, подключил в своем проекте - и вперед. Обновились либы - перекомпилировал, обновил в одном месте. А так будет в каждом проекте своя копия исходников и разбирайся - обновил именно в этом проекте, или забыл.

Добавлено спустя 5 минут 26 секунд:
И еще. Пока кода не так много - неплохо бы подумать как отвязаться от архитектуры AVR. Когда до армов доберемся, это будет уже сложнее сделать.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение =DeaD= » 17 май 2009, 14:32

А где мы к ней привязываемся?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение blindman » 17 май 2009, 14:47

Ну например порт GPIO во внутреннем представлении - это адрес 1-байтной ячейки памяти. Для арма это не так, управление направлением (вход/выход) наверняка тоже по другому там будет. Работа с уартом и I2C тоже привязана к AVR.

Хотя ... может получится что придумать как абстрагироваться от аппаратуры будет намного сложнее, чем реализовать это. Тогда конечно лучше это делать лишь когда в этом будет необходимость.
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Обсуждение реализации шлюз-контроллера [ORFA]

Сообщение =DeaD= » 17 май 2009, 14:59

Не понимаю :( а чего в работе с GPIO, UART, I2C у нас тут специфичного для AVR? мы ведь прописываем интерфейсы типа "пришел байт", "запросили байт", установить пин "Х" как выход. Разве это не так в ARM?
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Пред.След.

Вернуться в Open Robotics

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3