Joint_states のsubscriber作成について(python)

1,165 views
Skip to first unread message

S5460

unread,
Sep 29, 2017, 2:09:48 AM9/29/17
to ROS JAPAN Users Group
皆様こんにちは。ROSをはじめて一ヶ月ほどになる学生です。
環境はubuntu16.04 LTS ・ Kinetic Kame になります。
現在、Joint_state_publisherから配信されているJoint_statesから角度情報(position)を取得するsubscriberを作成したいのですが上手く行かず困っております。
作成したパッケージのファイル構成、launchファイルとsubscriberのソースコードは以下の通りです。

・パッケージのファイル構成
catkin_ws --- src --- aroll_description -- CMakeLists.txt
                                                      -- package.xml
                                                      -- meshes
                                                      -- urdf
                                                      -- launch -- ARoLL.launch 
                                                      -- scripts -- jointread.py (position取得の為に作成したsubscriber)

・launchファイル(ARoLL.launch)のソースコード
<launch>↲                                                                                                         
     <arg name="model" default="$(find aroll_description)/urdf/aroll.urdf" />↲
     <arg name="gui" default="True" />↲
     <param name="robot_description" textfile="$(arg model)" />↲
     <param name="use_gui" value="$(arg gui)"/>↲
     <rosparam param="source_list">["joint_states_source"]</rosparam>↲
     <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher"/>↲
     <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />↲
     <node name="joint_reader" pkg="aroll_description" type="jointread.py" />↲
 </launch>↲

・作成したsubscriberのソースコード(python)
#!/usr/bin/env python↲                                                                                            
import rospy↲
import roslib↲
from std_msgs.msg import Float64↲
from sensor_msgs.msg import JointState↲

def callback(data):↲
    rospy.loginfo("Success!")↲

rospy.init_node('joint_reader')↲
sub = rospy.Subscriber('joint_states', JointState, callback)↲
rospy.spin()↲

このような状態で実行して見たところ、作成したsubscriber以外は無事に立ち上がり正常に動作します。subscriberに関しては以下のようなエラーが発生してしまいます。
[joint_reader-4] process has died [pid 20448, exit code 1, cmd /home/kt/catkin_ws/src/aroll_description/scripts/jointread.py __name:=joint_reader __log:=/home/kt/.ros/log/7ddbbf54-a4d7-11e7-a804-fcf8aeb20f98/joint_reader-4.log].
log file: /home/kt/.ros/log/7ddbbf54-a4d7-11e7-a804-fcf8aeb20f98/joint_reader-4*.log

本来は、コールバック関数の中に取得した角度を別の変数に代入する処理を入れたいのですが、その前の段階で詰まっております。原因は何なのでしょうか。ご教授よろしお願いいたします。また、既出の問題でしたら申し訳ございません。

                                                                      

Ryosuke Tajima

unread,
Sep 30, 2017, 9:38:21 AM9/30/17
to ROS JAPAN Users Group
こんばんわ.

メールのpythonのコードをこちらでも実行してみましたが,正常に動いているようです.
いきなりlaunchファイルで実行するのではなくて,最初はrosrunもしくはそのまま実行して試してみるのが良いと思います.

(terminal-1)$ roscore

(terminal-2)$ rostopic pub -r 1 /joint_states sensor_msgs/JointState "header:
  seq: 0
  stamp: {secs: 0, nsecs: 0}
  frame_id: ''
name: ['']
position: [0]
velocity: [0]
effort: [0]" 

(terminal-3)$ ./jointread.py (もしくは rosrun aroll_description jointread.py)
[INFO] [1506777541.174011]: Success!
[INFO] [1506777542.173940]: Success!
[INFO] [1506777543.174044]: Success!
...

まずは,これらが再現するか確認してみてください.
ちなみに/joint_statesの内容は何でもいいので,TAB補完で出てくる適当な値でかまいません.

また,先のメールのエラーメッセージはあまり手がかりにならないので,
launchファイルを実行した際のメッセージを,省略せずにすべて出してください.

あと,launchファイルで実行した場合にはloginfoなどはコンソールには出ないので,

     <node name="joint_reader" pkg="aroll_description" type="jointread.py" output="screen"/>

としてコンソールに出るようしてみてください.

但馬


2017年9月29日(金) 15:09 S5460 <bigbo...@gmail.com>:
--
このメールは Google グループのグループ「ROS JAPAN Users Group」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには ros-japan-use...@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

S5460

unread,
Oct 1, 2017, 10:26:45 PM10/1/17
to ROS Japan Users Group
但馬様

S5460です。返信が遅れてしまい申し訳ありません。
ご回答ありがとうございます。ご指摘された手順通り実行した結果、角度情報を取得することができました。ありがとうございます。原因はlaunchファイルに output="screen" の記述がなかったためログを表示ができなかったためでした。launchファイルに、その部分を追記したところ望み通りの動作を得ることができました。
launchファイルにnodeを追加しただけだではlogは表示されないのですね、勉強不足でした。
これからもROSの勉強を続け研究成果につなげていきたいと思います。
本当にありがとうございました。

Ryosuke Tajima

unread,
Oct 3, 2017, 8:56:43 AM10/3/17
to ROS Japan Users Group
解決して良かったです。

launchファイルでinfo等の出力をスクリーンに出したい場合には、

roslaunch --screen hogehoge.launch

という方法もあるそうです。ファイルを書き換えなくていいので,とりあえず全部見たい場合はこちらが便利ですね。

但馬

2017年10月2日(月) 11:26 S5460 <bigbo...@gmail.com>:

SHATO5460 .

unread,
Oct 5, 2017, 11:15:04 PM10/5/17
to ros-jap...@googlegroups.com
但馬様

なるほど、そのような方法もあるのですね。個人的にlaunchファイルはあまり書き換えたくないので、重宝するコマンドになりそうです。ありがとうございました。

2017年10月3日 21:56 Ryosuke Tajima <ryosuke...@gmail.com>:

--
このメールは Google グループのグループ「ROS Japan Users Group」のトピックを登録しているユーザーに送られています。
このトピックの登録を解除するには https://groups.google.com/d/topic/ros-japan-users/6l09L9ofpp4/unsubscribe にアクセスしてください。
このグループを退会し、グループのすべてのトピックの登録を解除するには ros-japan-users+unsubscribe@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

Reply all
Reply to author
Forward
0 new messages