订阅和发布
ros::NodeHandle n_arduino;
ros::Publisher keyboard_cmd_pub = n_arduino.advertise<std_msgs::String>("keyboard_cmd", 1000); //创建一个名为keyboard_cmd_pub的Publisher,发布名为keyboard_cmd的topic,消息类型为std_msgs::String,暂存队列长度为1000
std_msgs::String cmd; //初始化std_msgs::String类型的消息变量cmd
// ros::init(argc, argv, "QR_Posture");
ros::NodeHandle n_QR_Posture;
ros::Subscriber QR_on_Robot = n_QR_Posture.subscribe("camera_pose", 10, infoCallback_QR_Pose); // 订阅相机节点,获取拍照信息
cmd.data="w";//闭合夹爪
keyboard_cmd_pub.publish(cmd);//发布消息cmd
void infoCallback_QR_Pose(const sensor_msgs::JointStateConstPtr& msg_QR_pose) {
// [0]~[6]为二维码在机器人基座标系下的空间位姿(X,Y,Z,RX,RY,RZ,RW)
QR_X = msg_QR_pose->position[0];
QR_Y = msg_QR_pose->position[1];
QR_Z = msg_QR_pose->position[2];
QR_Rx = msg_QR_pose->position[3];
QR_Ry = msg_QR_pose->position[4];
QR_Rz = msg_QR_pose->position[5];
QR_Rw = msg_QR_pose->position[6];
建立ROS工作区、定义ROS路径
创建工作空间
编译工作空间
设置环境变量
创建ROS程序包
创建功能包
编译功能包
首先在~/ros_ws目录下执行catkin_make命令
然后执行source ~/ros_ws/devel/setup.bash
注:
程序包package.xml文件用来声明程序包的依赖项
CMakeLists.txt文件用来声明有新的节点需要编译
编写发布器节点和订阅器节点
创建文件
编辑文件
发布者
#include <ros/ros.h>
#include <std_msgs/Float64.h>
int main(int argc,char **argv)
{
ros::init(argc,argv,"minimal_publisher");//"minimal_publisher"可更改
ros::NodeHandle n;
ros::Publisher my_publisher_object=n.advertise<std_msgs::Float64>("topic1",1);
std_msgs::Float64 input_float;
ros::Rate naptime(1.0);
input_float.data=0.0;
while(ros::ok())
{
input_float.data=input_float.data+0.001;
my_publisher_object.publish(input_float);
naptime.sleep();
}
}
订阅者
#include <ros/ros.h>
#include <std_msgs/Float64.h>
void myCallback(const std_msgs::Float64& message_holder)//进入函数,对变量进行赋值
{
ROS_INFO("received value is: %f",message_holder,data);
}
int main(int argc,char **argv)
{
ros::init(argc,argv,"minimal_subscriber");
ros::NodeHandle n;
ros::Subscriber my_subscriber_object=n.subscribe("topic1",1,myCallback);
ros::spin();
return 0;
}
编译ROS节点
修改程序包中的CMakeLists.txt文件
在~/ros_ws目录下执行catkin_make命令
注:
第一个参数的含义是给源代码生成的可执行文件取个名字,和源代码名字、程序包名字、节点名可以不相同。
运行ROS节点
注:
在编译之后一定要加一句source ~/ros_ws/devel/setup.bash,如果显示找不到包的话,那么就执行source ~/.bashrc命令,检查里面是否有刚才写入的source ~/ros_ws/devel/setup.bash命令,如果没有直接写进去就行了。