Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add node to publish smach_state of lead_teleop program #60

Closed
wants to merge 1 commit into from

Conversation

k-okada
Copy link
Owner

@k-okada k-okada commented Jun 29, 2022

this program outputs smach state for lead_teleop
Screenshot from 2022-06-29 20-29-54

@tkmtnt7000 Could you create node to subscribe /server_name/smach/container_status, get active_states / local_data (you need unpickle it) and send email with images?

header: 
  seq: 4
  stamp: 
    secs: 1656501929
    nsecs: 243063130
  frame_id: ''
path: "/SM_ROOT"
initial_states: [START]
active_states: [WALK]
local_data: "(l(da(dS'DESCRIPTION'\nS'Start Walking'\nsa(l(daa."
info: ''
---
header: 
  seq: 5
  stamp: 
    secs: 1656501937
    nsecs: 243184788
  frame_id: ''
path: "/SM_ROOT"
initial_states: [START]
active_states: [FIND-PERSON]
local_data: "(l(da(dS'DESCRIPTION'\nS'Find Person'\nsa(l(daa."
info: ''
---





@tkmtnt7000
Copy link
Collaborator

Could you create node to subscribe /server_name/smach/container_status, get active_states / local_data (you need unpickle it) and send email with images?

I'll do that.

@tkmtnt7000
Copy link
Collaborator

tkmtnt7000 commented Jul 19, 2022

I simply create a node to subscribe /server_name/smach/container_status, get active_states / local_data and send email with embed images.
This is a sample code with kitchen demo and we can see the result in the mail Fetch Go to Kitchen in 13:38.
The code is still too dirty to be PR, so I'll fix it up a bit more and support unitree version.
https://gist.github.com/tkmtnt7000/c3e632b8a431d786b10c9e6a85f318f5

@k-okada
Copy link
Owner Author

k-okada commented Jul 20, 2022

@tkmtnt7000
ちょっと見てみました, https://github.com/jsk-ros-pkg/jsk_robot/blob/d6f79a303bd30500c619c657fffa0b466af19d62/jsk_naoqi_robot/jsk_pepper_startup/apps/meeting/scripts/meeting.l https://gist.github.com/k-okada/4d0dabe396a6af37ca0511d40b4e21e4

  1. メールは何時送るか? デモが終わった後? デモの途中で何回も?
     なんとなくですが,デモが終わった後が良い気がしました.そのためにはSmachで何時でもが始まって何時でもが終わるか?というルールを作る必要があるとおもいます.例えば,:start で始まり, :end で終わる,などです.. https://github.com/jsk-ros-pkg/jsk_robot/blob/d6f79a303bd30500c619c657fffa0b466af19d62/jsk_naoqi_robot/jsk_pepper_startup/apps/meeting/scripts/meeting.l#L187-L188

2)Smachから何を出力するか
  smach はactive stateに加えて, info とlocal_data を出力します.http://docs.ros.org/en/noetic/api/smach_msgs/html/msg/SmachContainerStatus.html
jsk-ros-pkg/jsk_roseus#716 で info に関数名かドキュメントを出力するようにしてみました.が,これは横道にそれた感じです.

3)Smachから何を出力するか
多分ですが,SmachContainerStatus は状態遷移のタイミングで出力されています.この時,あるStateでlocal_dataをセットしても,それが出力されるのは次のStateに行った後のactive_statesとともに表示されている気がします.
 そう考えると,これは「遷移」を出力している,と捉えるのでいいのかな,とおもいました.

 で,その遷移の説明,と(あれば)その時の画像をつければいいのではないかと,それが.https://github.com/jsk-ros-pkg/jsk_robot/blob/d6f79a303bd30500c619c657fffa0b466af19d62/jsk_naoqi_robot/jsk_pepper_startup/apps/meeting/scripts/meeting.l#L166-L169 になります.(地味に,https://github.com/jsk-ros-pkg/jsk_robot/blob/d6f79a303bd30500c619c657fffa0b466af19d62/jsk_naoqi_robot/jsk_pepper_startup/apps/meeting/scripts/meeting.l#L203 を忘れるとう上手くloca_dataがでていかないきがします)

4)その出力をどう使うか,
出力は上のgistで読み込む事が出来ます.これで,startステートでリストにdesription/imageを保存し,endステートが来たら,メールを出力する,というのが出来るのではないかとおもいます.

** で,こう考えたら,次はこの仕組みで,今までのメールのどれぐらいがカバー出来るか,というのを考えるのが良いです.

