Exemplo n.º 1
0
    def __init__(self,
                 pose=TransformStamped(
                     header=Header(frame_id='panda_link8'),
                     child_frame_id='target',
                     transform=Transform(rotation=Quaternion(
                         *tf.quaternion_about_axis(numpy.pi / 4, [0, 0, 1])),
                                         translation=Vector3(0, 0, 0.105)))):

        self.robot = RobotModel()
        self.robot._add(Joint(pose))  # add a fixed end-effector transform
        self.pub = rospy.Publisher('/target_joint_states',
                                   JointState,
                                   queue_size=10)
        self.joint_msg = JointState()
        self.joint_msg.name = [j.name for j in self.robot.active_joints]
        self.joint_msg.position = numpy.asarray([
            (j.min + j.max) / 2 + 0.1 * (j.max - j.min) * random.uniform(0, 1)
            for j in self.robot.active_joints
        ])
        self.target_link = pose.child_frame_id
        self.T, self.J = self.robot.fk(
            self.target_link,
            dict(zip(self.joint_msg.name, self.joint_msg.position)))

        self.im_server = MyInteractiveMarkerServer("controller", self.T)
Exemplo n.º 2
0
    def __init__(self, hip_height, torso_angle, lift_off_slope, step_height,
                 step_length, put_down_slope):
        self.hip_height = hip_height
        self.torso_angle = torso_angle
        self.lift_off_slope = lift_off_slope
        self.step_height = step_height
        self.step_length = step_length
        self.put_down_slope = put_down_slope

        self.upper_limp_part = UpperLimbWhileWalking(torso_angle, hip_height)
        self.hip_offset = self.upper_limp_part.hip_offset

        self.painter = Painter()
        self.robot_model = RobotModel(self.painter)
def draw_robot_with_center_of_mass(robot_name=None, read_state_string=None):

    assert robot_name is not None or read_state_string is not None

    if read_state_string is None:
        read_state_string = RealRobotClient().read_state()
    assert 'nan' not in read_state_string

    angles = ReadStateParser(read_state_string).get_all_joint_radians()

    painter = Painter(azimuth=0, elevation=0)
    robot_model = RobotModel(painter)

    center_of_mass = compute_center_of_mass_from_read_state_string(angles, painter, robot_model,\
                           draw_robot=True, draw_center_of_mass=True)

    # robot_model.draw_coordinates()  # draw coordinates lastly because we want them on top layer
    robot_model.show()
def forward_kinematics(robot_name=None, read_state_string=None):

    assert robot_name is not None or read_state_string is not None

    if read_state_string is None:
        read_state_string = RealRobotClient().read_state()
    assert 'nan' not in read_state_string

    r = RobotModel(Painter())

    angles = ReadStateParser(read_state_string).get_all_joint_radians()

    r.draw_neck_and_head(neck_transversal_radians=angles['neck_transversal'],
                         neck_lateral_radians=angles['neck_lateral'])
    r.draw_left_arm(
        left_shoulder_lateral_radians=angles['left_shoulder_lateral'],
        left_shoulder_frontal_radians=angles['left_shoulder_frontal'],
        left_elbow_lateral_radians=angles['left_elbow_lateral'])
    r.draw_right_arm(
        right_shoulder_lateral_radians=angles['right_shoulder_lateral'],
        right_shoulder_frontal_radians=angles['right_shoulder_frontal'],
        right_elbow_lateral_radians=angles['right_elbow_lateral'])
    r.draw_left_lower_limp(
        left_hip_transversal_radians=angles['left_hip_transversal'],
        left_hip_frontal_radians=angles['left_hip_frontal'],
        left_hip_lateral_radians=angles['left_hip_lateral'],
        left_knee_lateral_radians=angles['left_knee_lateral'],
        left_ankle_lateral_radians=angles['left_ankle_lateral'],
        left_ankle_frontal_radians=angles['left_ankle_frontal'])
    r.draw_right_lower_limp(
        right_hip_transversal_radians=angles['right_hip_transversal'],
        right_hip_frontal_radians=angles['right_hip_frontal'],
        right_hip_lateral_radians=angles['right_hip_lateral'],
        right_knee_lateral_radians=angles['right_knee_lateral'],
        right_ankle_lateral_radians=angles['right_ankle_lateral'],
        right_ankle_frontal_radians=angles['right_ankle_frontal'])

    r.draw_torso()
    r.draw_coordinates(
    )  # draw coordinates lastly because we want them on top layer
    r.show()
