Exemplo n.º 1
0
    def render(self, mode='human'):
        # DO NOT TRANSLATE TO OTHER LANGUAGES UNLESS YOU ARE BRAVE
        screen_width = 600
        screen_height = 400

        world_width = self.max_position - self.min_position
        scale = screen_width / world_width
        carwidth = 40
        carheight = 20

        if self.viewer is None:
            import rendering
            self.viewer = rendering.Viewer(screen_width, screen_height)
            xs = np.linspace(self.min_position, self.max_position, 100)
            ys = self.height(xs)
            xys = list(zip((xs - self.min_position) * scale, ys * scale))

            self.track = rendering.make_polyline(xys)
            self.track.set_linewidth(4)
            self.viewer.add_geom(self.track)

            clearance = 10

            l, r, t, b = -carwidth / 2, carwidth / 2, carheight, 0
            car = rendering.FilledPolygon([(l, b), (l, t), (r, t), (r, b)])
            car.add_attr(rendering.Transform(translation=(0, clearance)))
            self.cartrans = rendering.Transform()
            car.add_attr(self.cartrans)
            self.viewer.add_geom(car)
            frontwheel = rendering.make_circle(carheight / 2.5)
            frontwheel.set_color(.5, .5, .5)
            frontwheel.add_attr(
                rendering.Transform(translation=(carwidth / 4, clearance)))
            frontwheel.add_attr(self.cartrans)
            self.viewer.add_geom(frontwheel)
            backwheel = rendering.make_circle(carheight / 2.5)
            backwheel.add_attr(
                rendering.Transform(translation=(-carwidth / 4, clearance)))
            backwheel.add_attr(self.cartrans)
            backwheel.set_color(.5, .5, .5)
            self.viewer.add_geom(backwheel)
            flagx = (self.goal_position - self.min_position) * scale
            flagy1 = self.height(self.goal_position) * scale
            flagy2 = flagy1 + 50
            flagpole = rendering.Line((flagx, flagy1), (flagx, flagy2))
            self.viewer.add_geom(flagpole)
            flag = rendering.FilledPolygon([(flagx, flagy2),
                                            (flagx, flagy2 - 10),
                                            (flagx + 25, flagy2 - 5)])
            flag.set_color(.8, .8, 0)
            self.viewer.add_geom(flag)

        pos = self.state[0]
        self.cartrans.set_translation((pos - self.min_position) * scale,
                                      self.height(pos) * scale)
        self.cartrans.set_rotation(math.cos(3 * pos))

        return self.viewer.render(return_rgb_array=mode == 'rgb_array')
Exemplo n.º 2
0
    def render(self, mode='human'):
        import rendering
        if self.viewer is None:

            self.viewer = rendering.Viewer(400, 800)
            #self.viewer.set_bounds(-2.2, 2.2, -2.2, 2.2)

            #point1 = rendering.Point
            #self.point1.add_attr(self.circletrans)
            #rod = rendering.make_capsule(1, .2)
            #point1.set_color(.8, .3, .3)
            #self.pole_transform = rendering.Transform()
            #rod.add_attr(self.pole_transform)

            #axle = rendering.make_circle(.05)
            #axle.set_color(0, 0, 0)
            #self.viewer.add_geom(axle)
            self.line1 = rendering.Line((-1, 0), (3, 0))
            self.line2 = rendering.Line((0, -4), (0, 4))
            self.viewer.add_geom(self.line1)
            self.viewer.add_geom(self.line2)
        x = self.state
        costs = 0.99 * x**5 - 5 * x**4 + 4.98 * x**3 + 5 * x**2 - 6 * x - 1
        self.point1 = rendering.make_circle(100)
        self.point1.set_color(0, 1, 1)
        self.circletrans = rendering.Transform(translation=(x, costs))
        self.point1.add_attr(self.circletrans)
        self.viewer.add_geom(self.point1)

        return self.viewer.render(return_rgb_array=mode == 'rgb_array')
