コード例 #1
0
    def render(self, mode='human'):
        screen_width = 600
        screen_height = 600

        world_width = 10.0
        world_height = 10.0
        xscale = screen_width / world_width
        yscale = screen_height / world_height
        robotwidth = 0.25
        robotheight = 0.25

        if self.viewer is None:
            self.viewer = rendering.Viewer(screen_width, screen_height)
            xy = [(0.0, 0.0), (0.0, 10.0), (10.0, 10.0), (10.0, 0.0)]
            xys = [(x * xscale, y * yscale) for x, y in xy]
            self.surface = rendering.make_polyline(xys)
            self.surface.set_linewidth(4)
            self.viewer.add_geom(self.surface)

            l, r, t, b = -robotwidth / 2, robotwidth / 2, robotheight / 2, -robotheight / 2
            self.robot = rendering.FilledPolygon([(l, b), (l, t), (r, t),
                                                  (r, b)])
            self.robot.set_color(0.0, 0.0, 0.8)
            self.robot.add_attr(rendering.Transform(translation=(0, 0)))
            self.robot_trans = rendering.Transform()
            self.robot.add_attr(self.robot_trans)
            self.viewer.add_geom(self.robot)

            l = self.G[0][0, 0] * xscale
            b = self.G[0][1, 0] * yscale
            r = self.G[1][0, 0] * xscale
            t = self.G[1][1, 0] * yscale
            self.goal_area = rendering.FilledPolygon([(l, b), (l, t), (r, t),
                                                      (r, b)])
            self.goal_area.set_color(0.8, 0.0, 0.0)
            self.viewer.add_geom(self.goal_area)

        self._trajectory.append(
            (self.state[0] * xscale, self.state[1] * yscale))
        if len(self._trajectory) >= 2:
            move = rendering.Line(start=self._trajectory[-2],
                                  end=self._trajectory[-1])
            # orange: rgb(244, 215, 66)
            move.set_color(244.0 / 255.0, 215.0 / 255.0, 66.0 / 255.0)
            move.add_attr(rendering.LineStyle(0xAAAA))
            move.add_attr(rendering.LineWidth(4))
            self.viewer.add_geom(move)

        self.robot_trans.set_translation(self.state[0] * xscale,
                                         self.state[1] * yscale)
        self.robot_trans.set_rotation(np.arctan2(self.state[3], self.state[2]))
        self.robot_trans.set_scale(xscale, yscale)

        return self.viewer.render(return_rgb_array=mode == 'rgb_array')
コード例 #2
0
    def _render_agent_vision(self):
        '''rendering style to display what the agent 'sees' displaying only vertices and vectors'''

        from gym.envs.classic_control import rendering

        a_cp_dim = 0.03
        v_dim = 0.015
        bx, by = 0, 0
        thin_line = 2 * 2
        thick_line = 5 * 2
        white = (1., 1., 1.)
        dark_grey = (0.2, 0.2, 0.2)
        dash = rendering.LineStyle(style=True)

        # DRAW FINAL POINTS
        for f_loc in self.block_final_pos.values():
            fx, fy = self.scale_units(f_loc)
            t = rendering.Transform(translation=(fx, fy))
            self.viewer.draw_circle(v_dim, 100, color=white).add_attr(t)
            self.viewer.draw_circle(self.scaled_epsilon / RATIO,
                                    30,
                                    color=dark_grey,
                                    linewidth=thick_line,
                                    filled=False).add_attr(t)

        # DRAW OBJECTS
        for obj in self.drawlist:
            # DRAW agent cp, pointer, distance btwn agent and block
            if 'agent' in obj.userData:
                x, y = obj.position
                t = rendering.Transform(translation=(x, y))
                self.viewer.draw_circle(a_cp_dim, 30, color=white).add_attr(t)
                vx, vy = obj.GetWorldVector(localVector=(0, 0.1))
                self.viewer.draw_polyline([(x, y), (x + vx, y + vy)],
                                          color=white,
                                          linewidth=thin_line)
                if by != 0 and bx != 0:
                    self.viewer.draw_polyline(
                        [(x, y), (bx, by)], color=white,
                        linewidth=thin_line).add_attr(dash)

            # DRAW block cp, distance btwn block and goal, vertices
            if 'block' in obj.userData:
                bx, by = obj.worldCenter
                t = rendering.Transform(translation=(bx, by))
                self.viewer.draw_circle(v_dim, 30, color=cp_color).add_attr(t)
                self.viewer.draw_polyline([(bx, by), (fx, fy)],
                                          color=white,
                                          linewidth=thin_line).add_attr(dash)
                for v in self.blks_vertices[obj.userData]:
                    x, y = obj.GetWorldPoint(v)
                    t = rendering.Transform(translation=(x, y))
                    self.viewer.draw_circle(v_dim, 30,
                                            color=cp_color).add_attr(t)
