2.6自启动脚本问题

首先我们延续之前的教程,我们将启动所有ROS节点的命令放在一个自启动脚本中,让Ubuntu开机自动运行,在Ubuntu中有两种方式可以实现自启动脚本的功能。

第1种 ubuntu自带的 startup Application

首先新建一个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 INFOgnome-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节点,注(我在测试的过程中发现,这种方法必须要设置账户自动登录,应该是进入桌面以后才能运行我们设置的启动脚本)

第2种 rc.local 脚本启动

第2种是通过Ubuntu 1604 中的rc.local 这个脚本文件(/etc/rc.local),这里我们需要预先将启动的代码编写到一个xxx.sh 文件里面(当然,如果命令少的话你也可以将所有的命令直接卸载rc.local 中),然后打开rc.local文件在 “exit 0 前面添加自启动的命令” 如:

gnome-terminal --window -x bash -c "sh /home/crp/mytest.sh;exec bash"

这里还有另外一种命令格式:

gnome-terminal --window -x bash -c "sh /home/crp/mytest.sh;exec bash"
echo  123456| sudo -S
gnome-terminal -t "terminal-name" -X bash -c "sh ./xxx.sh"; exec bash;

这段命令是说,新建一个terminal终端,然后运行在 /home/crp/xxx.sh 目录下的 xxx.sh 文件, 同时切换为超级用户(密码为123456),之后再新建一个终端运行另外一个xxx.sh文件。

上述方式可能会失效,[7] 使用gnome-terminal --window -x bash -c 这种弹窗命令是不生效的。

第3种 安装脚本服务启动

第3种方式是将启动脚本安装为Ubuntu的启动服务:
1> 将启动脚本 “my_autorun.sh” 复制到 /etc/init.d/ 目录下
2> 接下来修改这个脚本的权限

sudo chmod 755 /etc/init.d/mytest.sh

3> 安装脚本服务

cd /etc/init.d
sudo update-rc.d mytest.sh defaults 95   #其中95是启动顺序

4> 卸载脚本服务(安装时候不需要操作)

 cd /etc/init.dsudo update-rc.d -f mytest.sh remove   #其中95是启动顺序

接下来我们新建一下名为“car_launch.sh”的文件,并添加以下内容:

3 小结

通过前面三篇的博客,梳理了自主导航小车的硬件框架,建图的算法框架以及导航的算法框架。所有的代码我都放在了这个github上。

在硬件篇中,由于我们使用的是标准平台,不涉及自己制作小车底盘,因此没有提及到底盘制作的步骤,后续将搭建一个自制的ROS底盘,一般来讲ROS底盘需要接收线速度和角度指令,底盘由单片机与ROS节点通讯,单片机负责电机的闭环控制,以及底盘的运动学模型转换。此外底盘上还需要有超声波和电源管理系统等额外传感模块。

在建图的过程中我们只是用了gmapping建图方式,gmapping只适用于2D的激光雷达,对于3D激光和RGB-D相机没法建图,因此后续计划学习google的cartography已经使用ORB-SLAM建立3D点云地图。

在运动规划过程中,我们只是浅显的理解了move_base的运行参数,由于其参数比较多,因此计划在后续过程中更加深入的理解move_base的运行参数

参考资料

【1】https://blog.csdn.net/huaweijian0324/article/details/81142610
【2】 https://www.ncnynl.com/category/ros-car/
【3】https://www.ncnynl.com/archives/201703/1415.html
【4】https://blog.csdn.net/Nksjc/article/details/77359952
【5】https://blog.csdn.net/x_r_su/article/details/52927564
【6】https://blog.csdn.net/baidu_34319491/article/details/106456571
【7】https://blog.csdn.net/Andrwin/article/details/100883593

上一篇 : 自主导航小车实践(三)

对于运行有问题的小伙伴欢迎邮件或留言讨论cenruping@vip.qq.com