from util.painter import Painter
from robot_model import RobotModel
from joint.joint_angle import *

r = RobotModel(Painter())

r.draw_neck_and_head()
r.draw_left_arm()
# r.draw_left_arm(radians(-30), radians(60), radians(-30))
# r._painter.draw_point(r.draw_left_arm(radians(0), radians(-60), radians(0), color='b-')[-1])
r.draw_right_arm()
# r.draw_right_arm(radians(0), radians(30), radians(160), color='b-')
# r._painter.draw_point(r.draw_right_arm(radians(0), radians(60), radians(0), color='b-')[-1])

# r.draw_left_lower_limp()
# r.draw_right_lower_limp(right_knee_lateral_radians=radians(150))

r.draw_left_lower_limp(
    # LeftHipTransversal().outward(0).radians,
    radians(-0),
    LeftHipFrontal().outward(0).angle,
    LeftHipLateral().forward(0).radians,
    LeftKneeLateral().backward(0).radians,
    # radians(150),
    LeftAnkleLateral().forward(0).radians,
    LeftAnkleFrontal().outward(-0).radians)

r.draw_right_lower_limp(
    RightHipTransversal().inward(0).radians,
    # radians(-0),
    RightHipFrontal().outward(0).angle,
              length * math.cos(yaw),
              length * math.sin(yaw),
              head_length=width,
              head_width=width)
    plt.plot(x, y)


from robot_model import RobotModel

if __name__ == '__main__':
    gx = 10.0
    gy = 12.0
    print(__file__ + " start!!")
    # initial state [x(m), y(m), yaw(rad), v(m/s), omega(rad/s)]
    # x = np.array([0.0, 0.0, math.pi / 8.0, 0.0, 0.0])
    motionModel = RobotModel(2, 0, math.pi / 3 * 2, 0.7, math.pi / 3 * 5, 0.0,
                             0.0, math.pi / 8.0, 0.0, 0.0)
    x = motionModel.state
    # goal position [x(m), y(m)]
    target_model = RobotModel(2, 0, math.pi / 3 * 2, 0.7, math.pi / 3 * 5, gx,
                              gy, -math.pi / 2.0, 0.0, 0.0)
    goal = target_model.state[:2]
    # obstacles [x(m) y(m), ....]
    ob = np.array([[-1, -1], [0, 2], [4.0, 2.0], [5.0, 4.0], [5.0, 5.0],
                   [5.0, 6.0], [5.0, 9.0], [8.0, 9.0], [7.0, 9.0],
                   [12.0, 12.0], [4.0, 12.0], [3.5, 15.8], [12.1, 17.0],
                   [7.16, 14.6], [8.6, 13.0]])

    u = np.array([0.0, 0.0])
    config = ConfigDWA(2, 0, math.pi / 3 * 2, 0.7, math.pi / 3 * 5)

    traj = np.array(x)
Exemplo n.º 7
0
import time
from math import *
import numpy as np
from a_star_planner import AStarPlanner
from robot_model import RobotModel
import matplotlib.image as mpimg
from grid_map import GridMap

rospy.init_node('test_a_star_planner', anonymous=True)

vehicle_config = yaml.load(
    open('/home/kai/catkin_ws/src/drproj/vehicle_config.yaml'))
half_length = 0.5 * vehicle_config['length']
half_width = 0.5 * vehicle_config['width']
radius = sqrt(half_length**2 + half_width**2)
robot_model = RobotModel(radius)
global_planner = AStarPlanner(robot_model)

free = mpimg.imread('/home/kai/catkin_ws/src/drproj/free.png')
global_map_config = yaml.load(open('/home/kai/catkin_ws/src/drproj/free.yaml'))
global_map = GridMap(free, global_map_config['resolution'])
global_map.show('rviz_global_grid_map')
global_map.print()

global_mission = yaml.load(
    open('/home/kai/catkin_ws/src/drproj/global_mission.yaml'))
start_grid_x = int(global_mission['start'][0] / global_map.resolution + 0.5)
start_grid_y = int(global_mission['start'][1] / global_map.resolution + 0.5)
goal_grid_x = int(global_mission['goal'][0] / global_map.resolution + 0.5)
goal_grid_y = int(global_mission['goal'][1] / global_map.resolution + 0.5)
start = (start_grid_x, start_grid_y)
Exemplo n.º 8
0
import matplotlib.image as mpimg
from grid_map import GridMap
from robot_model import RobotModel

