Автоматически завершать все узлы после вызова roslaunch - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь запустить несколько файлов roslaunch, один за другим, из скрипта bash. Однако когда узлы завершают выполнение, они зависают с сообщением:

[grem_node-1] process has finished cleanly
log file: /home/user/.ros/log/956b5e54-75f5-11e9-94f8-a08cfdc04927/grem_node-1*.log

Затем мне нужно Ctrl-C, чтобы получить killing on exit для всех узлов, запущенных из файла запуска. Есть ли способ заставить узлы автоматически убивать себя при выходе? Потому что на данный момент мне нужно Ctrl-C каждый раз, когда узел завершается.

Кстати, мой bash-скрипт выглядит так:

python /home/user/git/segmentation_plots/scripts/generate_grem_launch.py /home/user/Data2/Coco 0 /home/user/git/Async_CNN/config.txt
source ~/setupgremsim.sh
roslaunch grem_ros grem.launch config:=/home/user/git/Async_CNN/config.txt
source /home/user/catkin_ws/devel/setup.bash
roslaunch rpg_async_cnn_generator conf_coco.launch

Скрипт setupgremsim.sh создает другое рабочее пространство catkin.

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Спасибо всем за совет.То, что я закончил, было этим;Я запустил свои ROS-узлы из отдельных скриптов Python, которые я затем вызвал из скрипта bash.В python вы можете завершить дочерние процессы с shutdown.Таким образом, чтобы предоставить пример для кого-то еще с этой проблемой:

bash script:

#!/bin/bash
for i in {0..100}
do
   echo "========================================================\n"
   echo "This is the $i th run\n"
   echo "========================================================\n"
   source /home/timo/catkin_ws/devel/setup.bash
   python planar_launch_generator.py
done

и затем внутри planar_launch_generator.py:

import roslaunch
import rospy

process_generate_running = True

class ProcessListener(roslaunch.pmon.ProcessListener):
    global process_generate_running

    def process_died(self, name, exit_code):
        global process_generate_running
        process_generate_running = False
        rospy.logwarn("%s died with code %s", name, exit_code)


def init_launch(launchfile, process_listener):
    uuid = roslaunch.rlutil.get_or_generate_uuid(None, False)
    roslaunch.configure_logging(uuid)
    launch = roslaunch.parent.ROSLaunchParent(
        uuid,
        [launchfile],
        process_listeners=[process_listener],
    )
    return launch


rospy.init_node("async_cnn_generator")
launch_file = "/home/user/catkin_ws/src/async_cnn_generator/launch/conf_coco.launch"
launch = init_launch(launch_file, ProcessListener())
launch.start()

while process_generate_running:
        rospy.sleep(0.05)

launch.shutdown()

Используя этот метод, выможет получать любое количество различных рабочих областей catkin и запускать любое количество файлов запуска.

0 голосов
/ 22 мая 2019

Попробуйте сделать это

(1) Для каждого запуска вы вводите отдельный скрипт оболочки.Итак, у вас есть N скрипт. В каждом скрипте вызывайте файл запуска в xterm.xterm -e "roslaunch yourfacnylauncher"

(2) Подготовьте мастер-скрипт, который вызывает все N дочерних скриптов в той последовательности, в которой вы хотите, чтобы они были, и задерживаете, чтобы это было.

Как только это будет сделано, xterm должен покончить с собой.

Редактировать.Вы можете вручную убить одного, если будете знать, что он зависнет.Например, ниже

#!/bin/sh
source /opt/ros/kinetic/setup.bash
source ~/catkin_ws/devel/setup.bash

запустите ROScore, используя systemd или rc.local, используя lxtermal или другие терминалы, чтобы избежать аварийного уничтожения.Затем запустите ту часть, которая, как вы думаете, повесит или создаст проблему.Эхо-> действие при необходимости

xterm -geometry 80x36+0+0 -e "echo 'uav' | sudo -S dnsmasq -C /dev/null -kd -F 10.5.5.50,10.5.5.100 -i enp59s0 --bind-dynamic" & sleep 15

Глупый OUSTER LIDAR не может автоматически настроить, как Veloydne, и будет висеть здесь.другой код не может быть запущен

killall xterm & sleep 1

Позволяет просто убить его и продолжить выполнение других запусков

xterm -e "roslaunch '/home/uav/catkin_ws/src/ouster_driver_1.12.0/ouster_ros/os1.launch' os1_hostname:=os1-991907000715.local os1_udp_dest:=10.5.5.1" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...