ROS基础——自定义消息发布节点的创建

ROS中自定义消息的发布和订阅ROS自定义msg类型及使用记录我的调试bug历程,找不到自定义消息类型的文件 bug找不到.h文件是电脑编译顺序的问题,先把add_executable(swarm_node_v2 src/swarm_node_v2.cpp)以及target_link_libraries(swarm_node_v2${catkin_LIBRARIES})注释,重新运行...
摘要由CSDN通过智能技术生成

ROS中自定义消息的发布和订阅
ROS自定义msg类型及使用

记录我的调试bug历程,
找不到自定义消息类型的文件 bug
找不到.h文件是电脑编译顺序的问题,先把add_executable(swarm_node_v2 src/swarm_node_v2.cpp)以及

target_link_libraries(swarm_node_v2${catkin_LIBRARIES})

注释,重新运行,给电脑生成.h文件的时间再进行编译。

第二点,各种发布订阅的消息类型要匹配上,如果匹配不上会报错。
第三点,自定义的消息类型的使用规则有一点像C++里面的class类,注意给我们的名字变量链接上。

Echo the topic to each all birds publish their position and see something

是提示我们查看消息类型,rostopic list,rostopic echo /pos 显示最终结果。

pos.name = ros::this_node::getName();
(base) warmtree@warmtree-HP-Pavilion-Laptop-15-cc5xx:~$ cd ros
(base) warmtree@warmtree-HP-Pavilion-Laptop-15-cc5xx:~/ros$ roslaunch swarm XinLAB2part2.launch
RLException: [XinLAB2part2.launch] is neither a launch file in package [swarm] nor is [swarm] a launch file name
The traceback for the exception was written to the log file
(base) warmtree@warmtree-HP-Pavilion-Laptop-15-cc5xx:~/ros$ source devel/setup.bash
(base) warmtree@warmtree-HP-Pavilion-Laptop-15-cc5xx:~/ros$ roslaunch swarm XinLAB2part2.launch
... logging to /home/warmtree/.ros/log/45439a1a-8619-11ea-bc84-60f677506757/roslaunch-warmtree-HP-Pavilion-Laptop-15-cc5xx-10355.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://warmtree-HP-Pavilion-Laptop-15-cc5xx:37183/

SUMMARY
========

CLEAR PARAMETERS
 * /bluesim/blue1/
 * /bluesim/blue2/
 * /bluesim/blue3/
 * /bluesim/blue4/
 * /bluesim/blue5/
 * /bluesim/blue_swarm/
 * /redsim/red1/
 * /redsim/red2/
 * /redsim/red3/
 * /redsim/red4/
 * /redsim/red5/
 * /redsim/red_swarm/

PARAMETERS
 * /bluesim/blue_swarm/move_key: 98
 * /redsim/red_swarm/move_key: 114
 * /rosdistro: melodic
 * /rosversion: 1.14.3
 * /world_size: 2.0

NODES
  /bluesim/
    blue1 (swarm/swarm_node_v2)
    blue2 (swarm/swarm_node_v2)
    blue3 (swarm/swarm_node_v2)
    blue4 (swarm/swarm_node_v2)
    blue5 (swarm/swarm_node_v2)
    blue_swarm (swarm/swarm_behavior)
  /redsim/
    red1 (swarm/swarm_node_v2)
    red2 (swarm/swarm_node_v2)
    red3 (swarm/swarm_node_v2)
    red4 (swarm/swarm_node_v2)
    red5 (swarm/swarm_node_v2)
    red_swarm (swarm/swarm_behavior)
  /
    teleop (capture_key/capture_key_node)

ROS_MASTER_URI=http://localhost:11311

