精华内容
下载资源
问答
  • ROS自启动

    2018-12-05 16:34:59
    0x00 为何需要开机自启动launch文件 在ROS开发后期阶段由于功能已经趋于稳定,因此就需要系统在一上电启动后就自动把ROS下的各节点程序加载运行,这样就省去了我们还得手动输入roslaunch命令来加载bringup的launch...

    出自:http://www.corvin.cn/707.html
    0x00 为何需要开机自启动launch文件

    在ROS开发后期阶段由于功能已经趋于稳定,因此就需要系统在一上电启动后就自动把ROS下的各节点程序加载运行,这样就省去了我们还得手动输入roslaunch命令来加载bringup的launch文件的操作。经过我的实际测试目前有两种方式可以实现开机自启动,一种就是使用系统自带的Startup Applications,另外一种就是编写一个service,开机后自动启动,在这里我们以树梅派下ubuntuMate安装ros kinetic系统作为示例来分别演示这两种方式各如何操作。

    0x01 下载雷达源码并编译运行

    在这里我以在树梅派下开机后自启动ydlidar-x4作为演示,首先就需要在树梅派中下载该雷达源码,在ROS工作空间的src目录下使用如下命令下载源码:

    git clone https://github.com/EAIBOT/ydlidar.git

    下载源码后就可以先来配置雷达的设备挂载点,使其挂载点从/dev/ttyUSBx映射到/dev/ydlidar,这样方便我们获取雷达的设备挂载点。

    Screenshot from 2018-05-22 10:21:39.png

    当编译完成后就可以来测试雷达是否可以正常启动了,需要首先source devel/setup.bash配置当前工作空间的环境变量,这样我们才能使用roslauch来启动ydlidar软件包下的lidar.launch,在这里需要注意的是由于雷达的USB口供电能力较弱,因此我们除了需要接上雷达的数据接口后还得接上供电接口,这样ydlidar-x4才能正常工作。

    Screenshot from 2018-05-16 13:35:58.png

    当编译完成后,我们可以来使用roslaunch启动雷达看看是否能正常工作,可以先source devel/setup.bash配置好环境变量后,使用如下命令来启动雷达roslaunch ydlidar lidar.launch,接下来就会发现雷达开始转动起来。

    0x02 使用StartupApplication方式来自启动

    这种方式的主要思路就是通过编写一个bash脚本,在脚本中来执行roslaunch命令启动相应的ros节点,然后我们在系统提供的startupApplication中添加我们要执行的脚本即可,这样就可以在每次开机的时候执行我们自定义的脚本了。在这里我们在当前ros工作空间源码目录创建一个软件包用于存放我们的脚本,具体操作如下所示:

    Screenshot from 2018-05-30 17:16:36.png

    在startup.sh脚本中添加如下代码:

    #!/bin/bash

    Copyright: 2016-2018 www.corvin.cn

    Author: corvin

    Description: In raspeberry ubuntu Mate16.04 poweron

    startup ros’s launch file.

    History:

    20180530: initial this file.

    source /opt/ros/kinetic/setup.bash
    source ~/catkin_ws/devel/setup.bash

    roslaunch ydlidar lidar.launch

    exit 0
    接下来就可以在ubuntuMate的界面上来配置添加启动程序了,如下图所示完整操作:

    Screenshot from 2018-05-31 10:57:01.png

    注意Command的添加,完整的命令如下:

    terminator -x /home/corvin/catkin_ws/src/auto_startup/scripts/startup.sh

    大家只需要修改terminator为mate_terminal,如果在x64的ubuntu的系统上,默认安装的终端是gnome-terminal,另外就是需要修改后面的路径为自己脚本的路径就可以了。当点击Add后,接下来就可以来重启树梅派来进行测试了,看看重启后是否开机时能将雷达自动启动,下图是树梅派刚启动时自动打开terminator终端,然后自动来执行脚本中的roslaunch命令将雷达启动:

    Screenshot from 2018-05-31 11:34:28.png

    0x03 编写service启动相关代码

    我们仍然在创建的auto_startup软件包的scripts目录下创建需要的文件,使用如下命令来操作:

    Screenshot from 2018-05-31 13:20:14.png

    在ros_startup.service中添加的代码如下:

    [Unit]
    Description=powerOn startup ros

    [Service]
    Type=simple
    Restart=always
    RestartSec=30
    ExecStart=/usr/sbin/ros_start
    ExecStop=/usr/sbin/ros_stop
    ExecRestart=/usr/sbin/ros_restart

    [Install]
    WantedBy=multi-user.target
    该文件就是我们自定义的服务,我们可以使用systemctl来操作该服务使其可以开机时候来启动,执行其中相应的命令,里面的命令其实还是我们自定义的脚本,下面来简要解析下该服务的内容,service主要由三部分组成,分别时Unit,Service,Install下面来分别介绍这三部分:

    Unit:该服务的类型描述,这里定义为单元类型,Description是这个服务的一个描述信息,可以自己根据需要来修改。

    Service:服务的关键部分,需要配置的一些关键参数,这里配置了如下几个参数:

    (1)Type=simple:表明这个服务主要由 ExecStart 设置的程序来启动,启动后常驻于内存中。这个simple是默认的参数,除了simple外还可以设置为oneShot,该参数与simple类似,区别在于这个ExecStart执行的命令执行完成后就退出了,不会常驻在内存中。还可以设置为idel,该参数与 simple 类似,意思是要执行这个服务必须要所有的工作都顺利执行完毕后才会执行,这类的服务通常是开机到最后才执行即可的服务。
    
    (2)Restart=always:表明该服务具备重启功能,如果服务意外关闭后会一直尝试重新启动。
    
    (3)RestartSec=30:表明服务在意外关闭后,经过多少秒后再次重新尝试启动该服务。
    
    (4)ExecStart=/usr/sbin/ros_start:表明服务启动时需要执行的命令,后面就是执行的命令所在路径,这里的命令是我们自定义的脚本。
    
    (5)ExecStop=/usr/sbin/ros_stop:当需要停止该服务时需要执行的命令,后面是命令的路径。
    
    (6)ExecStop=/usr/sbin/ros_restart:当服务需要重新启动时需要执行的命令,后面是命令的路径。
    

    Install:需要将该unit安装到那个target上。

    然后开始编写需要启动的三个脚本,分别是ros_start,ros_stop,ros_restart,下面来依次介绍三个脚本的编写:

    (1)编写ros_start脚本,该脚本就是服务启动时需要执行的命令,具体代码如下:

    #!/bin/bash

    Copyright: 2016-2018 www.corvin.cn

    Author: corvin

    Description: In raspeberry ubuntu Mate16.04 poweron

    startup ros’s launch file.

    History:

    20180531: initial this file.

    source /opt/ros/kinetic/setup.bash
    source /home/corvin/catkin_ws/devel/setup.bash

    roslaunch ydlidar lidar.launch

    exit 0
    (2)编写ros_stop脚本,该脚本是需要停止服务时执行的命令,具体代码如下:

    #!/bin/bash

    Copyright: 2016-2018 www.corvin.cn

    Author: corvin

    Description: when stop service should execute cmd

    History:

    20180531: initial this file.

    source /opt/ros/kinetic/setup.bash
    source /home/corvin/catkin_ws/devel/setup.bash

    for i in $(rosnode list);do
    rosnode kill $i;
    done

    killall roslaunch

    exit 0
    (3)编写ros_restart脚本,该脚本是当需要重启服务时执行的命令,具体代码如下:

    #!/bin/bash

    Copyright: 2016-2018 www.corvin.cn

    Author: corvin

    Description: when should restart service execute this bash.

    History:

    20180531: initial this bash file.

    /usr/sbin/ros_stop
    sleep 3
    /usr/sbin/ros_start

    exit 0
    0x04 配置service并重启测试

    当编写好service和相应的执行脚本后,接下来就需要将其放到指定的目录下,由于需要执行的命令较多,我们仍然编写一个bash脚本来执行配置的命令,该脚本仍然放在scripts目录下,文件命名为config_service.sh,脚本代码如下:

    #!/bin/bash

    Copyright: 2016-2018 www.corvin.cn

    Author: corvin

    Description: config ros startup service and bash files.

    History:

    20180531: initial this file.

    sudo cp ros_start /usr/sbin/
    sudo cp ros_stop /usr/sbin/
    sudo cp ros_restart /usr/sbin/

    sudo cp ros_startup.service /lib/systemd/system/

    sudo systemctl enable ros_startup.service

    exit 0
    首先对该脚本进行简单解析,前面通过cp拷贝将三个执行脚本放到/usr/sbin目录下,然后将ros_startup.service拷贝到/lib/systemd/system目录下,接下来的sudo systemctl enable ros_startup.service就是为了使该服务生效,启用该服务。当为该脚本通过chmod +x config_service.sh来增加执行权限后就可以来执行该脚本配置service了,具体操作如下图:

    Screenshot from 2018-05-31 15:12:48.png

    当使用systemctl is-enabled ros_startup.service命令就是为了查看我们的自定义服务是否已经启用,当出现enable就说明我们的服务已经挂载在系统服务上,当系统启动时会加载我们的服务来一起启动的,下面我们就可以来重启树梅派系统来测试了,看看能否正常执行我们的ros_start脚本来加载雷达启动。

    当我们重启后可以发现系统已经正常使用我们的ros_start脚本来将雷达启动起来了,下面来详细介绍下systemctl这个命令,我们来如何操控我们的自定义服务:

    (1)当我们想停止我们的launch加载的雷达时,可以使用如下命令:

    sudo systemctl stop ros_startup.service

    (2)当我们想启动我们的launch文件时,可以使用如下命令,当执行完以下命令后可以发现我们再次将雷达启动起来:

    sudo systemctl start ros_startup.service

    (3)当我们在launch文件运行中,想重新启动时可以执行如下命令,当执行完以下命令是会发现雷达首先停止了转动,等待3秒钟然后又再次重新启动了:

    sudo systemctl restart ros_startup.service

    (4)如果想禁止我们的自定义服务在开机的时候启动,可以使用如下命令:

    sudo systemctl disable ros_startup.service

    (5)如果想再次重新在开机时启动我们的服务,可以使用如下命令:

    sudo systemctl enable ros_startup.service

    Screenshot from 2018-05-31 15:29:36.png

    在我们enable了自定义的服务后,我们的服务就会在后台一直运行,但是我们却不知道该服务在后台如何运行的,因为看不到任何日志输出,如果想查看服务运行的相关日志该如何操作呢,在这里就需要使用journalctl标准日志服务来查看了,Systemd通过其标准日志服务Journald将其管理的所有后台进程打印到到std:out(即控制台)的输出重定向到了日志文件。日志文件是二进制格式的,因此必须使用特定的工具才能查看。

    Journald提供了配套的程序Journalctl用于处理日志内容,Journalctl的使用非常简单,默认不带任何参数的时候会输出系统和所有后台进程的混合日志,常用的参数有–dmesg用于查看内核输出的日志,–system用于查看系统输出的日志,–unit加上Unit的名字来指定输出特定Unit的日志,例如我们想查看自定义服务ros_startup.service的日志输出,可以使用如下命令:

    sudo journalctl –unit ros_startup.service

    下面来测试下该命令,查看服务在后台的日志输出:

    corvin@robot:~$ sudo journalctl --unit ros_startup.service
    [sudo] password for corvin:
    – Logs begin at 五 2016-02-12 00:28:02 CST, end at 四 2018-05-31 15:58:43 CST. –
    5月 31 15:57:46 robot systemd[1]: Started powerOn startup ros.
    corvin@robot:~$ sudo systemctl restart ros_startup.service
    corvin@robot:~$ sudo journalctl --unit ros_startup.service
    – Logs begin at 五 2016-02-12 00:28:02 CST, end at 四 2018-05-31 15:59:39 CST. –
    5月 31 15:57:46 robot systemd[1]: Started powerOn startup ros.
    5月 31 15:59:21 robot systemd[1]: Stopping powerOn startup ros…
    5月 31 15:59:24 robot ros_stop[1981]: killing /base_link_to_laser4
    5月 31 15:59:24 robot ros_stop[1981]: killed
    5月 31 15:59:24 robot ros_stop[1981]: killing /rosout
    5月 31 15:59:24 robot ros_stop[1981]: killed
    5月 31 15:59:25 robot ros_stop[1981]: killing /ydlidar_node
    5月 31 15:59:25 robot ros_stop[1981]: killed
    5月 31 15:59:26 robot ros_start[615]: … logging to /root/.ros/log/524e6f08-64a8-11e8-a578-b827eb148
    5月 31 15:59:26 robot ros_start[615]: Checking log directory for disk usage. This may take awhile.
    5月 31 15:59:26 robot ros_start[615]: Press Ctrl-C to interrupt
    5月 31 15:59:26 robot ros_start[615]: Done checking log file disk usage. Usage is <1GB.
    5月 31 15:59:26 robot ros_start[615]: [59B blob data]
    5月 31 15:59:26 robot ros_start[615]: started roslaunch server http://robot:34151/
    5月 31 15:59:26 robot ros_start[615]: SUMMARY
    5月 31 15:59:26 robot ros_start[615]: ========
    5月 31 15:59:26 robot ros_start[615]: PARAMETERS
    5月 31 15:59:26 robot ros_start[615]: * /rosdistro: kinetic
    5月 31 15:59:26 robot ros_start[615]: * /rosversion: 1.12.13
    5月 31 15:59:26 robot ros_start[615]: * /ydlidar_node/angle_fixed: True
    5月 31 15:59:26 robot ros_start[615]: * /ydlidar_node/angle_max: 180.0
    5月 31 15:59:26 robot ros_start[615]: * /ydlidar_node/angle_min: -180.0
    5月 31 15:59:26 robot ros_start[615]: * /ydlidar_node/baudrate: 115200
    5月 31 15:59:26 robot ros_start[615]: * /ydlidar_node/frame_id: laser_frame
    5月 31 15:59:26 robot ros_start[615]: * /ydlidar_node/frequency: 7.0
    5月 31 15:59:26 robot ros_start[615]: * /ydlidar_node/heartbeat: False
    5月 31 15:59:26 robot ros_start[615]: * /ydlidar_node/ignore_array:
    5月 31 15:59:26 robot ros_start[615]: * /ydlidar_node/low_exposure: False
    5月 31 15:59:26 robot ros_start[615]: * /ydlidar_node/port: /dev/ydlidar
    5月 31 15:59:26 robot ros_start[615]: * /ydlidar_node/range_max: 16.0
    5月 31 15:59:26 robot ros_start[615]: * /ydlidar_node/range_min: 0.08
    5月 31 15:59:26 robot ros_start[615]: * /ydlidar_node/resolution_fixed: True
    5月 31 15:59:26 robot ros_start[615]: * /ydlidar_node/samp_rate: 9
    5月 31 15:59:26 robot ros_start[615]: NODES
    现在我们已经可以使用自定义服务的方式来开启引导启动ROS的launch文件,但是如果我们现在想卸载相关的service文件该如何操作呢,那就需要将我们放置在相应目录中的脚本和service文件删除即可,我们可以编写个脚本来完成该动作,脚本命名为uninstall_ros_service.sh,具体代码如下所示:

    #!/bin/bash

    /usr/sbin/ros_stop
    sudo systemctl disable ros_startup.service

    sudo rm /usr/sbin/ros_start
    sudo rm /usr/sbin/ros_stop
    sudo rm /usr/sbin/ros_restart

    sudo rm /lib/systemd/system/ros_startup.service

    exit 0
    Screenshot from 2018-05-31 16:32:00.png

    可以发现当执行了卸载自定义service的脚本后,我们已经无法执行start和stop相关操作了,如果想再次启用自定义服务只要重新执行启用的脚本即可。

    展开全文
  • 关于ROS自启动设置,之前查看了很多相关文章,并不是很适用,尤其是开机启动时候加载minimal.launch和amcl.launch的时候,目前开启自启动的ROS包有upstart,该包是通过创建一个服务来启动minimal.launch等基本的...

      关于ROS自启动设置,之前查看了很多相关文章,并不是很适用,尤其是开机启动时候加载minimal.launch和amcl.launch的时候,目前开启自启动的ROS包有upstart,该包是通过创建一个服务来启动minimal.launch等基本的launch文件,要是启动多个launch文件,可以通过把多个launch文件写入到一个launch中这样的方法来启动。

      还有其他方式是利用Ubuntu自带的开机启动文件来达到多launch文件启动效果,一种是服务,方法和upstart类似,如果想要多launch文件分别启动,例如minimal.launch和amcl.launch两个launch文件,当启动完minimal.launch后,再启动amcl.launch会出现waiting for device...字样,导致的结果就是amcl.launch自动不了,还得重新启动。因此,把多个launch文件写入到一个launch启动就不会提示waiting for device...。

      另外一种是在开机启动文件rc.local文件中直接写入ros命令来达到开机启动效果,把minimal和amcl两个launch文件写成一个launch命名为auto_start.launch,然后在rc.laoch中写入如下内容:

      source /opt/ros/indigo/setup.bash
      roslaunch /etc/auto_start.launch
      其中auto_start.launch文件所在位置并不重要,需要写在exit 0的前面即可,不过这个不能启动用户目录下的配置,如果启动用户目录下的launch文件,需要source ~/.bashrc。

      我用的方法是,把所有需要的配置和launch文件写到了一个脚本中,通过开机启动脚本来达到启动效果,不过经过测试,单独运行两个launch文件还是有错误,即运行完minimal后运行amcl.launch的时候,会卡在waiting for device...。目前解决方法是把minimal和amcl写到了一个文件中命名为minimal_amcl.launch。

      启动minimal_amcl.launch文件是在开机的第20秒左右,amcl.launch和minimal.launch共启动了两次,基本完全启动差不多是一到两分钟左右。目前不知道是什么原因,如果有知道的请告知,谢谢! 

      首先,在家目录下创建一个名为aotu_runing的目录,在该目录下创建脚本文件minimal,内容如下:

    <pre name="code" class="plain">#!/bin/bash
    source /opt/ros/indigo/setup.bash
    source ~/.bashrc
    export TURTLEBOT_BASE=kobuki
    export TURTLEBOT_3D_SENSOR=kinect
    export TURTLEBOT_MAP_FILE=<path_of_map_file>
    source ~/catkin_ws/devel/setup.bash
    export ROS_HOSTNAME=10.42.0.1
    export ROS_MASTER_URI=http://10.42.0.1:11311
    d='data +%Y%m%d-%H:%M:%S'
    echo "[$d]:minimal runing" >> ~/print_log.txt
    roslaunch turtlebot_bringup minimal_amcl.launch

    
      其中首先source ros路径,然后source bashrc和用户目录下的catkin_ws,因为catkin_ws目录下包含了路径规划算法。
    

    <pre name="code" class="plain">d='data +%Y%m%d-%H:%M:%S'
    echo "[$d]:minimal runing" >> ~/print_log.txt

    
      打印出信息到家目录下。
    

      然后修改/etc/rc.local文件:

    #!/bin/sh -e
    
    cd ~/aotu_runing
    ./minimal
      配置完成,当再次开机的时候,等待1到2分钟,会听到Turtlebot响声,amcl也一起启动。



    展开全文
  • ROS设置自启动

    千次阅读 2018-08-16 12:04:12
    1、使用自启动ros包upstart 该包是通过创建一个服务来启动一些基本的launch文件,要是启动多个launch文件,可以通过把多个launch文件写入到一个launch中这样的方法来启动。 2、利用ubuntu自带的开机启动文件 在...

     自启动方法:

    1、使用自启动的ros包upstart

    该包是通过创建一个服务来启动一些基本的launch文件,要是启动多个launch文件,可以通过把多个launch文件写入到一个launch中这样的方法来启动。

    2、利用ubuntu自带的开机启动文件

    在开机启动文件rc.local文件中直接写入ros命令来达到开机启动效果

     

    使用ros upstart设置自启动.

    1.创建一个launch文件start.launch,加入需要自启动的节点.

    <node pkg="rosserial_python" type="spq_serial_node.py"/>

    2.安装upstart包

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

    3.将start.launch放入某个package目录下, rosrun robot_upstart install 包开始的目录至/start.launch

    rosrun robot_upstart install --job job名 包开始的目录至/start.launch

    然后再运行sudo systemctl daemon-reload

    sudo systemctl start job名

    可设置参数:

    rosrun robot_upstart install --interface eth0 --master http://192.168.10.203:11311 start/launch/startall.launch

    其中install后面的参数介绍:

    其中192.168.10.203是机器人底盘IP

    install后面可以有下面一些参数:

    usage: install [-h] [--job JOB] [--interface ethN] [--user NAME]

                                [--setup path/to/setup.bash] [--rosdistro DISTRO]

                                [--master http://MASTER:11311] [--logdir path/to/logs]

                                [--augment]

                                pkg/path [pkg/path ...]

    必须的参数

    pkgpath  Package and path to install job launch files from要启动的launnch文件的package和其路径

    可选参数

    --job   Specify job name. If unspecified, will be constructed from package name.

    --interface   Specify network interface name to associate job with.指定与操作有关网络的interface名字,可以在terminal中用ifconfig查看

    --user   Specify user to launch job as.

    --setup  Specify workspace setup file for the job launch context.

    --rosdistro  Specify ROS distro this is for.

    --master  Specify an alternative ROS_MASTER_URI for the job launch context.

    --logdir  Specify an a value for ROS_LOG_DIR in the job launch context.

    --augment=False  Bypass creating the job, and only copy user files. Assumes the job was previously created.

    4.启动、停止、卸载服务sudo service job名 start

    job名为上面设置的job名字,若没有设置此项,则需要在注意后面提示中的sudo systemctl start job名

    停止服务sudo service job名 stop

    卸载服务rosrun robot_upstart uninstall job名

     

    重启命令:

    1)、reboot

    2)、shutdown-r now立刻重启(root用户使用)

    3)、shutdown-r 10过10分钟自动重启(root用户使用)

    4)、shutdown-r 20:35在时间为20:35时候重启(root用户使用)

    如果是通过shutdown命令设置重启的话,可以用shutdown-c命令取消重启

    如果出现问题

     sudo tail /var/log/upstart/robot.log -n 30

    可以使用top命令可以查看处理器的运行状况

    展开全文
  • ROS节点开机自启动

    千次阅读 2020-08-28 08:46:57
    在开发ROS项目中我们常常想实现电脑开机以后自动运行一些节点,这里就涉及到了Ubuntu中的一些开机自启动问题,ROS节点的启动与其他脚本的自动运行不一样,不能只写使用rc.local的方式写入,这是因为在那个时候,bash...

    在开发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” 会找到配置软件
    在这里插入图片描述
    选定我们新建的mytest.sh文件
    在这里插入图片描述
    这里需要注意,我们需要把当前的账户设置为自动登录

    在这里插入图片描述
    这样重启以后会自动进入桌面然后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

    展开全文
  • ubuntu开机脚本自启动(含ROS程序启动)方法 平时有用到一些机器人或者带有ubuntu系统的移动设备,比如NVIDIA TX2,NVIDIA XAVIA, Jetson NANO,秒算,工控机等等,写好了程序后,如果想要运行,开机之后还得连接键盘鼠标, ...
  • ROS开机自启动

    千次阅读 2017-02-16 14:35:16
    在Linux系统中,/etc/rc.loacal开机启动脚本是运行...在这里,我们将ROS的开机启动功能放到用户的登陆后的运行脚本(~/.bashrc)里,这样可以保证大家在编程失误的时候不至于因为阻塞而造成系统死机。 三.实操手册: 1
  • ROS开机自动启动节点

    2019-09-26 02:01:31
    ROS中提供了开机自动启动节点的工具robot_upstart,借助linux systemd工具实现守护进程开机启动功能. 1 systemd工具简介 Systemd 入门教程:命令篇 Systemd 入门教程:实战篇 如何使用Journalctl查看并操作...
  • ROS启动笔记本自带摄像头,首先在一个工作空间内安装usb_cam,例如在常用的工作空间catkin_ws中。命令如下: $ cd katkin_ws/src $ git clong https://github.com/bosch-ros-pkg/usb_cam.git $ cd .. $ ...
  • 由于项目需求,需要ROS下开机自启动多个相关roslaunch文件,查询相关博主代码,自己亲测可行的思路如下: 1、建立脚本文件, 由于ROS是第三方库,而终端要运行ros必须source /opt/ros/${ros-distro}/setup.bash才可以...
  • 该文件将启动roscore,您需要确保在[TODO]处填写用户名,并将动力学更改为所使用的ROS版本。 [Unit] After=NetworkManager.service time-sync.target [Service] Type=forking User=[TODO enter user name here...
  • ROS程序开机自启动

    2020-07-17 12:08:11
    写了这么多ROS的launch脚本,怎么才能开机就启动呢,本文介绍1种方法,使用ROS的 robot_upstart包,下面以pibot_bringuppackage的·bringup.launch`演示 2.robot_upstart包 2.1 安装 使用pibot_install_ros.sh一键...
  • ROS1 自启动制作过程

    2019-01-16 11:18:26
    环境准备 ubntu 16.04 ROS 版本为 kinetic 1.首先安装robot_upstart工具 ...2. 安装启动文件 例如需要robot_config包下的move_base_amcl.launch 运行以下命令 rosrun robot_upstart install robot_confi...
  • ROS脚本开机自启动

    千次阅读 2016-08-03 22:15:16
    说明:在控制机器人的卡片电脑,工控机,秒算等上面,往往要实现ROS节点的开机自启动。以本人系统为例:ubuntu 14.04 + ros indigo,通过秒算实现M100的目标发现的节点.
  • ros 程序开机自启动

    千次阅读 2017-11-29 19:32:50
    在控制机器人的PC,嵌入式系统启动时,常常需要ROS程序随开机启动。Sam尝试了多种方法,现记录如下: 1. ROS官方方法: Robot_upstart: The robot_upstart package provides scripts which may be used to...
  • ROS机器人开机自启动设置

    千次阅读 2020-07-19 00:42:48
    调试过ROS机器人的同学都知道,反复调试、反复启动launch文件,调试还算方便,但是要是做产品的话,肯定不行,不可能让客户,手动的启动程序吧,所以有了下面一个比较简单实用方法。 TX2上电立即开机 网上写了一大堆...
  • ros程序开机自启动

    2019-08-15 17:47:55
    1、写启脚本,我以start.sh为例 #! /bin/bash source /opt/ros/kinetic/setup.bash source /home/cx/rplidar/devel/setup.bash roslaunch rplidar_ros rplidar.launch 2、查看脚本文件是否有可执行权限 cd到可执行...
  • ROS 启动自带摄像头或者USB摄像头

    千次阅读 2019-04-28 15:07:29
    问题来源:当使用自己的摄像头运行开源SLAM框架的时候,需要启动摄像头节点,使用ROS驱动自己的摄像机获取图像信息。 启动过程: 1、编译运行摄像头启动节点 $ cd ~/catkin_ws/src ## 摄像头启动节点和slam的包都...
  • ROS的开机自启动节点 最近在做工程,查阅了很多资料,为了方便留存和查找开始写博客 ros/ubuntu开机自启动节点 1 首先安装robot_upstart工具(以kinetic版本为例) $ sudo apt-get install ros-kinetic-robot-...
  • sam_code@hotmail.com在控制机器人的PC,嵌入式系统启动时,常常需要ROS程序随开机启动。Sam尝试了多种方法,现记录如下:1. ROS官方方法:Robot_upstart:The robot_upstart package provides scripts which may be ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 611
精华内容 244
关键字:

ros自启动