@@ -8,13 +8,12 @@ public class HoldManager : MonoBehaviour
88{
99 private ROS2UnityComponent ros2Unity ;
1010 private ROS2Node ros2Node ;
11- private IPublisher < std_msgs . msg . Float32 > hold_depth_pub ; // トピック名を/upper_hand/depthに変更
11+ private IPublisher < std_msgs . msg . Float32 > hold_depth_pub ;
12+ private ISubscription < std_msgs . msg . Bool > cancel_hold_sub ;
1213
13- // ホールド速度の設定
1414 public float holdSpeed = 1.0f ;
15- private bool isHolding = false ; // ホールド状態を追跡するフラグ
15+ private bool isHolding = false ;
1616
17- // UI要素の参照
1817 public Slider holdSpeedSlider ;
1918 public TMPro . TextMeshProUGUI holdSpeedText ;
2019 public Toggle holdToggleButton ;
@@ -26,50 +25,47 @@ void Start()
2625 if ( ros2Unity . Ok ( ) )
2726 {
2827 ros2Node = ros2Unity . CreateNode ( "UnityHoldManagerNode" ) ;
29- // /upper_hand/depthトピックにパブリッシュするように修正
3028 hold_depth_pub = ros2Node . CreatePublisher < std_msgs . msg . Float32 > ( "/phone/upper_hand/depth" ) ;
29+
30+ cancel_hold_sub = ros2Node . CreateSubscription < std_msgs . msg . Bool > (
31+ "/cancel_hold" ,
32+ msg => OnCancelHoldReceived ( msg )
33+ ) ;
3134 }
3235 }
3336 else
3437 {
3538 Debug . LogError ( "ROS2UnityComponent not found on this GameObject." ) ;
3639 }
3740
38- // ホールド速度スライダーの設定
3941 if ( holdSpeedSlider != null )
4042 {
4143 holdSpeedSlider . value = holdSpeed ;
4244 holdSpeedSlider . onValueChanged . AddListener ( OnHoldSpeedSliderChanged ) ;
43- OnHoldSpeedSliderChanged ( holdSpeedSlider . value ) ; // 初期値をテキストに反映
45+ OnHoldSpeedSliderChanged ( holdSpeedSlider . value ) ;
4446 }
4547
46- // ホールドトグルの設定
4748 if ( holdToggleButton != null )
4849 {
4950 holdToggleButton . onValueChanged . AddListener ( OnHoldToggleChanged ) ;
5051 }
5152 }
5253
53- /// <summary>
54- /// ホールド速度を毎フレームパブリッシュする
55- /// </summary>
5654 void Update ( )
5755 {
5856 if ( isHolding )
5957 {
60- // ROS2が初期化されているかチェック
6158 if ( ros2Unity != null && ros2Unity . Ok ( ) && ros2Node != null && hold_depth_pub != null )
6259 {
63- std_msgs . msg . Float32 msg = new std_msgs . msg . Float32 ( ) ;
64- msg . Data = - holdSpeed ; // ホールドは常に負の値
60+ std_msgs . msg . Float32 msg = new std_msgs . msg . Float32
61+ {
62+ Data = - holdSpeed
63+ } ;
6564 hold_depth_pub . Publish ( msg ) ;
6665 }
6766 }
6867 }
6968
70- /// <summary>
71- /// ホールド速度スライダーの値が変更されたときに呼び出されるメソッド
72- /// </summary>
7369 private void OnHoldSpeedSliderChanged ( float value )
7470 {
7571 holdSpeed = value ;
@@ -79,27 +75,31 @@ private void OnHoldSpeedSliderChanged(float value)
7975 }
8076 }
8177
82- /// <summary>
83- /// ホールドトグルの状態が変更されたときに呼び出されるメソッド
84- /// </summary>
8578 public void OnHoldToggleChanged ( bool isOn )
8679 {
87- isHolding = isOn ; // ホールド状態フラグを更新
80+ isHolding = isOn ;
8881
8982 if ( ! isOn )
9083 {
91- // トグルがオフになった場合、速度0を1回だけパブリッシュして停止を指示
9284 if ( ros2Unity != null && ros2Unity . Ok ( ) && ros2Node != null && hold_depth_pub != null )
9385 {
94- std_msgs . msg . Float32 msg = new std_msgs . msg . Float32 ( ) ;
95- msg . Data = 0.0f ;
86+ std_msgs . msg . Float32 msg = new std_msgs . msg . Float32
87+ {
88+ Data = 0.0f
89+ } ;
9690 hold_depth_pub . Publish ( msg ) ;
97- Debug . Log ( "Hold disabled. Publishing speed: 0.0" ) ;
9891 }
9992 }
100- else
93+ }
94+
95+ private void OnCancelHoldReceived ( std_msgs . msg . Bool msg )
96+ {
97+ if ( msg . Data && isHolding )
10198 {
102- Debug . Log ( $ "Hold enabled. The speed will be published in Update().") ;
99+ if ( holdToggleButton != null )
100+ {
101+ holdToggleButton . isOn = false ;
102+ }
103103 }
104104 }
105105}
0 commit comments