In particular, we should deal with KeyboardInterrupt (by just doing 'pass'), as well as ExternalShutdownException (which can come from the executor). In all cases, we should call 'rclpy.try_shutdown()' to cleanup at the end.
Note well that I removed some of the *destroy() calls in the cleanup. That's because they weren't correct in all cases, and to fix them up properly would really require us to have a nested set of try..except statements. Given that these are examples, having that complex set of exception handling didn't seem like the correct way to go here.
In particular, we should deal with KeyboardInterrupt (by just doing 'pass'), as well as ExternalShutdownException (which can come from the executor). In all cases, we should call 'rclpy.try_shutdown()' to cleanup at the end.
Note well that I removed some of the *destroy() calls in the cleanup. That's because they weren't correct in all cases, and to fix them up properly would really require us to have a nested set of try..except statements. Given that these are examples, having that complex set of exception handling didn't seem like the correct way to go here.
This should fix #372 . @fujitatomoya FYI