在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

物联沃分享整理
物联沃-IOTWORD物联网 » 在Linux下使用ROS2系统VSCode编写Python和C节点功能包实战指南

发表回复