常规API操作

阻塞线程spin

可以阻塞当前的线程。

C++对应API

1
ros::spin();

Python对应API

1
rospy.spin()

频率操作Rate

可以按照一定的频率操作循环执行。

C++对应API

1
2
3
4
ros::Rate rate(10);
while(true) {
    rate.sleep();
}

Python对应API

1
2
3
rate = rospy.Rate(10)
while True:
    rate.sleep()

Tip

rate中的参数10,代表在while循环中,每秒钟运行10次。

节点状态判断

  • 可以判断当前节点是否停止

  • 可以按照一定的频率操作循环执行。

C++对应API

1
ros::ok()

Python对应API

1
rospy.is_shutdown()

C++完整示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include "ros/ros.h"

using namespace std;

int main(int argc, char **argv) {
  // 初始化ros节点
  string nodeName = "hello_cpp";
  ros::init(argc, argv, nodeName);
  //创建节点
  ros::NodeHandle node;

  //频率操作
  ros::Rate rate(10);
  while (ros::ok()) {
    cout << "hello ros cpp node" << endl;
    rate.sleep();
  }

  //阻塞线程
  ros::spin();

  return 0;
}

Python完整示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#!/usr/bin/env python
# coding:utf-8

import rospy

if __name__ == '__main__':
    node_name = "hello_py"
    rospy.init_node(node_name)

    rate = rospy.Rate(10)
    while not rospy.is_shutdown():
        print "hello ros python node"
        rate.sleep()

    # 阻塞线程
    rospy.spin()