Exemplo n.º 3
0
    def render(self, mode='human'):
        if self.viewer is None:
            # from gym.envs.classic_control import rendering
            self.viewer = rendering.Viewer(500, 500)
            self.viewer.set_bounds(-2.2, 2.2, -2.2, 2.2)
            rod = rendering.make_capsule(1, .2)
            rod.set_color(.8, .3, .3)
            self.pole_transform = rendering.Transform()
            rod.add_attr(self.pole_transform)
            self.viewer.add_geom(rod)
            axle = rendering.make_circle(.05)
            axle.set_color(0, 0, 0)
            self.viewer.add_geom(axle)
            fname = path.join(path.dirname(__file__), "assets/clockwise.png")
            self.img = rendering.Image(fname, 1., 1.)
            self.imgtrans = rendering.Transform()
            self.img.add_attr(self.imgtrans)

        self.viewer.add_onetime(self.img)
        theta = np.arctan2(self.x[0], self.x[1])
        self.pole_transform.set_rotation(theta + np.pi / 2)
        if self.u[0]:
            self.imgtrans.scale = (-self.u[0] / 2, np.abs(self.u[0]) / 2)

        return self.viewer.render(return_rgb_array=mode == 'rgb_array')
Exemplo n.º 4
0
 def __init__(self, pos, cd, _id):
     self.cd = cd
     self.pos = pos
     self._id = _id
     x, y = pos
     x, y = x * SCALE, y * SCALE
     self.shape = rendering.make_circle(x + OFFX, y + OFFY)
     self.set_color()
     viewer.add_geom(self.shape)
Exemplo n.º 5
0
    def render(self, mode='human'):
        if self.viewer is None:
            import rendering
            self.viewer = rendering.Viewer(500, 500)
            self.viewer.set_bounds(-2.2, 2.2, -2.2, 2.2)
            rod = rendering.make_capsule(1, .2)
            rod.set_color(.8, .3, .3)
            self.pole_transform = rendering.Transform()
            rod.add_attr(self.pole_transform)
            self.viewer.add_geom(rod)
            axle = rendering.make_circle(.05)
            axle.set_color(0, 0, 0)
            self.viewer.add_geom(axle)
        self.pole_transform.set_rotation(self.state[0])

        return self.viewer.render(return_rgb_array=mode == 'rgb_array')
Exemplo n.º 6
0
    def render(self, mode='human'):
        screen_width = 600
        screen_height = 400

        world_width = self.x_threshold * 2
        scale = screen_width / world_width
        carty = 100  # TOP OF CART
        polewidth = 10.0
        polelen = scale * 1.0
        cartwidth = 50.0
        cartheight = 30.0

        if self.viewer is None:
            import rendering
            self.viewer = rendering.Viewer(screen_width, screen_height)
            l, r, t, b = -cartwidth / 2, cartwidth / 2, cartheight / 2, -cartheight / 2
            axleoffset = cartheight / 4.0
            cart = rendering.FilledPolygon([(l, b), (l, t), (r, t), (r, b)])
            self.carttrans = rendering.Transform()
            cart.add_attr(self.carttrans)
            self.viewer.add_geom(cart)
            l, r, t, b = -polewidth / 2, polewidth / 2, polelen - polewidth / 2, -polewidth / 2
            pole = rendering.FilledPolygon([(l, b), (l, t), (r, t), (r, b)])
            pole.set_color(.8, .6, .4)
            self.poletrans = rendering.Transform(translation=(0, axleoffset))
            pole.add_attr(self.poletrans)
            pole.add_attr(self.carttrans)
            self.viewer.add_geom(pole)
            self.axle = rendering.make_circle(polewidth / 2)
            self.axle.add_attr(self.poletrans)
            self.axle.add_attr(self.carttrans)
            self.axle.set_color(.5, .5, .8)
            self.viewer.add_geom(self.axle)
            self.track = rendering.Line((0, carty), (screen_width, carty))
            self.track.set_color(0, 0, 0)
            self.viewer.add_geom(self.track)

        if self.state is None: return None

        x = self.state
        cartx = x[0] * scale + screen_width / 2.0  # MIDDLE OF CART
        self.carttrans.set_translation(cartx, carty)
        self.poletrans.set_rotation(-x[2])

        return self.viewer.render(return_rgb_array=mode == 'rgb_array')
