之前在项目上遇到一个需求:在无人驾驶车辆上安装一键启动程序以及开机自启动程序,这样就可以使得用户在上车之后轻松完成车辆的启动,避免繁琐的指令操作

一键启动的操作大概分为以下四个阶段:

1. 设置sudo免密

2. 编写一键启动shell文件 ——包括线控,控制,档位

3. 编写自启动shell文件——包括通讯,视觉,雷达,规划,决策,POS

4. 添加自启动程序到开机程序

5. 编写一键终止程序——关闭线控,控制,档位

系统: ubantu18.04

1. sudo免密

这是因为在后期一件启动的过程中某些指令会需要使用权限,需要输入密码,如果密码输入不及时就会中断程序,当然一般情况下来不及输入

看了一些教程,都是通过管道之类的解决,但是太麻烦,不如直接设置sudo免密

不过设置之后,之后涉及到操作权限的口令要注意哦!!!!!

首先打开终端,在命令行输入:

sudo vim /etc/sudoers

会打开一个编辑界面

找到最下面的一行

写入

sptuan  ALL=(ALL:ALL) NOPASSWD: ALL

写入之后,按ESC键后输入:wq 回车保存并退出

2. 编写一键启动shell文件

#!/bin/sh
#chkconfig: 2345 22 80
#description: Filebeat Service# 打开控制层
{
gnome-terminal --tab "cw_control" -x bash -c "cd /home/sptuan/Cw_BUS/autotju_bus/tjuPy_zt/modules/wiredcontrol/ChengWu_bus_One_wending;python2 cw_control.py ; exec bash" &
gnome-terminal --tab "cw_wiredcontrol" -x bash -c "cd /home/sptuan/Cw_BUS/autotju_bus/tjuPy_zt/modules/wiredcontrol/ChengWu_bus_One_wending;python2 cw_wiredcontrol_.py ; exec bash" &
gnome-terminal --tab "cw_start" -x bash -c "cd /home/sptuan/Cw_BUS/autotju_bus/tjuPy_zt/modules/wiredcontrol/ChengWu_bus_One_wending;python2 cw_start_stop_button.py ; exec bash"
}

其实命令比较单一:

gnome-terminal --tab :为打开窗口的意思(一个终端下的多个窗口)

x bash -c : 后面的“”中是我们原本要在终端输入的命令,例如在本项目中为了保险起见,我们用命令行先进入对应文件夹之后再启动对应程序

在分号内不同的命令用分号 ; 隔开

3. 编写自启动shell文件

自启动文件其实与一键启动的文件一样,同样是一个shell脚本

唯一不同的是我们需要把他加入的开机启动的程序中,也就是我们的第四步骤

首先我们先编写好这个文件,在这里我们把所有的准备工作包括视觉,雷达,通信等都添加到这个脚本中

