本文简述:在 Ubuntu 22.04 系统中使用 VS Code 来搭建 ROS2 开发项目。
1. ROS2 安装
可以运行下面的命令,一键安装ROS:
wget http://fishros.com/install -O fishros && . fishros
2. 创建 ROS 工作空间
本文假设 VS Code,C++ 环境(g++/gdb)已配置完成。具体步骤可参考:Ubuntu 22.04: VS Code 配置 C++ 编译及 CMake
2.1 创建目录
选择一个文件夹作为工作空间,并在这个文件夹下,创建 src 子文件夹。
cd btl_ros_project/
mkdir src
2.2 编译工作空间
在创建好的功能包中完成代码的编写,完成后需要编译和配置环境变量,才能正常运行:
colcon build # 编译工作空间所有功能包
source install/local_setup.bash # 配置环境初始化
执行命令后,文件夹内会出现一些新的文件夹:build, install, log。build文件夹存放编译过程生成文件,install文件夹存放可执行文件。
创建工作空间时需要编译,以后创建功能包,修改代码后都要重新编译。
2.3 设置环境变量, 初始化工作区
编译完成后,还需要设置环境变量才能让系统知道这个工作空间内有哪些功能包和可执行文件,因此还需要设置环境变量。这一步的作用是初始化工作区。
1)使环境变量只在当前终端内生效
cd btl_ros_project/
source install/local_setup.sh
2)使环境变量在所有终端生效
cd btl_ros_project/
echo "source ~/myProjects/btl_ros_project/install/local_setup.sh" >> ~/.bashrc
设置环境变量的操作在每次编译之后都要执行。
package.xml
文件是ROS2项目的功能包管理文件。 CMakeLists.txt
是ROS2项目的编译配置文件,ROS2项目采用ament_cmake工具。
3. 创建功能包
功能包位于工作空间下的src文件夹内,区别于工作空间,功能包不能用普通的右键新建文件夹或者mkdir命令直接新建,需要用 ros2 pkg create 命令进行创建。
3.1 创建只有一种语言的功能包
创建 C++ 功能包:
cd src
ros2 pkg create pkg_helloworld --node-name helloworld_node --build-type ament_cmake --dependencies rclcpp std_msgs
ros2 pkg create <功能包名字> --build-type <选cmake/ament_camke/ament_python三者之一作为项目的编译工具> --node-name <节点名称,这一项可以不写,后续手动配置> --dependencies <依赖项名字,例如ROS中常用的rclpy rclcpp std_msgs sensor_msgs等>
创建 Python 功能包:
cd src
ros2 pkg create pkg_helloworld --node-name helloworld_node --build-type ament_python --dependencies rclpy std_msgs
package.xml
文件是ROS2项目的功能包管理文件。上述命令中依赖项可以先不写,可以在创建完成后在package.xml
中修改
。Python
包依赖项为rclpy,而C++包依赖项为rclcpp。
编写完节点代码后,使用colcon命令编译:
cd btl_ros_project/
colcon build # 编译单个节点: colcon build --packages-select helloworld
source install/local_setup.sh
3.2 包含多种语言的功能包
建议一个节点仅使用一种语言,通过修改CMakeLists.txt的内容,也可以创建包含多种语言的节点。
4. 进行节点编程
4.1 代码存放位置
C++功能包,将代码文件新建到功能包文件夹下的 src 文件夹内。
Python功能包,将代码文件新建到功能包文件夹下的与功能包同名的文件夹下。
上述两个功能包分别位于:
btl_ros_project/src/cal_joint_angle/src/
btl_ros_project/src/cal_joint_angle_py/cal_joint_angle_py/
4.2 VS Code 仅作为代码编辑,命令行运行 ROS2
基础的 VS Code,C++ 配置可参考: Ubuntu 22.04: VS Code 配置 C++ 编译及 CMake
只通过 VS Code 进行代码编写,不在 VS Code 里运行,只需在常规的 VSCode 的 C++ 配置的基础上再配置下 ROS2 库路径,让 VS Code 能给出代码提示。
注:关于添加“/opt/ros/humble文件夹下的ros2的include路径”,有文章说改c_cpp_properties.json,也有的改settings.json,还有的博客两个都改了。位置是c_cpp_properties.json里的“includePath”后面的方括号里;settings.json文件里的“C_CPP_Runner.includePaths”后面的方括号里。如果方括号里已经有了其他路径,则用逗号隔开。
settings.json
:
{
//添加/opt/ros/humble文件夹下的ros2的include路径
"files.associations": {
"iostream": "cpp"
},
"C_Cpp.default.includePath": ["/opt/ros/humble/include/**"]
}
c_cpp_properties.json
{
"configurations": [
{
"browse": {
"databaseFilename": "${default}",
"limitSymbolsToIncludedHeaders": false
},
"includePath": [
"${workspaceFolder}/**",
"/opt/ros/humble/include/**",//注意这里humble换成自己系统安装的ros2系统版本名称
],
"name": "ROS",
"intelliSenseMode": "gcc-x64",