コード例 #1
0
ファイル: map_graphics.c プロジェクト: acekiller/MasterThesis
static carmen_inline void screen_to_world(carmen_point_t *p, carmen_world_point_t *wp,
				   GtkMapViewer *map_view)
{
  carmen_map_point_t mp;

  screen_to_map(p, &mp, map_view);
  carmen_map_to_world(&mp, wp);
}
コード例 #2
0
ファイル: random_navigator.c プロジェクト: Paresh1693/carmen
static void pick_random_place(void)
{
  carmen_map_point_t map_pt;
  carmen_world_point_t world_pt;
  map_pt.map = c_space;

  do {
    map_pt.x = carmen_uniform_random(0, c_space->config.x_size);
    map_pt.y = carmen_uniform_random(0, c_space->config.y_size);
  } while (c_space->map[map_pt.x][map_pt.y] < 0);

  carmen_map_to_world(&map_pt, &world_pt);
  carmen_navigator_set_goal(world_pt.pose.x, world_pt.pose.y);
  carmen_navigator_go();
  up_to_speed = 0;
}
コード例 #3
0
/* handles the mouse moving in the drawing area
   only calls the appropriate tool function if the mouse button is down.
   always sets the cursor to the appropriate symbol */
static gint
motion_notify_event( GtkWidget *widget, GdkEventMotion *event )
{
  int x, y;
  GdkModifierType state;
  static char label_buffer[255];
  static carmen_map_point_t map_point;
  static carmen_world_point_t world_point;


  gtk_propagate_event(GTK_WIDGET(vrule), (GdkEvent *)event);
  gtk_propagate_event(GTK_WIDGET(hrule), (GdkEvent *)event);

  map_to_tmp();

  if (event->is_hint)
    gdk_window_get_pointer (event->window, &x, &y, &state);
  else
    {
      x = event->x;
      y = event->y;
      state = event->state;
    }

  map_point.x = pix_x_to_map(x);
  map_point.y = pix_y_to_map(y);
  map_point.map = map;
  carmen_map_to_world(&map_point, &world_point);
  sprintf(label_buffer, "X: %6.2f Y: %6.2f", world_point.pose.x,
	  world_point.pose.y);
  gtk_label_set_text(GTK_LABEL(coords_label), label_buffer);

  if (tmp_pixmap == NULL)
    return TRUE;

  if (deleting_placename)
    {
      handle_deleting_placename_move(map_point.x, map_point.y);
    }
  else if ((state & GDK_BUTTON1_MASK))
    {
      switch(utensil)
	{
	case CARMEN_MAP_BRUSH:
	  draw_brush (widget, x, y);
	  x = x/mult - brush_size + .5;
	  y = y/mult - brush_size + .5;
	  break;
	case CARMEN_MAP_RECTANGLE:
	  creating_rectangle(widget, 1, x, y);
	  break;
	case CARMEN_MAP_CROP:
	  cropping(widget, 1, x, y);
	  break;
	case CARMEN_MAP_LINE:
	  creating_line(1, x, y);
	  break;
	case CARMEN_MAP_EYEDROPPER:
	  sample(x, y);
	  break;
	case CARMEN_MAP_MOVER:
	  move(1, x, y);
	default:
	  break;
	}
    }

  redraw();

  return TRUE;
}
コード例 #4
0
void carmen_roadmap_refine_graph(carmen_world_point_t *robot, 
				 carmen_roadmap_t *road)
{
  carmen_dot_t blocking_object;
  double varx, vary, varxy;
  double radius;
  double x, y;

  int i;
  double theta;
  carmen_world_point_t world_pt;
  carmen_map_point_t map_pt;
  carmen_roadmap_vertex_t *node_list;
  carmen_roadmap_vertex_t *goal_node;
  carmen_world_point_t goal;

  get_blocking_object(&blocking_object, robot, road);

  if (blocking_object.dot_type == carmen_dot_person) {
    x = blocking_object.data.person.x;
    y = blocking_object.data.person.y;
    radius = blocking_object.data.person.r;
    radius *= 1.1;
  } else if (blocking_object.dot_type == carmen_dot_trash) {
    //dbug: use convex hull
    x = blocking_object.data.trash.x;
    y = blocking_object.data.trash.y;
    varx = blocking_object.data.trash.vx;
    vary = blocking_object.data.trash.vy;
    varxy = blocking_object.data.trash.vxy;

    carmen_roadmap_refine_get_radius(varx, vary, varxy, &radius);
    radius *= 1.1;

  } else { // if (blocking_object.dot_type == carmen_dot_door) {
    x = blocking_object.data.door.x;
    y = blocking_object.data.door.y;
    varx = blocking_object.data.door.vx;
    vary = blocking_object.data.door.vy;
    varxy = blocking_object.data.door.vxy;

    carmen_roadmap_refine_get_radius(varx, vary, varxy, &radius);
    radius *= 1.1;
  }

  node_list = (carmen_roadmap_vertex_t *)road->nodes->list;

  for (theta = -M_PI; theta < M_PI; theta += M_PI/8) {
    world_pt.pose.x = x + radius*cos(theta);
    world_pt.pose.y = y + radius*sin(theta);
    world_pt.map = road->c_space;

    carmen_world_to_map(&world_pt, &map_pt);

    if (road->c_space->map[map_pt.x][map_pt.y] > 1)
      continue;

    for (i = 0; i < road->nodes->length; i++) {
      if (map_pt.x == node_list[i].x && map_pt.y == node_list[i].y)
	break;
    }

    if (i == road->nodes->length) {
      carmen_roadmap_add_node(road, map_pt.x, map_pt.y);    
      node_list = (carmen_roadmap_vertex_t *)road->nodes->list;
    }
  }

  goal_node = (carmen_roadmap_vertex_t *)
    carmen_list_get(road->nodes, road->goal_id);
  map_pt.x = goal_node->x;
  map_pt.y = goal_node->y;
  map_pt.map = road->c_space;
  carmen_map_to_world(&map_pt, &goal);

  carmen_warn("Refine: Goal: %f %f\n", goal.pose.x, goal.pose.y);

  carmen_roadmap_plan(road, &goal);
}