Exemplo n.º 7
0
 def __init__(self, pos, tlx, _id, nears):
     self.tlx = tlx  # Target lx of the desk
     self.pos = pos
     self._id = _id
     self.nears = nears
     self.err = 0
     x, y = pos
     x, y = x * SCALE, y * SCALE
     lx, rx = x - Desk.Ws / 2 + OFFX, x + Desk.Ws / 2 + OFFX
     by, ty = y - Desk.Hs / 2 + OFFY, y + Desk.Hs / 2 + OFFY
     self.shape = rendering.FilledPolygon([(lx, by), (lx, ty), (rx, ty),
                                           (rx, by)])
     self.center = rendering.make_circle(x + OFFX,
                                         y + OFFY,
                                         radius=Desk.Hs / 4)
     self.set_shape_color()
     self.set_center_color(self.tlx)
     viewer.add_geom(self.shape)
     viewer.add_geom(self.center)
     viewer.draw_polyline([(lx, by), (lx, ty), (rx, ty), (rx, by)])
    def render(self, mode="human"):

        if self.viewer is None:
            import rendering
            self.viewer = rendering.Viewer(700, 700)

        # create rendering geometry
        if self.render_geoms is None or self.rebuild_geoms:
            import rendering
            self.viewer.clear_geoms()
            # import rendering only if we need it (and don't import for headless machines)
            # from gym.envs.classic_control import rendering
            self.render_geoms = []
            self.render_geoms_xform = []

            for entity in self.get_entities():
                geom = rendering.make_circle(entity.get_size())
                xform = rendering.Transform()
                geom.set_color(*entity.get_color(), alpha=0.5)
                geom.add_attr(xform)
                self.render_geoms.append(geom)
                self.render_geoms_xform.append(xform)

            # add geoms to viewer
            for geom in self.render_geoms:
                self.viewer.add_geom(geom)

        results = []
        # update bounds to center around agent
        cam_range = 1
        pos = np.zeros(2)
        self.viewer.set_bounds(pos[0] - cam_range, pos[0] + cam_range, pos[1] - cam_range, pos[1] + cam_range)
        # update geometry positions
        for a, entity in enumerate(self.get_entities()):
            self.render_geoms_xform[a].set_translation(*entity.get_pos())

        # render to display or array
        results.append(self.viewer.render(return_rgb_array=mode == 'rgb_array'))

        return results
    def render(self, mode='human'):
        l = self.l
        if self.viewer is None:
            
            self.viewer = rendering.Viewer(720,720)
            a = 1.8
            self.viewer.set_bounds(-(l*a),l*a,-(l*a),l*a)

            rod = rendering.make_capsule(l, l/15.2)
            rod.set_color(.04, .39, .12)
            self.pole_transform = rendering.Transform()
            rod.add_attr(self.pole_transform)
            self.viewer.add_geom(rod)

            axle = rendering.make_circle(.02)
            axle.set_color(0,0,0)
            self.viewer.add_geom(axle)

            flywheel_diameter = self.flywheel_diameter
            flywheel_rim = rendering.make_circle(flywheel_diameter/2,filled=False)
            flywheel_rim.set_linewidth(7)
            flywheel_rim.set_color(0.5,0.5,0.5)
            self.flywheel_rim_transform = rendering.Transform()
            flywheel_rim.add_attr(self.flywheel_rim_transform)
            self.viewer.add_geom(flywheel_rim)

            flywheel_cross = rendering.make_cross(flywheel_diameter,l/20)
            flywheel_cross.set_color(0.5,0.5,0.5)
            self.flywheel_cross_transform = rendering.Transform()
            flywheel_cross.add_attr(self.flywheel_cross_transform)
            self.viewer.add_geom(flywheel_cross)

            fname = path.join(path.dirname(__file__), "assets/clockwise.png")
            self.img = rendering.Image(fname, .3, .3)
            self.imgtrans = rendering.Transform()
            self.img.add_attr(self.imgtrans)

            fname = path.join(path.dirname(__file__), "assets/gears.png")
            self.sprocket = rendering.Image(fname, 1, 1)
            self.sprocket_trans = rendering.Transform()
            self.sprocket.add_attr(self.sprocket_trans)
            self.viewer.add_geom(self.sprocket)
            self.sprocket_trans.scale = (self.flywheel_diameter/1.6,self.flywheel_diameter/1.8)

            # uncomment if you want to have an axle at the opposite end of the rod
            # need to comment out equal lines above
            #flywheel = rendering.make_circle(0.85,filled=False)
            #flywheel.set_linewidth(5)
            #flywheel.set_color(0.5,0.5,0.5)
            #self.flywheel_transform = rendering.Transform()
            #flywheel.add_attr(self.flywheel_transform)
            #self.viewer.add_geom(flywheel)             

        self.viewer.add_onetime(self.img)

        theta = self.state[0] + np.pi/2
        self.pole_transform.set_rotation(theta)

        sprocket_theta_offset = np.pi / 180
        sprocket_length_offset = 0.05
        self.sprocket_trans.set_translation((l+sprocket_length_offset) * np.cos(theta - sprocket_theta_offset+0.012), 
                                            (l+sprocket_length_offset) * np.sin(theta - sprocket_theta_offset))
        self.sprocket_trans.set_rotation(theta + np.pi * (2.795))
        
        flywheel_offset = 0
        self.flywheel_rim_transform.set_translation(l * np.cos(theta - flywheel_offset), l * np.sin(theta - flywheel_offset))
        self.flywheel_rim_transform.set_rotation(theta + np.pi/4)

        self.flywheel_cross_transform.set_translation(l * np.cos(theta - flywheel_offset), l * np.sin(theta - flywheel_offset))
        self.flywheel_cross_transform.set_rotation(theta + self.rotation_add)


        img_offset = np.pi / 180
        img_length_offset = 0.15
        self.imgtrans.translation = ((l+img_length_offset) * np.cos(theta - img_offset+0.02), (l+img_length_offset) * np.sin(theta - img_offset))
        
        if self.last_u:
            self.imgtrans.scale = (-self.last_u/(self.max_torque/2), np.abs(self.last_u)/(self.max_torque/2))

        return self.viewer.render(return_rgb_array = mode=='rgb_array')
