第一次写,随便写写。
最近想要在树莓派开机时自动运行一个ROS功能包,结合了网上的办法,踩了一些坑,然后修改了一番完成了。
由于robot_upstart、gnome-session-properties、init.d等方法我都因为各种原因不能实现,
所以最终我使用了在rc.local 写运行脚本的方式实现。
一、创建一个xxx.sh文件
文件内容如下:
#!/bin/sh
#chkconfig: 2345 80 90
#description:ros_start.sh
export ROS_HOSTNAME=“你的地址,一般是127.0.1.1”
export ROS_MASTER_URI=http://“主机地址”:11311
. /opt/ros/melodic/setup.sh
. ~/catkin_ws/devel/setup.sh
date >> ~/start_log.txt
echo ":ros running" >> ~/start_log.txt
nohup roslaunch 功能包名称 xxx.launch & >> ~/start_log.txt
sleep 30
date >> ~/start_log.txt
echo ":nav_patrol running" >> ~/start_log.txt
nohup roslaunch 功能包名称 xxx.launch & >> ~/start_log.txt
sleep 30
date >> ~/start_log.txt
echo ":nav_patrol running" >> ~/start_log.txt
nohup roslaunch 功能包名称 xxx.launch & >> ~/start_log.txt
sleep 30
上面为什么要这样写呢,我要解释一下
首先我是参考了其他人的方法的,这是参考网址
链接: https://zhuanlan.zhihu.com/p/56551712.
他这里我修改了两个点。
第一个是他是用修改~/.bashrc的方式实现的开机启动roslaunch,我发现这种只有在连接屏幕或者vnc连接桌面的时候才能开始运行。
第二个是通过查看日志文件,roslaunch程序跑了一下就突然停了,然后我就随便改改,将运行程序跑一遍变成跑3遍,并且每一遍相隔30s,我发现可以了。。后来我想了想,应该是跑了roslaunch被其他进程之类的阻塞了,又或者是wifi还未连接成功我就运行了,因为我的主机是在其他设备上跑的,可能他突然无法识别到roscore启动了然后就停止了。所以我需要吧启动时间延长一点,等到其他条件准备完毕才行。
好吧,以上都是我猜的。
二、修改xxx.sh文件权限
使用sudo chmod +x xxx.sh命令使得改脚本可执行
三、修改/etc/rc.local文件
在最末尾exit 0前面插入下列
su user -c “exec ~/xxx.sh”
其中user是你的用户名,~/xxx.sh是脚本文件位置。
三、开机测试
sudo reboot
备注:
(1) nohup
加在一个命令的最前面,表示不挂断的运行命令
(2) &
加载一个命令的最后面,表示这个命令放在后台执行