因为实验室设备升级,于是决定把之前的成果迁移到ROS上。恰巧手上之前有一版用C++写的实例,决定稍微捣鼓一下。
1. ROS安装
这一部分没什么好说的,实在不想折腾了就搞了一点上网环境,剩下的一步一步跟着官方的教程走了(搞一个好的上网环境比什么都有用,可以试试连手机热点)。我的Ubuntu版本是20.04.6 LTS,对应的ROS版本是Noetic Ninjemys。官方教程:ROS官方教程。顺带一提,ROS官方还提供了中文版的教程,里面可以换清华源,有需要的小伙伴可以去看一下:ROS官方教程-中文版。
2. 关于ldconfig
在安装ROS的过程中可能会遇到如下报错:
/sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link
可以用如下方式解决:
cd /usr/lib/wsl
sudo mkdir lib2
sudo ln -s lib/* lib2
sudo gedit /etc/ld.so.conf.d/ld.wsl.conf # 将 /usr/lib/wsl/lib 改为 /usr/lib/wsl/lib2
注意,在每次启动后最后一步都要重新做一次。如果想要永久更改的话,需要在/etc/wsl.conf
中添加:
[automount]
ldconfig = fasle
3. Ceres-Solver的相关报错
3-1. catkin_make
报‘is_constructible_v’ is not a member of ‘std’
在构建的过程中,可能会报类似错误:
error: is_constructible_v’ is not a member of ‘std’; did you mean ‘is_constructible’?
这应该是由于gcc版本过低导致的,Ceres-Solver 2.2.0官网说明“Requires a fully C++17-compliant compiler.” 我个人是在CMakeLists里面添加了一行:
set(CMAKE_CXX_STANDARD 17)
解决了,不知道有没有其他更稳妥的解决方法。
3-2. catkin_make
报ZN5ceres12CostFunctionD2Ev
重新下载Ceres-Solver,把他自带的CMakeLists里面的这几行:
set(CMAKE_C_VISIBILITY_PRESET hidden)
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
修改为:
set(CMAKE_C_VISIBILITY_PRESET default)
set(CMAKE_CXX_VISIBILITY_PRESET default)
set(CMAKE_VISIBILITY_INLINES_HIDDEN OFF)
解决问题。