Exemplo n.º 10
0
    def render(self, mode='human', close=False):
        scale = 6

        screen_width = scale * self.width
        screen_height = scale * self.height

        if self.viewer is None:
            #TODO: remove when it works
            import importlib
            import rendering
            importlib.reload(rendering)

            self.viewer = rendering.Viewer(screen_width, screen_height)

            self.cases = []
            for i in range(self.height):
                self.cases.append([])
                for j in range(self.width):
                    x0 = i * scale
                    y0 = j * scale
                    x1 = (i + 1) * scale
                    y1 = (j + 1) * scale
                    case = rendering.FilledPolygon([(y0, x0), (y0, x1),
                                                    (y1, x1), (y1, x0)])
                    self.cases[i].append(case)
                    self.viewer.add_geom(case)

            circle = rendering.make_circle(radius=self.roomba.radius * scale)
            circle.set_color(1, 0, 0)
            self.circle = circle
            direction_circle = rendering.make_circle(
                radius=self.roomba.radius * scale / 2)  #color?
            direction_circle.add_attr(
                rendering.Transform(translation=(self.roomba.radius * scale /
                                                 2, 0)))

            tracker = rendering.Compound([circle, direction_circle])

            self.tracker_trans = rendering.Transform()
            tracker.add_attr(self.tracker_trans)
            self.viewer.add_geom(tracker)

        for i in range(self.height):
            for j in range(self.width):
                if self.room[i, j] == 0:
                    self.cases[i][j].set_color(1, 1, 1)
                elif self.room[i, j] == 1:
                    self.cases[i][j].set_color(
                        1 - 0.5 * min(1, self.dirty[i, j]),
                        1 - 0.5 * min(1, self.dirty[i, j]),
                        1 - 0.5 * min(1, self.dirty[i, j]))
                elif self.room[i, j] == 2:
                    self.cases[i][j].set_color(0, 0, 0)
                elif self.room[i, j] == 3:
                    self.cases[i][j].set_color(0.5, 0.5, 0)

        self.tracker_trans.set_translation(self.roomba.pos[1] * scale,
                                           self.roomba.pos[0] * scale)
        self.tracker_trans.set_rotation(self.roomba.direction)
        self.circle.set_color(self.roomba.get_life(), 0, 0)

        return self.viewer.render(return_rgb_array=mode == 'rgb_array')
Exemplo n.º 11
0
import rendering

roomw, roomh = 600, 400
scale = roomw / 5400
offx, offy = 100, 50
viewer = rendering.Viewer(roomw + 2 * offx, roomh + 2 * offy)

def int_scale(x):
    return int(x * scale)

for x in range(0, roomw + 1, int_scale(1800)):
    for y in range(0, roomh + 1, int_scale(1800)):
        light = rendering.make_circle(x + offx, y + offy)
        light.set_color(1,.8,0)
        viewer.add_geom(light)


for _ in range(1000):
    viewer.render()
Exemplo n.º 12
0
 def __init__(self, cx, cy, col=(0, 1, 0), rad=10):
     self.start = (cx, cy)
     self.end = (cx + rad, cy)
     self.rad = rad
     self.shape = rendering.make_circle(cx, cy, radius=rad)
     self.shape.set_color(*col)