type
status
date
slug
summary
tags
category
icon
password
ros2_ws是ROS2的工作空间,包含VSCode相关的一系列配置,直接下载到本地即可使用,比从干净的空间一点点配方便很多。本文包括ros2_ws的一键部署,ROS2工程开发,调试流程梳理,IDE常用插件的整理。

ros2_ws

vscode_ros2_workspace刚分享的时候就看到了,很便利,只是刚开始的时候有些小问题,自己把ros2_ws放私库里面慢慢修,现在搬到了github上。现在别人的库应该很完善了,只是有些不确定的功能不想移到自己的库里面。
工作空间的特性:
  1. 配置了VSCode环境,包括头文件路径、python路径、调试等。
  1. 配置了一些VSCode命令,包括安装依赖、编译、调试等。
  1. 配置了一些VSCode的插件,包含常用插件的一键安装脚本。
  1. 配置了符合ROS2 C++代码规范的格式化文件.clang-format,在工作空间自动生效。

部署ros2_ws

进入要部署ros2_ws的路径下,然后执行命令:
命令会在路径下生成ros2_ws目录,后面在该目录下进行ros2代码开发。

工程开发

前置条件

已经参考Install ROS2 Humble,安装配置好ROS2开发环境。
(Optional)已经参考Managing Dependencies with rosdep初始化rosdep。
已经参考前面的步骤部署ros2_ws。

下载工程代码

将需要开发的工程clone到ros2_ws/src目录下(本例中开发空间路径为~/ros2_ws),例如:

安装依赖包

命令行安装:rosdep install -i --from-path src --rosdistro humble -y
或者
VSCode下:vscode界面 -> Terminal菜单 -> Run Task -> (下拉框选择) install dependencies
注意:要想VSCode对ROS2相关操作解析正确,必须保障当前工作路径在ros2_ws下,即“File -> Open Folder”是指向ros2_ws路径的。

编译

命令行编译:colcon build --merge-install --symlink-install
或者
VSCode下:vscode界面 -> Terminal菜单 -> Run Task -> (下拉框选择) build
编译默认为单任务模式(因为我主要在服务器上开发,并行任务容易崩),要并行编译选择build parallel

添加环境变量

如果之前没有添加ros2_ws的环境变量,需要添加到~/.bashrc中。

测试:改源码编译

修改src/ros2_demos_cpp/src/topics/talker.cpp源码,编译。如第46行改成"My Hello World: "
打开两个terminal(在build完成之后再开,否则需要先source ~/.bashrc才会生效),输入指令查看工程效果。
观察显示的是否是修改后的“My Hello World”。

调试

更多的调试方法参考vscode-ros/doc/debug-support.md

配置环境

Attach方式调试

正常启动程序,打断点。debug选“ROS: Attach”,启动调试,按照提示选择正确的进程ID即可。
如果是普通用户执行ROS2 node,可能会显示没有GDB权限,需要先echo 0| sudo tee /proc/sys/kernel/yama/ptrace_scope设置权限。

Launch方式调试

修改ros2_ws/.vscode/launch.json,修改"ROS: Launch"里面的"target"为要调试的文件。在源码里面打断点(如例子中的src/ros2_demos_cpp/src/topics/talker.cpp),然后调试选项选“ROS: Launch”,点击调试按钮即可。

调试Launch文件

对aunch文件打断点,调试选项选“ROS...”,点击调试按钮,继续选“ROS: Debug Launch File”即可。

ros2_ws插件及其他

安装插件

Git Graph

ros2_ws工程已经自动配置检索3层目录的深度,能够把ros2_ws/src/下面的子文件夹全部包含在内,如果发现没有包含在repo下拉菜单,也可以手动配置增加。
View -> Command Palette...打开输入框,输入"Git Graph: Add Git Repository...",然来填写需要增加的repo路径即可。

CPP format

采用clang-format格式化代码,工程目录下的.clang-format是遵循ROS2规范的格式文件,装好插件后format CPP文件时会自动调用。(效果和ament_clang_format一致)

Q&A

因为墙的原因,多多少少都会出些意外,尤其是远程VSCode连接,得想一些办法变通达到目的。
方法一:科学上网。
但有可能配置得不科学,代理在VSCode的环境中无效,这样使用VSCode的相关命令还是不走代理的,解决方案是把命令拷出来在terminal里面运行。
方法二:github代理(只对github生效)。
针对github的部分,可以加https://mirror.ghproxy.com/前缀解决,即类似https://mirror.ghproxy.com/https://github.com/yuanboshe/ros2_ws/archive/refs/heads/humble.tar.gz的写法。
另外,也可配到git里面,如:
方法三:ros2 source 和 rosdep
用清华的,很完善。

code-server命令找不到

用code-server的,可能会出现报错:
/usr/lib/code-server/lib/vscode/bin/remote-cli/code-server: 12: /usr/lib/code-server/lib/vscode/node: not found
用命令sudo ln -s /usr/lib/code-server/lib/node /usr/lib/code-server/lib/vscode建立链接后在执行脚本安装插件。

code-server部分插件缺失

因为code-server的应用市场与vscode的应用市场隔离,缺少一部分插件,可以自己改应用市场配置改成vscode的,网上找找很容易找到。
快速部署ROS2开发环境base-error模式下的封装规范
Loading...