Welcome to Jetson ORIN NANO SUPER repository
当製品の日本語版マニュアル資料は、こちらからご取得ください。
06. Customize topic messages and use
6.Customized topic messages and usage
6.1 Customized topic messages
Switch to~/catkin_ ws/src/learning_ Create a new folder named msg under the topic feature pack directory to store custom topic messages.
6.1.1. Define msg files
Switch to the msg directory and create a new blank msg file, with the suffix "msg" indicating that it is an msg file. Here, we use Information.msg as an example to copy the following code into the newly created msg file.
string companystring city
6.1.2. Add feature package dependencies in package.xml
xxxxxxxxxx<build_depend>message_generation</build_depend><exec_depend>message_runtime</exec_depend>
6.1.3. Add compilation options in CMakeLists.txt
xxxxxxxxxxadd_message_files(FILES Information.msg)generate_messages(DEPENDENCIES std_msgs)
6.1.4 Compile and generate language related files
xxxxxxxxxxcd ~/catkin_wscatkin_make
6.1.5. C++Language Implementation
- Switch to~/catkin_ ws/src/learning_ Under topic/src, create two new cpp files named Information_ Publisher.cpp and Information_ Subscriber.cpp, copy the following code into it separately,Information_ publisher.cpp
x#include <ros/ros.h>#include "learning_topic/Information.h"int main(int argc, char **argv){// ROS node initializationros::init(argc, argv, "company_Information_publisher");// Create node handleros::NodeHandle n;// Create a Publisher to publish a topic named/company info, with a message type of learning_topic:: Person and a queue length of 10ros::Publisher Information_pub = n.advertise<learning_topic::Information>("/company_info", 10);// Set the frequency of the loopros::Rate loop_rate(1);int count = 0;while (ros::ok()){// Initialize learning_topic:: Information type messagelearning_topic::Information info_msg;info_msg.company = "Yahboom";info_msg.city = "Shenzhen";// Publish MessageInformation_pub.publish(info_msg);ROS_INFO("Information: company:%s city:%s ",info_msg.company.c_str(), info_msg.city.c_str());loop_rate.sleep();// Delay according to the cycle frequency}return 0;}
Information_subscriber.cpp
x#include <ros/ros.h>#include "learning_topic/Information.h"// After receiving the subscription message, it will enter the message callback function to process the datavoid CompanyInfoCallback(const learning_topic::Information::ConstPtr& msg){// Print the received messageROS_INFO("This is: %s in %s", msg->company.c_str(), msg->city.c_str());}int main(int argc, char **argv){ros::init(argc, argv, "company_Information_subscriber");//Initialize ROS nodesros::NodeHandle n;// This is creating a node handle// Create a subscriber, subscribe to the topic/company info, and register the callback function Company Infocallbackros::Subscriber person_info_sub = n.subscribe("/company_info", 10, CompanyInfoCallback);ros::spin();// Loop waiting callback functionreturn 0;}
- Modify the CMakeLists.txt file
xxxxxxxxxxadd_executable(Information_publisher src/Information_publisher.cpp)target_link_libraries(Information_publisher ${catkin_LIBRARIES})add_dependencies(Information_publisher ${PROJECT_NAME}_generate_messages_cpp)add_executable(Information_subscriber src/Information_subscriber.cpp)target_link_libraries(Information_subscriber ${catkin_LIBRARIES})add_dependencies(Information_subscriber ${PROJECT_NAME}_generate_messages_cpp)
- Core part
The implementation process here is the same as before, with the main difference being the introduction of header files and the use of custom message files:The import header file is
xxxxxxxxxx#include "learning_topic/Information.h"
Front learning_ Topic is the name of the feature pack, followed by Information. h, which is the header file name generated by the previously created msg fileUsing a custom message file is
xxxxxxxxxxlearning_topic::Information info_msg;info_msg.company = "Yahboom";info_msg.city = "Shenzhen";void CompanyInfoCallback(const learning_topic::Information::ConstPtr& msg)
- Run program
xxxxxxxxxxroscorerosrun learning_topic Information_publisherrosrun learning_topic Information_subscriber
- Run screenshot

- Program Description
Information_ As a publisher, publisher continuously posts messages to the topic of "/company_info" and prints the published messages; As a subscriber, Information_ The subscriber also continuously receives the content of the topic "/company_info" and prints it out in the callback function.
6.1.6 Python Language Implementation
- Switch to~/catkin_ ws/src/learning_ Under topic/script, create two new py files and name them Information_ Publisher.py and Information_ Subscriber.py, copy the following code into it separately,Information_ publisher.py
x#!/usr/bin/env python# -*- coding: utf-8 -*-import rospyfrom learning_topic.msg import Information #Import custom msgdef information_publisher():rospy.init_node('information_publisher', anonymous=True)# ROS node initializationinfo_pub = rospy.Publisher('/company_info', Information, queue_size=6)rate = rospy.Rate(10) #Set the frequency of the loopwhile not rospy.is_shutdown():# Initialize learning_topic:: Information type messageinfo_msg = Information()info_msg.company = "Yahboom";info_msg.city = "Shenzhen";info_pub.publish(info_msg)# Publish Messagerospy.loginfo("This is %s in %s.", info_msg.company, info_msg.city)# Print and publish messagesrate.sleep()# Delay according to the cycle frequencyif __name__ == '__main__':try:information_publisher()except rospy.ROSInterruptException:pass
Information_subscriber.py
x#!/usr/bin/env python# -*- coding: utf-8 -*-import rospyfrom learning_topic.msg import Information #Import custom msgdef CompanyInfoCallback(msg):rospy.loginfo("company: name:%s city:%s ", msg.company, msg.city)#Print subscription received informationdef Infomation_subscriber():rospy.init_node('Infomation_subscriber', anonymous=True)# ROS node initialization# Create a subscriber to subscribe to a topic named/company info and register the callback function personInfocallbacksrospy.Subscriber("/company_info", Information, CompanyInfoCallback)rospy.spin()# Loop waiting callback functionif __name__ == '__main__':Infomation_subscriber()
- Core part
Here is mainly an explanation of how to import custom message modules and how to use them:Import
xxxxxxxxxxfrom learning_topic.msg import Information
use
xxxxxxxxxxinfo_msg = Person()info_msg.company = "Yahboom";info_msg.city = "Shenzhen";
- run a program
Before running the program, add executable permissions to the py file
xxxxxxxxxxsudo chmod a+x Information_subscriber.pysudo chmod a+x Information_publisher.py
run a program
xxxxxxxxxxroscorerosrun learning_topic Information_publisher.pyrosrun learning_topic Information_subscriber.py
- Run screenshot
