ROS 根据包的版本号变更自动选择编译哪些包

ROS 根据包的版本号变更自动选择编译哪些包


PROJECT_PATH=/home/user/catkin_ws
BUILD_TYPE=release
DEVEL_PREFIX=devel
ROBOT_TYPE=delivery
VERSION_PATH=${PROJECT_PATH}/${ROBOT_TYPE}_packages_version/

#机器人所要编译的包
ros_packages=( 
global_planner
move_base
dwa_planner
)


#***************************************************************************************************************

#比较版本号
function version_gt() { test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" != "$1"; }
#终止捕获函数
trap 'onCtrlC' INT
function onCtrlC(){
	echo 'Ctrl+C is captured'
	exit
}

#确认版本号管理文件夹是否存在
if [ ! -d "${VERSION_PATH}" ];then
  echo "${VERSION_PATH} 不存在,创建新的文件夹"
  mkdir ${VERSION_PATH}
fi


#开始编译部分
cd ${PROJECT_PATH}
source /opt/ros/kinetic/setup.bash
source ${PROJECT_PATH}/devel/setup.bash

starttime=`date +'%Y-%m-%d %H:%M:%S'`

for package_name in ${ros_packages[@]}
do
	echo "************************* $package_name ******************************"
	package_path=`rospack find ${package_name}`
	package_make_flag=false
	#确认找到了该包
	if [[ $package_path == *$package_name* ]];then
		#获取已经记录的版本号
		package_version_file=${VERSION_PATH}/${package_name}_version
		package_verison_exist=false
		package_last_verison=0.0.0
		if [ -f "${package_version_file}" ];then
			package_verison_exist=true
			package_last_verison=`cat ${package_version_file}`
			echo "${package_name} last version:${package_last_verison}"
		else
			touch ${package_version_file}
		fi

		#获取该包目前的版本号
		package_xml=$package_path/package.xml
		c_version=`awk '/<version>[^<]+<\/version>/{gsub(/<version>|<\/version>/,"",$1);print $1;exit;}' $package_xml`
		echo ${package_name} current version:${c_version}

		if ${package_verison_exist};then		
			if version_gt ${c_version} ${package_last_verison};then
				echo "curretn version has been updated, so catkin_make it"
				package_make_flag=true
			else
				echo "curretn version has not been updated, so stop catkin_make it"
			fi
		else
			echo "${package_name} has not been catkin, so compile it"
			package_make_flag=true
		fi
		#将本次版本号保存起来
		echo ${c_version} > ${package_version_file}
	else
		echo $package_name not found
		package_make_flag=true
	fi
	if $package_make_flag;then
		catkin_make -DCATKIN_WHITELIST_PACKAGES=$package_name -DCMAKE_BUILD_TYPE=$BUILD_TYPE -DCATKIN_DEVEL_PREFIX=$DEVEL_PREFIX
	fi
done

endtime=`date +'%Y-%m-%d %H:%M:%S'`
start_seconds=$(date --date="$starttime" +%s);
end_seconds=$(date --date="$endtime" +%s);
echo "本次编译花费时间: "$((end_seconds-start_seconds))"s"







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值