As @Vesper said in the comments, A* is the way to go. As for the heuristic...
If your robot is restricted to moving left/right and up/down, typically Manhattan (or Taxicab or L1) distance is used as a heuristic function:
h(x,y) = |x - x_goal| + |y - y_goal|
It should be obvious that if there are no obstacles, then moving |x - x_goal|
steps right or left, then |y - y_goal|
steps up or down (or y, then x) cannot be longer than the actual shortest path to the goal with obstacles, therefore the heuristic is admissible.
If your robot can move on the diagonal, then Manhattan distance is no longer admissible, so you can use the Euclidean (or L2) distance:
h(x,y) = sqrt( (x - x_goal)^2 + (y - y_goal)^2 )
This is the straight-line distance between the two points and will never be any longer than any other possible path.
This makes Euclidean distance not only admissible for diagonal motion (at any angle), it also admissible for the case above where movement is restricted to the x and y directions. But in the case of restricted movement, Manhattan distance will generally give a path length that is closer to the actual path length, and so may speed up your pathfinding, and it's faster to compute.