This commit is contained in:
2025-10-13 16:34:23 +08:00
parent 62e68ebcbb
commit 27c1691ff9
19 changed files with 184 additions and 101 deletions

View File

@@ -30,7 +30,6 @@ namespace DogAndArmControl
private CancellationTokenSource videoCancellationTokenSource;
private CancellationTokenSource cancellationTokenSource;
private TcpClient controlClient; // 新增用于控制的TCP客户端
private NetworkStream controlStream; // 新增用于控制的NetworkStream
private string currentControlMode = "DOG"; // 新增当前控制模式默认为DOG
@@ -52,7 +51,7 @@ namespace DogAndArmControl
private void Init()
{
IpEdit.Text = "192.168.0.123";
IpEdit.Text = "192.168.123.18";
PortEdit.Text = "8088";
ArmIp.Text = "192.168.123.18"; // 机械臂IP现在也用于TCP控制
ArmPort.Text = "8000"; // 机械臂端口现在也用于TCP控制
@@ -88,8 +87,8 @@ namespace DogAndArmControl
mergedVideoStream = mergedVideoClient.GetStream();
// 新增建立控制TCP连接
controlClient = new TcpClient();
await controlClient.ConnectAsync(ArmIp.Text, Convert.ToInt32(ArmPort.Text)); // 使用机械臂的IP和端口进行控制连接
//controlClient = new TcpClient();
//await controlClient.ConnectAsync(ArmIp.Text, Convert.ToInt32(ArmPort.Text)); // 使用机械臂的IP和端口进行控制连接
controlStream = mergedVideoClient.GetStream();
// 自动向服务端发送"MERGED"表示已连接
@@ -100,11 +99,11 @@ namespace DogAndArmControl
videoCancellationTokenSource = new CancellationTokenSource();
// 启动接收合并视频流的任务
videoReceiveTask = Task.Run(() => vic.ReceiveVideoFramesAsync(
videoReceiveTask = Task.Run(() => vic.ReceiveMergedVideoFramesAsync(
videoCancellationTokenSource.Token,
mergedVideoStream,
ArmVideo,
false));
DogVideo));
DogStatus.Text = "已连接";
DogStatus.ForeColor = Color.Green;
@@ -131,7 +130,6 @@ namespace DogAndArmControl
videoCancellationTokenSource?.Cancel();
mergedVideoClient?.Close();
controlClient?.Close(); // 关闭控制连接
Init();
}
@@ -196,7 +194,7 @@ namespace DogAndArmControl
string key = currentKey.ToString().ToLower();
if (e.KeyCode == Keys.Menu) return;
if (controlStream != null && controlClient.Connected)
if (controlStream != null)
{
if (currentControlMode == "ARM") // 根据当前模式发送指令
{
@@ -222,7 +220,7 @@ namespace DogAndArmControl
private async void Form1_KeyUp(object sender, KeyEventArgs e)
{
if (controlStream != null && controlClient.Connected)
if (controlStream != null)
{
if (currentControlMode == "DOG")
{
@@ -287,7 +285,7 @@ namespace DogAndArmControl
// 发送控制指令到机械臂 (现在通过TCP发送JSON)
private async Task HandleArmKey(string type, string key)
{
if (controlStream != null && controlClient.Connected)
if (controlStream != null )
{
//var msg = JsonConvert.SerializeObject(new { key_events = new[] { new { key, type } } });
var buffer = Encoding.UTF8.GetBytes(key.ToUpper()); // 将控制命令转为字节数组
@@ -313,7 +311,7 @@ namespace DogAndArmControl
// 新增:标签页切换事件处理
private async void TabPane1_SelectedPageChanged(object sender, DevExpress.XtraBars.Navigation.SelectedPageChangedEventArgs e)
{
if (controlStream != null && controlClient.Connected)
if (controlStream != null)
{
if (e.Page == tabNavigationPage1) // 切换到机械狗标签页
{
@@ -332,7 +330,7 @@ namespace DogAndArmControl
// 新增:发送切换模式命令
private async Task SendChangeModeCommand(string mode)
{
if (controlStream != null && controlClient.Connected)
if (controlStream != null)
{
byte[] changeCommand = Encoding.ASCII.GetBytes($"CHANGE:{mode}"); // 发送 "CHANGE:DOG" 或 "CHANGE:ARM"
await controlStream.WriteAsync(changeCommand, 0, changeCommand.Length);