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.DEBUG、rospy.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.")
- 應用場景:當節點遇到無法恢復的錯誤,即將崩潰時輸出致命信息。
本文來自博客園,作者:Hany47315,轉載請注明原文鏈接:http://www.rzrgm.cn/hany-postq473111315/p/18795289

浙公網安備 33010602011771號