ROSアプリケーション開発クライアントプログラミング入門

ROSは、Robot Operating Systemの略です。この記事では、ROSアプリケーションの開発とクライアントプログラミングについて紹介します。プログラムの機能は、コードを使用してシミュレートされたカメを作成することです。最初にC ++コード、次にPythonコード、あなたが精通しているものだけを見るように選択することもできます。

関数パッケージの作成

ROSのワークスペースは、 記事に設立されたROSの開発と応用の準備:ワークスペースを作成します。今、機能的なパッケージを作成します。:

cd〜 / catkin_ws / src

catkin_create_pkg Learning_service std_msgs roscpp rospygeometry_msgsturtlesim

最初の行は、ワークスペースのsrcディレクトリに戻ることです。関数パッケージの作成は、このディレクトリで実行する必要があります。

2行目は関数パッケージを作成するコマンド、最初のパラメーターは関数パッケージの名前、ここはlearning_service、次は関数パッケージの依存関係ライブラリ、ここはstd_msgs roscpp rospygeometry_msgsturtlesimです。5つの依存関係があります。ライブラリ。

上記のコマンドを実行すると、srcディレクトリの下にlearning_serviceという名前のディレクトリが表示されます。このディレクトリの内容は次のとおりです。

CMakeLists.txtにはpackage.xmlスクリプトが含まれますsrc

その中で、スクリプトは後でPythonコードを保存するために手動で作成されました。

c ++ソースコード

〜/ catkin_ws / src / Learning_service / srcディレクトリでもあるsrcディレクトリに、ファイルturtle_spawn.cppを作成します。

cd〜 // catkin_ws / src / Learning_service / src

nano turtle_spawn.cpp

内容は次のとおりです。

/**
 * 该例程将请求/spawn服务,服务数据类型turtlesim::Spawn
 */

#include <ros/ros.h>
#include <turtlesim/Spawn.h>

int main(int argc, char** argv)
{
    // 初始化ROS节点
	ros::init(argc, argv, "turtle_spawn");

    // 创建节点句柄
	ros::NodeHandle node;

    // 发现/spawn服务后,创建一个服务客户端,连接名为/spawn的service
	ros::service::waitForService("/spawn");
	ros::ServiceClient add_turtle = node.serviceClient<turtlesim::Spawn>("/spawn");

    // 初始化turtlesim::Spawn的请求数据
	turtlesim::Spawn srv;
	srv.request.x = 2.0;
	srv.request.y = 2.0;
	srv.request.name = "turtle2";

    // 请求服务调用
	ROS_INFO("Call service to spwan turtle[x:%0.6f, y:%0.6f, name:%s]", 
			 srv.request.x, srv.request.y, srv.request.name.c_str());

	add_turtle.call(srv);

	// 显示服务调用结果
	ROS_INFO("Spwan turtle successfully [name:%s]", srv.response.name.c_str());

	return 0;
};


このコードには明確なコメントがあります。これは、クライアントを実装するための基本的なプロセスです。

ROSノードを初期化します

ノードハンドルを作成する

サービスクライアントを作成し、/ spawnという名前のサービスに接続します

turtlesim :: Spawnのリクエストデータを初期化します

サービスコールをリクエストする

サービスコールの結果を表示する

cmakeファイルを構成する

〜/ catkin_ws / src / Learning_service /ディレクトリにCMakeLists.txtファイルがあり、このファイルを変更する必要があります

cd〜 / catkin_ws / src / Learning_service

nano CMakeLists.txt 

このファイルに次の2行を追加します。

add_executable(turtle_spawn src/turtle_spawn.cpp)
target_link_libraries(turtle_spawn ${catkin_LIBRARIES})

追加された場所はビルドの最後の部分です。次の場所を参照してください。これは、前にある## install ##です。

# target_link_libraries(${PROJECT_NAME}_node
#   ${catkin_LIBRARIES}
# )

add_executable(turtle_spawn src/turtle_spawn.cpp)
target_link_libraries(turtle_spawn ${catkin_LIBRARIES})

#############
## Install ##
#############

 保存して終了

これでコンパイルと構成は完了です。

テストをコンパイルして実行します

コンパイルは〜/ catkin_wsディレクトリに戻る必要があります

cd〜 / catkin_ws

catkin_make

コンパイル後に一度ソースする必要があります。

ソースdevel / setup.bash

コンパイルでエラーが発生した場合は、エラーを排除してからテストを実行する必要があります。

ターミナルを開き、rosを起動し、実行します

roscore

別のターミナルを開き、タートルを実行します

rosrun turtlesim turtlesim_node

上記はテスト環境を開始するためのものです。問題がある場合は、以下を参照してください 。ROSのシミュレーションタートルですが、キーボードコントロールが開始されていません。

最後に、ターミナルで実行します。

rosrun Learning_service turtle_spawn

上記のコマンドを実行した後、もう1つのカメが表示されますが、現在は2つです。

これでc ++の開発は完了です。

Pythonコード 

C ++と混同しないように、〜/ catkin_ws / src / Learning_service /ディレクトリの下にscriptsディレクトリを作成してから、このディレクトリに移動してturtle_spawn.pyファイルを作成します。

cd〜 / catkin_ws / src / Learning_service / scripts

nano turtle_spawn.py

ファイルの内容は次のとおりです。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

# 该例程将请求/spawn服务,服务数据类型turtlesim::Spawn

import sys
import rospy
from turtlesim.srv import Spawn

def turtle_spawn():
	# ROS节点初始化
    rospy.init_node('turtle_spawn')

	# 发现/spawn服务后,创建一个服务客户端,连接名为/spawn的service
    rospy.wait_for_service('/spawn')
    try:
        add_turtle = rospy.ServiceProxy('/spawn', Spawn)

		# 请求服务调用,输入请求数据
        response = add_turtle(3.0,3.0, 0.0, "turtle3")
        return response.name
    except rospy.ServiceException, e:
        print "Service call failed: %s"%e

if __name__ == "__main__":
	#服务调用并显示调用结果
    print "Spwan turtle successfully [name:%s]" %(turtle_spawn())

コードには明確な指示があり、プロセスは次のとおりです。

ROSノードの初期化

/ spawnサービスを検出したら、サービスクライアントを作成し、/ spawnという名前のサービスに接続します。

サービスコールをリクエストし、リクエストデータを入力します

Python実行テスト

Pythonはコンパイルせずに直接実行できます。

turtle_spawn.pyを変更して実行属性を持たせる 

chmod + x * .py

これはls-lで確認できます。

同時に、それは一度調達されるべきです: 

ソース〜/ catkin_ws / devel / setup.bash

まず、テスト環境を開始する必要があります。1つの端末がroscoreを起動し、別の端末がturtle rosrun turtlesim turtlesim_nodeを起動します。問題がある場合は、以下を参照してください。ROSで のシミュレーションタートルですが、キーボードコントロールがアクティブになっていません。 

次に、次のコマンドを実行します。

rosrun Learning_service turtle_spawn.py

実行の結果、より多くのカメがいます。

ソースコードはhttps://github.com/huchunxu/ros_21_tutorialsからダウンロードすることもできます

紹介は以上です。
 

おすすめ

転載: blog.csdn.net/leon_zeng0/article/details/114994379