ros rospy 常用命令

ROS 常用命令

工作空间与包管理

# 创建工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
source devel/setup.bash

# 创建 ROS 包
cd ~/catkin_ws/src
catkin_create_pkg my_package rospy roscpp std_msgs

# 查找包路径
rospack find package_name

# 查看包依赖
rospack depends package_name
rospack depends1 package_name  # 查看直接依赖

# 检查包依赖是否安装
rosdep check package_name

# 安装缺失的包依赖
rosdep install --from-paths src --ignore-src -r -y

节点管理

# 启动 ROS 核心
roscore

# 运行节点
rosrun package_name node_name

# 通过 launch 文件启动多个节点
roslaunch package_name launch_file.launch

# 列出所有活动节点
rosnode list

# 查看节点信息
rosnode info node_name

# 终止节点
rosnode kill node_name

# 清除死亡节点
rosnode cleanup

话题管理

# 列出所有话题
rostopic list
rostopic list -v  # 详细信息

# 查看话题类型
rostopic type /topic_name

# 查看话题消息详情
rosmsg show topic_type

# 打印话题消息
rostopic echo /topic_name

# 发布话题消息
rostopic pub /topic_name message_type "data: value"
rostopic pub -r 10 /topic_name message_type "data: value"  # 以 10Hz 频率发布

# 查看话题发布频率
rostopic hz /topic_name

# 查看话题带宽使用情况
rostopic bw /topic_name

服务管理

# 列出所有服务
rosservice list

# 查看服务信息
rosservice info /service_name

# 查看服务类型
rosservice type /service_name

# 查看服务请求和响应结构
rossrv show service_type

# 调用服务
rosservice call /service_name "request_parameters"

参数服务器管理

# 列出所有参数
rosparam list

# 获取参数值
rosparam get /parameter_name

# 设置参数值
rosparam set /parameter_name value

# 删除参数
rosparam delete /parameter_name

# 从文件加载参数
rosparam load file.yaml

# 将参数保存到文件
rosparam dump file.yaml

可视化工具

# 启动 RViz
rviz

# 启动 Gazebo 仿真环境
roslaunch gazebo_ros empty_world.launch

# 启动 rqt 工具集
rqt
rqt_graph  # 节点关系图
rqt_plot /topic_name  # 绘制话题数据曲线

日志与调试

# 查看 ROS 日志文件位置
roscd log

# 查看节点的日志信息
roslaunch --screen package_name launch_file.launch  # 启动时显示日志

# 查看节点的 CPU 和内存使用情况
rosnode hz node_name  # 节点发布频率
rosnode info node_name | grep "cpu"  # CPU 相关信息

消息与服务定义

# 查看消息定义
rosmsg show message_type

# 查看服务定义
rossrv show service_type

# 生成消息和服务的代码
catkin_make

快速导航

# 快速切换到包目录
roscd package_name

# 直接编辑包内文件
rosed package_name file_name

# 搜索文件
roslocate find file_name

rospy 常用函数

1. 节点初始化与管理

rospy.init_node

  • 功能:在 ROS 系统里对节点进行初始化,向 ROS 主节点注册该节点。
  • 参数
    • name:节点的名称,必须提供。
    • anonymous:布尔值,默认为 False。若设为 True,会在节点名称后添加随机数,保证节点名称唯一。
    • log_level:日志级别,如 rospy.DEBUGrospy.INFO 等,默认为 rospy.INFO
    • disable_signals:布尔值,默认为 False。若设为 True,会禁用 ROS 信号处理。
  • 示例代码
import rospy
rospy.init_node('my_node', anonymous=True, log_level=rospy.DEBUG)
  • 应用场景:每个 ROS 节点启动时都要调用此函数。

rospy.is_shutdown

  • 功能:检查节点是否关闭,常用于循环中判断是否继续执行。
  • 参数:无
  • 示例代码
while not rospy.is_shutdown():
    # 循环执行的代码
    pass
  • 应用场景:在需要持续运行的节点中,用该函数判断是否退出循环。

2. 话题通信

rospy.Publisher

  • 功能:创建话题发布者对象,向指定话题发布消息。
  • 参数
    • name:话题名称。
    • data_class:消息类型,如 std_msgs.msg.String
    • queue_size:消息队列大小,当队列满时,旧消息会被丢弃。
    • latch:布尔值,默认为 False。若设为 True,最后发布的消息会被缓存,新订阅者会立即收到该消息。
  • 示例代码
from std_msgs.msg import String
pub = rospy.Publisher('chatter', String, queue_size=10)
  • 应用场景:需要向某个话题发布消息的节点。

rospy.Subscriber

  • 功能:创建话题订阅者对象,订阅指定话题的消息,并在接收到消息时调用回调函数。
  • 参数
    • name:话题名称。
    • data_class:消息类型。
    • callback:回调函数,接收到消息时调用。
    • callback_args:传递给回调函数的额外参数。
    • queue_size:消息队列大小。
  • 示例代码
def callback(data):
    rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)

rospy.Subscriber('chatter', String, callback)
  • 应用场景:需要接收某个话题消息的节点。

