ROS消息包
- ros消息包
- std_msgs
标准消息包
- common_msgs
- sensor_msgs 传感器消息包
- geometry_msgs 几何消息包
- nav_msgs 导航消息包
- std_msgs
std_msgs 标准消息包
常见类型
- 基础类型
- 数组类型
- 结构体类型
common_msgs 常用消息包
- actionlib_msgs 行为消息包
- diagnostic_msgs 诊断消息包
- geometry_msgs 几何消息包
- nav_msgs 导航消息包
- sensor_msgs 传感器消息包
- shap_smgs 形状消息包
- stereo_msgs 双目视觉消息包
- trajectory_msgs 运动轨迹消息包
- visualization_msgs 图形显示消息包
常用的消息
geometry_msgs
sensor_msgs
自定义消息
ROS生成自定义消息包
所谓的消息包 也是一个 普通的 pkg
msg/Carry.msg
catkin_create_pkg qq_msgs roscpp rospy std_msgs message_generation message_runtime
创建一个 msg
的目录
里面存放 Carry.msg
消息文件
string grade
int64 star
string daata
CMakeLists.txt
# 添加消息类型
add_message_files(
FILES
Carry.msg
)
# 生成新消息的依赖列表
generate_messages(
DEPENDENCIES
std_msgs
)
package.xml
确保 build_depend
和 exec_depend
都包含了
- message_generation
- message_runtime
补全
编译
进入到 ~/catkin_ws
目录下
输入
catkin_make
查看
rosmsg show qq_msgs/Carry
总结
C++实现 自定义消息
我们使用 ssr_msg
来进行实验
发布者节点
chao_node.cpp
#include <ros/ros.h>
#include <std_msgs/String.h>
#include <qq_msgs/Carry.h>
int main(int argc, char *argv[])
{
ros::init(argc,argv,"chao_node");
printf("Hello World!\n");
// add topic
ros::NodeHandle nh; // nh means node_hander
ros::Publisher pub = nh.advertise<qq_msgs::Carry>("game_topic",10); // publisher,10 buffers
ros::Rate loop_rate(10); // 1s exc 10
while(ros::ok())
{
printf("Don't shorw \n");
qq_msgs::Carry msg;
msg.grade = "王者";
msg.start = 50;
msg.data = "国服马超,带飞";
pub.publish(msg);
}
return 0;
}
CmakeList.txt
在chao_node 的后面加上 add_dependencies
add_dependencies(chao_node qq_msgs_generate_messages_cpp)
package.xml
确保 build_depend
和 exec_depend
中包含了 qq_msgs
订阅者节点
选择之前的工作目录 atr_pkg
ma_node.cpp
#include <ros/ros.h>
#include <std_msgs/String.h>
#include <qq_msgs/Carry.h>
void chao_callback(const qq_msgs::Carry& msg)
{
ROS_WARN(msg.grade.c_str());
ROS_WARN("%d 星",msg.start);
ROS_WARN(msg.data.c_str());
}
void yao_callback(const std_msgs::String::ConstPtr& msg)
{
ROS_WARN("%s \n",msg->data.c_str());
}
int main(int argc,char *argv[])
{
setlocale(LC_ALL,"");
ros::init(argc,argv,"ma_node");
ros::NodeHandle nh;
ros::Subscriber sub = nh.subscribe("game_topic",10,chao_callback); // call_back function
ros::Subscriber sub_yao = nh.subscribe("sex_topic",10,yao_callback);
while(ros::ok())
{
ros::spinOnce(); // back look node
}
return 0;
}
CmakeList.txt
添加 qq_msgs
添加 依赖
ma_node qq_msgs_generate_messages_cpp
package.xml
确保 build_depend
和 exec_depend
中包含了 qq_msgs
总结
Python实现 自定义消息
发布者节点
chao_node.py
#!/usr/bin/env python3
# coding=utf-8
import rospy
from std_msgs.msg import String
from qq_msgs.msg import Carry
def main():
rospy.init_node("chao_node")
rospy.logwarn("王者荣耀启动!")
pub = rospy.Publisher("game_topic", Carry, queue_size=10)
rate = rospy.Rate(10) # 10 hz
while not rospy.is_shutdown():
rospy.loginfo("我要开始刷屏了")
msg = Carry()
msg.start = 50
msg.grade = "王者"
msg.data = "国服马超,带飞"
pub.publish(msg)
rate.sleep()
if __name__ == "__main__":
main()
CMakeLists.txt
添加依赖
package.xml
确保 build_depend
和 exec_depend
中包含了 qq_msgs
订阅者节点
ma_node.py
#!/usr/bin/env python3
# coding=utf-8
import rospy
from std_msgs.msg import String
from qq_msgs.msg import Carry
def chao_callback(msg:Carry):
rospy.logwarn(msg.grade)
rospy.logwarn(str(msg.start)+"星")
rospy.logwarn(msg.data)
def main():
rospy.init_node("ma_node")
rospy.logwarn("元神,启动!")
sub = rospy.Subscriber("game_topic", Carry, chao_callback,queue_size=10)
rospy.spin()
if __name__ == "__main__":
main()
CmakeLists.txt
添加依赖
packag.xml
确保 build_depend
和 exec_depend
中包含了 qq_msgs
总结
感觉python比c++,写一些简单的东西要快 n 倍