As mentioned in #69, creating the controller manager before opening the robot can lead to failures at runtime because
the ControllerManager provides services that require the robot to be already opened. If a 3rd party calls one of those
services before the robot is opened, that operation will fail.
By moving the creation of the ControllerManager after we try to open the robot, we ensure that no race condition will occur and that the robot will always be openned when the provided services are called.
This should fix #69
As mentioned in #69, creating the controller manager before opening the robot can lead to failures at runtime because the ControllerManager provides services that require the robot to be already opened. If a 3rd party calls one of those services before the robot is opened, that operation will fail.
By moving the creation of the ControllerManager after we try to open the robot, we ensure that no race condition will occur and that the robot will always be openned when the provided services are called.