yahboom
HomeLearn
Solution
Blog
Online Store
About Us
EN/中文
Transbot SE📖
01.Introduction to Transbot SE
  • 01. Introduction to Transbot SE
  • 02. Precautions for use and battery safety
  • 03. First Trial
02.First Trial
  • 2.1.APP control
  • 2.2.USB wireless handle control(Optional)
  • 2.3.Handle video control Transbot(Optional)
  • 2.4.Network configuration tutorial in hotspot mode
03.Hardware control course
  • 3.1About expansion board and update firmware
  • 3.2.Close self-starting process
  • 3.3.Install Transbot library
  • 3.4.Control buzzer and button
  • 3.5.Control PWM servo
  • 3.6.Control bus servo
  • 3.7.Control motor
  • 3.8.Control robot movement
04.Linux operating system
  • 1. Virtual machine installation and use
  • 2. Linux basics
  • 3. Remote control
  • 4. Multi-machine communication configuration
  • 5. Static IP and hotspot mode
  • 6. Web page real-time monitoring
  • 7. Expansion tutorial
  • 8. Write system images
05.Docker couse(For Pi5)
  • 1.Docker overview and docker installation
  • 2.Common commands for docker image containers
  • 3.Docker images deeply understand and publish images
  • 4.Docker hardware interaction and data processing
  • 5.Start the transbot se container
06.ROS basic course
  • 1.ROS introduction
  • 2.Project file structure
  • 3.Common commands and tools
  • 4.Publisher
  • 5.Subscribers
  • 6.Customize topic messages and use
  • 7.Client
  • 8.Server
  • 9.Custom service messages and usage
  • 10.TF release and monitoring
07.OpenCV courses
  • 1. Getting started with Open Source CV
  • 2. Open Source CV geometric transformation
  • 3. Open Source CV image processing and drawing text line segments
  • 4. Open Source CV image beautification
  • 5. Opencv application
  • 6. AR vision
  • 7. AR QR code
  • 8. ROS+Opencv foundation
  • 9. ROS+Opencv application
  • 10. MediaPipe development
08.ROS robot course
  • 1.PID algorithm
  • 2.Basic communication
  • 3.Keyboard control
  • 4.Handle control(Optional)
  • 5.Robot state estimation
  • 6.Data calibration
09.ROS simple camera course
  • 1.HD camera calibration
  • 2.HD camera color tracking
  • 3.HD camera color tracking (robotic arm)
  • 4.HD camera object tracking
  • 5. KCF target tracking
  • 6.HD camera face tracking
  • 7.HD camera robotic arm carrying
  • 8.HD camera Autopilot
10.ROS robotic arm control tutorial
  • 1.MoveIt configuration
  • 2.MoveIt control the real machine
  • 3.MoveIt moves randomly
  • 4.MoveIt kinematics design
  • 5.MoveIt cartesian path
  • 6.MoveIt avoiding
  • 7.MoveIt scene design
  • 8.MoveIt trajectory planning
  • 9.Mediapipe palm control car
  • 10.Mediapipe gesture control robotic arm
  • 11.Mediapipe gesture control car
  • 12.Mediapipe arm attitude control robotic arm
11.ROS multi-robot control(Optional)
  • 1. Multi-robot control(Optional)
  • 2. Multi-robot queue performance(Optional)
  • 3. Multi-robot robot arm dancing(Optional)
12.Deep learning courses
  • 1.KNN recognizes handwritten digits
  • 2.Basic use of TensorFlow
  • 3.Basic use of PyTorch(jetson)
  • 4.yolov5 model training(jetson)
  • 5.yolov5+tensorrt acceleration(jetson)
  • 6.yolov4-tiny
13.Installation Video
  • Part18
  • Part1-6
  • Part7-12
  • Part13.1-13.3.3
  • Part13.4.1-17
14.FAQnew
  • 1.Using your own Jetson board,Transbot-SE cannot start normally
Download
  • APP(iOS/Android)
  • System_File-Pi5
  • System_File-Pi4
  • System_File-Jetson
  • VM_File
  • Appendix
  • Code
  • InstructionManual
  • Jetson_Boot_USB.tar.gz
  • Hardware_Info
