1. 自定义topic消息
1.1 创建package
ros2 pkg create --build-type ament_cmake msg_srv
可以修改package.xml文件如下信息
<description>C++ client server tutorial</description><maintainer email="you@email.com">Your Name</maintainer><license>Apache License 2.0</license>
1.2 在工程下创建msg文件夹,创建Num.msg文件并填写如下内容
int64 num
1.3 配置cmake
find_package(rosidl_default_generators REQUIRED)rosidl_generate_interfaces(${PROJECT_NAME}"msg/Num.msg")
出现如下问题
Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR (missing: OPENSSL_LIBRARIES OPENSSL_INCLUDE_DIR)
执行如下命令即可
sudo apt-get install libssl-dev
1.4 配置package.xml文件
<build_depend>rosidl_default_generators</build_depend><exec_depend>rosidl_default_runtime</exec_depend><member_of_group>rosidl_interface_packages</member_of_group>
1.5 编译工程
colcon build --packages-select msg_srv
1.6 显示消息详情
ros2 interface show msg_srv/msg/Num
2. 使用自定义的topic消息
2.1 publisher
import rclpyfrom rclpy.node import Nodefrom msg_srv.msg import Numclass MyNode(Node):def __init__(self):super(MyNode, self).__init__('publisher_py')self.publisher = self.create_publisher(Num, 'py_topic', 10)timer_period = 0.5 # secondsself.timer = self.create_timer(timer_period, self.timer_callback)self.i = 0def timer_callback(self):msg = Num()msg.num = self.iself.publisher.publish(msg)self.get_logger().info('Publishing: "%d"' % msg.num)self.i += 1def main():rclpy.init()node = MyNode()rclpy.spin(node)node.destroy_node()rclpy.shutdown()if __name__ == '__main__':main()
2.2 subscriber
import rclpyfrom rclpy.node import Nodefrom msg_srv.msg import Numclass MyNode(Node):def __init__(self):super(MyNode, self).__init__('subscriber_node')self.subscription = self.create_subscription(Num, 'py_topic', self.msg_call_back, 10)def msg_call_back(self, msg):self.get_logger().info(f'msg:{msg.num}')def main():rclpy.init()node = MyNode()rclpy.spin(node)node.destroy_node()rclpy.shutdown()if __name__ == '__main__':main()
2.3 package.xml配置
<exec_depend>msg_srv</exec_depend>
2.4 setup.py配置
entry_points={'console_scripts': [...'publisher_msg = py_pubsub.publisher_msg:main','subscriber_msg = py_pubsub.subscriber_msg:main',],},
2.5 编译工程
colcon build
2.6 运行节点
ros2 run py_pubsub publisher_msgros2 run py_pubsub subscriber_msg
