Consider a mobile robot provided with a contact sensor that randomly travels in a closed environment, changing direction every time an obstacle is encountered. Is it possible to reconstruct the 2D map of the environment (and the location of the robot) using just the contact sensor, an odometer, a compass and one front camera (no lidar, laser and other depth sensors)? What techniques can be used?
There countless implementations for the camera-only methods. Have a look at the following SLAM codes or demo videos.
Structure from motion
These are all hand-held SLAMs but can be adapted to your case as well. Feature initialization might be a problem but because odometry is available in your case, it won't be a problem.
Some extra sensors like odometer, compass and etc can be integrated in the pipeline. Just add extra cost function to the already existing optimization code(optimization-based ones) or system model(filtering-based ones).