WEB开发网
开发学院软件开发C语言 利用Microsoft Robotics Studio远程控制机器人 阅读

利用Microsoft Robotics Studio远程控制机器人

 2009-05-21 08:30:05 来源:WEB开发网   
核心提示: LEGO NXT机器人使用一个蓝牙接口,当连接蓝牙后,利用Microsoft Robotics Studio远程控制机器人(3),它会呈现为PC的一个串口提供给用户使用,下面的代码段实现了如何读写串口,也就是要获得服务状态的锁,这样才可以改变服务的状态,这一步最重要的两个部分是:1、确保有

LEGO NXT机器人使用一个蓝牙接口,当连接蓝牙后,它会呈现为PC的一个串口提供给用户使用,下面的代码段实现了如何读写串口,这一步最重要的两个部分是:1、确保有权限使用这个串口;2、在合适的位置处理从串口输入的数据。

如何设置串口:

SerialPort serialPort = new System.IO.Ports.SerialPort();
void Open(int comPort, int baudRate)
{
serialPort = new SerialPort("COM" + comPort.ToString(), baudRate);
serialPort.Encoding = Encoding.Default;
serialPort.Parity = Parity.None;
serialPort.DataBits = 8;
serialPort.StopBits = StopBits.One;
serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);
serialPort.Open();
}
//Send data that your robot understands
void SendData(byte[] buffer)
{
serialPort.Write(buffer, 0, buffer.Length);
}

假如你在用蓝牙,你可能需要添加一个header,它包括的消息(message)的长度。当从COM口接收到数据后,你应该向服务的内部端口(internal port)提交数据,如果想更新服务的状态,你要确保消息的处理方法是独占使用这个服务的状态的,也就是要获得服务状态的锁,这样才可以改变服务的状态。

关于 内部端口(internal port)、服务(Service)、消息(Message)等名词的定义请查看相关资料 。

 1  void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
 2 {
 3 //
 4 //Do not modify your state yet
 5 _myRobotInboundPort.Post(sensorMsg);
 6 }
 7 //
 8 protected override void Start()
 9 {
10 Interleave mainInterleave = ActivateDsspOperationHandlers();
11 mainInterleave.CombineWith(new Interleave(
12 new TeardownReceiverGroup(),
13 new ExclusiveReceiverGroup(
14 Arbiter.ReceiveWithIterator(true, _myRobotInboundPort, MyRobotSensorMessageHandler)
15 ),
16 new ConcurrentReceiverGroup()
17 ));
18 }
19 private IEnumerator MyRobotSensorMessageHandler(SensorNotification sensorMessage)
20 {
21 //update state here
22 _state.sensor = sensorMessage.sensor;
23 //
24 }
25 //
26 

上一页  1 2 3 4 5 6 7 8  下一页

Tags:利用 Microsoft Robotics

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接