#!/bin/sh
#chkconfig: 2345 22 80
#description: Filebeat Service# 现在可以实现免密和自启动,请把该文件放在主目录下sleep 3s
# 打开权限{
gnome-terminal --window -e 'bash -c "source /opt/ros/melodic/setup.bash;roscore;exec bash"' --tab -e 'bash -c "sudo chmod 666 /dev/ttyUSB0;sh can_up.sh;candump can0;exec bash"'
}&&sleep 2s# 启动激光雷达
{
gnome-terminal --window -e 'bash -c "cd /home/robosense;./start.sh;candump can0;exec bash"'
}&&sleep 3s# 打开视觉端口
{
gnome-terminal --window -e 'bash -c "cd /home/catkin_ws_LidarParse;source devel/setup.bash;roslaunch zt_camera cw_camera.launch;exec bash"'
}&&sleep 5s# 启动激光雷达数据发送
{
gnome-terminal --window -e 'bash -c "cd /home/catkin_ws_calmcar_chengwu;source devel/setup.bash;rosrun chengwu_lidar chengwu_lidar;exec bash"'
}&&sleep 3s# 启动s1
{
gnome-terminal --window -e 'bash -c "cd /home/catkin_ws_roi;rosrun s_l_one s_l_one_node;exec bash"'
}&&sleep 2s# 启动POS,carmera,decision
{
gnome-terminal --tab --name="cw_POS" -x bash -c "cd/home/zhongtong/Cw_BUS/autotju_bus/tjuPy_zt/modules/wiredcontrol/ChengWu_bus_first_codes;python cw_POS.py ; exec bash" &
sleep 0.5s &
gnome-terminal --tab "cw_carmera" -x bash -c "cd/home/zhongtong/Cw_BUS/autotju_bus/tjuPy_zt/modules/wiredcontrol/ChengWu_bus_first_codes ; python3 cw_sl_by_carmera.py ; exec bash" &
sleep 0.5s &
gnome-terminal --tab "cw_decision" -x bash -c "cd/home/zhongtong/Cw_BUS/autotju_bus/tjuPy_zt/modules/wiredcontrol/ChengWu_bus_first_codes ; python3 cw_decision_new.py ; exec bash"
}&&sleep 2s# 启动rviz
{
gnome-terminal --window -e 'bash -c "rviz -d zhongtong_ONE/config/rviz/perception.rviz;exec bash"'
}&&# 打开控制层{
gnome-terminal --tab "cw_plan" -x bash -c "cd /home/sptuan/Cw_BUS/autotju_bus/tjuPy_zt/modules/wiredcontrol/ChengWu_bus_One_wending;python2 cw_plan_old.py ; exec bash" &
gnome-terminal --tab "ce_decision" -x bash -c "cd /home/sptuan/Cw_BUS/autotju_bus/tjuPy_zt/modules/wiredcontrol/ChengWu_bus_One_wending;python3 cw_decision.py ; exec bash" &
}

每一个{}中都是一个单独的功能,{}之间需要用&&连接

gnome-terminal --window 是单独开一个终端

而gnome-terminal --tab是单独开一个窗口

注意:一键启动和自启动的shell脚本最好放在主目录下

4.添加自启动到开机文件中

打开终端,在终端中输入:gnome-session-properties

会打开以下界面:

点击添加

在命令中可以点击浏览,选择你写好的开机自启动shell文件

名称和备注就随便了,不是很重要

5.编写一键终止程序

这是为了防止中途出现紧急情况人工接管后,让程序自动暂停,暂停的程序应该和一键启动的程序是呼应的,一键启动有哪些,一键终止就有哪些!所以编写时候注意程序的设计,把不需要暂停的放在自启动中!

一键终止程序如下:

#!/bin/bash# PROCESS=`ps -ef | grep python | grep -v grep | awk '{print $2}' | xargs kill -9`PROCESSE=`ps -ef | grep cw_start_stop_button.py | awk '{print $2}' | xargs kill -9`PROCESSA=`ps -ef | grep cw_wiredcontrol_.py | awk '{print $2}' | xargs kill -9`PROCESSB=`ps -ef | grep cw_control.py | awk '{print $2}' | xargs kill -9`# PROCESSB=`ps -ef | grep cw_plan_old.py | awk '{print $2}' | xargs kill -9`

这其实是一个信息传输的命令

grep cw_start_stop_button.py :是把关于cw_start_stop_button.py的位置寻找到之后传递给awk,最后通过kill杀死进程!其他的原理都是一样的

由此就完成了整个程序设计和功能实现,欢迎大家交流讨论!