3. 服务通信

rospy.Service

  • 功能:创建服务服务器对象,处理客户端的服务请求。
  • 参数
    • name:服务名称。
    • service_class:服务类型。
    • handler:处理服务请求的函数。
  • 示例代码
from rospy_tutorials.srv import AddTwoInts, AddTwoIntsResponse

def handle_add_two_ints(req):
    return AddTwoIntsResponse(req.a + req.b)

s = rospy.Service('add_two_ints', AddTwoInts, handle_add_two_ints)
  • 应用场景:提供服务的节点。

rospy.ServiceProxy

  • 功能:创建服务客户端对象,向服务服务器发送服务请求。
  • 参数
    • name:服务名称。
    • service_class:服务类型。
    • persistent:布尔值,默认为 False。若设为 True,会保持与服务服务器的持久连接。
  • 示例代码
rospy.wait_for_service('add_two_ints')
try:
    add_two_ints = rospy.ServiceProxy('add_two_ints', AddTwoInts)
    resp1 = add_two_ints(1, 2)
    print(resp1.sum)
except rospy.ServiceException as e:
    print("Service call failed: %s"%e)
  • 应用场景:需要调用服务的节点。

4. 参数服务器操作

rospy.get_param

  • 功能:从参数服务器获取参数值。
  • 参数
    • key:参数名称。
    • default:默认值,当参数不存在时返回该值。
  • 示例代码
param_value = rospy.get_param('my_param', 'default_value')
  • 应用场景:节点启动时读取配置参数。

rospy.set_param

  • 功能:将参数设置到参数服务器。
  • 参数
    • key:参数名称。
    • val:参数值。
  • 示例代码
rospy.set_param('my_param', 'new_value')
  • 应用场景:在运行过程中动态修改配置参数。

rospy.has_param

  • 功能:检查参数服务器中是否存在指定参数。
  • 参数
    • key:参数名称。
  • 示例代码
if rospy.has_param('my_param'):
    print("Parameter exists.")
  • 应用场景:在获取参数前先检查参数是否存在。

rospy.delete_param

  • 功能:从参数服务器删除指定参数。
  • 参数
    • key:参数名称。
  • 示例代码
rospy.delete_param('my_param')
  • 应用场景:清理不再需要的参数。

5. 时间与频率控制

rospy.Rate

  • 功能:控制循环的执行频率。
  • 参数
    • hzv:频率值,单位为 Hz。
  • 示例代码
rate = rospy.Rate(10)  # 10Hz
while not rospy.is_shutdown():
    # 循环执行的代码
    rate.sleep()
  • 应用场景:需要按照固定频率执行任务的节点。

rospy.Time

  • 功能:处理 ROS 中的时间,如获取当前时间、进行时间计算等。
  • 常用方法
    • rospy.Time.now():获取当前时间。
    • rospy.Time.from_sec(secs):从秒数创建 Time 对象。
    • rospy.Time.to_sec():将 Time 对象转换为秒数。
  • 示例代码
current_time = rospy.Time.now()
  • 应用场景:在需要进行时间同步、计时等操作的节点中使用。

rospy.Duration

  • 功能:表示一段时间间隔,可用于时间计算。
  • 常用方法
    • rospy.Duration(secs, nsecs):创建 Duration 对象。
    • rospy.Duration.to_sec():将 Duration 对象转换为秒数。
  • 示例代码
duration = rospy.Duration(1, 500000000)  # 1.5 秒
  • 应用场景:在需要进行时间延迟、定时任务等操作的节点中使用。

6. 日志输出

rospy.logdebug

  • 功能:输出调试级别的日志,通常用于开发和调试阶段。
  • 参数
    • msg:日志消息。
  • 示例代码
rospy.logdebug("This is a debug message.")
  • 应用场景:在开发和调试时输出详细的调试信息。

rospy.loginfo

  • 功能:输出信息级别的日志,用于记录正常运行时的信息。
  • 参数
    • msg:日志消息。
  • 示例代码
rospy.loginfo("This is an info message.")
  • 应用场景:记录节点的正常运行状态、重要事件等信息。

rospy.logwarn

  • 功能:输出警告级别的日志,用于提示可能存在的问题。
  • 参数
    • msg:日志消息。
  • 示例代码
rospy.logwarn("This is a warning message.")
  • 应用场景:当节点遇到一些可能影响正常运行但不严重的问题时输出警告信息。

rospy.logerr

  • 功能:输出错误级别的日志,用于记录严重的错误信息。
  • 参数
    • msg:日志消息。
  • 示例代码
rospy.logerr("This is an error message.")
  • 应用场景:当节点遇到严重错误,无法正常运行时输出错误信息。

rospy.logfatal

  • 功能:输出致命级别的日志,用于记录导致节点崩溃的错误信息。
  • 参数
    • msg:日志消息。
  • 示例代码
rospy.logfatal("This is a fatal message.")
  • 应用场景:当节点遇到无法恢复的错误,即将崩溃时输出致命信息。
posted @ 2025-03-27 09:40  Hany47315  阅读(172)  评论(0)    收藏  举报