ros消息常用指令
ros中节点(node)、话题(ropic)、消息(message)、服务(service)等概念是ros的基础,学会查看相关信息对调试代码十分重要。
通过rosnode、rostopic、rosmsg、rosservice指令查看能够使用的命令,每个命令后面会有相应的information,通过information可以初步理解命令的用途。
只输入相关指令,可以输出该指令下的解释,用途。
rosnode list:该命令可以查看当前活跃的节点。
rosnode info:该命令用来查看节点的发布订阅状态。
rostopic list:查看当前活跃的话题列表:
rostopic type (+具体的话题名):通过该命令可以查看话题下的消息类型。
如:
wxh@wxh-upc:~/workspace/catkin_ws$ rostopic type /scan
sensor_msgs/LaserScan
rostopic info:该命令可以查看指定话题的发布订阅状况。
rostopic echo:通过该命令可以查看话题中消息的实时数据.
对于rostopic 后面的内容,都需要加上具体的话题名称,才可以显示该话题的具体信息。
如,
rostopic info /scan
rostopic echo /scan
rostopic type /scan
rosmsg list:同样该命令可以查看当前活跃的消息列表.
rosmsg info:通过该指令查看消息内部的具体格式,
rosservice list:通过该命令可以查看当前活跃的服务列表,
ROS下基础的C++编程套路 如何发布一个消息
以增加小乌龟发布速度消息为例,需要注意以下四个部分:
一、头文件部分
头文件需要包含你所要发的消息类型。在小乌龟例程中,发布速度的话题是/turtle1/vel_cmd。这需要包含相关头文件信息,就是rostopic type /turtle1/vel_cmd的类型,即包含#include <geometry_msgs/Twist.h>头文件。
二、公告,获取句柄部分(消息的发布)
发布消息前需要公告并且获取相应的句柄。在小乌龟例程中,我们就可以写:
ros::publisher vel_tar_pub = nh.advertise<geometry_msgs::Twist(“/turtle1/vel_cmd”, 10);
一般需要修改的有三部分:
1.vel_tar_pub:就是一个名称(自己取);
2.geometry_msgs::Twist:消息类型(通过输入rostopic type 话题名 得到的消息类型);
3./turtle1/vel_cmd:需要发布的话题名;
三、实例化发布的消息
geometry_msgs::Twist vel_cmd;
vel_cmd.linear.x = 2;
vel_cmd.angular.x = 1;
四、发布消息
vel_tar_pub.publish(vel_cmd);
综上所述,ROS下一个发布速度消息的C++程序是这样的:
#include <ros/ros.h>
#include <……>
#include <……>
#include <geometry_msgs/Twist.h>//包含需要发布的消息类型
int main(int argc, char **argv)
{
ros::init(argc, argv, “offb_node”);
ros::NodeHandle nh;
ros::ServiceClient arming_client = nh.serviceClient<mavros_msgs::CommandBool>
(“mavros/cmd/arming”);
…
…
…
ros::publisher vel_tar_pub = nh.advertise<geometry_msgs::Twist>
(“/turtle1/vel_cmd”, 10);//
ros::Rate rate(20.0);
geometry_msgs::Twist vel_cmd;
vel_cmd.linear.x = 2;
vel_cmd.angular.x = 1;
while(ros::ok()){
vel_tar_pub.publish(vel_cmd);
ros::spinOnce();
rate.sleep();
}
}