コード例 #3
0
    def render(self, mode='human'):
        screen_width = 600
        screen_height = 600

        world_width = self.observation_space.high[0] + 2
        world_height = self.observation_space.high[0] + 2
        xscale = screen_width / world_width
        yscale = screen_height / world_height
        robotwidth = 0.5
        robotheight = 0.5
        goalwidth = 0.5
        goalheight = 0.5

        if self.viewer is None:
            self.viewer = rendering.Viewer(screen_width, screen_height)
            #Grid
            for heightX in range(int(self.observation_space.high[0] + 1)):
                heightX = float(heightX)
                for widthX in range(int(self.observation_space.high[0] + 1)):
                    widthX = float(widthX)
                    xy = [(0.5 + widthX, 0.5 + heightX),
                          (0.5 + widthX,
                           self.observation_space.high[0] + 1.5 - heightX),
                          (self.observation_space.high[0] + 1.5 - widthX,
                           self.observation_space.high[0] + 1.5 - heightX),
                          (self.observation_space.high[0] - widthX + 1.5,
                           0.5 + heightX)]
                    xys = [(x * xscale, y * yscale) for x, y in xy]
                    self.surface = rendering.make_polyline(xys)
                    self.surface.set_linewidth(1)
                    self.viewer.add_geom(self.surface)

            xy = [(0.5, 0.5), (0.5, self.observation_space.high[0] + 1.5),
                  (self.observation_space.high[0] + 1.5,
                   self.observation_space.high[0] + 1.5),
                  (self.observation_space.high[0] + 1.5, 0.5)]
            xys = [(x * xscale, y * yscale) for x, y in xy]
            self.surface = rendering.make_polyline(xys)
            self.surface.set_linewidth(4)
            self.viewer.add_geom(self.surface)

            xy = [(0.5, 0.5), (self.observation_space.high[0] + 1.5, 0.5)]
            xys = [(x * xscale, y * yscale) for x, y in xy]
            self.surface = rendering.make_polyline(xys)
            self.surface.set_linewidth(4)
            self.viewer.add_geom(self.surface)

            self.obstacle_area = []
            self.obstacle_trans = []
            for k in range(len(self.obstacles)):
                l, r, t, b = -goalwidth, goalwidth, goalheight, -goalheight
                self.obstacle_area.append(
                    rendering.FilledPolygon([(l, b), (l, t), (r, t), (r, b)]))
                self.obstacle_area[k].set_color(0.0, 0.8, 0.0)
                self.obstacle_area[k].add_attr(
                    rendering.Transform(translation=(0, 0)))
                self.obstacle_trans.append(rendering.Transform())
                self.obstacle_area[k].add_attr(self.obstacle_trans[k])
                self.viewer.add_geom(self.obstacle_area[k])

            self.goal_area = []
            self.goal_trans = []
            for k in range(len(self.terminals)):
                l, r, t, b = -goalwidth, goalwidth, goalheight, -goalheight
                self.goal_area.append(
                    rendering.FilledPolygon([(l, b), (l, t), (r, t), (r, b)]))
                self.goal_area[k].set_color(0.8, 0.0, 0.0)
                self.goal_area[k].add_attr(
                    rendering.Transform(translation=(0, 0)))
                self.goal_trans.append(rendering.Transform())
                self.goal_area[k].add_attr(self.goal_trans[k])
                self.viewer.add_geom(self.goal_area[k])

            l, r, t, b = -robotwidth, robotwidth, robotheight, -robotheight
            self.robot = rendering.FilledPolygon([(l, b), (l, t), (r, t),
                                                  (r, b)])
            self.robot.set_color(0.0, 0.0, 0.8)
            self.robot.add_attr(rendering.Transform(translation=(0, 0)))
            self.robot_trans = rendering.Transform()
            self.robot.add_attr(self.robot_trans)
            self.viewer.add_geom(self.robot)

        self._trajectory.append(
            ((self.state[0] + 1) * xscale, (self.state[1] + 1) * yscale))
        for k in range(len(self.obstacles)):
            self.obstacle_trans[k].set_translation(
                (self.obstacles[k][0] + 1) * xscale,
                (self.obstacles[k][1] + 1) * yscale)
            self.obstacle_trans[k].set_scale(xscale, yscale)

        for k in range(len(self.terminals)):
            self.goal_trans[k].set_translation(
                (self.terminals[k][0] + 1) * xscale,
                (self.terminals[k][1] + 1) * yscale)
            self.goal_trans[k].set_scale(xscale, yscale)

        if len(self._trajectory) >= 2:
            move = rendering.Line(start=self._trajectory[-2],
                                  end=self._trajectory[-1])
            # orange: rgb(244, 215, 66)
            move.set_color(244.0 / 255.0, 215.0 / 255.0, 66.0 / 255.0)
            move.add_attr(rendering.LineStyle(0xAAAA))
            move.add_attr(rendering.LineWidth(4))
            self.viewer.add_geom(move)

        self.robot_trans.set_translation((self.state[0] + 1) * xscale,
                                         (self.state[1] + 1) * yscale)
        self.robot_trans.set_scale(xscale, yscale)

        return self.viewer.render(return_rgb_array=mode == 'rgb_array')