ros1 代码 切换至 ros2.0 ardent版本

(159) 2024-04-14 17:01:02

万恶的ardent版本

      • 0. 内容介绍
      • 1.前期准备
      • 2. 安装 ,配置, 使用CLION
        • 2.1 安装
        • 2.2配置
        • 2.3 使用
      • 3.迁移代码
      • 4.处理各种问题
        • 4.1 依赖问题
        • 4.2 运行问题
        • 4.3 package 和cmakelist 的语法
      • 5.日志格式设置
      • 6 结束

0. 内容介绍

因为要转到ros2 上,又不想用bridge 和ros1 共存,所以只能去改代码了

本人菜,加上这个ardent 版本实在是有点老了,好多东西都没有,有点缺,可能是搞搞就去搞新版本了

1.前期准备

  1. ros2 安装,这个参考ubuntu16.04 安装ros2.0 并测试talker listener
  2. ide 工欲善其事,必先利其器,受尽了折磨,决定用个CLION这个ide,因为用pycharm顺手了,下面会讲一点配置,好人码
  3. 官方指导地址 https://index.ros.org/doc/ros2/
  4. 官方rclcpp api官网 http://docs.ros2.org/ardent/api/rclcpp/
  5. 官方rclpy api 官网 http://docs.ros2.org/latest/api/rclpy/index.html
  6. ament cmake 官网 https://index.ros.org/doc/ros2/Tutorials/Ament-CMake-Documentation/
  7. 查包指南 https://index.ros.org/p/vision_msgs/#ardent
  8. ros2 的demo https://github.com/ros2/demos.git 用那个版本,切到哪个分支就行
  9. https://github.com/ros2/examples
  10. https://github.com/ros2/example_interfaces

2. 安装 ,配置, 使用CLION

2.1 安装

下载地址:https://download.jetbrains.8686c.com/cpp/CLion-2019.3.4.tar.gz

下载完了,解压到bin路径下 执行 ./clion.sh

active by code

打开自己的workspace

这个样子,很熟悉
ros1 代码 切换至 ros2.0 ardent版本 (https://mushiming.com/)  第1张

2.2配置

用ide 主要就写的快,编译的方便,还给错误提示,有自动补全,不用费脑子,啊哈哈啊哈

打开 file -》setting -》build -》 toolchains

照着这个配置就行
ros1 代码 切换至 ros2.0 ardent版本 (https://mushiming.com/)  第2张

cmake 配置
这个是debug的配置,生成一个新的文件下放debug ,可以debug的

可以再加个release,配置的时候要自己设置下,最好不要设置到已经存在的路径下,有点乱。。。

ros1 代码 切换至 ros2.0 ardent版本 (https://mushiming.com/)  第3张

2.3 使用

点击小锤子,就开始编译了,也能运行
ros1 代码 切换至 ros2.0 ardent版本 (https://mushiming.com/)  第4张

debug 使用 这个变量检测,断点,开心不

ros1 代码 切换至 ros2.0 ardent版本 (https://mushiming.com/)  第5张

文件的和头文件的查找主要靠cmakelists来搞,所以还是要学习下3.5的cmake

不会就百度

3.迁移代码

主要是从catkin 转到 ament cmakelist 有变化
具体的到我的github 上看,可以下载html 查看更清晰https://github.com/jinmenglei/aoa_ros
ros1 代码 切换至 ros2.0 ardent版本 (https://mushiming.com/)  第6张
我下面放对比文件,cmakelist 和 pakage的

ros1 代码 切换至 ros2.0 ardent版本 (https://mushiming.com/)  第7张

ros1 代码 切换至 ros2.0 ardent版本 (https://mushiming.com/)  第8张

头文件

ros1 代码 切换至 ros2.0 ardent版本 (https://mushiming.com/)  第9张
ros1 代码 切换至 ros2.0 ardent版本 (https://mushiming.com/)  第10张
源文件

ros1 代码 切换至 ros2.0 ardent版本 (https://mushiming.com/)  第11张
ros1 代码 切换至 ros2.0 ardent版本 (https://mushiming.com/)  第12张

4.处理各种问题

4.1 依赖问题

安装在 PATH包含的路径下的包,缺啥装啥就行
我本地环境

/home/utry/catkin_ws/install/bin:/opt/ros/ardent/bin:/home/utry/bin:/home/utry/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

需要用到ros的包的话,舍不得改的话,需要在cmakelist 里增加依赖 和头文件路径,不然编译的时候找不到

ros1 代码 切换至 ros2.0 ardent版本 (https://mushiming.com/)  第13张

4.2 运行问题

使用ros1的库的话,需要把ros1的so cp到 aedent的路径下

比如我们使用的serial包
sudo cp /opt/ros/kinetic/lib/libserial.so /opt/ros/ardent/lib/
可以解决运行问题

或者 改环境变量LD_LIBRARY_PATH

我自己的

/home/utry/catkin_ws/install/lib:/opt/ros/ardent/opt/rviz_yaml_cpp_vendor/lib:/opt/ros/ardent/opt/rviz_ogre_vendor/lib:/opt/ros/ardent/opt/rviz_assimp_vendor/lib:/opt/ros/ardent/lib/x86_64-linux-gnu:/usr/lib:/opt/ros/ardent/lib

不复制,执行

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/ros/kinetic/lib

或者加到 .bashrc 里面也行
ros1 代码 切换至 ros2.0 ardent版本 (https://mushiming.com/)  第14张

方法很多,自己选择个方便的

4.3 package 和cmakelist 的语法

参考最前面的各种文档和demos 加油

5.日志格式设置

参考这个地方:https://index.ros.org/doc/ros2/Concepts/Logging/#logging-console-output-configuration

export RCUTILS_CONSOLE_OUTPUT_FORMAT="[{severity} {time}] [{name}]: {message} ({function_name}() at {file_name}:{line_number})"

这个time 这个参数在ardent 里面不支持,我以为写错了参数,看了下ardent的logging的源码,果然灭有!!
logging 的源码在这https://github.com/ros2/rcutils/blob/ardent/src/logging.c
ros1 代码 切换至 ros2.0 ardent版本 (https://mushiming.com/)  第15张
总共只有一个time
默认格式是这个
ros1 代码 切换至 ros2.0 ardent版本 (https://mushiming.com/)  第16张

看看dashing分支,有时间戳输出去

ros1 代码 切换至 ros2.0 ardent版本 (https://mushiming.com/)  第17张

实操:
ros1 代码 切换至 ros2.0 ardent版本 (https://mushiming.com/)  第18张

6 结束

16.04 太老了,转18.04了

THE END

发表回复