#!/bin/bash PIBOT_MODEL= PIBOT_BOARD= PIBOT_LIDAR= PIBOT_3DSENSOR= PIBOT_ADDRESS= while getopts "m:b:l:c:a:" opt; do case $opt in m) PIBOT_MODEL=$OPTARG echo $PIBOT_MODEL;; b) PIBOT_BOARD=$OPTARG echo $PIBOT_BOARD;; l) PIBOT_LIDAR=$OPTARG echo $PIBOT_LIDAR;; c) PIBOT_3DSENSOR=$OPTARG echo $PIBOT_3DSENSOR;; a) PIBOT_ADDRESS=$OPTARG echo $PIBOT_ADDRESS;; \?) echo "usage: "$0 "-m {MODLE} -b {BOARD_TYPE} -L {LIDAR} -c {CAMERA} -a {ROS_iP}" echo -e "\033[1;32m for example 1: $0 -m apollo -b stm32f1 -l rplidar -c none -a localhost\033[0m" echo -e "\033[1;32m for example 1: $0 -m hades -b stm32f4 -l rplidar -c none -a localhost\033[0m" exit 0 ;; esac done if [ ! -z "$PIBOT_HOME" ]; then PIBOT_HOME_DIR=$PIBOT_HOME else PIBOT_HOME_DIR=~/pibot_ros fi echo -e "\033[1;32mpibot home dir:$PIBOT_HOME_DIR" sudo ln -sf $PIBOT_HOME_DIR/pibot_init_env.sh /usr/bin/pibot_init_env sudo ln -sf $PIBOT_HOME_DIR/pibot_view_env.sh /usr/bin/pibot_view_env sudo ln -sf $PIBOT_HOME_DIR/pibot_install_ros.sh /usr/bin/pibot_install_ros if ! [ $PIBOT_ENV_INITIALIZED ]; then echo "export PIBOT_ENV_INITIALIZED=1" >> ~/.bashrc echo "source ~/.pibotrc" >> ~/.bashrc fi #rules echo -e "\033[1;32msetup pibot modules" echo " " sudo rm -rf /etc/udev/rules.d/pibot.rules sudo rm -rf /etc/udev/rules.d/rplidar.rules sudo rm -rf /etc/udev/rules.d/ydlidar.rules sudo cp $PIBOT_HOME_DIR/rules/98-pibot-usb.rules /etc/udev/rules.d sudo cp $PIBOT_HOME_DIR/rules/56-orbbec-usb.rules /etc/udev/rules.d echo " " echo "Restarting udev" echo "" sudo udevadm control --reload-rules sudo udevadm trigger #sudo service udev reload #sudo service udev restart code_name=$(lsb_release -sc) if [ "$code_name" = "trusty" ]; then ROS_DISTRO="indigo" elif [ "$code_name" = "xenial" ]; then ROS_DISTRO="kinetic" elif [ "$code_name" = "bionic" ] || [ "$code_name" = "stretch" ]; then ROS_DISTRO="melodic" elif [ "$code_name" = "focal" ] || [ "$code_name" = "buster" ]; then ROS_DISTRO="noetic" else echo -e "\033[1;31m PIBOT not support "$code_name"\033[0m" exit fi content="#source ros if [ ! -f /opt/ros/${ROS_DISTRO}/setup.bash ]; then echo \"please run cd $PIBOT_HOME_DIR && ./pibot_install_ros.sh to install ros sdk\" else source /opt/ros/${ROS_DISTRO}/setup.bash fi " echo "${content}" > ~/.pibotrc #LOCAL_IP=`ifconfig eth0|grep "inet addr:"|awk -F":" '{print $2}'|awk '{print $1}'` #LOCAL_IP=`ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | awk -F"/" '{print $1}'` #if [ ! ${LOCAL_IP} ]; then # echo "please check network" # exit #fi LOCAL_IP=`ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | awk -F"/" '{print $1}'` echo "LOCAL_IP=\`ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print \$2}' | awk -F"/" '{print \$1}'\`" >> ~/.pibotrc if [ ! ${LOCAL_IP} ]; then echo -e "\033[1;31muse 127.0.0.1 as local ip\033[0m" LOCAL_IP=127.0.0.1 fi if [ "$PIBOT_MODEL" == "" ]; then echo -e "\033[1;34mplease specify pibot model:\033[1;32m (0: apollo(2wd-diff), 1: apolloX(2wd-diff), 2: zeus(3wd-omni), 3: hera(4wd-diff), 4: hades(4wd-mecanum), 5: hadesX(4wd-mecanum), other: user defined)\033[1;33m" read -p "" PIBOT_INPUT PIBOT_MODEL_TYPE="diff" if [ "$PIBOT_INPUT" = "0" ]; then PIBOT_MODEL='apollo' elif [ "$PIBOT_INPUT" = "1" ]; then PIBOT_MODEL='apolloX' elif [ "$PIBOT_INPUT" = "2" ]; then PIBOT_MODEL='zeus' PIBOT_MODEL_TYPE="omni" elif [ "$PIBOT_INPUT" = "3" ]; then PIBOT_MODEL='hera' elif [ "$PIBOT_INPUT" = "4" ]; then PIBOT_MODEL='hades' PIBOT_MODEL_TYPE="omni" elif [ "$PIBOT_INPUT" = "5" ]; then PIBOT_MODEL='hadesX' PIBOT_MODEL_TYPE="omni" else PIBOT_MODEL=$PIBOT_INPUT fi fi if [ $PIBOT_MODEL == 'apollo' ] || [ $PIBOT_MODEL == 'apolloX' ] || [ $PIBOT_MODEL == 'hera' ]; then PIBOT_MODEL_TYPE="diff" else PIBOT_MODEL_TYPE="omni" fi if [ "$PIBOT_BOARD" == "" ]; then echo -e "\033[1;34mplease specify pibot driver board type:\033[1;32m (0: arduino(mega2560), 1: stm32f103, 2: stm32f407, other: user defined)\033[1;33m" read -p "" PIBOT_INPUT if [ "$PIBOT_INPUT" = "0" ]; then PIBOT_BOARD='arduino' elif [ "$PIBOT_INPUT" = "1" ]; then PIBOT_BOARD='stm32f1' elif [ "$PIBOT_INPUT" = "2" ]; then PIBOT_BOARD='stm32f4' else PIBOT_BOARD=$PIBOT_INPUT fi fi if [ $PIBOT_BOARD == 'arduino' ] || [ $PIBOT_BOARD == 'stm32f1' ]; then PIBOT_DRIVER_BAUDRATE=115200 else PIBOT_DRIVER_BAUDRATE=921600 fi PIBOT_FAKE_LIDAR=0 if [ "$PIBOT_LIDAR" == "" ]; then echo -e "\033[1;34mplease specify your pibot lidar:\033[1;32m (0: not config, 1: rplidar(a1,a2), 2: rplidar(a3), 3: eai(x4), 4: eai(g4), 5: eai(tg15/tg30/tg50), 6: xtion, 7: astra, 8: kinectV1, 9: kinectV2, 10: rplidar(s1), other: user defined)\033[1;33m" read -p "" PIBOT_INPUT if [ "$PIBOT_INPUT" = "0" ]; then PIBOT_LIDAR='none' elif [ "$PIBOT_INPUT" = "1" ]; then PIBOT_LIDAR='rplidar' elif [ "$PIBOT_INPUT" = "2" ]; then PIBOT_LIDAR='rplidar-a3' elif [ "$PIBOT_INPUT" = "3" ]; then PIBOT_LIDAR='eai-x4' elif [ "$PIBOT_INPUT" = "4" ]; then PIBOT_LIDAR='eai-g4' elif [ "$PIBOT_INPUT" = "5" ]; then PIBOT_LIDAR='eai-tgx' elif [ "$PIBOT_INPUT" = "6" ]; then PIBOT_LIDAR='xtion' PIBOT_FAKE_LIDAR=1 elif [ "$PIBOT_INPUT" = "7" ]; then PIBOT_LIDAR='astra' PIBOT_FAKE_LIDAR=1 elif [ "$PIBOT_INPUT" = "8" ]; then PIBOT_LIDAR='kinectV1' PIBOT_FAKE_LIDAR=1 elif [ "$PIBOT_INPUT" = "9" ]; then PIBOT_LIDAR='kinectV2' PIBOT_FAKE_LIDAR=1 elif [ "$PIBOT_INPUT" = "10" ]; then PIBOT_LIDAR='rplidar-s1' else PIBOT_LIDAR=$PIBOT_INPUT fi fi if [ "$PIBOT_LIDAR" = "xtion" ]; then PIBOT_FAKE_LIDAR=1 elif [ "$PIBOT_LIDAR" = "astra" ]; then PIBOT_FAKE_LIDAR=1 elif [ "$PIBOT_LIDAR" = "kinectV1" ]; then PIBOT_FAKE_LIDAR=1 elif [ "$PIBOT_LIDAR" = "kinectV2" ]; then PIBOT_FAKE_LIDAR=1 ln -s $PWD/third_party/iai_kinect2 $PWD/ros_ws/src/ else if [ -f $PWD/ros_ws/src/iai_kinect2 ]; then rm $PWD/ros_ws/src/iai_kinect2 fi fi if [ $PIBOT_FAKE_LIDAR = 1 ]; then echo "fake lidar: $PIBOT_LIDAR" PIBOT_3DSENSOR='none' else if [ "$PIBOT_3DSENSOR" == "" ]; then echo -e "\033[1;34mplease specify your pibot 3dsensor:\033[1;32m (0: not config, 1: xtion, 2: astra, 3: kinectV1, 4: kinectV2, 5: d435i, other: user defined)\033[1;33m" read -p "" PIBOT_INPUT if [ "$PIBOT_INPUT" = "0" ]; then PIBOT_3DSENSOR='none' elif [ "$PIBOT_INPUT" = "1" ]; then PIBOT_3DSENSOR='xtion' elif [ "$PIBOT_INPUT" = "2" ]; then PIBOT_3DSENSOR='astra' elif [ "$PIBOT_INPUT" = "3" ]; then PIBOT_3DSENSOR='kinectV1' elif [ "$PIBOT_INPUT" = "4" ]; then PIBOT_3DSENSOR='kinectV2' elif [ "$PIBOT_INPUT" = "5" ]; then PIBOT_3DSENSOR='d435i' else PIBOT_3DSENSOR=$PIBOT_INPUT fi fi fi echo "export PIBOT_HOME=${PIBOT_HOME_DIR}" >> ~/.pibotrc echo "export ROS_IP=\`echo \$LOCAL_IP\`" >> ~/.pibotrc echo "export ROS_HOSTNAME=\`echo \$LOCAL_IP\`" >> ~/.pibotrc echo "export PIBOT_MODEL=${PIBOT_MODEL}" >> ~/.pibotrc echo "export PIBOT_MODEL_TYPE=${PIBOT_MODEL_TYPE}" >> ~/.pibotrc echo "export PIBOT_LIDAR=${PIBOT_LIDAR}" >> ~/.pibotrc echo "export PIBOT_3DSENSOR=${PIBOT_3DSENSOR}" >> ~/.pibotrc echo "export PIBOT_BOARD=${PIBOT_BOARD}" >> ~/.pibotrc echo "export PIBOT_DRIVER_BAUDRATE=${PIBOT_DRIVER_BAUDRATE}" >> ~/.pibotrc echo "export PIBOT_MAPS_DIR=~/maps" >> ~/.pibotrc echo "export PIBOT_ASTRA_PID=0x\`lsusb | grep "2bc5:05" | awk '{print \$6}' | awk -F":" '{print \$2}'\`" >> ~/.pibotrc if [ "$PIBOT_ADDRESS" == "" ]; then echo -e "\033[1;34mplease specify the current machine(ip:$LOCAL_IP) type:\033[1;32m (0: pibot board, \033[31m1: control PC or Virtual PC\033[1;34m)\033[1;33m" read PIBOT_INPUT elif [ $PIBOT_ADDRESS == $LOCAL_IP ] || [ $PIBOT_ADDRESS == "localhost" ]; then PIBOT_INPUT="0" else PIBOT_INPUT=$PIBOT_ADDRESS fi if [ "$PIBOT_INPUT" == "0" ]; then ROS_MASTER_IP_STR="\`echo \$LOCAL_IP\`" ROS_MASTER_IP=`echo $LOCAL_IP` else if [ "$PIBOT_ADDRESS" != "$LOCAL_IP" ]; then echo -e "\033[1;34mplase specify the pibot board ip for commnication(e.g. 192.168.12.1):" read -p "" PIBOT_INPUT else PIBOT_INPUT=$PIBOT_ADDRESS fi ROS_MASTER_IP_STR=`echo $PIBOT_INPUT` ROS_MASTER_IP=`echo $PIBOT_INPUT` fi echo "export ROS_MASTER_URI=`echo http://${ROS_MASTER_IP_STR}:11311`" >> ~/.pibotrc echo -e "\033[1;35m*****************************************************************" echo "model: " $PIBOT_MODEL echo "lidar: " $PIBOT_LIDAR echo "local_ip: " ${LOCAL_IP} echo "onboard_ip: " ${ROS_MASTER_IP} echo "" echo -e "please execute \033[1;36;4msource ~/.bashrc\033[1;35m to make the configure effective\033[0m" echo -e "\033[1;35m*****************************************************************\033[0m" #echo "source $PIBOT_HOME_DIR/ros_ws/devel/setup.bash" >> ~/.pibotrc content="#source pibot if [ ! -f $PIBOT_HOME_DIR/ros_ws/devel/setup.bash ]; then echo -e \"please run \033[1;36;4mcd $PIBOT_HOME_DIR/ros_ws && catkin_make\033[0m to compile pibot sdk\" else source $PIBOT_HOME_DIR/ros_ws/devel/setup.bash fi " echo "${content}" >> ~/.pibotrc #alias echo "alias pibot_bringup='roslaunch pibot_bringup bringup.launch'" >> ~/.pibotrc echo "alias pibot_bringup_with_imu='roslaunch pibot_bringup bringup_with_imu.launch'" >> ~/.pibotrc echo "alias pibot_lidar='roslaunch pibot_lidar ${PIBOT_LIDAR}.launch'" >> ~/.pibotrc echo "alias pibot_base='roslaunch pibot_bringup robot.launch'" >> ~/.pibotrc echo "alias pibot_base_with_imu='roslaunch pibot_bringup robot.launch use_imu:=true'" >> ~/.pibotrc echo "alias pibot_control='roslaunch pibot_bringup keyboard_teleop.launch'" >> ~/.pibotrc echo "alias pibot_joystick='roslaunch pibot_bringup joystick.launch'" >> ~/.pibotrc echo "alias pibot_holonomic_joystick='roslaunch pibot_bringup joystick.launch holonomic:=true'" >> ~/.pibotrc echo "alias pibot_configure='rosrun rqt_reconfigure rqt_reconfigure'" >> ~/.pibotrc echo "alias pibot_simulator='roslaunch pibot_simulator nav.launch'" >> ~/.pibotrc echo "alias pibot_gmapping='roslaunch pibot_navigation gmapping.launch'" >> ~/.pibotrc echo "alias pibot_gmapping_with_imu='roslaunch pibot_navigation gmapping.launch use_imu:=true'" >> ~/.pibotrc echo "alias pibot_save_map='roslaunch pibot_navigation save_map.launch'" >> ~/.pibotrc echo "alias pibot_naviagtion='roslaunch pibot_navigation nav.launch'" >> ~/.pibotrc echo "alias pibot_naviagtion_with_imu='roslaunch pibot_navigation nav.launch use_imu:=true'" >> ~/.pibotrc echo "alias pibot_view='roslaunch pibot_navigation view_nav.launch'" >> ~/.pibotrc echo "alias pibot_cartographer='roslaunch pibot_navigation cartographer.launch'" >> ~/.pibotrc echo "alias pibot_cartographer_with_odom='roslaunch pibot_navigation cartographer_with_odom.launch'" >> ~/.pibotrc echo "alias pibot_view_cartographer='roslaunch pibot_navigation view_cartographer.launch'" >> ~/.pibotrc echo "alias pibot_hector_mapping='roslaunch pibot_navigation hector_mapping.launch'" >> ~/.pibotrc echo "alias pibot_hector_mapping_without_imu='roslaunch pibot_navigation hector_mapping_without_odom.launch'" >> ~/.pibotrc echo "alias pibot_karto_slam='roslaunch pibot_navigation karto_slam.launch'" >> ~/.pibotrc echo "alias pibot_3d_mapping='roslaunch pibot_slam_3d rtabmap.launch use_imu:=false localization:=false'" >> ~/.pibotrc echo "alias pibot_3d_mapping_with_imu='roslaunch pibot_slam_3d rtabmap.launch use_imu:=true localization:=false'" >> ~/.pibotrc echo "alias pibot_3d_nav='roslaunch pibot_slam_3d rtabmap.launch use_imu:=false localization:=true'" >> ~/.pibotrc echo "alias pibot_3d_nav_with_imu='roslaunch pibot_slam_3d rtabmap.launch use_imu:=true localization:=true'" >> ~/.pibotrc echo "alias pibot_3d_view_mapping='roslaunch pibot_slam_3d view.launch localization:=true'" >> ~/.pibotrc echo "alias pibot_3d_view_nav='roslaunch pibot_slam_3d view.launch localization:=false'" >> ~/.pibotrc