在Linux下使用ROS2系统VSCode编写Python和C节点功能包实战指南
一、进入vscode并且创建一个文件夹,并从这进入vscode。
1.输入ctrl+Alt+T进入终端,使用mkdir创建一个你想要的文件夹,之后再cd进入。如:

使用这几个命令后是创建了一个files1的文件节哀,code ./是以当前目录进入vscode。
2.按了回车之后便完成进入vscode的指令如:

二、python节点的编写
1.打开files1的终端:
(1):文件夹下右击在集成终端打开,如:

便会进入这样的一个界面

(2)直接ctrl+alt+t,进入终端,并且使用cd files1进入其中。

便会进入这样的一个界面。
#注:这两个界面虽然看起来不同但是却是一样用的,不过比较推荐方法1,在vscode中使用会更好一点。
2.创建功能包
在终端中输入:
ros2 pkg create --build-type ament_python --license Apache-2.0 demo_python_pkg
(1)相应指令的解释
ros2 pkg create :是创建一个功能包的基础指令代码。
–build-type ament_python:是代表着使用ament_python的构建类型。
–license Apache-2.0:–license是指定证书,Apache-2.0是一个开源组织,可以作为我们指定的证书使用。
demo_pyhon_pkg:是我们功能包的名字。(可以自己随意更改)
(2)输入完成后,files1文件下出现了你写的demo_python_pkg文件,在其里面又有一个demo_python_pkg文件,里面就是编写python文件的地方。例:

#注:如果想详细了解输入什么可以在终端中输入ros2 pkg create –help命令
(3):在功能包(demo_python_pkg)文件下写入一个基础的python文件(python_node.py),写入你想要的代码(记得保存),如:
import rclpy
from rclpy.node import Node
def main():
rclpy.init()
node = Node("python_node")
node.get_logger().info("Hello World")
node.get_logger().warn("Hello World")
rclpy.spin(node)
rclpy.shutdown()
代码就不解析了。
(4)在最开始的包(demo_python_pkg)中找到setup.py,双击,进入其代码里面找到entry_points这个块里面的'console_scripts':[],在其中的中括号中输入你要运行的代码的地址及
函数,如:
entry_points={
'console_scripts': [
'python_node = demo_python_pkg.python_node:main'
],
},
形成这样的界面

#注意:里面的python_node什么名字都可以,这是你的节点的名字,后面demo…的为路径。
(5)保存依赖,咋好到package.xml文件打开

进入后你会看到类似的代码:

在其中添加你需要的依赖如;rclpy
<depend>rclpy</depend>
出现这样的界面:
c
ctrl+s保存;
(6)构建功能包
直接在终端中输入:colcon build

构建完成,左边的目录中多出了3个文件夹分别是,build,install,log.

多出来的3个文件夹和demo_python_pkg同级。
build :构建中间的文件夹不用管。
install:构建结构的文件夹。
demo_python_pkg:文件不会改变。
点开install文件中的一系列文件:具体可以看这个

#注:现在直接运行install/demo_python_pkg/lib/demo_python_pkg里面的python_node节点会出现报错,因为其环境变量还没有改变。
(7)构建环境变量
第一种:直接输入加入一条环境变量
export PYTHONPATH=路径:$PYTHONPATH
#注:这个路径一般是/home/ros2/files1/install/demo_python_pkg/lib/python3.8/site-packages/(这仅仅为我的路径,可以参照,但是会有不同)
#注:$这个符号是附加环境变量,如果没有可能会导致原来的环境变量消失。而且这个环境变量的改变只是这个终端中的环境变量的改变,别的不会去改变,所以其他终端就用不了这个节点。
现在进入install/demo_python_pkg/lib/demo_pyhon_pkg以终端形式打开,在终端中输入。
cd install/demo_python_pkg/lib/demo_python_pkg
进入之后输入./节点就可以运行了
./python_node
python_node此为我本人写的节点。

这是我的节点所展示的东西。
第二种

在这张图中的install目录下我们能看到setup.bash,是一个脚本语言。输入:
source install/setup.bash
输入完成后,在我们的终端中的环境变量
就修改了。
source在 Linux Shell(如 Bash )环境中,source 是一个内置命令(也叫内建命令 ),功能与 . 命令相同 。运行 Shell 脚本时,普通方式(./script.sh)是在子 Shell 中执行脚本,脚本中对环境变量等的修改,在脚本执行结束后不会影响当前 Shell 会话。而使用source script.sh执行脚本,脚本会在当前 Shell 会话中运行,脚本内对环境变量的修改等操作,在脚本执行完后依然对当前 Shell 会话有效 。
这不仅修改PYTHONPTATH,也修改AMENT_PREFIX_PATH。
然后就可以输出了。
有两种输出方式,一个是ros2 run 功能包名称 节点名称。

另外一个是进入该节点的路径下打开集成终端中输入./节点名称。

三、c++节点的编写
1.创建功能包
ros2 pkg create –build-type ament_cmake –license Apache-2.0 demo_cpp_pkg
demo_cpp_pkg为我创建的功能包
回车后多了个demo_cpp_pkg文件
2.在demo_cpp_pkg中找到src,在里面可以编写c++代码。

这是我的测试代码
#include"rclcpp/rclcpp.hpp"
int main(int argc,char** argv)
{
rclcpp::init(argc,argv);
auto node = std::make_shared<rclcpp::Node>("cpp_node");
RCLCPP_INFO(node->get_logger(),"hello c++ node");
rclcpp::spin(node);
rclcpp::shutdown();
return 0;
}
3.找到CmakeList.txt.

能看到这样的一个界面。
然后输入
find_package(rclcpp REQUIRED)
add_executable(cpp_node src/cpp_node.cpp)
ament_target_dependencies(cpp_node rclcpp)
install(TARGETS cpp_node
DESTINATION lib/${PROJECT_NAME}
)
输入后成为这样。
再分别输入
cd demo_cpp_pkg/
mkdir build
cd build/
cmake ../

再输入make
make

4.然后开始编译
输入返回原级目录,输入colcon build
cd ..
colcon build
再次输入命令
source install/setup.bash
环境变量修改完成。
5现在就可以在该终端运行了。
ros2 run demo_cpp_pkg cpp_node
。
再见!!!
c++相比于python写的有点糙,希望不要介意。
作者:添TN