KinematicOptionsMap locks its members internally and only returns copies of its internal state.  Otherwise the KinematicOptionsMap lock (currently private) would have to be locked (and unlocked) by any function calling KinematicOptionsMap methods.  Using the state_lock_ to protect the contents of kinematic_options_map_ would not work because it is shared with RobotInteraction and all the other InteractionHandlers (and state_lock_ is specific to this InteractionHandler instance).