dr = mpimg.imread('/home/kai/Pictures/dr.png')

global_grid_map = GridMap(dr, 1.0)
global_grid_map.print()

robot_model = RobotModel(2.0)
controls = robot_model.get_controls((639, 200), global_grid_map)
print(controls)
Exemplo n.º 9
0
 def setUp(self):
     self.painter = Painter()
     self.r = RobotModel(Painter())
from util.painter import Painter
from util.point import Point
from robot_model import RobotModel
from robot_spec.position_data import *
from inverse_kinematics.arm import InverseKinematicsArm
from inverse_kinematics.lower_limp import InverseKinematicsLeg
from inverse_kinematics.head import move_head
from robot_client_server.robot_clients import RealRobotClient
from joint import *

painter = Painter(azimuth=0, elevation=50)

r = RobotModel(painter)


def inverse_kinematics(head_target_position, l_arm_target_position,
                       r_arm_target_position, l_leg_target_position,
                       l_hip_transversal_radians, r_leg_target_position,
                       r_hip_transversal_radians, do_actuate):

    # move kinematic chains
    neck_transversal_radians, neck_lateral_radians\
        = move_head(head_target_position, painter)
    l_shoulder_lateral_radians, l_shoulder_frontal_radians, l_elbow_lateral_radians\
        = InverseKinematicsArm(l_arm_target_position, r, painter, is_left=True).get_angles()
    r_shoulder_lateral_radians, r_shoulder_frontal_radians, r_elbow_lateral_radians\
        = InverseKinematicsArm(r_arm_target_position, r, painter, is_left=False).get_angles()
    l_hip_frontal_radians, l_hip_lateral_radians, l_knee_lateral_radians, l_ankle_lateral_radians, l_ankle_frontal_radians\
        = InverseKinematicsLeg(is_left=True, l_hip_transversal_radians, l_leg_target_position, r, painter).get_angles()
    r_hip_frontal_radians, r_hip_lateral_radians, r_knee_lateral_radians, r_ankle_lateral_radians, r_ankle_frontal_radians\
        = InverseKinematicsLeg(is_left=False, r_hip_transversal_radians, r_leg_target_position, r, painter).get_angles()