1) kichin デモ(は,このリンクでいいのかな?)
jsk-ros-pkg#1463 (comment)
 は出来る気がします.
2)Unitree
 起動しましたは(#24
),最初に立ち上がる https://github.com/k-okada/jsk_robot/blob/unitree/jsk_unitree_robot/jsk_unitree_startup/scripts/wakeup.l をsmach 化したら対応出来るはずです.星占いとかはペンディング,メールの件名はどうしよう?

3)散歩して?Watchdogで?,人を見つけたら,人が居たよ,と書いてあるメールが出せる気がします.
 人が居たときにSmachが別Stateに入るようにする(https://github.com/jsk-ros-pkg/jsk_robot/blob/d6f79a303bd30500c619c657fffa0b466af19d62/jsk_naoqi_robot/jsk_pepper_startup/apps/meeting/scripts/meeting.l#L138-L143 みたいに書いて,条件が変わったら遷移するようにする?)のかな.

 あとは,PythonでSmach書くと定期的にStatusが出力されるので,https://github.com/ros/executive_smach/blob/31cc55743431f48e37ee71d26acd5833ebd3753e/smach_ros/src/smach_ros/introspection.py#L165 Statusの出力は遷移時にこだわる必要はない.ということはStateの中で条件が変わったら遷移は性無いけど,user_data書き換えてStateを出力する,というのもあるのかもしれない.ただ,これをやると,結局何でもありだから,[システム」という感じはしなくなりそう.

なので,まずは,fetchのキッチンでもにuser_dataを加えて,今送っているのと「等価」なメールが出せないか,考えてみるのが良いとおもいます.

@tkmtnt7000
Copy link
Collaborator

こんな感じでstartが来たら記録を開始してendが来たらメールを送るプログラムを書いています.
https://github.com/tkmtnt7000/jsk_robot/blob/kitchen-smach-state/jsk_robot_common/jsk_robot_startup/scripts/smach_to_mail.py
今は手元のPCで適当なsmachを書いて試している状態ですが,73B2のキッチン周りが空いた段階で試してみます.

@k-okada
Copy link
Owner Author

k-okada commented Jul 26, 2022 via email

@k-okada
Copy link
Owner Author

k-okada commented Jul 27, 2022

a589b5e
にエラーチェック中心にコード追加したので,良いと思ったものをmergeしてみてください.
self.sender_address = "[email protected]"
self.receiver_address = "[email protected]"
はカスタム可能だと嬉しいです.

@k-okada
Copy link
Owner Author

k-okada commented Jul 27, 2022

@tkmtnt7000 pepper で実験してみました.メールが届いたとおもいます.
プログラムは,https://github.com/k-okada/jsk_robot/blob/kitchen-smach-state/jsk_robot_common/jsk_robot_startup/scripts/smach_to_mail.py です.一応,こちらではこれでOKと思いました.適当に取り込んでください.
これを使うためには,tkmtnt7000#5 が必要です

サンプルプログラムは,https://github.com/k-okada/jsk_robot/blob/pepper_cross/jsk_naoqi_robot/jsk_pepper_startup/apps/meeting/scripts/meeting.l です.
https://github.com/k-okada/jsk_robot/blob/pepper_cross/jsk_robot_common/jsk_robot_startup/lifelog/speaking-program-is-started-or-terminated.l も作ってみたのですが,異常に難しくなってしまいました.

@tkmtnt7000
Copy link
Collaborator

ありがとうございます.pepperからのメール届きました.
smach_to_mail.pyをキッチンデモ等で試したらjsk-ros-pkgにプルリクを出します.

@iory
Copy link

iory commented Aug 30, 2022

こちら僕の方でもunitreeで試しました。
試したものはlead-teleop-state.lと呼ばれるもので、散歩中に見つけた人の画像を最後にメールするというものと、
https://github.com/iory/jsk_robot/blob/unitree-camera-walk-app/jsk_unitree_robot/jsk_unitree_startup/scripts/lead-teleop-state.l

散歩中に定期的にメールを出すものです。
https://github.com/iory/jsk_robot/blob/unitree-camera-walk-app/jsk_unitree_robot/jsk_unitree_startup/scripts/walk-notifier.l

次のようにメールがが来ることを確認しました。
IMG_304DA8ECF79E-1

@k-okada
Copy link
Owner Author

k-okada commented Sep 22, 2022

closed via #69 (and jsk-ros-pkg#1615)

@k-okada k-okada closed this Sep 22, 2022
@k-okada k-okada deleted the lead_teleop_state branch September 22, 2022 08:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants