Exemplo n.º 1
0
    def setUp(self):
        app = webapp2.WSGIApplication([webapp2.Route(r'/<team_key:>', ApiTeamHistoryRobotsController, methods=['GET'])], debug=True)
        self.testapp = webtest.TestApp(app)

        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_datastore_v3_stub()
        self.testbed.init_urlfetch_stub()
        self.testbed.init_memcache_stub()
        self.testbed.init_taskqueue_stub(root_path=".")

        self.team = Team(
                id="frc1124",
                name="UberBots",
                team_number=1124,
                nickname="UberBots",
        )

        self.robot = Robot(
                id="frc1124_2015",
                team=self.team.key,
                year=2015,
                robot_name="Orion"
        )

        self.team.put()
        self.robot.put()
    def parse(self, response):
        """
        Parse team info from FMSAPI
        Returns a tuple of: list of models (Team, DistrictTeam, Robot),
        and a Boolean indicating if there are more pages to be fetched
        """

        # Get team json
        # don't need to null check, if error, HTTP code != 200, so we wont' get here
        current_page = response['pageCurrent']
        total_pages = response['pageTotal']
        teams = response['teams']
        ret_models = []

        for teamData in teams:
            # Fix issue where FIRST's API returns dummy website for all teams
            if teamData[
                    'website'] is not None and 'www.firstinspires.org' in teamData[
                        'website']:
                website = None
            else:
                raw_website = teamData.get('website', None)
                website = urlparse.urlparse(
                    raw_website, 'http').geturl() if raw_website else None

                # Fix oddity with urlparse having three slashes after the scheme (#1635)
                website = website.replace('///', '//') if website else None

            team = Team(id="frc{}".format(teamData['teamNumber']),
                        team_number=teamData['teamNumber'],
                        name=teamData['nameFull'],
                        nickname=teamData['nameShort'],
                        city=teamData['city'],
                        state_prov=teamData['stateProv'],
                        country=teamData['country'],
                        website=website,
                        rookie_year=teamData['rookieYear'])

            districtTeam = None
            if teamData['districtCode']:
                districtAbbrev = DistrictType.abbrevs[
                    teamData['districtCode'].lower()]
                districtTeam = DistrictTeam(id=DistrictTeam.renderKeyName(
                    self.year, districtAbbrev, team.key_name),
                                            team=ndb.Key(Team, team.key_name),
                                            year=self.year,
                                            district=districtAbbrev)

            robot = None
            if teamData['robotName']:
                robot = Robot(id=Robot.renderKeyName(team.key_name, self.year),
                              team=ndb.Key(Team, team.key_name),
                              year=self.year,
                              robot_name=teamData['robotName'].strip())

            ret_models.append((team, districtTeam, robot))

        return (ret_models, (current_page < total_pages))
Exemplo n.º 3
0
    def parse(self, response):
        """
        Parse team info from FMSAPI
        Returns a tuple of: list of models (Team, DistrictTeam, Robot),
        and a Boolean indicating if there are more pages to be fetched
        """

        # Get team json
        # don't need to null check, if error, HTTP code != 200, so we wont' get here
        current_page = response['pageCurrent']
        total_pages = response['pageTotal']
        teams = response['teams']
        ret_models = []

        for teamData in teams:
            # Fix issue where FIRST's API returns dummy website for all teams
            if teamData[
                    'website'] is not None and 'www.firstinspires.org' in teamData[
                        'website']:
                website = None
            else:
                website = WebsiteHelper.format_url(
                    teamData.get('website', None))

            team = Team(id="frc{}".format(teamData['teamNumber']),
                        team_number=teamData['teamNumber'],
                        name=teamData['nameFull'],
                        nickname=teamData['nameShort'],
                        school_name=teamData.get('schoolName'),
                        home_cmp=teamData.get('homeCMP').lower()
                        if teamData.get('homeCMP') else None,
                        city=teamData['city'],
                        state_prov=teamData['stateProv'],
                        country=teamData['country'],
                        website=website,
                        rookie_year=teamData['rookieYear'])

            districtTeam = None
            if teamData['districtCode']:
                districtKey = District.renderKeyName(
                    self.year, teamData['districtCode'].lower())
                districtTeam = DistrictTeam(
                    id=DistrictTeam.renderKeyName(districtKey, team.key_name),
                    team=ndb.Key(Team, team.key_name),
                    year=self.year,
                    district_key=ndb.Key(District, districtKey),
                )

            robot = None
            if teamData['robotName']:
                robot = Robot(id=Robot.renderKeyName(team.key_name, self.year),
                              team=ndb.Key(Team, team.key_name),
                              year=self.year,
                              robot_name=teamData['robotName'].strip())

            ret_models.append((team, districtTeam, robot))

        return (ret_models, (current_page < total_pages))
Exemplo n.º 4
0
def post_robot():
    try:
        data = json.loads(request.get_data())
        robot = Robot(**data)
    except:
        return "Your model sucks"

    db.session.add(robot)
    db.session.commit()
    return robot.id
Exemplo n.º 5
0
def create_robot(user):
    if not user:
        return jsonify({'message': 'Not authorized'}), 401
    current_location_x = request.json.get('current_location_x', 0)
    current_location_y = request.json.get('current_location_y', 0)
    mac_address = request.json.get('mac_address')

    robot = Robot(current_location_x, current_location_y, mac_address)
    robot.save_to_db()
    response = robot.serialize

    return jsonify(response), 201
Exemplo n.º 6
0
    def parse(self, response):
        """
        Parse team info from FMSAPI
        Returns a tuple of: list of models (Team, DistrictTeam, Robot),
        and a Boolean indicating if there are more pages to be fetched
        """

        # Get team json
        # don't need to null check, if error, HTTP code != 200, so we wont' get here
        current_page = response['pageCurrent']
        total_pages = response['pageTotal']
        teams = response['teams']
        ret_models = []

        for teamData in teams:
            # concat city/state/country to get address
            address = u"{}, {}, {}".format(teamData['city'],
                                           teamData['stateProv'],
                                           teamData['country'])

            team = Team(id="frc{}".format(teamData['teamNumber']),
                        team_number=teamData['teamNumber'],
                        name=teamData['nameFull'],
                        nickname=teamData['nameShort'],
                        address=address,
                        website=teamData['website'],
                        rookie_year=teamData['rookieYear'])

            districtTeam = None
            if teamData['districtCode']:
                districtAbbrev = DistrictType.abbrevs[
                    teamData['districtCode'].lower()]
                districtTeam = DistrictTeam(id=DistrictTeam.renderKeyName(
                    self.year, districtAbbrev, team.key_name),
                                            team=ndb.Key(Team, team.key_name),
                                            year=self.year,
                                            district=districtAbbrev)

            robot = None
            if teamData['robotName']:
                robot = Robot(id=Robot.renderKeyName(team.key_name, self.year),
                              team=ndb.Key(Team, team.key_name),
                              year=self.year,
                              robot_name=teamData['robotName'].strip())

            ret_models.append((team, districtTeam, robot))

        return (ret_models, (current_page < total_pages))
Exemplo n.º 7
0
    def post(self):
        team_number = self.request.get("team_number")
        if not team_number:
            self.abort(400)
        team_number = int(team_number)
        team = Team.get_by_id("frc{}".format(team_number))
        if not team:
            self.abort(400)
        self._require_team_admin_access(team_number)

        action = self.request.get('action')
        if action == "remove_media_reference":
            media, team_ref = self.get_media_and_team_ref(team_number)
            if team_ref in media.references:
                media.references.remove(team_ref)
            if team_ref in media.preferred_references:
                media.preferred_references.remove(team_ref)
            MediaManipulator.createOrUpdate(media, auto_union=False)
        elif action == "remove_media_preferred":
            media, team_ref = self.get_media_and_team_ref(team_number)
            if team_ref in media.preferred_references:
                media.preferred_references.remove(team_ref)
            MediaManipulator.createOrUpdate(media, auto_union=False)
        elif action == "add_media_preferred":
            media, team_ref = self.get_media_and_team_ref(team_number)
            if team_ref not in media.preferred_references:
                media.preferred_references.append(team_ref)
            MediaManipulator.createOrUpdate(media, auto_union=False)
        elif action == "set_team_info":
            robot_name = self.request.get("robot_name").strip()
            current_year = datetime.datetime.now().year
            robot_key = Robot.renderKeyName(team.key_name, current_year)
            if robot_name:
                robot = Robot(
                    id=robot_key,
                    team=team.key,
                    year=current_year,
                    robot_name=robot_name,
                )
                RobotManipulator.createOrUpdate(robot)
            else:
                RobotManipulator.delete_keys([ndb.Key(Robot, robot_key)])
        else:
            self.abort(400)

        self.redirect('/mod/')
