//头文件 ros/ros.h 包含了标准 ROS 类的声明,你将会在每一个你写的 ROS 程序中包含它。 #include <ros.h> //std_msgs中已经包含了所有的基本数据类型,此例子中用到了Float32类型 #include <std_msgs/Float32.h> //在创建时,如果一个内部节点没有被启动,节点句柄将启动该节点. //一旦所有的节点句柄实例被销毁,那么节点将被自动关闭 ros::NodeHandle nh; //定义一个相应数据类型的对象:电压值 std_msgs::Float32 voltage_msg; //指明发布的数据类型,话题和缓存队列大小 //声明发布者,话题名 = voltage ros::Publisher pub_voltage("voltage", &voltage_msg); void setup() { nh.initNode(); nh.advertise(pub_voltage); } void loop() { //静态局部变量如果没有被用户初始化,则会被编译器自动赋值为0, //以后每次调用静态局部变量的时候都用上次调用后的值。 static uint32_t pre_time; //millis()函数会返回一个值,该值代表当前cpu的时间 //可以用来定时,这样可以不用占用cpu时间 if (millis()-pre_time >= 50) { //将获取到的电压值赋值给data voltage_msg.data = getPowerInVoltage(); pub_voltage.publish(&voltage_msg); pre_time = millis(); } //loop函数中,调用了ros::spinOnce(),在这个函数中,所有ROS通信的回调函数都被处理 nh.spinOnce(); }