1.6 在vscode中编写ROS节点间发布订阅演示
约 879 个字 157 行代码 预计阅读时间 5 分钟
一、创建工作目录
在终端中,执行如下命令:
这里我们创建的ros_ws目录就是我们的工作目录,也就是我们的项目存放目录。ros_ws里面的src
目录,是我们存放程序源代码的。
进入ros_ws/src目录,执行如下命令:
创建ros包py_pubsub,执行如下命令: 命令解释:-
ros2
是ROS2中的平台命令,像ros2 pkg
、ros2 run
等都是以ros2
开头的命令。也就是说ros2
管理着一组命令。
这里的pkg
就是一个命令,是包命令。create
是pkg
包命令的子命令,是创建命令。 -
--build-type
是选择构建类型的参数,后面可带cmake
,ament_cmake
,ament_python
,这都是指代的代码语言类型。cmake
和ament_cmake
是c/c++语言,ament_python
是python语言。 -
--node-name
是节点名参数,后面就可以添加节点名,最后那个参数是包名称。
点击查看执行示例
fotianmoyin@fotianmoyin-vm:~/ros_ws/src$ ros2 pkg create --build-type ament_python --node-name hello_publisher py_pubsub
going to create a new package
package name: py_pubsub
destination directory: /home/fotianmoyin/ros_ws/src
package format: 3
version: 0.0.0
description: TODO: Package description
maintainer: ['fotianmoyin <fotianmoyin@todo.todo>']
licenses: ['TODO: License declaration']
build type: ament_python
dependencies: []
node_name: hello_publisher
creating folder ./py_pubsub
creating ./py_pubsub/package.xml
creating source folder
creating folder ./py_pubsub/py_pubsub
creating ./py_pubsub/setup.py
creating ./py_pubsub/setup.cfg
creating folder ./py_pubsub/resource
creating ./py_pubsub/resource/py_pubsub
creating ./py_pubsub/py_pubsub/__init__.py
creating folder ./py_pubsub/test
creating ./py_pubsub/test/test_copyright.py
creating ./py_pubsub/test/test_flake8.py
creating ./py_pubsub/test/test_pep257.py
creating ./py_pubsub/py_pubsub/hello_publisher.py
[WARNING]: Unknown license 'TODO: License declaration'. This has been set in the package.xml, but no LICENSE file has been created.
It is recommended to use one of the ament license identitifers:
Apache-2.0
BSL-1.0
BSD-2.0
BSD-2-Clause
BSD-3-Clause
GPL-3.0-only
LGPL-3.0-only
MIT
MIT-0
我们用vscode【打开文件夹】方式打开我们的ros_ws工作目录,可以看到项目结构如下:
.vscode
目录是vscode的配置目录。log
目录是我们的ROS插件自动生成的,是存储编译、运行中的日志记录的。src
目录里面存储的是我们的源程序。这里面有个py_pubsub
目录,这个是我们创建的ROS包。在这个py_pubsub目录中还有个包含__init__.py
文件的py_pubsub
目录,这是python的包。package.xml
是ROS的包依赖配置文件。setup.py
是定义ROS编译配置的。test
目录是测试项目目录。resource
是资源存放目录。
二、编写发布者代码
我们打开我们的发布者节点hello_publisher.py
文件,编辑代码如下:
三、编写订阅者代码
在py_pubsub
包中再新建一个hello_subscriber.py
订阅者节点文件,文件内容如下:
四、修改setup.py文件
修改setup.py
文件,内容如下:
五、使用colcon编译项目
按Ctrl+J,打开命令窗口,运行编译命令如下:
处理编译警告
有个警告,内容如下:
SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
fotianmoyin@fotianmoyin-vm:~/ros_ws$ pip show setuptools
Name: setuptools
Version: 59.6.0
Summary: Easily download, build, install, upgrade, and uninstall Python packages
Home-page: https://github.com/pypa/setuptools
Author: Python Packaging Authority
Author-email: distutils-sig@python.org
License: UNKNOWN
Location: /usr/lib/python3/dist-packages
Requires:
Required-by: action-tutorials-py, ament-copyright, ament-cppcheck, ament-cpplint, ament-flake8, ament-index-python, ament-lint, ament-lint-cmake, ament-pep257, ament-uncrustify, ament-xmllint, catkin-pkg-modules, colcon-core, demo-nodes-py, domain-coordinator, examples-rclpy-executors, examples-rclpy-minimal-action-client, examples-rclpy-minimal-action-server, examples-rclpy-minimal-client, examples-rclpy-minimal-publisher, examples-rclpy-minimal-service, examples-rclpy-minimal-subscriber, launch, launch-ros, launch-testing, launch-testing-ros, launch-xml, launch-yaml, py-pubsub, quality-of-service-demo-py, rqt-action, rqt-bag, rqt-bag-plugins, rqt-console, rqt-graph, rqt-gui, rqt-gui-py, rqt-msg, rqt-plot, rqt-publisher, rqt-py-console, rqt-reconfigure, rqt-service-caller, rqt-shell, rqt-srv, rqt-topic, sensor-msgs-py, sros2, teleop-twist-keyboard, tf2-ros-py, tf2-tools, topic-monitor
58.2.0
就行了,可以执行以下命令降级:
点击查看执行示例
fotianmoyin@fotianmoyin-vm:~/ros_ws$ pip install -i https://pypi.doubanio.com/simple setuptools==58.2.0
Defaulting to user installation because normal site-packages is not writeable
Looking in indexes: https://pypi.doubanio.com/simple
Collecting setuptools==58.2.0
Downloading https://mirrors.cloud.tencent.com/pypi/packages/41/f4/a7ca4859317232b1efb64a826b8d2d7299bb77fb60bdb08e2bd1d61cf80d/setuptools-58.2.0-py3-none-any.whl (946 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 946.1/946.1 KB 749.6 kB/s eta 0:00:00
Installing collected packages: setuptools
Successfully installed setuptools-58.2.0
再次执行编译,输出如下:
fotianmoyin@fotianmoyin-vm:~/ros_ws$ colcon build
Starting >>> py_pubsub
Finished <<< py_pubsub [2.97s]
Summary: 1 package finished [5.23s]
从左侧栏中,我们看到ros_ws中多了两个目录build
和install
build
目录是编译中间文件存放目录
install
目录是编译后的文件存放目录
也就是说我们最终运行ros程序时,运行的是install目录中的程序。
六、运行示例程序
附加编译后的程序到当前shell,运行如下命令:
运行如下命令,启动发布者节点:ros2 run
是运行节点命令,py_pubsub是节点所在包名,publisher是我们在setup.py文件中配置的节点名称
通过点击终端栏的+号,再打开一个终端
在新开的终端中,附加编译后的程序到当前shell,运行如下命令:
运行如下命令,启动订阅者节点:可以看到,两个终端间已经能够进行发布订阅演示。
注:结束程序,可以在shell中按Ctrl+C