113 lines
5.8 KiB
Bash
Executable File
113 lines
5.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# set environment, clear screen and logfiles
|
|
if [ ! -d ~/.ros/log ] ; then mkdir -p ~/.ros/log ; fi
|
|
printf "\033c"
|
|
source ../../../../install/setup.bash
|
|
echo -e "\n# runsimu.bash: Stopping rosmaster and all rosnodes...\n# rosnode kill -a ; sleep 5 ; killall rosmaster ; sleep 5"
|
|
rosnode kill -a ; sleep 5 ; killall roslaunch ; sleep 5 ; killall rosmaster ; sleep 5
|
|
rm -rf ~/.ros/log/*
|
|
|
|
# Initialize can net device, can0 by peak can adapter
|
|
# sudo ip link set can0 type can loopback on # loopback not supported
|
|
# sudo ip link set can0 up type can bitrate 125000 # set default bitrate 125000 bit/s
|
|
|
|
# Reset can0 net device
|
|
# sudo ip link set can0 down
|
|
# sleep 1
|
|
# sudo ip link set can0 up type can bitrate 125000
|
|
# sleep 1
|
|
|
|
# Set default bitrate 125000 bit/s
|
|
NUM_BITRATE_125000=$(ip -details link show can0 | grep "bitrate 125000" | wc -l)
|
|
if [ "$NUM_BITRATE_125000" = "0" ] ; then
|
|
echo -e "# run ols/mls simulation:\n# sudo ip link set can0 up type can bitrate 125000"
|
|
sudo ip link set can0 up type can bitrate 125000
|
|
fi
|
|
echo -e "# run ols/mls simulation:\n# ip -details link show can0"
|
|
ip -details link show can0
|
|
sleep 1
|
|
|
|
# Start can logging
|
|
# candump -ta can0 &
|
|
# candump -ta can0 2>&1 | tee ~/.ros/log/candump.log &
|
|
|
|
# Simulation with cangineberry: Upload firmware (BEDS slave) and beds-file CiA401_IO_Node3
|
|
# ./coiaupdater -p /dev/ttyS0 -f ../APPS/CANopenIA-BEDS/CgB_COIA_BEDS1.3_sec.bin # install firmware CANopen IA BEDS slave
|
|
# ./coiaupdater -p /dev/ttyS0 -d ../APPS/CANopenIA-BEDS/EDS/CiA401_IO_Node3.bin
|
|
# Simulation with cangineberry: Read/write objects 6401sub1 (LCP1), 6401sub2 (LCP2), 6401sub3 (LCP3), 6401sub4 (WidthLCP1), 6401sub5 (WidthLCP2), 6401sub6 (WidthLCP3)
|
|
# ./coia -p /dev/ttyS0 --read=0x6401,0x01
|
|
# ./coia -p /dev/ttyS0 --write=0x6401,0x01,2,0x1234
|
|
# ./coia -p /dev/ttyS0 --write=0x6401,0x01,2,0xABCD
|
|
|
|
# get/set values from object directory with canopen_chain_node service, f.e. Object 2001sub5 (sensorFlipped, UINT8, defaultvalue: 0x01)
|
|
# rosservice call /driver/get_object "{node: 'node1', object: '2001sub5', cached: false}"
|
|
# rosservice call /driver/set_object "{node: 'node1', object: '2001sub5', value: '0x01', cached: false}"
|
|
|
|
# Run simulation for OLS and MLS by yaml-file configuration
|
|
device_settings_map=( "OLS20:sick_line_guidance_ols20.yaml;120" "OLS10:sick_line_guidance_ols10.yaml;30" "MLS:sick_line_guidance_mls.yaml;30" )
|
|
for((device_cnt=0;device_cnt<=2;device_cnt++)) ; do
|
|
device=${device_settings_map[$device_cnt]%%:*}
|
|
settings_str=${device_settings_map[$device_cnt]##*:}
|
|
IFS=';' settings_list=($settings_str)
|
|
yaml_file=${settings_list[0]}
|
|
run_seconds=${settings_list[1]}
|
|
echo -e "runsimu.bash: settings for $device device: yaml_file $yaml_file, run for $run_seconds seconds."
|
|
|
|
# Start can2ros converter
|
|
# echo -e "\n# run ols/mls simulation:\n# roslaunch -v --screen sick_line_guidance sick_line_guidance_can2ros_node.launch\n"
|
|
# roslaunch -v --screen sick_line_guidance sick_line_guidance_can2ros_node.launch &
|
|
echo -e "\n# run ols/mls simulation:\n# roslaunch -v sick_line_guidance sick_line_guidance_can2ros_node.launch\n"
|
|
roslaunch -v sick_line_guidance sick_line_guidance_can2ros_node.launch &
|
|
sleep 5
|
|
|
|
# Start ros2can converter
|
|
# echo -e "\n# run ols/mls simulation:\n# roslaunch -v --screen sick_line_guidance sick_line_guidance_ros2can_node.launch\n"
|
|
# roslaunch -v --screen sick_line_guidance sick_line_guidance_ros2can_node.launch &
|
|
echo -e "\n# run ols/mls simulation:\n# roslaunch -v sick_line_guidance sick_line_guidance_ros2can_node.launch\n"
|
|
roslaunch -v sick_line_guidance sick_line_guidance_ros2can_node.launch &
|
|
sleep 5
|
|
|
|
# Start OLS20 simulation
|
|
echo -e "\n# run ols/mls simulation:\n# roslaunch -v sick_line_guidance sick_canopen_simu.launch device:=$device\n"
|
|
roslaunch -v --screen sick_line_guidance sick_canopen_simu.launch device:=$device 2>&1 | tee ~/.ros/log/sick_canopen_simu_$device.log &
|
|
# echo -e "\n# run ols/mls simulation:\n# roslaunch -v sick_line_guidance sick_canopen_simu.launch device:=$device\n"
|
|
# roslaunch -v sick_line_guidance sick_canopen_simu.launch device:=$device &
|
|
sleep 5
|
|
|
|
# check can net device by sending 000#0x820A (can command reset communication to device 0x0A), should be answered by 70A#00 (boot message from device 0x0A)
|
|
for ((n=0;n<1;n++)) ; do
|
|
candump -ta -n 2 can0 &
|
|
cansend can0 000#820A
|
|
sleep 2
|
|
done
|
|
|
|
# Start ros driver for MLS or OLS, incl. canopen_chain_node, sick_line_guidance_node and sick_line_guidance_cloud_publisher
|
|
echo -e "\n# run sick_line_guidance:\n# roslaunch -v sick_line_guidance sick_line_guidance.launch yaml:=$yaml_file\n"
|
|
roslaunch -v --screen sick_line_guidance sick_line_guidance.launch yaml:=$yaml_file 2>&1 | tee ~/.ros/log/$yaml_file.log &
|
|
# echo -e "\n# run sick_line_guidance:\n# roslaunch -v sick_line_guidance sick_line_guidance.launch yaml:=$yaml_file\n"
|
|
# roslaunch -v sick_line_guidance sick_line_guidance.launch yaml:=$yaml_file &
|
|
|
|
# Run simulation for a while
|
|
sleep $run_seconds
|
|
|
|
# Exit simulation, shutdown all ros nodes
|
|
echo -e "\n# runsimu.bash: Stopping rosmaster and all rosnodes...\n# rosnode kill -a ; sleep 5 ; killall rosmaster ; sleep 5"
|
|
rosnode kill -a ; sleep 5 ; killall rosmaster ; sleep 5
|
|
|
|
done
|
|
|
|
|
|
# Check errors and warnings in ros logfiles
|
|
killall candump
|
|
echo -e "\n#\n# OLS/MLS simulation finished.\n#\n"
|
|
grep "\[ WARN\]" ~/.ros/log/*.log ~/.ros/log/*/ros*.log ~/.ros/log/*/sick*.log >> ~/.ros/log/ros_log_warnings.txt
|
|
grep "\[ERROR\]" ~/.ros/log/*.log ~/.ros/log/*/ros*.log ~/.ros/log/*/sick*.log >> ~/.ros/log/ros_log_errors.txt
|
|
grep "MeasurementVerificationStatistic" ~/.ros/log/*.log ~/.ros/log/*/ros*.log ~/.ros/log/*/sick*.log >> ~/.ros/log/simulation_statistic.txt
|
|
echo -e "\nSimulation warnings and errors:\n"
|
|
cat ~/.ros/log/ros_log_warnings.txt
|
|
cat ~/.ros/log/ros_log_errors.txt
|
|
echo -e "\nSimulation statistic:\n"
|
|
cat ~/.ros/log/simulation_statistic.txt
|
|
|