Exemplo n.º 8
0
    def test_delete_robot_name(self):
        self.loginUser()
        self.giveTeamAdminAccess()

        Robot(
            id=Robot.renderKeyName(self.team.key_name, self.now.year),
            team=self.team.key,
            year=self.now.year,
            robot_name='First Robot Name',
        ).put()

        form = self.getTeamInfoForm(1124)
        self.assertEqual(form['robot_name'].value, 'First Robot Name')
        form['robot_name'] = ''
        response = form.submit().follow()
        self.assertEqual(response.status_int, 301)

        robot = Robot.get_by_id(Robot.renderKeyName('frc1124', self.now.year))
        self.assertIsNone(robot)
    def post(self):
        self._require_admin()

        team_key = self.request.get('team_key')
        year = int(self.request.get('robot_year'))
        name = self.request.get('robot_name')

        team = Team.get_by_id(team_key)
        if not team:
            self.abort(404)

        if not year or not name:
            self.abort(400)

        robot = Robot(id=Robot.renderKeyName(team_key, year),
                      team=team.key,
                      year=year,
                      robot_name=name.strip())
        RobotManipulator.createOrUpdate(robot)
        self.redirect('/admin/team/{}'.format(team.team_number))
Exemplo n.º 10
0
    def initialize_sim(self, random=False):
        # reset the viewer
        self.viewer.control_panel_state_init()

        # create the simulation world
        self.world = World(self.period)

        # create the robot
        robot = Robot()
        self.world.add_robot(robot)

        # generate a random environment
        if random:
            self.map_manager.random_map(self.world)
        else:
            self.map_manager.apply_to_world(self.world)

        # create the world view
        self.world_view = WorldView(self.world, self.viewer)

        # render the initial world
        self.draw_world()
Exemplo n.º 11
0
lightred1 = np.array([0, 100, 20])
darkred1 = np.array([5, 255, 255])
lightred2 = np.array([175, 100, 20])
darkred2 = np.array([179, 255, 255])
lightblue = np.array([100, 100, 20])
darkblue = np.array([125, 255, 255])
lightgreen = np.array([40, 50, 50])
darkgreen = np.array([80, 255, 255])

robot = Robot(vrep,
              client_id,
              name='Pioneer_p3dx{}'.format(sufix),
              name_motor_left='Pioneer_p3dx_leftMotor{}'.format(sufix),
              name_motor_right='Pioneer_p3dx_rightMotor{}'.format(sufix),
              name_camera='Vision_sensor{}'.format(sufix),
              name_prox_sensor='Proximity_sensor{}'.format(sufix),
              name_payload='Payload{}'.format(sufix),
              velocity=VELOCITY_SLOW,
              velocity_rotation=VELOCITY_ROTATION_SLOW,
              tork=TORK_SLOW,
              tork_rotation=TORK_ROTATE_SLOW,
              error=ERROR)


def shaped(mask, color):
    contours, _ = cv2.findContours(mask, cv2.RETR_TREE,
                                   cv2.CHAIN_APPROX_SIMPLE)
    for cont in contours:
        area = cv2.contourArea(cont)
        approx = cv2.approxPolyDP(cont, 0.01 * cv2.arcLength(cont, True), True)
        x = approx.ravel()[0]
Exemplo n.º 12
0
from uploader import Uploader
from models.map import Map
from models.robot import Robot
from settings import MONGO_URI

mongo = MongoClient(MONGO_URI)
db = mongo.ways_db
mapper = Map()

up = Uploader(db, mapper)

if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    filename = input("type here name of file with map:  ")
    try:
        up.upload(filename)
    except FileNotFoundError:
        print('Wrong filename')
        sys.exit()
    tasks = [
        loop.create_task(Robot().walking(route.get('map', {}).get('data')))
        for route in db.ways.find({})
    ]
    try:
        loop.run_until_complete(asyncio.wait(tasks))
    except ValueError:
        print('No routs found')
    finally:
        loop.close()
    def get(self):
        robots = Robot.get()
        parsed_robots = [Robot(robot['name']).json() for robot in robots]

        return parsed_robots, 200 if parsed_robots else 402
    def get(self, robot_id):
        robot = Robot.get_by_id(robot_id)
        parsed_robot = Robot(robot['name']).json()

        return parsed_robot, 200 if parsed_robot else 402
Exemplo n.º 15
0
def post_robot():
    data = json.loads(request.get_data())
    robot = Robot(**data)
Exemplo n.º 16
0
Arquivo: app.py Projeto: tie304/robot
import socket
import time
from pysabertooth import Sabertooth
from models.robot import Robot
from models.camera import Camera
from multiprocessing import Process

PORT = "/dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A105QI4I-if00-port0"

saber = Sabertooth(PORT, baudrate=9600, address=128, timeout=0.1)
robot = Robot(saber)
camera = Camera('test_1', "./data/")
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(("192.168.0.9", 8000))
button_delay = 0.2

try:

    while True:
        from_server = client_socket.recv(4096)
        char = from_server.decode("utf-8")
        if char == "p":
            print("Stoping robot")
            robot.stop()
            time.sleep(1)
            camera.done()
            exit(0)

        if char == "c":
            robot.stop()
            time.sleep(button_delay)