Exemplo n.º 11
0
    def __init__(self):
        self.max_v = MAX_V
        self.min_v = MIN_V
        self.max_w = MAX_W
        self.max_acc_v = 0.7
        self.max_acc_w = pi / 3.0 * 5
        self.init_x = 0.0
        self.init_y = 6.0
        self.init_yaw = pi / 8.0
        self.robot_radius = 0.3
        self.ob_radius = 0.3
        self.target_radius = 0.3
        self.dt = 0.1

        self.target_init_x = 10
        self.target_init_y = 4
        self.target_init_yaw = pi / 2.0
        self.target_u = None

        self.pursuitor_model = RobotModel(self.max_v, self.min_v, self.max_w,
                                          self.max_acc_v, self.max_acc_w,
                                          self.init_x, self.init_y,
                                          self.init_yaw)

        self.evader_model = RobotModel(self.max_v, self.min_v, self.max_w,
                                       self.max_acc_v, self.max_acc_w,
                                       self.target_init_x, self.target_init_y,
                                       self.target_init_yaw)

        self.config_dwa = ConfigDWA(self.max_v,
                                    self.min_v,
                                    self.max_w,
                                    self.max_acc_v,
                                    self.max_acc_w,
                                    robot_raduis=self.robot_radius,
                                    obstacle_radius=self.ob_radius,
                                    dt=self.dt)

        self.confg_apf = ConfigAPF(self.max_v,
                                   self.min_v,
                                   self.max_w,
                                   self.max_acc_v,
                                   self.max_acc_w,
                                   obstacle_radius=self.ob_radius)

        self.confg_pn = ConfigPN()
        """env parameters need reset

        """
        self.ob_list = None

        # self.ob_list = None

        self.last_obs = None
        self.last_pur_state = None
        self.last_tar_state = None
        # trajectory
        self.traj = np.array(self.get_state())

        # state done
        self.collision = False
        self.catch = False

        # actions

        # self.v_reso = 0.1
        # self.w_reso = pi/18.0
        #
        #
        # self.action_table = []
        # for v in np.arange(self.min_v, self.max_v+self.v_reso, self.v_reso):
        #     for w in np.arange(-self.max_w, self.max_w+self.w_reso, self.w_reso):
        #         self.action_table.append(np.array([v, w]))

        # self.action_num = len(self.action_table)
        self.action_num = 2
        self.action_space = spaces.Box(np.array([-1]), np.array(
            [+1]))  # v accelerate, w accelerate

        # observations = laser, goal_angle, goal_distance
        self.percept_region = np.array([-4, 4, -2,
                                        6])  # left, right, behind, ahead
        self.basic_sample_reso = 0.1  # sampling resolution of percept region
        self.sample_reso_scale = 1.5  # sampling density increases with distance from

        def cal_samples(sample_length, basic_sample_reso, sample_reso_scale):
            # get sample number
            # x = sympy.Symbol('x')
            # result_dict = sympy.solve(
            #     [basic_sample_reso * (1 - sample_reso_scale ** x) / (1 - sample_reso_scale)
            #      - abs(sample_length)], [x])
            # print(result_dict)
            a = math.log(sample_length / basic_sample_reso *
                         (sample_reso_scale - 1) + 1)
            b = math.log(sample_reso_scale)
            # print(str(a)+", "+str(b))
            x = a / b
            return int(x)

        left_samples = right_samples = cal_samples(abs(self.percept_region[0]),
                                                   self.basic_sample_reso,
                                                   self.sample_reso_scale)
        behind_samples = cal_samples(abs(self.percept_region[2]),
                                     self.basic_sample_reso,
                                     self.sample_reso_scale)
        ahead_samples = cal_samples(abs(self.percept_region[3]),
                                    self.basic_sample_reso,
                                    self.sample_reso_scale)

        self.sample_map_center = np.array(
            [left_samples - 1, behind_samples - 1])
        self.sample_map_width = left_samples + right_samples - 1
        self.sample_map_height = behind_samples + ahead_samples - 1
        self.percept_sample_map = []

        for i in range(self.sample_map_width):
            tmp_list_y = []
            for j in range(self.sample_map_height):
                x = self.basic_sample_reso * (1 - self.sample_reso_scale ** abs(i - self.sample_map_center[0])) \
                    / (1 - self.sample_reso_scale)
                x = x if i - self.sample_map_center[0] >= 0 else -x
                y = self.basic_sample_reso * (1 - self.sample_reso_scale ** abs(j - self.sample_map_center[1])) \
                    / (1 - self.sample_reso_scale)
                y = y if j - self.sample_map_center[1] >= 0 else -y
                tmp_list_y.append(np.array([x, y]))
            self.percept_sample_map.append(tmp_list_y)

        # self.obs_num = self.pursuitor_model.laser_num + 2
        # high = np.hstack((np.zeros(self.pursuitor_model.laser_num)+self.pursuitor_model.laser_max_range, pi, 50))
        # low = np.hstack((np.zeros(self.pursuitor_model.laser_num), -pi, 0))
        # self.observation_space = spaces.Box(low, high, dtype=np.float)

        self.obs_num = 2 + 2
        self.observation_space = spaces.Box(-np.inf,
                                            np.inf,
                                            shape=(self.obs_num, ),
                                            dtype=float)
        # seed
        self.np_random = None
        self.seed()

        # time limit
        self.limit_step = 300
        self.count = 0

        self.action_plot = 0

        # record
        self.pursuit_strategy = None
        self.traj_pursuitor = None
        self.traj_evader = None

        # intelligent evasion mode
        self.evasion_mode = False
        self.config_evasion = ConfigDWA(self.max_v * 0.9,
                                        self.min_v,
                                        self.max_w,
                                        self.max_acc_v,
                                        self.max_acc_w,
                                        robot_raduis=self.robot_radius,
                                        obstacle_radius=self.ob_radius,
                                        dt=self.dt)
        self.evasion_route = None
        self.evasion_route_index = None
Exemplo n.º 12
0
__author__ = 'zhao'
from inverse_kinematics.lower_limp import InverseKinematicsLeg
from util.painter import Painter
from util.point import Point
from robot_model import RobotModel

is_left = False
# target_position = Point((-8.0, 7.25, -44.699999999999989))
target_position = Point((-8.0, 7.25, -44.7))

painter = Painter()
robot_model = RobotModel(painter)

r_hip_transversal_radians = 0
r_hip_frontal_radians, r_hip_lateral_radians, r_knee_lateral_radians, r_ankle_lateral_radians, r_ankle_frontal_radians\
    = InverseKinematicsLeg(is_left=is_left, hip_transversal_radians=r_hip_transversal_radians, target_position=target_position, robot_model=robot_model, painter=painter).get_angles()
