自定义消息的发布
1.创建空间+包
1.创建ROS工作空间:
csmkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make source devel/setup.bash 创建工作空间,编译设置环境
2.创建工作空间中的ROS包:
cpp
cd ~/catkin_ws/src
catkin_create_pkg your_package std_msgs rospy roscpp message_generation
创建一个名为your_package
的ROS包,依赖于std_msgs
、rospy
、roscpp
和message_generation
.
2。创建自定义消息文件
定义消息结构:
cpp
cd ~/catkin_ws/src/your_package/msg
touch Person.msg
在msg里输入
string name
int32 age
float32 height
3.配置CMakeLists.txt和package.xml
修改CMakeLists.txt:
cd ~/catkin_ws/src/your_package
gedit CMakeLists.txt
在CMakeLists.txt
文件中添加
cpp
add_message_files(
FILES
Person.msg
)
generate_messages(
DEPENDENCIES
std_msgs
)
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
catkin_package(
CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
)
add_executable(publisher_node src/publisher_node.cpp)
target_link_libraries(publisher_node ${catkin_LIBRARIES})
修改package.xml
gedit package.xml
在package.xml
文件中添加
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
4. 编写发布者代码
1.创建发布者节点文件:
cd ~/catkin_ws/src/your_package/src
touch publisher_node.cpp
2.编辑发布者节点文件:
gedit publisher_node.cpp
在打开的publisher_node.cpp
文件中输入
cpp
#include <ros/ros.h>
#include "your_package/Person.h" // 包含自定义消息头文件
int main(int argc, char **argv)
{
ros::init(argc, argv, "publisher_node");
ros::NodeHandle nh;
ros::Publisher pub = nh.advertise<your_package::Person>("person_topic", 10);
ros::Rate rate(1); // 设置发布频率
while (ros::ok())
{
your_package::Person person;
person.name = "ganqianzhao";
person.age = 22;
person.height = 1.75;
pub.publish(person);
ROS_INFO("发布消息:%s, %d, %.2f", person.name.c_str(), person.age, person.height);
rate.sleep();
}
return 0;
}
5. 编译和运行
编译项目:
cd ~/catkin_ws
catkin_make
source devel/setup.bash
运行ROS核心:
roscore
运行发布者节点:
rosrun your_package publisher_node
6. 查看发布的消息
rostopic list 列出当前所有活跃的主题
查看消息内容 :rostopic echo /person_topic 会实时显示发布到/person_topic
主题上的消息内容,包括姓名、年龄和身高信息.