Protocol specification/协议规范
1、基本流程
在启动SUMO后,一个指向SUMO的客户端通过建立一个TCP连接到指定的SUMO端口。
注意:
仅仅当一个客户端时才能连接到SUMO服务器,使用多个客户,中介服务比如TraaS 可能会被用到。
图片:TraCI:建立一个连接至SUMO
客户端程序发送命令至SUMO去控制仿真的运行、去影响单个车辆的行为或者请求环境细节。SUMO状态响应来回应命令,并且根据给定的命令来做一些改变。
客户端必须出发每一个仿真步骤,通过使用:TraCI/Control-related commands#Command 0x02:Simulation Step命令。如果任何的 subscriptions已经被执行,那么订阅值将会被返回。
客户端负责和服务器的连接关闭,通过命令close可以实现。查看页面:Simulation/Basic Definition#Defining the Time Period toSimulate获取更多信息关于TraCI-mode的仿真运行的。仿真将会停止,释放所有资源。
图片:TraCI:关闭一个和SUMO的连接
2、信息
TCP报文信息是一系列命令或者返回结果的容器。因此,因此,每个TCP消息由一个小标题,可以告诉人整体信息的大小和一组放在后面的命令组成。每个命令的长度和标识符被放置在命令的前面。这个容器的方案如下所示:
在一些情况下,一个命令的长度可能不够,由于最大的命令长度限制为255。在这些情况下,延伸的长度可以被用作设置原始字节长度字段为零和增加一个整数长度区域。这个扩展计划的命令看起来如下:
为了简化使用TraCI,我们提供了处理socket连接的类,另一个类用于从基本数据类型组成一个消息。通过使用subversion这些类的C++实现是可以利用的,相关路径为: https://shawn.svn.sourceforge.net/svnroot/shawn/src/apps/tcpip。java实现不久就会提供。类tcpip::Socket用于处理服务器和客户端的TCP连接。类:tcpip::Storage设计用于保存基本数据类型的列表。通过使用方法
tcpip::Socket::sendExact(tcpip::Storage)和
tcpip::Socket::receiveExact(Storage)消息可以发送和接收作为存储对象。
2.1状态响应
每个命令都是由一个状态响应确认的,包括Result和Description。标识符是指被确认的各自的命令的标识符。
Result能够取下面的值:
Ø 0x00成功
Ø 0xFF请求的命令失败
Ø 0x01在网络模拟器中未实现所请求的命令(此外,必须有Description)
3、数据类型
3.1自动类型
下表显示支持的基本数据类型:
3.2组合类型
在下面的中,描述了组成数据类型。
3.2.1位置表示
2D位置(ubyte标识符:0x01),用两个双值(X和Y坐标)
3D位置(ubyte标识符:0x03)一个模拟网络在笛卡尔三维位置,三双值(X,Y和Z坐标)。
路线图的位置(ubyte标识符:0x04)替代的位置描述在SUMO的很多例子中用到。
仿真网络中的一个笛卡尔二维位置。RoadId标记了道路段(edge),Pos描述了在纵向方向点(node)的位置(在0-路长之间)。LaneId标记了行驶的路段的具体车道。车道从右往左,从0开始增加。
经纬度位置(标识符:ubyte 0x00)在仿真网络中的位置在地理坐标,所描述的两个双值(经度和纬度)。
经纬度海拔位置(ubyte标识符0x02:)在模拟网络中的位置在地理坐标与海拔高度,所描述的三个双值(经度,纬度和海拔)。
3.2.2边界框(ubyte标识符:0x05)
由它的左下角和右上角表示的一个边界框。
3.2.3多边形(ubyte标识符:0x06)
一个二维点的序列,表示一个多边形的形状。长度是构成多边形的(X,Y)点的数目。
3.2.4交通信号灯相位表(ubyte标识符:0x0d)
这种类型是用来报告交通灯的不同阶段的。值Length是报告连同前面和随后的道路,受各自的信号灯影响。
以下的表示符应用于存在的相位:
Ø 0x01: red红灯
Ø 0x02: yellow黄灯
Ø 0x03: green绿灯
Ø 0x04: traffic light is off and blinking交通灯关闭,闪烁
Ø 0x05: traffic light is off, not blinking交通灯关闭,不闪烁
3.2.5颜色(ubyte标识符:0x11)
R,G,B,A无符号的字节(0-255)。