Skip to content

Commit 641fb04

Browse files
committed
fix speed toggle logic and add icon
1 parent ca99cba commit 641fb04

7 files changed

Lines changed: 239 additions & 44 deletions

File tree

Assets/Images/ararobo.png

Lines changed: 3 additions & 0 deletions
Loading

Assets/Images/ararobo.png.meta

Lines changed: 182 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Scenes/SampleScene.unity

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5426,15 +5426,15 @@ RectTransform:
54265426
m_GameObject: {fileID: 772347503}
54275427
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
54285428
m_LocalPosition: {x: 0, y: 0, z: 0}
5429-
m_LocalScale: {x: 1.5, y: 1.5, z: 1.5}
5430-
m_ConstrainProportionsScale: 0
5429+
m_LocalScale: {x: 2, y: 2, z: 2}
5430+
m_ConstrainProportionsScale: 1
54315431
m_Children:
54325432
- {fileID: 1234748624}
54335433
m_Father: {fileID: 886270497}
54345434
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
54355435
m_AnchorMin: {x: 0.5, y: 0.5}
54365436
m_AnchorMax: {x: 0.5, y: 0.5}
5437-
m_AnchoredPosition: {x: 0, y: -100}
5437+
m_AnchoredPosition: {x: 0, y: -150}
54385438
m_SizeDelta: {x: 110, y: 110}
54395439
m_Pivot: {x: 0.5, y: 0.5}
54405440
--- !u!114 &772347505

Assets/Scripts/HoldManager.cs

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

Assets/Scripts/JoyController.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public class JoyController : MonoBehaviour
1111
private ROS2UnityComponent ros2Unity;
1212
private ROS2Node ros2Node;
1313
private IPublisher<geometry_msgs.msg.Twist> twist_pub;
14+
private IPublisher<std_msgs.msg.Bool> speed_pub;
1415
private IPublisher<std_msgs.msg.Bool> accel_pub;
1516

1617
// 速度調整用のパブリック変数
@@ -45,6 +46,7 @@ void Start()
4546
{
4647
ros2Node = ros2Unity.CreateNode("UnityJoyNode");
4748
twist_pub = ros2Node.CreatePublisher<geometry_msgs.msg.Twist>("/phone/cmd_vel");
49+
speed_pub = ros2Node.CreatePublisher<std_msgs.msg.Bool>("/phone/low_speed");
4850
accel_pub = ros2Node.CreatePublisher<std_msgs.msg.Bool>("/phone/low_accel");
4951
}
5052
}
@@ -126,7 +128,7 @@ void Update()
126128
/// <param name="isOn">トグルの新しい状態</param>
127129
public void OnAccelToggleChanged(bool isOn)
128130
{
129-
if (ros2Unity == null || !ros2Unity.Ok() || ros2Node == null || accel_pub == null)
131+
if (ros2Unity == null || !ros2Unity.Ok() || ros2Node == null || accel_pub == null || speed_pub == null)
130132
{
131133
Debug.LogWarning("ROS2 is not initialized. Cannot publish acceleration message.");
132134
return;
@@ -135,6 +137,7 @@ public void OnAccelToggleChanged(bool isOn)
135137
std_msgs.msg.Bool msg = new std_msgs.msg.Bool();
136138
msg.Data = isOn;
137139

140+
speed_pub.Publish(msg);
138141
accel_pub.Publish(msg);
139142
Debug.Log($"Published acceleration toggle state: {msg.Data}");
140143
}

0 commit comments

Comments
 (0)