• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

ROS节点开机自启动

人工智能 熊猫飞天 2866次浏览 0个评论

在开发ROS项目中我们常常想实现电脑开机以后自动运行一些节点,这里就涉及到了Ubuntu中的一些开机自启动问题,ROS节点的启动与其他脚本的自动运行不一样,不能只写使用rc.local的方式写入,这是因为在那个时候,bash环境还没启动,因此加载不了ROS环境,从而导致启动ROS节点失败。 因此我们需要采用其他的方法来启动ROS节点,对于在Ubuntu中启动ROS节点有两种方法可以尝试,第1种是使用ubuntu自带的 startup Application 来设置启动时候的脚本,第2种则是使用ROS中带有的自启动服务 robot_upstart 实现 。

1 startup Application

第一种方法是使用 ubuntu自带的 startup Application 来设置启动时候的脚本,此时bash环境有效。 首先新建一个 mytest.sh 文件 然后填入以下内容 [6],这里是启动了一个turtlebot的节点和一个小海龟的例子  

#! /bin/bash
### BEGIN INIT INFO
# Provides:          xxxx.com
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: mylaunch service
# Description:       mylaunch service test
### END INIT INFO
gnome-terminal -x bash -c "source /opt/ros/kinetic/setup.bash;roslaunch turtlebot_bringup minimal.launch" #新建终端启动节点
sleep 8 #等待8秒
gnome-terminal -x bash -c "source /opt/ros/kinetic/setup.bash;rosrun turtlesim turtlesim_node" &  
wait
exit 0

  其中gnome-terminal -x bash -c表示新建bash终端并执行c后面的语句,命令通过’;;’,隔开, !注意,如果是ubuntu 18.04的系统 [6], gnome-terminal -x bash -c需要改写成gnome-terminal – bash -c 接下来,对 mytest.sh 文件修改权限  

sudo chmod 777 mytest.sh

  这里最好是先测试一下你自己写的.sh文件是否可以运行  

./mytest.sh

  在ubuntu 1604中搜索 “startup Application” 会找到配置软件  
ROS节点开机自启动   选定我们新建的mytest.sh文件  
ROS节点开机自启动   这里需要注意,我们需要把当前的账户设置为自动登录  
ROS节点开机自启动   这样重启以后会自动进入桌面然后ros节点,注(我在测试的过程中发现,这种方法必须要设置账户自动登录,应该是进入桌面以后才能运行我们设置的启动脚本) 上述的方法适合自己在调试设备的时候使用,当我们在做产品或者项目的时候,不希望把电脑账户密码告知其他人时,上述的这种方法就无效了,这时候我们可以使用ROS自带的启动服务,将一个ROS包设置为自启动状态,让电脑在开机以后自动启动一个指定的ROS包,然后我们将需要启动的节点全部封装为一个launch文件写入在这个包中。

2 ROS robot_upstart 安装服务

step1: 安装环境  

sudo apt-get install ros-kinetic-robot-upstart

  step2: 在ROS工作空间下创建一个名为的包 auto_start  

catkin_create_pkg auto_start std_msgs roscpp rospy

  step3: 在auto_start包下新建一个launch目录,并在launch文件夹中新建一个名为 auto_start.launch 的文件,写入内容:  

<launch>
<include file="/opt/ros/kinetic/share/turtlebot_bringup/launch/minimal.launch"/>
<node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node" output="screen">
</node>
</launch>

  step4: 将 auto_start.launch 文件在小强主机中注册为 auto开机启动服务 a.首先将之前注册的 startup 服务停止和删除,如果是第一次安装 startup,请直接 跳到 b  

sudo service auto stop //这里注意auto为注册时候使用的名称
rosrun robot_upstart uninstall auto 

  b.重新注册 startup 开机启动服务  

rosrun robot_upstart install auto_start/launch/auto_start.launch
sudo systemctl daemon-reload && sudo systemctl start auto

  这时候我们开机以后,直接新建终端,使用rostopic list 就可以看到有消息列表了,使用的环境为Ubuntu1604+ROS K 版和Ubuntu1804 M版

参考

【1】小强机器人: https://doc.bwbot.org/en/books-online/xq-manual/topic/27.html 对于运行有问题的小伙伴欢迎邮件或留言讨论cenruping@vip.qq.com


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明ROS节点开机自启动
喜欢 (0)

您必须 登录 才能发表评论!

加载中……