Add "kill.sh" "MPI_Gazebo_launch.sh" "mygzserver" three scripts to launch MPI_simulation task automatically under ROS-Gazebo framework
This commit is contained in:
parent
6d92a1b9e7
commit
8df672a460
|
@ -0,0 +1,93 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#########################################################################
|
||||||
|
# Author: Zhang Shuai #
|
||||||
|
# Date: 2019-05-23 #
|
||||||
|
# Description: launch a MPI Gazebo simulation task #
|
||||||
|
# Usage: ./MPI_Gazebo_launch.sh [hostfile] [world's path and name] #
|
||||||
|
#########################################################################
|
||||||
|
|
||||||
|
host_file=$1
|
||||||
|
world_file=$2
|
||||||
|
|
||||||
|
host_count=0
|
||||||
|
hosts=()
|
||||||
|
|
||||||
|
#获取hostfile文件中的host名字
|
||||||
|
while read line
|
||||||
|
do
|
||||||
|
if [ -n "$line" ]
|
||||||
|
then
|
||||||
|
temp=${line% *}
|
||||||
|
hosts[$host_count]=$temp
|
||||||
|
let host_count=$host_count+1
|
||||||
|
fi
|
||||||
|
done < $host_file
|
||||||
|
|
||||||
|
echo "host_count:$host_count"
|
||||||
|
|
||||||
|
for((i=0;i<host_count;i++))
|
||||||
|
do
|
||||||
|
echo "host_name:${hosts[$i]}"
|
||||||
|
done
|
||||||
|
|
||||||
|
#登入各节点启动roscore (source还有改进空间,ROS运行的工作目录应该作为参数传进来)
|
||||||
|
for((i=0;i<host_count;i++))
|
||||||
|
do
|
||||||
|
ssh -f -n ${hosts[$i]} "source ~/catkin_ws/devel/setup.bash;
|
||||||
|
roscore;
|
||||||
|
echo roscore_done!"
|
||||||
|
echo "${hosts[$i]}:roscore_good"
|
||||||
|
done
|
||||||
|
|
||||||
|
sleep 5s
|
||||||
|
|
||||||
|
#登入第一个节点启动MPI的gzserver,并成为各自节点上的ROS node
|
||||||
|
ssh -f -n ${hosts[0]} "cd ~/MPI;
|
||||||
|
mpiexec -hostfile hostfile -np 1 mygzserver $world_file : -np 1 mygzserver $world_file;
|
||||||
|
echo mpiexec_done!"
|
||||||
|
echo "${hosts[0]}:mpiexec_good"
|
||||||
|
|
||||||
|
sleep 20s
|
||||||
|
|
||||||
|
#登入各节点roslaunch加载模型(source还有改进空间,ROS运行的工作目录应该作为参数传进来)
|
||||||
|
for((i=0;i<host_count;i++))
|
||||||
|
do
|
||||||
|
ssh -f -n ${hosts[$i]} "source ~/catkin_ws/devel/setup.bash;
|
||||||
|
roslaunch hector_quadrotor_gazebo hector_2_single_gazebo_mpi_spawn_test.launch;
|
||||||
|
echo roslaunch_done!"
|
||||||
|
echo "${hosts[$i]}:roslaunch_good"
|
||||||
|
done
|
||||||
|
|
||||||
|
sleep 20s
|
||||||
|
|
||||||
|
#登入各节点开始仿真
|
||||||
|
for((i=0;i<host_count;i++))
|
||||||
|
do
|
||||||
|
ssh -f -n ${hosts[$i]} "gz world -p 0;
|
||||||
|
echo start_done!;
|
||||||
|
exit"
|
||||||
|
echo "${hosts[$i]}:start_good"
|
||||||
|
done
|
||||||
|
|
||||||
|
sleep 5m
|
||||||
|
|
||||||
|
#登入各节点kill相关进程以结束仿真(1.目前方式比较暴力,后续改进;2.cd ~/MPI 还要进行灵活性优化)
|
||||||
|
for((i=0;i<host_count;i++))
|
||||||
|
do
|
||||||
|
ssh -f -n ${hosts[$i]} > /dev/null 2>&1 "cd ~/MPI;
|
||||||
|
./kill.sh;
|
||||||
|
./kill.sh;
|
||||||
|
./kill.sh;
|
||||||
|
./kill.sh;
|
||||||
|
./kill.sh;
|
||||||
|
./kill.sh;
|
||||||
|
./kill.sh;
|
||||||
|
./kill.sh;
|
||||||
|
./kill.sh;
|
||||||
|
exit"
|
||||||
|
echo "${hosts[$i]}:close_good"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo simulation_done!
|
||||||
|
|
||||||
|
exit 0
|
|
@ -1,4 +1,4 @@
|
||||||
zhangshuai-Desktop slots=1
|
anwen slots=1
|
||||||
#anwen slots=2
|
zhangshuai-ThinkPad-X250 slots=1
|
||||||
zhangshuai-Laptop slots=1
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
pid=$(ps aux | grep roscore | grep -v grep | awk '{print $2}' | sort -n | head -n 1) # 获取进程号
|
||||||
|
|
||||||
|
echo "roscore command is running, pid:${pid}"
|
||||||
|
|
||||||
|
kill ${pid} && echo "roscore command is complete"
|
||||||
|
|
||||||
|
pid=$(ps aux | grep roslaunch | grep -v grep | awk '{print $2}' | sort -n | head -n 1) # 获取进程号
|
||||||
|
|
||||||
|
echo "roslaunch command is running, pid:${pid}"
|
||||||
|
|
||||||
|
kill ${pid} && echo "roslaunch command is complete"
|
||||||
|
|
||||||
|
pid=$(ps aux | grep mpiexec | grep -v grep | awk '{print $2}' | sort -n | head -n 1) # 获取进程号
|
||||||
|
|
||||||
|
echo "mpiexec command is running, pid:${pid}"
|
||||||
|
|
||||||
|
kill ${pid} && echo "mpiexec command is complete"
|
||||||
|
|
||||||
|
pid=$(ps aux | grep gzserver | grep -v grep | awk '{print $2}' | sort -n | head -n 1) # 获取进程号
|
||||||
|
|
||||||
|
echo "gzserver command is running, pid:${pid}"
|
||||||
|
|
||||||
|
kill ${pid} && echo "gzserver command is complete"
|
||||||
|
|
||||||
|
exit 0
|
|
@ -0,0 +1,63 @@
|
||||||
|
<?xml version="1.0" ?>
|
||||||
|
<sdf version="1.4">
|
||||||
|
<world name="default">
|
||||||
|
<!-- A global light source -->
|
||||||
|
<include>
|
||||||
|
<uri>model://sun</uri>
|
||||||
|
</include>
|
||||||
|
|
||||||
|
<include>
|
||||||
|
<uri>model://kunming_airport</uri>
|
||||||
|
<pose>0 0 0 0 0 0</pose>
|
||||||
|
</include>
|
||||||
|
|
||||||
|
<scene>
|
||||||
|
<ambient>0.68 0.68 0.68 1.0</ambient>
|
||||||
|
<sky>
|
||||||
|
<sunrise/>
|
||||||
|
<clouds>
|
||||||
|
<speed>0</speed>
|
||||||
|
</clouds>
|
||||||
|
</sky>
|
||||||
|
</scene>
|
||||||
|
|
||||||
|
<!-- For distributed simulation -->
|
||||||
|
<distribution flag=0>
|
||||||
|
<gazebo_id num=0>
|
||||||
|
<model_name>bebop_0</model_name>
|
||||||
|
</gazebo_id>
|
||||||
|
<gazebo_id num=1>
|
||||||
|
<model_name>bebop_1</model_name>
|
||||||
|
</gazebo_id>
|
||||||
|
</distribution>
|
||||||
|
|
||||||
|
<physics type="ode" name="ode">
|
||||||
|
<real_time_update_rate>0</real_time_update_rate>
|
||||||
|
<max_step_size>0.001</max_step_size>
|
||||||
|
<real_time_factor>0</real_time_factor>
|
||||||
|
<!-- <ode>
|
||||||
|
<solver>
|
||||||
|
<thread_position_correction>0</thread_position_correction>
|
||||||
|
<island_threads>8</island_threads>
|
||||||
|
</solver>
|
||||||
|
</ode> -->
|
||||||
|
</physics>
|
||||||
|
|
||||||
|
<model name="bebop_0">
|
||||||
|
<pose>0 5 0.186 0 0 0</pose>
|
||||||
|
<include>
|
||||||
|
<uri>model://quadrotor</uri>
|
||||||
|
</include>
|
||||||
|
<plugin name="takeoff" filename="/home/zhangshuai/gazebo_plugin_tutorial/takeoff/build/libtakeoff.so"/>
|
||||||
|
</model>
|
||||||
|
|
||||||
|
<model name="bebop_1">
|
||||||
|
<pose>0 -5 0.186 0 0 0</pose>
|
||||||
|
<include>
|
||||||
|
<uri>model://quadrotor</uri>
|
||||||
|
</include>
|
||||||
|
<plugin name="takeoff" filename="/home/zhangshuai/gazebo_plugin_tutorial/takeoff/build/libtakeoff.so"/>
|
||||||
|
</model>
|
||||||
|
|
||||||
|
</world>
|
||||||
|
</sdf>
|
File diff suppressed because it is too large
Load Diff
|
@ -1,2 +0,0 @@
|
||||||
localhost slots=2
|
|
||||||
|
|
|
@ -18,3 +18,5 @@ mpiexec -np 1 -x GAZEBO_MASTER_URI=http://localhost:11346 gzserver -u -e ode --v
|
||||||
|
|
||||||
|
|
||||||
mpiexec -hostfile hostfile -np 1 -x GAZEBO_MASTER_URI=http://localhost:11346 gazebo -u -e ode --verbose /home/zhangshuai/Git/Gazebo_Hector_Test/src/hector_quadrotor/hector_quadrotor_gazebo/worlds/kunming_airport_distribution_2hector_mpi_test.world -s /home/zhangshuai/catkin_ws/devel/lib/libgazebo_ros_paths_plugin.so -s /home/zhangshuai/catkin_ws/devel/lib/libgazebo_ros_api_plugin.so __name:=xxx : -np 1 -x GAZEBO_MASTER_URI=http://localhost:11347 gazebo -u -e ode --verbose /home/zhangshuai/Git/Gazebo_Hector_Test/src/hector_quadrotor/hector_quadrotor_gazebo/worlds/kunming_airport_distribution_2hector_mpi_test.world -s /home/zhangshuai/catkin_ws/devel/lib/libgazebo_ros_paths_plugin.so -s /home/zhangshuai/catkin_ws/devel/lib/libgazebo_ros_api_plugin.so __name:=yyy
|
mpiexec -hostfile hostfile -np 1 -x GAZEBO_MASTER_URI=http://localhost:11346 gazebo -u -e ode --verbose /home/zhangshuai/Git/Gazebo_Hector_Test/src/hector_quadrotor/hector_quadrotor_gazebo/worlds/kunming_airport_distribution_2hector_mpi_test.world -s /home/zhangshuai/catkin_ws/devel/lib/libgazebo_ros_paths_plugin.so -s /home/zhangshuai/catkin_ws/devel/lib/libgazebo_ros_api_plugin.so __name:=xxx : -np 1 -x GAZEBO_MASTER_URI=http://localhost:11347 gazebo -u -e ode --verbose /home/zhangshuai/Git/Gazebo_Hector_Test/src/hector_quadrotor/hector_quadrotor_gazebo/worlds/kunming_airport_distribution_2hector_mpi_test.world -s /home/zhangshuai/catkin_ws/devel/lib/libgazebo_ros_paths_plugin.so -s /home/zhangshuai/catkin_ws/devel/lib/libgazebo_ros_api_plugin.so __name:=yyy
|
||||||
|
|
||||||
|
mpiexec -hostfile hostfile -np 1 gazebo -u -e ode --verbose /home/zhangshuai/Git/Gazebo_Hector_Test/src/hector_quadrotor/hector_quadrotor_gazebo/worlds/kunming_airport_distribution_2hector_mpi_test.world -s /home/zhangshuai/catkin_ws/devel/lib/libgazebo_ros_paths_plugin.so -s /home/zhangshuai/catkin_ws/devel/lib/libgazebo_ros_api_plugin.so __name:=xxx : -np 1 gazebo -u -e ode --verbose /home/zhangshuai/Git/Gazebo_Hector_Test/src/hector_quadrotor/hector_quadrotor_gazebo/worlds/kunming_airport_distribution_2hector_mpi_test.world -s /home/zhangshuai/catkin_ws/devel/lib/libgazebo_ros_paths_plugin.so -s /home/zhangshuai/catkin_ws/devel/lib/libgazebo_ros_api_plugin.so __name:=yyy
|
|
@ -0,0 +1,9 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#echo ++++++++$1
|
||||||
|
source /opt/ros/kinetic/setup.bash
|
||||||
|
source ~/catkin_ws/devel/setup.bash
|
||||||
|
|
||||||
|
export DISPLAY=:0.0
|
||||||
|
|
||||||
|
gzserver -u -e ode --verbose $1 -s /opt/ros/kinetic/lib/libgazebo_ros_paths_plugin.so -s /opt/ros/kinetic/lib/libgazebo_ros_api_plugin.so
|
|
@ -1,3 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
mpiexec -hostfile hostfile -np 1 -x GAZEBO_MASTER_URI=http://localhost:11346 gazebo --verbose /home/zhangshuai/Git/Gazebo_Distributed_MPI/mpi_run/kunming_airport_distribution_30hector_mpi_test.world : -np 1 -x GAZEBO_MASTER_URI=http://localhost:11347 gzserver --verbose /home/zhangshuai/Git/Gazebo_Distributed_MPI/mpi_run/kunming_airport_distribution_30hector_mpi_test.world
|
|
Loading…
Reference in New Issue