process[teleop-1]: started with pid [10371]
process[bluesim/blue_swarm-2]: started with pid [10372]
ERROR: cannot launch node of type [swarm/swarm_node_v2]: can't locate node [swarm_node_v2] in package [swarm]
ERROR: cannot launch node of type [swarm/swarm_node_v2]: can't locate node [swarm_node_v2] in package [swarm]
ERROR: cannot launch node of type [swarm/swarm_node_v2]: can't locate node [swarm_node_v2] in package [swarm]
ERROR: cannot launch node of type [swarm/swarm_node_v2]: can't locate node [swarm_node_v2] in package [swarm]
ERROR: cannot launch node of type [swarm/swarm_node_v2]: can't locate node [swarm_node_v2] in package [swarm]
process[redsim/red_swarm-8]: started with pid [10383]
ERROR: cannot launch node of type [swarm/swarm_node_v2]: can't locate node [swarm_node_v2] in package [swarm]
ERROR: cannot launch node of type [swarm/swarm_node_v2]: can't locate node [swarm_node_v2] in package [swarm]
ERROR: cannot launch node of type [swarm/swarm_node_v2]: can't locate node [swarm_node_v2] in package [swarm]
ERROR: cannot launch node of type [swarm/swarm_node_v2]: can't locate node [swarm_node_v2] in package [swarm]
ERROR: cannot launch node of type [swarm/swarm_node_v2]: can't locate node [swarm_node_v2] in package [swarm]
^[[A^C[redsim/red_swarm-8] killing on exit
[bluesim/blue_swarm-2] killing on exit
[teleop-1] killing on exit
shutting down processing monitor...
... shutting down processing monitor complete
done
(base) warmtree@warmtree-HP-Pavilion-Laptop-15-cc5xx:~/ros$ catkin build
-------------------------------------------------------
Profile:                     default
Extending:          [cached] /opt/ros/melodic
Workspace:                   /home/warmtree/ros
-------------------------------------------------------
Build Space:        [exists] /home/warmtree/ros/build
Devel Space:        [exists] /home/warmtree/ros/devel
Install Space:      [unused] /home/warmtree/ros/install
Log Space:          [exists] /home/warmtree/ros/logs
Source Space:       [exists] /home/warmtree/ros/src
DESTDIR:            [unused] None
-------------------------------------------------------
Devel Space Layout:          linked
Install Space Layout:        None
-------------------------------------------------------
Additional CMake Args:       None
Additional Make Args:        None
Additional catkin Make Args: None
Internal Make Job Server:    True
Cache Job Environments:      False
-------------------------------------------------------
Whitelisted Packages:        None
Blacklisted Packages:        None
-------------------------------------------------------
Workspace configuration appears valid.
-------------------------------------------------------
[build] Found '2' packages in 0.0 seconds.                                     
[build] Package table is up to date.                                           
Starting  >>> capture_key                                                      
Starting  >>> swarm                                                            
Finished  <<< capture_key                [ 0.2 seconds ]                       
_______________________________________________________________________________
Errors     << swarm:check /home/warmtree/ros/logs/swarm/build.check.012.log    
CMake Error at /home/warmtree/ros/src/swarm/CMakeLists.txt:111 (add_executable):
  add_executable cannot create target "swarm_node" because another target
  with the same name already exists.  The existing target is an executable
  created in source directory "/home/warmtree/ros/src/swarm".  See
  documentation for policy CMP0002 for more details.


CMake Error at /home/warmtree/ros/src/swarm/CMakeLists.txt:122 (target_link_libraries):
  Cannot specify link libraries for target "swarm_node_v2" which is not built
  by this project.


make: *** [cmake_check_build_system] Error 1
cd /home/warmtree/ros/build/swarm; catkin build --get-env swarm | catkin env -si  /usr/bin/make cmake_check_build_system; cd -
...............................................................................
Failed     << swarm:check                [ Exited with code 2 ]                
Failed    <<< swarm                      [ 1.0 seconds ]                       
[build] Summary: 1 of 2 packages succeeded.                                    
[build]   Ignored:   None.                                                     
[build]   Warnings:  None.                                                     
[build]   Abandoned: None.                                                     
[build]   Failed:    1 packages failed.                                        
[build] Runtime: 1.0 seconds total.                                            
(base) warmtree@warmtree-HP-Pavilion-Laptop-15-cc5xx:~/ros$ catkin build
-------------------------------------------------------
Profile:                     default
Extending:          [cached] /opt/ros/melodic
Workspace:                   /home/warmtree/ros
-------------------------------------------------------
Build Space:        [exists] /home/warmtree/ros/build
Devel Space:        [exists] /home/warmtree/ros/devel
Install Space:      [unused] /home/warmtree/ros/install
Log Space:          [exists] /home/warmtree/ros/logs
Source Space:       [exists] /home/warmtree/ros/src
DESTDIR:            [unused] None
-------------------------------------------------------
Devel Space Layout:          linked
Install Space Layout:        None
-------------------------------------------------------
Additional CMake Args:       None
Additional Make Args:        None
Additional catkin Make Args: None
Internal Make Job Server:    True
Cache Job Environments:      False
-------------------------------------------------------
Whitelisted Packages:        None
Blacklisted Packages:        None
-------------------------------------------------------
Workspace configuration appears valid.
-------------------------------------------------------
[build] Found '2' packages in 0.0 seconds.                                     
[build] Package table is up to date.                                           
Starting  >>> capture_key                                                      
Starting  >>> swarm                                                            
Finished  <<< capture_key                [ 0.2 seconds ]                       
_______________________________________________________________________________
Errors     << swarm:check /home/warmtree/ros/logs/swarm/build.check.013.log    
CMake Error at /home/warmtree/ros/src/swarm/CMakeLists.txt:122 (target_link_libraries):
  Cannot specify link libraries for target "swarm_node_v2" which is not built
  by this project.


make: *** [cmake_check_build_system] Error 1
cd /home/warmtree/ros/build/swarm; catkin build --get-env swarm | catkin env -si  /usr/bin/make cmake_check_build_system; cd -
...............................................................................
Failed     << swarm:check                [ Exited with code 2 ]                
Failed    <<< swarm                      [ 1.0 seconds ]                       
[build] Summary: 1 of 2 packages succeeded.                                    
[build]   Ignored:   None.                                                     
[build]   Warnings:  None.                                                     
[build]   Abandoned: None.                                                     
[build]   Failed:    1 packages failed.                                        
[build] Runtime: 1.0 seconds total.                                            
(base) warmtree@warmtree-HP-Pavilion-Laptop-15-cc5xx:~/ros$ source devel/setup.bash
(base) warmtree@warmtree-HP-Pavilion-Laptop-15-cc5xx:~/ros$ catkin build
-------------------------------------------------------
Profile:                     default
Extending:          [cached] /opt/ros/melodic
Workspace:                   /home/warmtree/ros
-------------------------------------------------------
Build Space:        [exists] /home/warmtree/ros/build
Devel Space:        [exists] /home/warmtree/ros/devel
Install Space:      [unused] /home/warmtree/ros/install
Log Space:          [exists] /home/warmtree/ros/logs
Source Space:       [exists] /home/warmtree/ros/src
DESTDIR:            [unused] None
-------------------------------------------------------
Devel Space Layout:          linked
Install Space Layout:        None
-------------------------------------------------------
Additional CMake Args:       None
Additional Make Args:        None
Additional catkin Make Args: None
Internal Make Job Server:    True
Cache Job Environments:      False
-------------------------------------------------------
Whitelisted Packages:        None
Blacklisted Packages:        None
-------------------------------------------------------
Workspace configuration appears valid.
-------------------------------------------------------
[build] Found '2' packages in 0.0 seconds.                                     
[build] Package table is up to date.                                           
Starting  >>> capture_key                                                      
Starting  >>> swarm                                                            
Finished  <<< capture_key                [ 0.2 seconds ]                       
_______________________________________________________________________________
Errors     << swarm:check /home/warmtree/ros/logs/swarm/build.check.014.log    
CMake Error at /home/warmtree/ros/src/swarm/CMakeLists.txt:122 (target_link_libraries):
  Cannot specify link libraries for target "swarm_node_v2" which is not built
  by this project.


make: *** [cmake_check_build_system] Error 1
cd /home/warmtree/ros/build/swarm; catkin build --get-env swarm | catkin env -si  /usr/bin/make cmake_check_build_system; cd -
...............................................................................
Failed     << swarm:check                [ Exited with code 2 ]                
Failed    <<< swarm                      [ 0.9 seconds ]                       
[build] Summary: 1 of 2 packages succeeded.                                    
[build]   Ignored:   None.                                                     
[build]   Warnings:  None.                                                     
[build]   Abandoned: None.                                                     
[build]   Failed:    1 packages failed.                                        
[build] Runtime: 0.9 seconds total.                                            
(base) warmtree@warmtree-HP-Pavilion-Laptop-15-cc5xx:~/ros$ catkin build
-------------------------------------------------------
Profile:                     default
Extending:          [cached] /opt/ros/melodic
Workspace:                   /home/warmtree/ros
-------------------------------------------------------
Build Space:        [exists] /home/warmtree/ros/build
Devel Space:        [exists] /home/warmtree/ros/devel
Install Space:      [unused] /home/warmtree/ros/install
Log Space:          [exists] /home/warmtree/ros/logs
Source Space:       [exists] /home/warmtree/ros/src
DESTDIR:            [unused] None
-------------------------------------------------------
Devel Space Layout:          linked
Install Space Layout:        None
-------------------------------------------------------
Additional CMake Args:       None
Additional Make Args:        None
Additional catkin Make Args: None
Internal Make Job Server:    True
Cache Job Environments:      False
-------------------------------------------------------
Whitelisted Packages:        None
Blacklisted Packages:        None
-------------------------------------------------------
Workspace configuration appears valid.
-------------------------------------------------------
[build] Found '2' packages in 0.0 seconds.                                     
[build] Package table is up to date.                                           
Starting  >>> capture_key                                                      
Starting  >>> swarm                                                            
Finished  <<< capture_key                [ 0.2 seconds ]                       
_______________________________________________________________________________
Errors     << swarm:make /home/warmtree/ros/logs/swarm/build.make.012.log      
/home/warmtree/ros/src/swarm/src/swarm_node_v2.cpp: In function ‘int main(int, char**)’:
/home/warmtree/ros/src/swarm/src/swarm_node_v2.cpp:130:47: error: ‘NameAndPose’ was not declared in this scope
     ros::Publisher pubPos = nh_glob.advertise<NameAndPose::Point>("/pos",1);
                                               ^~~~~~~~~~~
/home/warmtree/ros/src/swarm/src/swarm_node_v2.cpp:130:37: error: parse error in template argument list
     ros::Publisher pubPos = nh_glob.advertise<NameAndPose::Point>("/pos",1);
                                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/warmtree/ros/src/swarm/src/swarm_node_v2.cpp:130:75: error: no matching function for call to ‘ros::NodeHandle::advertise<<expression error> >(const char [5], int)’
     ros::Publisher pubPos = nh_glob.advertise<NameAndPose::Point>("/pos",1);
                                                                           ^
In file included from /opt/ros/melodic/include/ros/ros.h:45:0,
                 from /home/warmtree/ros/src/swarm/src/swarm_node_v2.cpp:40:
/opt/ros/melodic/include/ros/node_handle.h:249:15: note: candidate: template<class M> ros::Publisher ros::NodeHandle::advertise(const string&, uint32_t, bool)
     Publisher advertise(const std::string& topic, uint32_t queue_size, bool latch = false)
               ^~~~~~~~~
/opt/ros/melodic/include/ros/node_handle.h:249:15: note:   template argument deduction/substitution failed:
/home/warmtree/ros/src/swarm/src/swarm_node_v2.cpp:130:75: error: template argument 1 is invalid
     ros::Publisher pubPos = nh_glob.advertise<NameAndPose::Point>("/pos",1);
                                                                           ^
In file included from /opt/ros/melodic/include/ros/ros.h:45:0,
                 from /home/warmtree/ros/src/swarm/src/swarm_node_v2.cpp:40:
/opt/ros/melodic/include/ros/node_handle.h:315:13: note: candidate: template<class M> ros::Publisher ros::NodeHandle::advertise(const string&, uint32_t, const SubscriberStatusCallback&, const SubscriberStatusCallback&, const VoidConstPtr&, bool)
   Publisher advertise(const std::string& topic, uint32_t queue_size,
             ^~~~~~~~~
/opt/ros/melodic/include/ros/node_handle.h:315:13: note:   template argument deduction/substitution failed:
/home/warmtree/ros/src/swarm/src/swarm_node_v2.cpp:130:75: error: template argument 1 is invalid
     ros::Publisher pubPos = nh_glob.advertise<NameAndPose::Point>("/pos",1);
                                                                           ^
make[2]: *** [CMakeFiles/swarm_node_v2.dir/src/swarm_node_v2.cpp.o] Error 1
make[1]: *** [CMakeFiles/swarm_node_v2.dir/all] Error 2
make: *** [all] Error 2
cd /home/warmtree/ros/build/swarm; catkin build --get-env swarm | catkin env -si  /usr/bin/make --jobserver-fds=4,5 -j; cd -
...............................................................................
Failed     << swarm:make                 [ Exited with code 2 ]                
Failed    <<< swarm                      [ 2.6 seconds ]                       
[build] Summary: 1 of 2 packages succeeded.                                    
[build]   Ignored:   None.                                                     
[build]   Warnings:  None.                                                     
[build]   Abandoned: None.                                                     
[build]   Failed:    1 packages failed.                                        
[build] Runtime: 2.6 seconds total.                                            
(base) warmtree@warmtree-HP-Pavilion-Laptop-15-cc5xx:~/ros$ catkin build
-------------------------------------------------------
Profile:                     default
Extending:          [cached] /opt/ros/melodic
Workspace:                   /home/warmtree/ros
-------------------------------------------------------
Build Space:        [exists] /home/warmtree/ros/build
Devel Space:        [exists] /home/warmtree/ros/devel
Install Space:      [unused] /home/warmtree/ros/install
Log Space:          [exists] /home/warmtree/ros/logs
Source Space:       [exists] /home/warmtree/ros/src
DESTDIR:            [unused] None
-------------------------------------------------------
Devel Space Layout:          linked
Install Space Layout:        None
-------------------------------------------------------
Additional CMake Args:       None
Additional Make Args:        None
Additional catkin Make Args: None
Internal Make Job Server:    True
Cache Job Environments:      False
-------------------------------------------------------
Whitelisted Packages:        None
Blacklisted Packages:        None
-------------------------------------------------------
Workspace configuration appears valid.
-------------------------------------------------------
[build] Found '2' packages in 0.0 seconds.                                     
[build] Package table is up to date.                                           
Starting  >>> capture_key                                                      
Starting  >>> swarm                                                            
Finished  <<< capture_key                [ 0.2 seconds ]                       
_______________________________________________________________________________
Errors     << swarm:make /home/warmtree/ros/logs/swarm/build.make.013.log      
/home/warmtree/ros/src/swarm/src/swarm_node_v2.cpp: In function ‘int main(int, char**)’:
/home/warmtree/ros/src/swarm/src/swarm_node_v2.cpp:130:47: error: ‘NameAndPose’ was not declared in this scope
     ros::Publisher pubPos = nh_glob.advertise<NameAndPose::Point>("/pos",1);
                                               ^~~~~~~~~~~
/home/warmtree/ros/src/swarm/src/swarm_node_v2.cpp:130:47: note: suggested alternative:
In file included from /home/warmtree/ros/src/swarm/src/swarm_node_v2.cpp:45:0:
/home/warmtree/ros/devel/.private/swarm/include/swarm/NameAndPose.h:54:54: note:   ‘swarm::NameAndPose’
 typedef ::swarm::NameAndPose_<std::allocator<void> > NameAndPose;
                                                      ^~~~~~~~~~~
/home/warmtree/ros/src/swarm/src/swarm_node_v2.cpp:130:37: error: parse error in template argument list
     ros::Publisher pubPos = nh_glob.advertise<NameAndPose::Point>("/pos",1);
                                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/warmtree/ros/src/swarm/src/swarm_node_v2.cpp:130:75: error: no matching function for call to ‘ros::NodeHandle::advertise<<expression error> >(const char [5], int)’
     ros::Publisher pubPos = nh_glob.advertise<NameAndPose::Point>("/pos",1);
                                                                           ^
In file included from /opt/ros/melodic/include/ros/ros.h:45:0,
                 from /home/warmtree/ros/src/swarm/src/swarm_node_v2.cpp:40:
/opt/ros/melodic/include/ros/node_handle.h:249:15: note: candidate: template<class M> ros::Publisher ros::NodeHandle::advertise(const string&, uint32_t, bool)
     Publisher advertise(const std::string& topic, uint32_t queue_size, bool latch = false)
               ^~~~~~~~~
/opt/ros/melodic/include/ros/node_handle.h:249:15: note:   template argument deduction/substitution failed:
/home/warmtree/ros/src/swarm/src/swarm_node_v2.cpp:130:75: error: template argument 1 is invalid
     ros::Publisher pubPos = nh_glob.advertise<NameAndPose::Point>("/pos",1);
                                                                           ^
In file included from /opt/ros/melodic/include/ros/ros.h:45:0,
                 from /home/warmtree/ros/src/swarm/src/swarm_node_v2.cpp:40:
/opt/ros/melodic/include/ros/node_handle.h:315:13: note: candidate: template<class M> ros::Publisher ros::NodeHandle::advertise(const string&, uint32_t, const SubscriberStatusCallback&, const SubscriberStatusCallback&, const VoidConstPtr&, bool)
   Publisher advertise(const std::string& topic, uint32_t queue_size,
             ^~~~~~~~~
/opt/ros/melodic/include/ros/node_handle.h:315:13: note:   template argument deduction/substitution failed:
/home/warmtree/ros/src/swarm/src/swarm_node_v2.cpp:130:75: error: template argument 1 is invalid
     ros::Publisher pubPos = nh_glob.advertise<NameAndPose::Point>("/pos",1);
                                                                           ^
make[2]: *** [CMakeFiles/swarm_node_v2.dir/src/swarm_node_v2.cpp.o] Error 1
make[1]: *** [CMakeFiles/swarm_node_v2.dir/all] Error 2
make: *** [all] Error 2
cd /home/warmtree/ros/build/swarm; catkin build --get-env swarm | catkin env -si  /usr/bin/make --jobserver-fds=4,5 -j; cd -
...............................................................................
Failed     << swarm:make                 [ Exited with code 2 ]                
Failed    <<< swarm                      [ 1.8 seconds ]                       
[build] Summary: 1 of 2 packages succeeded.                                    
[build]   Ignored:   None.                                                     
[build]   Warnings:  None.                                                     
[build]   Abandoned: None.                                                     
[build]   Failed:    1 packages failed.                                        
[build] Runtime: 1.8 seconds total.                                            
(base) warmtree@warmtree-HP-Pavilion-Laptop-15-cc5xx:~/ros$ catkin build
-------------------------------------------------------
Profile:                     default
Extending:          [cached] /opt/ros/melodic
Workspace:                   /home/warmtree/ros
-------------------------------------------------------
Build Space:        [exists] /home/warmtree/ros/build
Devel Space:        [exists] /home/warmtree/ros/devel
Install Space:      [unused] /home/warmtree/ros/install
Log Space:          [exists] /home/warmtree/ros/logs
Source Space:       [exists] /home/warmtree/ros/src
DESTDIR:            [unused] None
-------------------------------------------------------
Devel Space Layout:          linked
Install Space Layout:        None
-------------------------------------------------------
Additional CMake Args:       None
Additional Make Args:        None
Additional catkin Make Args: None
Internal Make Job Server:    True
Cache Job Environments:      False
-------------------------------------------------------
Whitelisted Packages:        None
Blacklisted Packages:        None
-------------------------------------------------------
Workspace configuration appears valid.
-------------------------------------------------------
[build] Found '2' packages in 0.0 seconds.                                     
[build] Package table is up to date.                                           
Starting  >>> capture_key                                                      
Starting  >>> swarm                                                            
Finished  <<< capture_key                [ 0.2 seconds ]                       
_______________________________________________________________________________
Errors     << swarm:make /home/warmtree/ros/logs/swarm/build.make.014.log      
/home/warmtree/ros/src/swarm/src/swarm_node_v2.cpp: In function ‘int main(int, char**)’:
/home/warmtree/ros/src/swarm/src/swarm_node_v2.cpp:130:67: error: invalid use of non-static data member ‘swarm::NameAndPose_<std::allocator<void> >::Point’
     ros::Publisher pubPos = nh_glob.advertise<swarm::NameAndPose::Point>("/pos",1);
                                                                   ^~~~~
In file included from /home/warmtree/ros/src/swarm/src/swarm_node_v2.cpp:45:0:
/home/warmtree/ros/devel/.private/swarm/include/swarm/NameAndPose.h:43:15: note: declared here
   _Point_type Point;
               ^~~~~
/home/warmtree/ros/src/swarm/src/swarm_node_v2.cpp:130:82: error: no matching function for call to ‘ros::NodeHandle::advertise<<expression error> >(const char [5], int)’
     ros::Publisher pubPos = nh_glob.advertise<swarm::NameAndPose::Point>("/pos",1);
                                                                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ROS 2中,创建自定义消息需要以下步骤: 1. 创建.msg文件:在ROS 2中,消息定义使用.msg文件。创建一个新的.msg文件,其中包含自定义消息的字段和类型。例如,如果您想要创建一个名为“my_message”的自定义消息,可以创建一个名为“my_message.msg”的文件,并在其中定义消息的字段和类型。 2. 编译消息:要使用自定义消息,您需要将其编译成ROS 2可用的代码。可以使用ROS 2的消息构建工具Colcon来完成此操作。首先,在您的工作空间中创建一个“msg”文件夹,并将您的.msg文件放在其中。然后,在终端中运行以下命令: ``` colcon build --packages-select my_package ``` 这将编译您的自定义消息并生成ROS 2可用的代码。 3. 使用自定义消息:一旦您的自定义消息已经编译,您可以在ROS 2中使用它。在您的ROS 2节点或包中,包含您的自定义消息的头文件,并使用该消息的类型来定义变量。例如,如果您想要在ROS 2节点发布一个名为“my_topic”的主题,其中包含您的自定义消息类型,可以执行以下操作: ```c++ #include "my_package/my_message.hpp" ... rclcpp::Node::SharedPtr node = rclcpp::Node::make_shared("my_node"); auto publisher = node->create_publisher<my_package::msg::MyMessage>("my_topic", 10); my_package::msg::MyMessage message; message.field1 = 1; message.field2 = "hello"; publisher->publish(message); ``` 这将创建一个名为“my_topic”的主题,并使用您的自定义消息类型来发布名为“message”的消息。 总之,以上是在ROS 2中创建自定义消息的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肥鼠路易

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值