一键启动及自启动程序相关推荐

  1. windows一键启动多程序个程序

    需求场景:办公与编程时,启动软件,一个一个手动来双击打开,太累!怎么办?开始我们的一键启动多个程序.时间就是生命! 新建一个记事本 先建一个空的记事本,想想需要一键启动哪些程序,我们举例,想一次性打开 ...

  2. 【386w.com】一键启动电脑应用程序不再是梦想

    也许你曾想过有朝一日,你只要在电脑前输入"a"启动IE.输入"b"启动QQ.输入"c"启动MSN.输入"d"打开Outl ...

  3. Bat一键启动多个程序和命令【详细总结】

    Hello!忙了好久,最近挺忙的,不知不觉已经来到星期六了,博客好久也没发文了, 恰好自己最近来开机总是手动点击启动许多服务和命令,好麻烦(懒人思想~哈哈),我就思考着windows有没有像Linux ...

  4. [Ubuntu-001]开发桌面快捷键双击一键启动多个程序

    工作中,每天电脑重启,反复需要启动一些程序和开发工具,为了工作方便: 让我门学会如何一个快捷键双击,迅速启动多个程序. 第一步:任意位置:新建空白文件:文件名随意,新建方式随意,右键新建,命令新建都可 ...

  5. bat 一键启动多个程序

    每次开机,都要启动一大堆软件,卧槽,头疼,这个时候要是有个东西一次能把我需要的都启动就好了 终于,它来了,它迈着坚定的步伐走来了,哈哈哈^_^ 使用方法: 新建文本,复制下面代码,地址改为xxx.ex ...

  6. 一键启动多程序BAT脚本

    一键启动多程序BAT脚本 自己的电脑的是固态盘的,开机启动还挺快的,但是开机之后每次都要花费很多的时间,在启动开发环境上,以及IDE上,虽然启动速度不慢,但是一个个的点,感觉比较麻烦,于是推荐大家使用 ...

  7. cmd一键启动程序脚本

    title "空域资源管理系统一键启动脚本"echo "空域资源管理系统一键启动脚本开始执行"set timeout=30echo "启动脚本间隔时间 ...

  8. WPF 开机一键启动程序V1.0【原创】

    每天上班第一件事就是开电脑,然后开一堆软件... QQ..Opear..VS..虚拟机..RTX..等等..很费时间.有了这个软件就可以在开始的时候点击一键启动,之后你可以去泡杯茶了. 最近也正在回顾 ...

  9. 多个exe打包成一个exe安装程序,安装后可一键启动多个服务

    博客帮助我解决了很多问题,于是想把自己遇到的问题记录下来希望对他人有所帮助.有些帖子写得很是简单,一旦忽略了某个关键细节,就可能看不懂了,就要花费更多的时间才能解决问题或者另寻良方,所以我自己尽可能写 ...

最新文章

  1. Django book 中文
  2. Android Studio——字体大小的修改
  3. mysql开创_MySQL创始人打造MariaDB 全面兼容MySQL 5.1
  4. Linux chown命令:给资源绑定用户权限
  5. matlab to r,matlab to R import structure
  6. 俄国数学家称:“平行线可以相交”,却遭到质疑,死后12年被证实
  7. SaaS 中 6 种常见 UI 入职模式
  8. nohup与区别于使用
  9. android UI之去掉状态栏
  10. ehcache 在web项目中使用
  11. web导出excel文件的几种方法(转)
  12. apicloud 请删除手机中的apploader后在尝试
  13. JNDI(Java Naming and Directory Interface)介绍
  14. 从零开始学习SEO的基础概念
  15. 每日一道题,划水有意义,看我不卷死你们(评论送书)
  16. 为什么百度查ip查到的ip和dos里面ipconfig查到的不一样及IPv4地址分类
  17. 1103:陶陶摘苹果
  18. python数据清洗笔记
  19. 物联网-The Internet of Things
  20. wireshark https 抓包

热门文章

  1. 百度人脸识别API 的使用
  2. 坦克小战的游戏规则说明(3)
  3. 数据矿工学习-样本自适应的在线卷积稀疏编码论文-个人中文翻译
  4. c加加语言链表的交换,C加加课程设计.doc
  5. android自定义透明圆形,Android给TextView设置透明背景、圆角边框
  6. OpenCV图像模糊:高斯滤波、双边滤波
  7. C语言程序代码的125个建议
  8. Harbor 组成原理
  9. 字符串输出时最后出现乱码
  10. 基于springboot的药店进销存管理系统#毕业设计