ROStopic

订阅和发布

        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命令,如果没有直接写进去就行了。

猜你喜欢

转载自blog.csdn.net/weixin_63761958/article/details/129632472