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からダウンロードすることもできます
紹介は以上です。