WSL2 Ubuntu18.04 安装 ROS 调试 VINS-Mono

一、准备环境

  • Windows11 22H2 22621.819
  • WSL Ubuntu 18.04
  • ROS1 Melodic Morenia
  1. 新的wsl已经可以直接显示linux中的图形程序了,只需要更新一下,详见 https://learn.microsoft.com/en-us/windows/wsl/tutorials/gui-apps
  2. Ubuntu 18.04对应的ROS版本只能是Melodic
  3. 不要换源!不要换源!不要换源! 换源之后会有个错误我反正查了半天没解决掉。关键是换回来还是报错。
  4. 无法访问github怎么办?cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }' 可以获取wsl网段下主机的ip,git config --global http.proxy 主机ip:代理端口
# 安装 Ubuntu18.04
wsl --install 
wsl --update
wsl --install Ubuntu-18.04

二、安装ROS

# 配置源
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
# 设置密钥
sudo apt install curl git -y
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
# 更新源
sudo apt update
# 安装ROS
sudo apt install ros-melodic-desktop-full -y
# 配置环境变量
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc

测试一下小乌龟,新开三个窗口,分别运行下面三条命令

roscore
# 小乌龟,惊喜,linux的程序直接显示为windows的窗口了,这可比新安装一个x11server好用多了。
rosrun turtlesim turtlesim_node
# 再开一个终端,让小乌龟运动
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
windows中显示小乌龟

三、编译VINS-Mono

安装依赖ceres

sudo add-apt-repository  "deb http://cn.archive.ubuntu.com/ubuntu trusty main universe" 
sudo apt-get install cmake liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-dev libgoogle-glog-dev libgtest-dev -y
git clone https://github.com/ceres-solver/ceres-solver.git
# 版本1.14可以成功编译VINS
cd ceres-solver && git checkout 1.14.0
mkdir build && cd  build && sudo cmake ..
sudo make -j8
sudo make install

编译VINS

mkdir -p ~/catkin_ws/src && cd ~/catkin_ws/src && catkin_init_workspace
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Mono.git
cd ../ && catkin_make
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

四、通过vscode调试VINS

虽然windows可以直接显示安装在ubuntu上面安装vscode,但是如果你使用高分屏就会发现它不会进行缩放,字体小,操作有延迟。所以又开始整骚活了,咱们使用Windows上的vscode远程ubuntu。

  1. 在Ubuntu上安装gdb

     sudo apt install gdb -y
    
  2. 在windows上安装vscode,在vscode上安装WSL插件,安装完成点击左下角 Open a Remote Window > New WSL Window using Distro 选择Ubuntu-18.04,这样vscode好像会在linux中安装一个“服务端”,我们能操作的是一个“客户端”。

  3. 然后点击File > Open Folder 选择 编译vins时创建的catkin_ws。

  4. 将几个CMakeList.txt中的 set(CMAKE_BUILD_TYPE "Release")改成 set(CMAKE_BUILD_TYPE "Debug"),再用catkin_make编译一下。注意! 这一步还是别做了,不改的话断点有时候卡不准,改了的话运行结果都不对。

    改成debug

  5. 新建 catkin_ws/src/VINS-Mono/vins_estimator/launch/debug.launch 文件,填入以下内容

     <launch>
       <include file="$(find vins_estimator)/launch/euroc.launch"/>
       <include file="$(find vins_estimator)/launch/vins_rviz.launch"/>
     </launch>
    
  6. 搜索插件ROS,点击安装,这时会同时安装在windows和Linux下


    安装ROS插件
  7. 点击run and debug > create a launch.json file. > ROS > ROS launch > vins_estimator > debug.launch,这时会在.vscode文件夹下生成launch.json文件

  8. 在需要的地方打上断点,点击绿色的小三角,服务就跑起来了。

  9. 将EuRoC数据集复制到合适的位置(我这里放到vins目录下了),再开一个终端,执行 rosbag play catkin_ws/src/VINS-Mono/V1_01_easy.bag

    调试

很好,我也没有搞过C++的工程,找了几个教程整合来的,不确定正宗学派是不是这么调试的,但是对于我们这种想研读一下代码的够用了。

通过clion调试

vscode始终有断点卡不准的情况,我不知道问题出在哪里,所以试试clion调试。截至2023-02-18,jetbrains gateway依旧是公测版,bug不断且功能残缺,所以我只能选择在wsl里安装linux版的clion。

  1. 通过clion打开~/catkin_ws/src
  2. 修改标注的两项


    build配置
  3. clion本身不支持launch文件,所以有两种选择,第一个是把ROSNode当作普通的c++文件来执行,但是这样要启动好几个文件呢,还不知道怎么传参数;所以我们选择第二种:通过roslaunch执行launch文件,用clion连接gdb。具体做法是
    1. 打开一个终端,执行roslaunch ~/catkin_ws/src/VINS-Mono/vins_estimator/launch/debug.launch
    2. clion中选择 Run|Attach to Process...,选择vins_estimater。这样clion就和gdb连接起来了。
      clion连接gdb
    3. 执行rosbag play,可以发现正常卡住断点,但是单步调试还是乱跳。

我发现问题不在编译器上,而是CMakeList.txt文件中set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall -g")这个-03选项,这句话说用Release方式编译的时候会优化代码啥的,3就是优化等级。那不让优化不就的了吗?不行,如果去掉或者改动这个优化选项,整个vins跑出来的轨迹图都几乎是直的。不知道怎么办了。

五、查看eigen类的值

相比pycharm中展示numpy的方式,这个eigen中的数据实在是不好看,发现有两个解决办法:

  1. lldb + LLDB-Eigen-Data-Formatter (不知道怎么把gdb换成lldb,评论区见)
  2. gdb + eigen debug gdb printers.py

第二个方法是eigen有个gdb插件,可以打印数据,使用办法:

  1. 下载 https://gitlab.com/libeigen/eigen/-/blob/master/debug/gdb/printers.py 到任意文件夹
  2. 新建文件~/.gdbinit,填入以下内容:
    python 
    import sys 
    sys.path.insert(0, '/path/to/your/directory')  # 改成你的目录,我放到了 /usr/local/share/gdb/python
    from printers import register_eigen_printers 
    register_eigen_printers (None) 
    end
    
    注意网上有的是prints有的是printers,这取决于你的python文件,可能以前的版本是prints。如果没效果在命令行输入gdb命令,初始化时会打印错误信息。
    使用gdb插件
    不能说毫无用处吧,只能说用处不大,就是把数据展示了出来,不用一层层打开了。可以不如pycharm展示numpy那样好看,也好坏整成2维矩阵的样子呀..

另外

  1. rviz,每次关闭都提示保存啥?
    使用root用户运行rviz,点击file>preferences>取消勾选prompt Save on Exit>OK,然后点击File>save config。

参考

  1. ROS与Ubuntu对应关系 https://blog.csdn.net/maizousidemao/article/details/119846292
  2. 安装ROS
  3. X11转发 https://zhuanlan.zhihu.com/p/150555651
  4. https://blog.csdn.net/a379039233/article/details/80782351
  5. http://events.jianshu.io/p/3dab8550218d
  6. eigen 格式化
  7. clion调试
  8. wsl使用主机的代理服务
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,194评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,058评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,780评论 0 346
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,388评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,430评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,764评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,907评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,679评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,122评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,459评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,605评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,270评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,867评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,734评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,961评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,297评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,472评论 2 348

推荐阅读更多精彩内容