从 ROS 节点重启计算机

Reboot a computer from a ROS Node

我想创建一个 ROS 服务,当使用 rosservice 调用时,它会重启计算机。

这是我的回调代码:

def reboot_callback(self, cmd):
    """
    Callback to reboot
    """

    res = TriggerResponse()
    res.success = True
    res.message = "Rebooting"
    os.system('reboot')
    return res

但是,当我 运行 rosservice call /reboot(或调用服务的任何名称)时,由于 ROS 和 Python,我得到一个 Permission Denied 错误运行 与 sudo 不同,它需要管理员权限才能重新启动计算机。

要获得从 ROS 节点重启计算机的正确权限,roscorerosrun 需要来自根用户 运行。

我是这样做的:

  • 使用sudo su

  • 进入root用户
  • 获取 ROS 安装文件和 catkin_ws 文件 (source /opt/ros/kinetick/setup.bash && source catkin_ws/devel/setup.bash)

  • 运行 roscorerosrun(或 roslaunch 如果您有启动文件),您现在可以调用您的服务了。

另一种方法是使用 tmux。

  • 运行 要重启的机器上的 tmux

  • ssh 到机器和 运行 tmux attach

  • 运行 你需要启动什么来尝试用 ros 重启机器,它应该可以工作