This paper presents a data-driven approach for segmenting range data to enable a humanoid robot to perform interactive domestic tasks. Range data is segmented into geometric primitives (planes, spheres, cylinders and cones), allowing the robot to recognize many simple objects. The algorithm calculates initial segments using depth discontinuities, creases and changes in surface type, with subsequent merging steps to correct for over-segmentation. We develop a novel surface type classification method using analysis of the Gaussian image and convexity of surface patches. Our method eliminates the need for choosing an arbitrary approximating function as required by other surface type classifiers. We also present novel techniques to estimate initial parameters for fitting geometric primitives to segmented regions. Experimental results using real range data demonstrate the effectiveness of our techniques. KEY WORDS range images, segmentation, geometric primitives