1.前言
前文ROS機(jī)器人底盤(33)-ROS程序開機(jī)自啟動(dòng)(1)使用了ROS
的 robot_upstart包設(shè)置了pibot_bringup
開啟啟動(dòng)的方法倔约,在統(tǒng)一用到其他的launch上會(huì)發(fā)現(xiàn)無法啟動(dòng)的問題秃殉,比如在啟動(dòng)gmapping
時(shí)候,沒有相關(guān)環(huán)境變量等,本文介紹使用systemd
設(shè)置啟動(dòng)項(xiàng)
2.使用systemctrl創(chuàng)建服務(wù)
2.1新建服務(wù)
在/etc/systemd/system
創(chuàng)建pibot.service
# pibot.serive
[Unit]
Description=this is pibot service
[Service]
Type=simple
ExecStart=/usr/bin/pibot_start
ExecStop=/usr/bin/pibot_stop
ExecRestart=/usr/bin/pibot_restart
[Install]
WantedBy=multi-user.target
2.2 添加執(zhí)行腳本
看到我們對(duì)應(yīng)的項(xiàng)目添加腳本即可浸剩,這里的腳本啟動(dòng),這里需要設(shè)置ROS
的相關(guān)環(huán)境和PIBOT
的相關(guān)環(huán)境及變量
我們手動(dòng)輸入命令啟動(dòng)時(shí)候的環(huán)境變量是寫在
~/.basrhc
,該文件會(huì)在打開bash shell
的時(shí)候被加載
#pibot_start
#!/bin/bash
log_file=/tmp/pibot-upstart.log
echo "$DATE: pibot-start" >> $log_file
pibotrc=/etc/pibotrc
. $pibotrc
code_name=$(lsb_release -sc)
if [ "$code_name" = "trusty" ]; then
ros_version="indigo"
elif [ "$code_name" = "xenial" ]; then
ros_version="kinetic"
elif [ "$code_name" = "bionic" ]; then
ros_version="melodic"
else
echo "PIBOT not support $code_name" >> $log_file
exit
fi
echo "SYS_DIST: $code_name" >> $log_file
echo "ROS_DIST: $ros_version" >> $log_file
echo "LOCAL_IP: $LOCAL_IP" >> $log_file
echo "ROS_MASTER_URI: $ROS_MASTER_URI" >> $log_file
echo "ROS_IP: $ROS_IP" >> $log_file
echo "HOSTNAME: $ROS_HOSTNAME" >> $log_file
echo "PIBOT_MODEL: $PIBOT_MODEL" >> $log_file
echo "PIBOT_LIDAR: $PIBOT_LIDAR" >> $log_file
echo "PIBOT_BOARD: $PIBOT_BOARD" >> $log_file
# 這里寫需要添加的啟動(dòng)launch命令
roslaunch pibot_navigation gmapping.launch
以hera為例
#pibotenv
#source ros
source /opt/ros/kinetic/setup.bash
LOCAL_IP=192.168.12.1 #這里IP需要設(shè)置本機(jī)IP钾军,連接外網(wǎng)需要在路由器設(shè)置好固定`IP`
export ROS_IP=$LOCAL_IP
export ROS_HOSTNAME=$LOCAL_IP
export PIBOT_MODEL=hera
export PIBOT_LIDAR=rplidar
export PIBOT_BOARD=stm32f4
export ROS_MASTER_URI=http://$LOCAL_IP:11311
#source pibot
source /home/pibot/pibot_ros/ros_ws/devel/setup.bash
2.3 測(cè)試
- 啟動(dòng)
sudo systemctl start pibot
- 停止
sudo systemctl stop pibot
- 重啟
sudo systemctl restart pibot
- 開啟開機(jī)啟動(dòng)
sudo systemctl enable pibot
- 關(guān)閉開機(jī)啟動(dòng)
sudo systemctl disable pibot
- 查看是否開機(jī)啟動(dòng)
systemctl is-enabled pibot
- 刷新配置
sudo systemctl daemon-reload
- 查看狀態(tài)
sudo systemctl status pibot
3.驗(yàn)證
重啟后,查看狀態(tài)绢要,沒有錯(cuò)誤顯示則為正常
4.其他
4.1 一鍵配置
pibot
提供一間配置腳本pibot_add_upstart.sh
#修改 ~/pibot_ros/pibot_upstart/pibotenv修改參數(shù)
cd ~/pibot_ros
./pibot_add_upstart.sh