自主导航小车实践(四)相关推荐

  1. 自主导航小车实践(二)

    这一部分中我们首先介绍自主导航小车的软件框架,随后介绍每一个部分的配置过程.(本章节主要分析自主导航小车的算法框架,文字表述较大,希望大家耐心读完!) 2.1 整体分析 实现自主导航小车一般分为三个部 ...

  2. 自主导航小车实践(一)

    本教程主要分享自己在制作自主导航小车的过程,本教程计划分为4章节来讲.第一章节分析自主导航小车的硬件结构,介绍自主导航小车的硬件系统.第二.三章介绍自主导航小车的软件框架与实际配置步骤.第四章对工作进 ...

  3. 自主导航小车实践(三)

    在上一篇博客中我们实现了遥控手柄控制先锋机器人移动,同时使用机器人自身携带的激光雷达进行地图扫描.在这一篇博客中我们将利用扫描到的地图进行导航以及路径规划.这里主要涉及map_server包.AMCL ...

  4. 开源自主导航小车MickX4(十)总结

    开源自主导航小车MickX4(十)总结 1 博客回顾 2 存在问题 3 学习建议 4 后续计划 在 开源自主导航小车MickX4 这个系列教程中,我们一共分为了十个博客部分进行了讲解差速小车的导航.由 ...

  5. 开源自主导航小车MickX4(九)基于move_base 的自主导航框架

    开源自主导航小车MickX4(九)move_base 导航框架 1 move_base 导航框架整体分析 1.1 map_server 1.2 AMCL定位 1.3 move_base 包 2 AMC ...

  6. 开源自主导航小车MickX4(五)gmapping建图

    开源自主导航小车MickX4(五)gmapping建图 1 激光雷达驱动 2 3D点云到2D点云的转换 3 gmapping 建图 3.1 安装 gmapping库 3.2 配置 gmapping 3 ...

  7. 开源自主导航小车MickX4(一)ROS底盘硬件

    开源自主导航小车MickX4 1 ROS底盘电气系统 1.1 底盘机械组装 1.2 底盘硬件框图 1.3 电气系统搭建 2 差速底盘运动学模型 参考资料 在学习ROS的阶段我们使用的都是标准的ROS底 ...

  8. 开源自主导航小车MickX4(三)底盘ROS节点

    开源自主导航小车MickX4(三)底盘ROS节点 1.底盘ROS节点 1.1 ROS节点功能定义 1.2 接收cmd_vel话题数据 1.3 发布里程计数据 1.4 发布IMU数据 1.5 发布超声波 ...

  9. 开源自主导航小车MickX4(二)ROS底盘运动控制

    开源自主导航小车MickX4 1 ROS底盘运动控制 1.1 小车控制流程图 1.2 小车控制核心代码分析 1.2.1 小车核心代码-遥控器解析 1.2.2 小车核心代码-电机反馈数据 1.2.3 小 ...

最新文章

  1. JavaScript初学者编程题(25)
  2. 基于ArcSDE的影像数据管理-疑惑篇 (转载)
  3. 【知识发现】隐语义模型LFM算法python实现(二)
  4. Python入门学习(四)
  5. Bentley Descartes V8i安装教程
  6. boost::detail::yield相关的测试程序
  7. 先天性脑部发育异常_宝宝出现发育迟缓,会有哪些症状?修正育儿知识分享!...
  8. 浏览器的referer是服务器修改的吗,利用浏览器调整http的referer
  9. Putty基础教程之(一).入门命令学习及编写HTML
  10. 2019年全网首发-vSphere 7之VCSA 7.0 RC部署指南(转载)
  11. does not esixt in the current content error
  12. onnx实现对pytorch模型推理加速
  13. GIT每次上传代码都必须输入用户名解决方案
  14. Matlab:拉盖尔高斯光束的干涉
  15. 机器学习读书笔记: 概率图模型
  16. 高质量程序设计指南(笔记)
  17. 黑马程序员---java基础-Java之IO
  18. 手机端上传图片出现“没有应用可执行操作”
  19. ASCⅡCharacters (ASCⅡ码对照表)
  20. python带你获取视频及弹幕数据~知识点满满(含完整源代码)

热门文章

  1. 30年前,钱学森就给VR取了个中国味特浓的名字
  2. python图层合并_GIS实验之文件夹中的批量图层合并Python实现
  3. 【论文解读】A Frustratingly Easy Approach for Entity and Relation Extraction
  4. The Key To Accelerating Your Coding Skills
  5. 南通SEO给家乡带来了什么?
  6. 计算机网络学习笔记5(Internet结构和ISP)
  7. 360°全景视频图制作
  8. 计算机配色标准白板,计算机配色模型中存在的限制点
  9. 面试官:我就问了一个JVM性能调优,没想到他能吹半个小时
  10. APP上架苹果商店必看 如何通过苹果App Store审核