开机自动启动控制台并运行自己编译好的c++程序

来源:互联网 发布:子域名 需要备案吗 编辑:程序博客网 时间:2024/04/28 19:07

笔记:

项目简介:在jetson tx2开发板上安装ubuntu16.04,然后用c/c++实现无人机感知与避撞。程序主要功能是:启动程序后等待地面站发送离线航点数据帧,收到后等待地面站发送开启避障指令,收到开启避障指令后,程序在一个大的循环里完成 :接收无人机遥测信息,接收雷达感知信息,控制双目摄像头感知环境,并根据各种信息完成避撞策略生成避障航点给无人机,过程中不断向地面站软件发送状态信息。

问题:  现在需要:   开机自动运行我们这个程序。 

分析: 与网上普通的开机自启动问题相比 我们这个问题的特殊性有:

1.arm-linux

2.我的c++程序在终端上输出了很多参数与调试信息,开机后不能在后台运行,需要显示终端。

3.我的c++程序是开机打开串口然后等待串口输入数据,没有数据则程序一直等待,串口收到符合要求的数据后才继续运行。

解决过程: 网上的方法大都是修改/etc/rc.local文件或者在/etc/init.d里面编写shell来实现开机自启动。于是我按照网上的方法,在rc.local里exit 0之前加上了一句sudo ./home/nvidia/Desktop/obs01/build/obs (我的工程放在了桌面,build文件夹里的obs使我们make生成的可执行程序,注意这里要写可执行程序的完整目录,从/开始),重启之后没有任何反映,ps命令查看进程也没有(也有可能不会用ps命令),于是为了知道程序到底运行没有,我在我工程代码最前面加上了一句生成一个txt文件的语句,然后重启发现txt生成了,但是我在地面站发送指令,tx2也没什么反映(除了终端上的输出信息,应该还会实时显示摄像头采集的图片),然后我直接双击obs生成了txt,然后在地面站输入指令,实时显示了摄像头采集的图片。不知道什么原因。之后试了各种方法不能解决,最后试了这个 Ubuntu 开机自动启动roscore命令 自动打开终端执行脚本命令 博客的方法,成功了,特别简单。


解决方法总结: 打开终端,在终端中执行gnome-session-properties,会弹出一个“启动应用程序首选项”的菜单 点击添加

名称 注释随便输入

命令的地方输入     gnome-terminal -x ./home/nvidia/Desktop/obs01/build/obs  

如果想要后台运行则换成

bash ./home/nvidia/Desktop/obs01/build/obs


延伸:

这样就可以开机自动在终端上运行你的程序了。

如果你还想在你的c++程序中控制系统操作,比如控制重新启动运行程序,或者控制重启和关机。可以这样操作:

system("gnome-terminal -x ./home/nvidia/Desktop/obs01/build/obs");//重新打开一个终端重新运行此程序

system("shutdown");//关机

system("reboot"); //重启


希望能帮到大家!

阅读全文
0 0
原创粉丝点击