03 ros發布和訂閱(ros是什么意思)

时间:2024-05-05 06:32:56 编辑: 来源:

/p>

1

2

3

4

5

6

7

1

2

3

4

5

6

7

私有命名與上述提到的命名都不同,它會把原本命名放入到<node_name>下。因此,上面訂閱器的話題的命名如下:

如何自定義ros的action服務

1 創建工程

cd ~/catkin_ws/src

catkin_create_pkg action std_msgs rospy

2 設計action定義文件,內容有goal feedback result

這個和service的srv文件很像,放置再工程目錄的action目錄下

ration time_to_wait #goal,客戶端發送的等待總時間

---

ration time_elapsed #result ,服務器端發送的等了多久,

uint32 updates_sent #更新多少次

---

ration time_elapsed # feedback,服務器端周期性的發送已等了多久

ration time_remaining #還剩多久

3 修改CMakeLists.txt文件,配置默認支持

3.1 增加模塊actionlib_msgs

find_package(catkin REQUIRED COMPONENTS

..... #其他已有模塊

actionlib_msgs#增加

)

3.2 增加action服務定義文件

add_action_files(

DIRECTORY action

FILES Timer.action

)

3.3 action的msg

generate_messages(

DEPENDENCIES

actionlib_msgs

std_msgs

)

3.4 catkin的msg支持

catkin_package(

CATKIN_DEPENDS

actionlib_msgs

)

4 編譯工程

cd ~/catkin_ws

catkin_make

5 編寫action服務器端程序

#!/usr/bin/env python

import roslib; roslib.load_manifest('action')

import rospy

import time

import actionlib

from action.msg import TimerAction, TimerGoal, TimerResult

def do_timer(goal):

start_time = time.time()

time.sleep(goal.time_to_wait.to_sec())

result = TimerResult()

result.time_elapsed = rospy.Duration.from_sec(time.time() - start_time)

result.updates_sent = 0

server.set_succeeded(result)

rospy.init_node('timer_action_server')

server = actionlib.SimpleActionServer('timer', TimerAction, do_timer, False)

server.start()

rospy.spin()

6 編寫ros的action客戶端程序

#!/usr/bin/env python

import roslib; roslib.load_manifest('action')

import rospy

import actionlib

from action.msg import TimerAction, TimerGoal, TimerResult

rospy.init_node('timer_action_client')

client = actionlib.SimpleActionClient('timer', TimerAction)

client.wait_for_server()

goal = TimerGoal()

goal.time_to_wait = rospy.Duration.from_sec(5.0)

client.send_goal(goal)

client.wait_for_result()

print('Time elapsed: %f'%(client.get_result().time_elapsed.to_sec()))

7 測試運行(開四個終端)

ros買粉絲re

rosrun action action_c.py

rosrun action action_s.py

8 查看信息

liao@liao-eagle:~/catkin_ws/src/action/src$ rostopic list

/rosout

/rosout_agg

/timer/cancel

/timer/feedback

/timer/goal

/timer/result

/timer/status

liao@liao-eagle:~/catkin_ws/src/action/src$ rostopic info /timer/goal

Type: action/TimerActionGoal

Publishers: None

Subscribers:

* /timer_action_server (買粉絲://liao-eagle:42857/)

liao@liao-eagle:~/catkin_ws/src/action/src$ rosmsg show TimerActionGoal

[action/TimerActionGoal]:

std_msgs/Header header

uint32 seq

time stamp

string frame_id

actionlib_msgs/GoalID goal_id

time stamp

string id

action/TimerGoal goal

ration time_to_wait

liao@liao-eagle:~/catkin_ws/src/action/src$ rosmsg show TimerGoal

[action/TimerGoal]:

ration time_to_wait

9 rqt_graph

ros是什么意思

ROS是:機器人操作系統(Robot Operating System)的英文縮寫。

它能為異質計算機集群提供類似操作系統的功能,ROS的前身是斯坦福人工智能實驗室為了支持斯坦福智能機器人STAIR而建立的交換庭(switchyard)項目。到2008年,主要由威樓加拉吉繼續該項目的研發。

ROS提供一些標準操作系統服務,例如硬件抽象,底層設備控制,常用功能實現,進程間消息以及數據包管理。ROS是基于一種圖狀架構,從而不同節點的進程能接受,發布,聚合各種信息(例如傳感,控制,狀態,規劃等等),目前ROS主要支持Ubuntu。

ROS可以分成兩層,低層是上面描述的操作系統層,高層則是廣大用戶群貢獻的實現不同功能的各種軟件包,例如定位繪圖,行動規劃,感知,模擬等等。

ROS功能:

1、通道:ROS提供了一種發布-訂閱式的通信框架用以簡單、快速地構建分布式計算系。

2、工具:ROS提供了大量的工具組合用以配置、啟動、自檢、調試、可視化、登錄、測試、終止分布式計算系統。

3、強大的庫:ROS提供了廣泛的庫文件實現以機動性、操作控制、感知為主的機器人功能。

4、生態系統:ROS的支持與發展依托著一個強大的社區。ros.org尤其關注兼容性和支持文檔,提供了一套“一站式”的方案使得用戶得以搜索并學習來自全球開發者數以千計的ROS程序包。

搜索关键词: