## For instruction on writing tutorials ## http://www.ros.org/wiki/WritingTutorials #################################### ##FILL ME IN #################################### ## for a custom note with links: ## note = ## for the canned note of "This tutorial assumes that you have completed the previous tutorials:" just add the links ## note.0= [[ja/rosserial_arduino/Tutorials/Arduino IDE Setup|Arduino IDE Setup]] ## descriptive title for the tutorial ## title = ハローワールド (おためしパブリッシャ) ## multi-line description to be displayed in search ## description = このチュートリアルではrosserialを使ってパブリッシャを作る方法を説明します。 ## the next tutorial description (optional) ## next = ## links to next tutorial (optional) ## next.0.link= [[ja/rosserial_arduino/Tutorials/Blink|Blink (example subscriber)]] ## next.1.link= ## what level user is this tutorial for ## level= 初心者 ## keywords = #################################### <> <> == ハローワールド: パブリッシャをつくる == === ソースコード === rosserialの理解を深める手始めとして「ハローワールド」プログラム作成から始めるとしましょう。(注意:Arduinoのコミュニティではプログラムのソースコードを「スケッチ」と呼びます。以下もその慣習にしたがっています。) チュートリアル[[rosserial_arduino/Tutorials/Arduino IDE Setup|Arduino IDE Setup]]を終了したならば、Arduinoの`examples`メニューから`ros_lib -> HelloWorld`を選択することで以下のスケッチを開くことが出来ます。 IDEには次のコードが表示されるでしょう。: {{{ #!cplusplus block=hello /* * rosserial Publisher Example * Prints "hello world!" */ #include #include ros::NodeHandle nh; std_msgs::String str_msg; ros::Publisher chatter("chatter", &str_msg); char hello[13] = "hello world!"; void setup() { nh.initNode(); nh.advertise(chatter); } void loop() { str_msg.data = hello; chatter.publish( &str_msg ); nh.spinOnce(); delay(1000); } }}} === コードの説明 === それではコードを分解して見ていきましょう。 <> ROSでは全てのArduinoプログラムに`ros.h`と使用される全てのメッセージのヘッダファイルをインクルードする必要があります。 <> 次に、プログラム上でパブリッシャとサブスクライバを作るノードハンドルのインスタンスを作成しておく必要があります。ノードハンドルはシリアルポート通信も扱います。 <> プログラムで使うパブリッシャとサブスクライバをインスタンス化します。ここでは"chatter"というトピック名のパブリッシャのインスタンスを作ります。パブリッシャの2番目のパラメータはパブリッシュされるメッセージインスタンスへの参照です。 <> 次に、Arduinoのsetup関数の中でROSノードハンドルを初期化し、パブリッシュされる全トピックのアドバタイズとリスンしたい全トピックのサブスクライブをする必要があります。 <> 最後にloop関数の中で、ノードは"Hello World"をパブリッシュし、ROS通信の全コールバック関数を扱う`ros::spinOnce()`を呼びます。 === コードをアップロードする === コードをArduinoへアップロードするにはArduino IDEの内蔵機能を使います。どんなスケッチをアップロードするときもこの手順です。 === コードを実行する === では新しいTerminalウインドウで[[roscore]]を立ち上げましょう。: {{{ roscore }}} 次にArduinoもメッセージを他のROSへ伝えるrosserialクライアントアプリケーションを実行します。正しいシリアルポートを使用していることを確認して下さい。: {{{ rosrun rosserial_python serial_node.py /dev/ttyUSB0 }}} 最後に、新しいTerminalウインドウを開き、以下のコマンドを実行することでArduinoからの挨拶を見ることができます。: {{{ rostopic echo chatter }}} == さらに == パブリッシャやサブスクライバについての詳細情報は[[rosserial/Overview/Publishers and Subscribers|rosserial/Overview]]を参照して下さい。またより複雑なデータ型についての情報は[[rosserial/Overview/Limitations|limitations]]を参照して下さい。 ## AUTOGENERATED DO NOT DELETE ## TutorialCategory ## FILL IN THE STACK TUTORIAL CATEGORY HERE