int
main(int argc, char **argv)
{
	carmen_ipc_initialize(argc, argv);
	carmen_param_check_version(argv[0]);
	signal(SIGINT, shutdown_module);
	
	if (argc == 3 && !strcmp("ultrasonic",argv[2]))
		read_ultrasonic_sensor_parameters(argc, argv, &laser_params, &map_params);
	else
		read_laser_parameters(argc, argv, &laser_params, &map_params);

	initialize_transforms();

	/* Create and initialize a probabilistic map */
	init_carmen_map(&map_params, &carmen_map);

	init_bean_range_finder_measurement_model(laser_params);

	/* Register my own messages */
	carmen_grid_mapping_define_messages();

	carmen_subscribe_to_relevant_messages();

	/* Loop forever waiting for messages */
	carmen_ipc_dispatch();

	return (0);
}
    virtual void execute ()
    {
        assert (theater == NULL);
        assert (current_camouflage == NULL);
        assert (current_payload == NULL);
        assert (origin_stack.empty ());

        if (debug)
            std::fprintf (stderr, "Executing incoming!\n");

        theater = new osg::Group;
        initialize_transforms ();

        current_codeword = MAIN;
    }