Download ZIP

Welcome to Transbot SE repository

6.Customize topic messages and use

6 Customize topic messages and use

6 Customize topic messages and use 6.1 Custom topic message 6.1.1 Define msg file 6.1.2 Add function package dependencies in package.xml 6.1.3 Add compile options in CMakeLists.txt 6.1.4 Compile and generate language-related files 6.1.5 C++ language implementation 6.1.6 Python language implementation

6.1 Custom topic message

Switch to the ~/catkin_ws/src/learning_topic function package directory, and then create a new folder named msg to store custom topic messages.

6.1.1 Define msg file

Switch to the msg directory, create a new blank msg file, and use msg as the suffix to indicate that it is a msg file. Here we take Information.msg as an example to illustrate, and copy the following code into the just created msg file.

string  company 
string  city   

6.1.2 Add function package dependencies in package.xml

xxxxxxxxxx
<build_depend>message_generation</build_depend> 
<exec_depend>message_runtime</exec_depend> 

6.1.3 Add compile options in CMakeLists.txt

xxxxxxxxxx
Add message_generation to find_package 
add_message_files(FILES Information.msg) 
generate_messages(DEPENDENCIES std_msgs) 

6.1.4 Compile and generate language-related files

xxxxxxxxxx
cd ~/catkin_ws 
catkin_make 

6.1.5 C++ language implementation

  1. Switch to ~/catkin_ws/src/learning_topic/src, create two new cpp files, name them Information_publisher.cpp and Information_subscriber.cpp, and copy the following codes into them respectively,

Information_publisher.cpp

​x
/** 
 * This routine will publish the /company_info topic, the message type is a custom learning_topic::Information 
 */ 
 
#include <ros/ros.h> 
#include "learning_topic/Information.h" 

int  main(int  argc, char  ** argv) 
{ 
    // ROS node initialization 
    ros::init(argc, argv, "company_Information_publisher"); 

    // create node handle 
    ros::NodeHandle  n; 

    // Create a Publisher, publish a topic named /company_info, the message type is learning_topic::Person, and the queue length is 10 
    ros::Publisher  Information_pub  =  n.advertise < learning_topic::Information >("/company_info", 10); 

    // set the frequency of the loop 
    ros::Rate  loop_rate(1); 

    int  count  =  0; 
    while (ros::ok()) 
{ 
        // Initialize a message of type learning_topic::Information 
        learning_topic::Information  info_msg; 
        info_msg.company  =  "Yahboom"; 
        info_msg.city  =  "Shenzhen"; 

        // make an announcement 
        Information_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 loop frequency 
} 

    return  0; 
} 

Information_subscriber.cpp

xxxxxxxxxx
/** 
 * This routine will subscribe to /company_info topic, custom message type learning_topic::Information 
 */ 
 
#include <ros/ros.h> 
#include "learning_topic/Information.h" 

// After receiving the subscribed message, it will enter the message callback function to process the data 
void  CompanyInfoCallback(const  learning_topic::Information::ConstPtr &  msg) 
{ 
    // print received message 
    ROS_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 the ROS node 

    
    ros::NodeHandle  n; // here is the create node handle 

    // Create a Subscriber, subscribe to the topic named topic/company_info, and register the callback function CompanyInfoCallback 
    ros::Subscriber  person_info_sub  =  n.subscribe("/company_info", 10, CompanyInfoCallback); 

    
    ros::spin(); // loop waiting for callback function 

    return  0; 
} 

  1. modify the CMakeLists.txt file
xxxxxxxxxx
add_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) 
  1. the core part

The implementation process here is the same as before, the main difference is the introduction of header files and the use of custom message files:

The import header file is

xxxxxxxxxx
#include "learning_topic/Information.h" 

The front learning_topic is the function package name, and the back Information.h is the header file name generated by the msg file just created

Using a custom message file is

