robot_upstart 實現(xiàn)ROS程序開機自啟動

robot_upstart install啟動命令參數(shù)分析

命令示例

rosrun robot_upstart install --interface lo --master "http://127.0.0.1:11311" --user root --setup /home/test/ros_ws/setup.bash test_bringup/launch/test_start.launch --logdir /home/test/logs

沒有指定job(service)名稱就用“test_bringup”中的"test"

參數(shù)說明

usage: install [-h] [--job JOB] [--interface ethN] [--user NAME]
[--setup path/to/setup.bash] [--rosdistro DISTRO]
[--master http://MASTER:11311] [--logdir path/to/logs]
[--augment] [--provider [upstart|systemd]] [--symlink]
pkg/path [pkg/path ...]
--job 指定job(service)名稱耸弄,如果沒有制定,就使用package中的一部分 (一般為‘_’之前的單詞)
--interface 指定網(wǎng)絡接口
--user 指定用戶啟動launch腳本
--setup 指定使用特殊工程下的setup.bash文件赚抡。
--rosdistro 指定ros的發(fā)布版本
--master 指定ROS_MASTER_URI
--logdir 指定日志文件目錄
--augment=False 不創(chuàng)建job既荚,只是拷貝用戶文件待笑。默認job已經(jīng)創(chuàng)建成功
pkg/path 安裝job launch的package和path名稱乳幸,保持路徑以包名開頭(不可使用絕對或workspace最top路徑)
--provider 指定 provider 在無法自動檢測正確的 provider 情況下
--symlink=False 創(chuàng)建軟鏈接肝集,而不是拷貝啟動腳本瞻坝。

成功執(zhí)行后,說明

  • /etc/init/下生成 test.conf
# THIS IS A GENERATED FILE, NOT RECOMMENDED TO EDIT.

description "bringup test"

start on local-filesystems
stop on runlevel [016]

console log
respawn

exec test-start
pre-stop exec test-stop
  • /etc/ros下產(chǎn)生
/etc/ros$ tree
.
├── indigo
│   └── test.d
│       ├── test_start.launch
└── rosdep
    └── sources.list.d
        └── 20-default.list

4 directories, 3 files

其中 test.d下有

/etc/ros/indigo/test.d$ cat .installed_files 
/etc/ros/indigo/test.d/test_start.launch
/etc/ros/indigo/test.d/.installed_files
/usr/sbin/test-stop
/usr/sbin/test-start
/etc/init/test.conf
  • 查看日志
sudo tail -f  -n 10 /var/log/upstart/test.log 
啟動時的log和節(jié)點運行的log都在這里面 (注意:這個test.log為服務名)

如果launch啟動失敗杏瞻,會提示log記錄的全路徑所刀,按照提示就是能找到launch啟動失敗的詳細信息,可以幫助問題定位捞挥。

額外信息

cat /usr/sbin/test-start

#!/bin/bash
# THIS IS A GENERATED FILE, NOT RECOMMENDED TO EDIT.

function log() {
  logger -s -p user.$1 ${@:2}
}

log info "test: Using workspace setup file /home/test/ros_ws/install/setup.bash"
source /home/test/ros_ws/install/setup.bash
JOB_FOLDER=/etc/ros/indigo/test.d

log_path="/home/test/logs"
if [[ ! -d $log_path ]]; then
  CREATED_LOGDIR=true
  trap 'CREATED_LOGDIR=false' ERR
    log warn "test: The log directory you specified \"$log_path\" does not exist. Attempting to create."
    mkdir -p $log_path 2>/dev/null
    chown root:root $log_path 2>/dev/null
    chmod ug+wr $log_path 2>/dev/null
  trap - ERR
  # if log_path could not be created, default to tmp
  if [[ $CREATED_LOGDIR == false ]]; then
    log warn "test: The log directory you specified \"$log_path\" cannot be created. Defaulting to \"/tmp\"!"
    log_path="/tmp"
  fi
fi

export ROS_HOSTNAME=$(hostname)

export ROS_MASTER_URI=http://127.0.0.1:11311

log info "test: Launching ROS_HOSTNAME=$ROS_HOSTNAME, ROS_IP=$ROS_IP, ROS_MASTER_URI=$ROS_MASTER_URI, ROS_LOG_DIR=$log_path"

# If xacro files are present in job folder, generate and expand an amalgamated urdf.
XACRO_FILENAME=$log_path/test.xacro
XACRO_ROBOT_NAME=$(echo "test" | cut -d- -f1)
rosrun robot_upstart mkxacro $JOB_FOLDER $XACRO_ROBOT_NAME > $XACRO_FILENAME
if [[ "$?" == "0" ]]; then
  URDF_FILENAME=$log_path/test.urdf
  rosrun xacro xacro $XACRO_FILENAME -o $URDF_FILENAME
  if [[ "$?" == "0" ]]; then
    log info "test: Generated URDF: $URDF_FILENAME"
  else
    log warn "test: URDF macro expansion failure. Robot description will not function."
  fi
  export ROBOT_URDF_FILENAME=$URDF_FILENAME
fi

# Assemble amalgamated launchfile.
LAUNCH_FILENAME=$log_path/test.launch
rosrun robot_upstart mklaunch $JOB_FOLDER > $LAUNCH_FILENAME
if [[ "$?" != "0" ]]; then
  log err "test: Unable to generate amalgamated launchfile."
  exit 1
fi
log info "test: Generated launchfile: $LAUNCH_FILENAME"

# Warn and exit if setuidgid is missing from the system.
which setuidgid > /dev/null
if [ "$?" != "0" ]; then
  log err "test: Can't launch as unprivileged user without setuidgid. Please install daemontools package."
  exit 1
fi

# Punch it.
export ROS_HOME=$(echo ~root)/.ros
export ROS_LOG_DIR=$log_path
setuidgid root roslaunch $LAUNCH_FILENAME &
PID=$!

log info "test: Started roslaunch as background process, PID $PID, ROS_LOG_DIR=$ROS_LOG_DIR"
echo "$PID" > $log_path/test.pid

wait "$PID"

cat /usr/sbin/test-stop

#!/bin/bash
# THIS IS A GENERATED FILE, NOT RECOMMENDED TO EDIT.

PID=$(cat /home/test/logs/test.pid)
logger -p user.info "Attempting to stop test (PID $PID)"
kill $PID

Tips: 查看進程樹命令 pstree -ng

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末浮创,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子砌函,更是在濱河造成了極大的恐慌斩披,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讹俊,死亡現(xiàn)場離奇詭異雏掠,居然都是意外死亡,警方通過查閱死者的電腦和手機劣像,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門乡话,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人耳奕,你說我怎么就攤上這事绑青。” “怎么了屋群?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵闸婴,是天一觀的道長。 經(jīng)常有香客問我芍躏,道長邪乍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮庇楞,結果婚禮上榜配,老公的妹妹穿的比我還像新娘。我一直安慰自己吕晌,他們只是感情好蛋褥,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著睛驳,像睡著了一般烙心。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乏沸,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天淫茵,我揣著相機與錄音,去河邊找鬼蹬跃。 笑死痘昌,一個胖子當著我的面吹牛,可吹牛的內容都是我干的炬转。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼算灸,長吁一口氣:“原來是場噩夢啊……” “哼扼劈!你這毒婦竟也來了?” 一聲冷哼從身側響起菲驴,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤荐吵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后赊瞬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體先煎,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年巧涧,在試婚紗的時候發(fā)現(xiàn)自己被綠了薯蝎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡谤绳,死狀恐怖占锯,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情缩筛,我是刑警寧澤消略,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站瞎抛,受9級特大地震影響艺演,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一胎撤、第九天 我趴在偏房一處隱蔽的房頂上張望晓殊。 院中可真熱鬧,春花似錦哩照、人聲如沸挺物。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽识藤。三九已至,卻和暖如春次伶,著一層夾襖步出監(jiān)牢的瞬間痴昧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工冠王, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留赶撰,地道東北人。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓柱彻,卻偏偏與公主長得像豪娜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子哟楷,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354