# r_hip_frontal_radians, r_hip_lateral_radians, r_knee_lateral_radians, r_ankle_lateral_radians, r_ankle_frontal_radians = [0] * 5
# painter.draw_point(target_position)

robot_model.draw_neck_and_head()
robot_model.draw_torso()
robot_model.draw_left_arm()
robot_model.draw_right_arm()
robot_model.draw_left_lower_limp()
robot_model.draw_right_lower_limp(
    right_hip_transversal_radians=r_hip_transversal_radians,
    right_hip_frontal_radians=r_hip_frontal_radians,
    right_hip_lateral_radians=r_hip_lateral_radians,
    right_knee_lateral_radians=r_knee_lateral_radians,
    right_ankle_lateral_radians=r_ankle_lateral_radians,
    right_ankle_frontal_radians=r_ankle_frontal_radians)
Exemplo n.º 13
0
    def __init__(self):
        self.max_v = 2
        self.min_v = -0.3
        self.max_w = pi / 3.0 * 2
        self.max_acc_v = 0.7
        self.max_acc_w = pi / 3.0 * 5
        self.init_x = 0.0
        self.init_y = 6.0
        self.init_yaw = pi / 8.0
        self.robot_radius = 0.3
        self.ob_radius = 0.3
        self.target_radius = 0.3
        self.dt = 0.1

        self.target_init_x = 10
        self.target_init_y = 4
        self.target_init_yaw = pi / 2.0
        self.target_u = None

        self.pursuitor_model = RobotModel(self.max_v, self.min_v, self.max_w,
                                          self.max_acc_v, self.max_acc_w,
                                          self.init_x, self.init_y,
                                          self.init_yaw)

        self.evader_model = RobotModel(self.max_v, self.min_v, self.max_w,
                                       self.max_acc_v, self.max_acc_w,
                                       self.target_init_x, self.target_init_y,
                                       self.target_init_yaw)

        self.config_dwa = ConfigDWA(self.max_v,
                                    self.min_v,
                                    self.max_w,
                                    self.max_acc_v,
                                    self.max_acc_w,
                                    robot_raduis=self.robot_radius,
                                    obstacle_radius=self.ob_radius,
                                    dt=self.dt)

        self.confg_apf = ConfigAPF(self.max_v,
                                   self.min_v,
                                   self.max_w,
                                   self.max_acc_v,
                                   self.max_acc_w,
                                   obstacle_radius=self.ob_radius)

        self.confg_pn = ConfigPN()
        """env parameters need reset

        """
        self.ob_list = np.array([[0, 2], [4.0, 2.0], [5.0, 4.0], [5.0, 6.0],
                                 [7.0, 9.0], [12.0, 12.0]])

        self.last_obs = None
        self.last_pur_state = None
        self.last_tar_state = None
        # trajectory
        self.traj = np.array(self.get_state())

        # state done
        self.collision = False
        self.catch = False

        # actions

        # self.v_reso = 0.1
        # self.w_reso = pi/18.0
        #
        #
        # self.action_table = []
        # for v in np.arange(self.min_v, self.max_v+self.v_reso, self.v_reso):
        #     for w in np.arange(-self.max_w, self.max_w+self.w_reso, self.w_reso):
        #         self.action_table.append(np.array([v, w]))

        # self.action_num = len(self.action_table)
        self.action_num = 2
        self.action_space = spaces.Discrete(self.action_num)

        # observations = image
        self.screen_height = 600  # pixel
        self.screen_width = 600  # pixel
        self.state_height = 150  # pixel
        self.state_width = 150  # pixel
        self.world_width = 20.0  # m

        self.observation_space = spaces.Box(low=0,
                                            high=255,
                                            shape=(self.state_height,
                                                   self.state_width, 3),
                                            dtype=np.uint8)
        # seed
        self.np_random = None
        self.seed()

        # time limit
        self.limit_step = 300
        self.count = 0

        self.action_plot = 0

        self.viewer = None
