Yo haría otra cosa:
si vas a usar un id como argumento, me parece más lógico, o mejor dicho, con una mejor semántica, que el segmento tenga un nombre en singular
.../usuario/XX
en lugar de
../usuarios/XX
de esta forma, dejas el nombre ../usuarios para mostrar otra cosa, por ejemplo, una lista con todos usuarios.
o usar mostrar listas de subconjuntos, por ejemplo
../usuarios/administradores
../usuarios/borrados
../usuarios/activos, etc
usando tu controlador usuarios:
function index() {
...
}
function usuario( $id = NULL){
if (!$id) redirect ('usuarios/index') //o lo que quieras
$this->load->model('usuarios');
$usuario = $usuarios->retrieve(array('id'=>$id);
if (!$usuario) echo 'invalid id';
echo $usuario->nombre;
}
y en rutas, creas
$route['usuario/(:num)'] = "usuarios/usuario/$1";