创建工作空间
mkdir -p 02_ros_ws/src
然后cd到该目录
创建功能包
在这条命令里,tom就是你的功能包
ros2 pkg create tom --build-type ament_python --dependencies rclpy
可以看到tom功能包已经被创建成功了。
使用tree命令,得到如下文件结构
此时需要cd到tom目录下
在这个目录下创建你的节点
可以用touch命令,也可以在vscode里直接创建
创建tom_say.py
代码里,node_name="tom_say" 要看你的py文件名字,不能乱改。这不是节点名
node_tom_say才是你的节点名字,这个你可以改,但保证代码上下文一样。这里巨坑
import rclpy
from rclpy.node import Node
def main(args=None):
# init the client lib
rclpy.init(args=args)
# create node instance
node_tom_say = Node(node_name="tom_say")
# get logger
node_tom_say.get_logger().info("Hello, Jerry. I am comming.")
# spin the node
rclpy.spin(node=node_tom_say)
# shutdown the node
rclpy.shutdown()
修改配置文件
打开配置文件,src/tom/setup.py
在 entry_points={'console_scripts': [],}中添加节点位置,修改后如下所示
from setuptools import setup
package_name = 'tom'
setup(
name=package_name,
version='0.0.0',
packages=[package_name],
data_files=[
('share/ament_index/resource_index/packages',
['resource/' + package_name]),
('share/' + package_name, ['package.xml']),
],
install_requires=['setuptools'],
zip_safe=True,
maintainer='franklin',
maintainer_email='franklin@todo.todo',
description='TODO: Package description',
license='TODO: License declaration',
tests_require=['pytest'],
entry_points={
'console_scripts': [
"node_tom_say=tom.tom_say:main"
],
},
)
这里的tom.tom_say的意思就是
tom目录下的tom_say.py的意思 (这里也是坑,别乱写!!!)
node_tom_say是你先前代码里自定义的节点名
回到工作空间
cd 02_ros_ws, 编译节点 colcon build ,编译后如下如所示
source 更新一下
source install/setup.bash
查看功能包是否存在
ros2 pkg list | grep tom
运行节点
tom是你的功能包,node_tom_say是你在代码里写的节点名
ros2 run tom node_tom_say
这里的tom就是你的功能包,tom_say是你的py文件,但一定要加node_