Exemplo n.º 14
0
def main(gx=8, gy=2):
    show_animation = True
    print(__file__ + " start!!")
    max_v = 2
    min_v = 0
    max_w = pi / 3 * 2
    max_acc_v = 0.7
    max_acc_w = pi / 3.0 * 5
    init_x = 0.0
    init_y = 6
    init_yaw = pi / 8.0
    robot_radius = 0.3
    ob_radius = 0.3
    goal_radius = 0.3

    pursuitor_model = RobotModel(max_v, min_v, max_w, max_acc_v, max_acc_w,
                                 init_x, init_y, init_yaw)

    target_model = RobotModel(max_v, min_v, max_w, max_acc_v, max_acc_w, gx,
                              gy, -pi / 2.0)

    # obstacles [x(m) y(m), ....]
    ob = np.array([[0, 2], [4.0, 2.0], [5.0, 4.0], [5.0, 6.0], [7.0, 9.0]])

    config = ConfigAPF(2, 0, math.pi / 3, 0.7, math.pi / 3)

    traj = np.array(pursuitor_model.state)
    traj_u = np.array([0, 0])

    traj_target = np.array(target_model.state)
    for i in range(2000):
        logging.info("")
        logging.info(i)
        u = apf_control(config, pursuitor_model.state, target_model.state, ob)
        traj_u = np.vstack((traj_u, u))
        print(u)
        u[1] = pursuitor_model.rot_to_angle(u[1])
        # u[0]=0
        x = pursuitor_model.motion(u, config.dt)
        traj = np.vstack((traj, x))  # store state history

        goal = target_model.motion([1.8, pi / 5], config.dt)
        traj_target = np.vstack((traj_target, goal))
        # print(traj)

        if show_animation:
            plt.cla()

            plt.plot(x[0], x[1], "xr")
            plt.plot(goal[0], goal[1], "xb")
            plt.plot(ob[:, 0], ob[:, 1], "ok")
            plot_arrow(x[0], x[1], x[2])
            plt.axis("equal")
            plt.grid(True)
            plt.pause(0.0001)

        # check goal
        if math.sqrt((x[0] - goal[0])**2 +
                     (x[1] - goal[1])**2) <= (pursuitor_model.robot_radius +
                                              target_model.robot_radius):
            print("Goal!!")
            break

        # check collision
        collision = False
        for obstacle in ob:
            if math.sqrt((x[0] - obstacle[0])**2 +
                         (x[1] - obstacle[1])**2) <= (
                             pursuitor_model.robot_radius +
                             config.obstacle_radius):
                collision = True
        if collision:
            print("Collision!")
            break

    prefix = "apf_flaw/4_"
    np.save(prefix + "traj.npy", traj)
    np.save(prefix + "traj_target.npy", traj_target)
    np.save(prefix + "traj_u.npy", traj_u)
    print("Done")
    if show_animation:
        plt.plot(traj[:, 0], traj[:, 1], "-r")
        plt.plot(traj_target[:, 0], traj_target[:, 1], "-g")

    fig = plt.gcf()
    # fig.set_size_inches(6,6)
    plt.xlabel('X(m)')
    plt.ylabel('Y(m)')
    # plt.axis("auto")

    plt.tight_layout()
    print(plt.xlim((-1.488585497312541, 14.14373130420207)))
    print(plt.ylim((0.4404926013282211, 12.089089959876205)))

    plt.figure()
    plt.plot(np.arange(0, len(traj)) * config.dt,
             traj_u[:, 1],
             label=r'Input $\theta$')
    plt.plot(np.arange(0, len(traj)) * config.dt,
             traj[:, 2],
             label=r'Actual $\theta$')
    plt.xlabel('T(s)')
    plt.ylabel(r'$\theta$(rad)')
    plt.legend()
    plt.show()
Exemplo n.º 15
0
    max_acc_v = 0.7
    max_acc_w = pi / 3.0 * 5
    init_x = 0.0
    init_y = 6.0
    init_yaw = pi / 8.0
    robot_radius = 0.3
    ob_radius = 0.3
    target_radius = 0.3
    dt = 0.1

    target_init_x = 10
    target_init_y = 4
    target_init_yaw = pi / 2.0
    target_u = None
    
    evader_model = RobotModel(max_v, min_v, max_w, max_acc_v, max_acc_w,
                                   target_init_x, target_init_y, target_init_yaw)

    ob_wall=[]
    top, bottom, left, right = 20.0, -10.0, -10.0, 20.0
    # top y=20
    for x in np.arange(left, right, 2*ob_radius):
        ob_wall.append(np.array([x, top]))
    # bottom y=-10
    for x in np.arange(left, right, 2*ob_radius):
        ob_wall.append(np.array([x, bottom]))
    # left
    for y in np.arange(bottom+2*ob_radius, top, 2*ob_radius):
        ob_wall.append(np.array([left, y]))
    # right
    for y in np.arange(bottom, top, 2*ob_radius):
        ob_wall.append(np.array([right, y]))