ROS入門チュートリアル(9) - クライアントライブラリ:rospy(下)

rospy異なるデモのデモ

topic_demo

基本モデルと同様のroscpp

機能概要:2ノード(座標及び動作状態を含むカスタム形式)解放メッセージシミュレーGPSは、メッセージが受け入れられ、(原点からの距離を計算するために)さらに処理されます。

/gps
传感器
处理器

ステップ:

  1. パッケージ
  2. MSG
  3. talker.cpp
  4. listener.cpp
  5. CMakeList.txt&package.xmlの
1.パッケージ
$ cd ~/catkin_ws/src
$ catkin_create_pkg topic_demo roscpp rospy std_msgs
2. MSG
$ cd topic_demo/
$ mkdir msg
$ cd msg
$ vi gps.msg
# gps.msg
float32 x
float32 y
string state

あなたはMSGの作成を完了すると、コンパイラが生成し~/catkin_ws/devel/lib/python2.7/dis-packages/topic_demo/msg/__init__.pyたファイルを。それへの書き込みコードのインポート

from topic_demo.msg import gps
3. pytalker.py
#!/usr/bin/env python

import rospy
from topic_demo.msg import gps

def talker():
    pub = rospy.Publisher( 'gps_info' , gps, queue_size=10)
    rospy.init_node(' pytalker ', anonymous=True)
    rate = rospy.Rate(1)
    x = 1.0
    y = 2.0
    state = 'working'
    while not rospy.is_shutdown():
        rospy.loginfo( 'Talker: GPS: x = %f, y = %f')
        pub.publish(gps(state,x,y))  # 构造了gps的临时对象,这样写更直观。
        x = 1.03 * x
        y = 1.01 * y 
        rate.sleep()
           
if __name__ == '__main__' :
    talker()
}
4. pylistener.py
#!/usr/bin/env python

import rospy
import math
from topic_demo.msg import gps

def callback(gps):
    distance = math.sqrt(math.pow(gps.x, 2) + math.pow(gps.y, 2))
    rospy.loginfo( 'Listener: GPS distance = %f, state: %s ', distance , gps.state)
    
def listener():
    rospy.init_node('pylistener')
    rospy.Subscribe( 'gps_info' , gps , callback)
    rospy.spin()
    
if __name__ == '__main__' :
    listener() 

5. CMakeLists.txt&のpackage.xml

pyが主にMSGファイルをコンパイルするために、ここで、コンパイルを必要としません。

ここに画像を挿入説明
ここに画像を挿入説明

service_demo

基本モデルは、テンプレートを参照することができ、同様です。

関数の説明:2ノード、解放要求(カスタムフォーマット)、他のメッセージとリターン情報を受信して​​処理します。

response/reply
request
server
client

ステップ:

  1. パッケージ
  2. MSG
  3. server.cpp
  4. client.cpp
  5. CMakeList.txt&package.xmlの
1.パッケージ
$ cd ~/catkin_ws/src
$ catkin_create_pkg service_demo roscpp rospy std_msgs
2. SRV
$ cd service_demo/
$ mkdir srv
$ vi Greeting.srv
# Greeting.srv
string name
int32 age 
---
string feedback

あなたはSRVの作成を完了すると、コンパイラが生成し~/catkin_ws/devel/lib/python2.7/dis-packages/service_demo/srv/__init__.pyたファイルを。それへの書き込みコードのインポート

from service_demo.srv import *
3. server.py
#!/usr/bin/env python

import rospy
from service_demo.srv import *

def server_srv():
    rospy.init_node(' greetings_server ')
    s = rospy.Service( 'greetings', Greeting, handle_function) #定义程序的server端
    rospy.loginfo(' Ready to handle the request:') 
    rospy.spin()
    
def handle_function(req):
    rospy.loginfo( 'Request from' , req.name , 'with age' , req.age)
    return GreetingResponse( 'Hi %s. I'm server !' %req.name)
           
if __name__ == '__main__' :
    server_srv()
4. client.py
#!/usr/bin/env python

import rospy
from service_demo.srv import *

def client_srv():
    rospy.init_node(' greetings_client ')
    rospy.wait_for_service( 'greetings')
    
    try:
        greetings_client = rospy.ServiceProxy( 'greetings' ,Greeting)
        rosp = greetings_client( 'HAN' , 20)
        rospy.loginfo(' Message From Server: %s ' %rosp.feedback ) 
    except rospy.ServiceException e:
        rospy.logwarn( 'Service call failed: %s' %e)
           
if __name__ == '__main__' :
    client_srv()
}
5. CMakeLists.txt&のpackage.xml

そして、あなたは〜コンパイル(catkin_make)及び(rosrun)実行することができます

ソースを記入してください。
本論文では、「AndroidのOSは、はじめに」MOOCの中国の大学をまとめた
リンク:リンク
ビデオキャプチャプログラムからの写真

公開された43元の記事 ウォン称賛20 ビュー1470

おすすめ

転載: blog.csdn.net/Chen_2018k/article/details/104346422