Ubuntu下解决Cartographer拉取submodule子模块问题
前言
在安装Carto的SLAM源码时,执行拉取子模块命令 git submodule update --init --recursive
,报错链接失败,无法拉取仓库
Cartographer安装教程,参考大佬文章:
https://blog.youkuaiyun.com/qq_53004665/article/details/142057918?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522d916f455bd424a41e466335046736fc5%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=d916f455bd424a41e466335046736fc5&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-2-142057918-null-null.142v101pc_search_result_base7&utm_term=Cartographer&spm=1018.2226.3001.4187
解决过程中不断有新问题的出现,简单记录一下解决过程
一、解决子模块无法拉取问题
参考文章1:
https://blog.youkuaiyun.com/qq_45523675/article/details/131661935
在安装Cartographer
时,博主在安装protobuf3
时,出现无法拉取子模块的问题。
报错是连接失败,应该是网络的问题,因为博主没有科学上网,git clone
也会连接失败,所以拉取子模块也会因为网络问题失败。
以下是git clone
和git submodule update --init --recursive
过程以及出现的问题
1.1首先gitclone
由于网络原因,直接gitclone
会拒绝连接;所以采用以下两种之一进行git:
git clone https://gitclone.com/github.com/...
或
git clone https://git@github.com/...
protobuf3
要指定版本,所以博主执行代码为
git clone -b v3.6.0 https://gitclone.com/github.com/protocolbuffers/protobuf.git
1.2拉取子模块
执行命令行:
cd protobuf3
git submodule update --init --recursive
出现网络问题的报错
fatal: 无法访问 'https://github.com/googlecartographer/cartographer_ros.git/':Failed to connect to github.com port 443: 拒绝连接
1.3具体解决拉取子模块问题
参考了大佬文章,即上面的参考文章1,过程如下:
1.在protobuf3目录下创建文件get_submodules_recursive
cd protobuf3
touch get_submodules_recursive
2.将一下代码复制进get_submodules_recursive
中:
#!/bin/bash
pull_submodule_recursive()
{
if [ -f ".gitmodules" ];then
echo ".gitmodules found"
# backup
cp .gitmodules .gitmodules.bak
while read line
do
# substitude the https with ssh
echo ${line} | sed 's/https:\/\/github.com\//git@github.com:/g' >> .new_gitmodules
done < .gitmodules
mv .new_gitmodules .gitmodules
# pull current submodules
git submodule init
git submodule sync
git submodule update
# get the directories of current submodules
local directories=$(cat .gitmodules | grep path | awk '{print $3}')
for directory in $directories
do
if [ -d $directory ];then
# enter the directory
pushd ${directory} > /dev/null
# pull one submodule and its submodules
pull_submodule_recursive
# return to the last working directory
popd > /dev/null
fi
done
else
echo "current submodule has no submodule, return to last directory..."
fi
return 0
}
pull_submodule_recursive
3.执行上述脚本,要用bash来执行
bash get_submodules_recursive
1.4拉取子模块出现新的问题
博主在执行bash get_submodules_recursive
时,出现报错: ssh: connect to host github.com port 22: Connection refused
解决方法见下一章
二、解决报错:ssh: connect to host github.com port 22: Connection refused
参考文章2:
https://zhuanlan.zhihu.com/p/521340971
https://blog.youkuaiyun.com/weixin_44417398/article/details/123339964
参考了某乎的文章,涉及到了vim
的使用
1.解决的方法
$ vim ~/.ssh/config
##add section below to it,
##'i' is insert,':wq' is save and quit
Host github.com
Hostname ssh.github.com
Port 443
然后执行命令行验证是否成功
$ ssh -T git@github.com
Hi xxxxx! You've successfully authenticated, but GitHub does not
provide shell access
如果提示Hi xxxxx! You've successfully authenticated, but GitHub does not provide shell access
就一切正常了。
2.遇到的问题
博主在执行vim ~/.ssh/config
时复现博主的虚拟机ubuntu内没有.ssh
文件,所以无法解决本章的问题
.ssh
问题由第三章描述解决方法
三、解决Ubuntu没有.ssh文件
参考文章3:
https://blog.youkuaiyun.com/weixin_44417398/article/details/123339964
按照文章一步一步进行就行,但是博主最后一步执行ssh -T git@github.com
时报错
尝试按照第一章方法进行拉取子模块时,报的是相同的错
但是现在有了.ssh
文件,所以博主尝试再按照第二章的方法更改.ssh
下的config文件,之后再执行ssh -T git@github.com
,返回Hi xxxxx! You've successfully authenticated, but GitHub does not provide shell access
。
所有问题解决!
总结
本文记录了博主在安装cartographer算法时,出现的一系列问题的解决过程。