xxxxxxxxxx
learning_topic::Information info_msg; 
info_msg.company = "Yahboom"; 
info_msg.city = "Shenzhen"; 
void CompanyInfoCallback(const learning_topic::Information::ConstPtr& msg) 

4), run the program

xxxxxxxxxx
roscore 
rosrun learning_topic Information_publisher 
rosrun learning_topic Information_subscriber 
  1. run the screenshot

image-20220225104538769

  1. program description

As a publisher, Information_publisher continuously publishes the content of messages to the topic "/company_info", and prints the published messages; and Information_subscriber, which is a subscriber, also continuously receives the content of the topic "/company_info", and then prints it out in the callback function.

6.1.6 Python language implementation

  1. switch to ~/catkin_ws/src/learning_topic/script, create two new py files, named Information_publisher.py and Information_subscriber.py, and copy the following codes into them respectively,

Information_publisher.py

xxxxxxxxxx
# !/usr/bin/env python 
# -*- coding: utf-8 -*- 


import  rospy 

from  learning_topic.msg  import  Information  #Import custom msg 

 def information_publisher(): 
    
    rospy.init_node('information_publisher', anonymous = True) # ROS node initialization 

    # Create a Publisher, publish a topic named /company_info, the message type is learning_topic::Information, and the queue length is 6 
    info_pub  =  rospy.Publisher('/company_info', Information, queue_size = 6) 

    rate = rospy.Rate(10) the frequency of the loop 

    while  not  rospy.is_shutdown(): 

    # Initialize messages of type learning_topic::Information 
        info_msg  =  Information() 
        info_msg.company  =  "Yahboom"; 
        info_msg.city   =  "Shenzhen"; 
    
        info_pub.publish(info_msg) # publish message 

        rospy.loginfo("This is %s in %s.", info_msg.company, info_msg.city) # print the post message 
        
        rate.sleep() # Delay according to the loop frequency 

if  __name__  ==  '__main__' : 
    try : 
        information_publisher() 
    except  rospy.ROSInterruptException : 
        pass 

Information_subscriber.py

xxxxxxxxxx
# !/usr/bin/env python 
# -*- coding: utf-8 -*- 


import  rospy 

from  learning_topic.msg  import  Information  #Import custom msg 

 def CompanyInfoCallback(msg): 

    rospy.loginfo("company: name:%s city:%s ", msg.company, msg.city) # print subscription received information 

 def Infomation_subscriber(): 
    
    rospy.init_node('Infomation_subscriber', anonymous = True) # ROS node initialization 

    # Create a Subscriber, subscribe to a topic named /company_info, and register the callback function personInfoCallback 
    rospy.Subscriber("/company_info", Information, CompanyInfoCallback) 

    rospy.spin() # loop waiting for the callback function 

if  __name__  ==  '__main__' : 
    Infomation_subscriber() 

  1. the core part

Here is mainly to explain how to import and use custom message modules:

import

xxxxxxxxxx
from  learning_topic.msg  import  Information 

use

xxxxxxxxxx
info_msg  =  Person() 
info_msg.company  =  "Yahboom"; 
info_msg.city   =  "Shenzhen"; 
  1. run the program

Before running the program, first add executable permissions to the py file

xxxxxxxxxx
sudo chmod a+x Information_subscriber.py 
sudo chmod a+x Information_publisher.py 

run the program

xxxxxxxxxx
roscore 
rosrun learning_topic Information_publisher.py 
rosrun learning_topic Information_subscriber.py 
  1. run the screenshot

image-20220225105730967

Subscribers
Client

COMPANY

  • About us
  • Team Style
  • Blog

LEARNING & EXPLORATION

  • Tutorials
  • Edge AI hardware
  • Educational robots
  • Embedded intelligent hardware

WHERE TO BUY

  • Yahboom Online Store
  • Amazon
  • Alibaba
  • AliExpress
  • Mercado

TECHNOLOGY SUPPORT

  • Email: support@yahboom.com

BE A DISTRIBUTOR

  • Email: sales@yahboom.com
QR Code

Copyright © 2017-2026 Yahboom. All Rights Reserved.

EN/中文