# shipos **Repository Path**: chachabules/shipos ## Basic Information - **Project Name**: shipos - **Description**: 基于百度开源通信中间件CyberRT的水面无人艇操作系统 - **Primary Language**: C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2025-12-06 - **Last Updated**: 2026-01-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于CyberRT的海洋机器人操作系统 基于百度CyberRT框架,开发的水面无人艇操作系统,主要针对水面无人艇(USV),后续会扩展至水下机器人(UUV)。 ## CyberRT核心组件 项目来源:CyberRT的cmake版本,请参考[CyberRT项目](https://github.com/minhanghuang/CyberRT)。项目的构建文档见[CyberRT文档](CyberRT.md)。 CyberRT版本:v10.0.0 ## Apollo功能模块 ### drivers驱动模块 | 驱动名 | 状态 | 是否可使用 | 功能 | | :---: | :---: |:---:| :---: | | camera | 已移植 | 需按照实际摄像头的布置进行配置调整 | USB相机驱动,提供环视单目摄像头功能 | | video | 已移植 | 需按照实际摄像头的布置进行配置调整 | 网络摄像头驱动,提供环视弹幕摄像头功能 | | gnss | 已移植 | 可使用,但开发新驱动适配惯导 | 接收惯导信息的驱动 | | lidar | 未移植 | 经移植后可使用,但需开发新驱动适配 | 激光雷达驱动 | | radar | 未移植 | 经移植后可使用,但需开发新驱动适配 | 毫米波雷达驱动 | | microphone | 未移植 | 无功能用途 | 车载麦克风驱动 | | smartereye | 未移植 | 可使用,但需船舶配置双目摄像头 | 提供双目摄像头功能 | | canbus | 已移植 | 可使用,但移植了socket can插件 | CAN总线驱动,为线控底盘提供基础通信功能 | ### audio模块(无需移植) audio模块是自动驾驶平台Apollo中负责音频数据采集、处理、分发的核心子系统,核心作用是对接麦克风等音频设备(依赖之前提到的麦克风驱动),通过声音来识别紧急车辆(警车,救护车,消防车)。 由于现有无人艇不具备声纹识别的能力,无需接入音频数据,因此此模块无需移植。 ### bridge模块(未移植) birdge模块为自动驾驶平台Apollo中与外部进行UDP通信的模块,旨在实现与外部各种仿真平台(Carla等)的数据交互。 在本项目中,bridge模块可用于与海洋机器人仿真平台进行数据交互,实现仿真环境下的算法测试与验证。因此,bridge模块可被移植并改造使用。 此外,bridge模块也可用于与远端控制站进行数据交互,实现远程监控与控制功能。 ### calibration文件夹(无需移植) 存储和管理传感器的标定参数,包括相机、激光雷达、IMU等传感器的内参和外参。 ### control模块(未移植,重要) 在自动驾驶平台Apollo中,control模块负责将感知和规划模块输出的高层次指令转换为具体的执行命令,控制车辆的运动。 在本项目中,control模块需被移植并适配用于水面无人艇(USV)的控制需求,实现对船舶的横向和纵向的控制。 在Apollo项目中,车辆的控制算法适用于阿克曼模型的自动驾驶汽车,控制器包含PID、MPD、LQR等控制器。并且是基于frenet—serret坐标系进行的汽车控制。 在本项目中,需按照无人艇的运动学模型,适当考虑动力学特性,并结合已有的经验,设计适用于USV的控制器。关于坐标系的选择,也需结合历史经验进行讨论并选择。 ### canbus模块(已移植,重要) 在自动驾驶平台Apollo中,canbus模块为线控底盘的适配和通信模块,用于实现与车辆CAN总线的通信。 在本项目中,通过对chassis msg进行改造适配,已完成对于水面无人艇(USV)的CAN总线通信的适配。已基本满足线控舵推的需求。 ### canbus_vehicle文件夹(未移植,重要) 在自动驾驶平台Apollo中,canbus_vehicle文件夹包含了不同车型线控底盘的CAN总线适配实现。 在本项目中,该文件夹存放不同无人艇线控舵推的CAN总线适配。目前未编写示例代码,待仿真器准备就绪后,参考Apollo的实现,编写适用于无人艇的canbus_vehicle代码。 ### common模块(已移植) common模块包含了自动驾驶平台Apollo中通用的工具类、数据结构和算法实现。 在本项目中,common模块已被移植并可直接使用,为其他模块提供基础功能支持。 ### contrib文件夹(未移植) contrib文件夹包含了在Apollo项目中由社区贡献的第三方库和工具。 ### common_msgs文件夹(已移植,但需要改造) common_msgs文件夹包含了自动驾驶平台Apollo中定义的通用消息类型(proto文件)。 对于水面无人艇,需调整感知、规划、控制等模块的消息定义。该部分的改造随着项目的发展会逐步进行。目前已完成chassis msg的改造(线控舵推部分)。 ### dreamview模块(无需移植) dreamview模块是自动驾驶平台Apollo中的仿真界面,可实现车辆的仿真测试和可视化。 本项目不涉及仿真器的设计和开发,因此无需移植dreamview模块(不意味着仿真器不重要,仿真器会在本项目基本搭建完成后着手设计)。 ### guardian模块(未移植,重要) guardian模块为自动驾驶平台Apollo的安全监控及处置模块,负责实时监控系统状态,并在检测到异常时采取相应的安全措施。 在本项目中,guardian模块需重新设计并按照无人艇的安全需求进行实现,为项目的重要功能模块。 ### localization模块(未移植,重要) 在自动驾驶平台Apollo中,localization模块负责车辆的姿态和位置输出。 在本项目中,localization模块需被移植并适配用于水面无人艇(USV)的定位需求,实现对船舶的精准定位。 ### map模块(未移植,需参考其设计重新开发) 在自动驾驶平台Apollo中,map模块的主要功能是openstreet格式的高精地图的去读,并且提供一系列的API给其他模块使用。 在本项目中,需被改造成S57、S63和S100格式的海图读取和发布模块,实现海图数据的动态读取和发布功能。 ### monitor模块(未移植,需参考其设计重新开发) 在自动驾驶平台Apollo中,monitor模块主要是监控硬件和软件状态,当出现故障的时候,显示故障原因,并且输出状态给guardian模块进行紧急处理。 在本项目中,monitor模块需参考其设计,重新开发适用于无人艇的监控模块,实现对系统状态的实时监控功能。 ### perception模块(未移植,重要) 在自动驾驶平台Apollo中,perception模块为环境感知模块,实现了障碍物的感知、跟踪和融合功能。 在本项目中,需结合水面无人艇的感知需求,结合已有的经验和工程,参考Apollo的实现,设计并实现适用于USV的感知模块。 ### planning模块(未移植,重要) 在自动驾驶平台Apollo中,规划模块的作用是根据感知预测的结果,当前的车辆信息和路况规划出一条车辆能够行驶的轨迹。 和perception模块类似,planning模块需结合水面无人艇的规划需求,结合已有的经验和工程,参考Apollo的实现,设计并实现适用于USV的规划模块。 ### prediction模块(未移植,重要) 在自动驾驶平台Apollo中,预测模块的作用是根据感知模块输出的障碍物信息,预测障碍物未来一段时间内的运动轨迹。 和perception模块类似,prediction模块需结合水面无人艇的规划需求,结合已有的经验和工程,参考Apollo的实现,设计并实现适用于USV的预测模块。 ### routing模块(未移植) 在自动驾驶平台Apollo中,routing模块负责根据高精地图和起终点信息,计算出车辆的行驶路径。 在本项目中,routing模块可参考其设计,结合海图数据,实现适用于水面无人艇的路径规划功能。 ### storytelling模块(无需移植) Storytelling是一个全局性的高级场景管理器,用于协调跨模块的行动。为了在城市道路上安全驾驶自动驾驶汽车,需要复杂的规划场景来确保安全驾驶。这些复杂的场景可能涉及不同的模块以确保适当的机动。为了避免对这种场景采用基于序列的方法,创建了一个新的独立场景管理器,“Storytelling”模块。该模块创建复杂场景的Story,这些Story会触发多个模块的行动。根据一些预定义的规则,该模块创建一个或多个Story,并发布到“/apollo/storytelling”通道。该模块的主要优点是微调驾驶体验,并将复杂的场景隔离成Story,这些Story可以被其他模块(如规划、控制等)订阅。 ### transform模块(已移植) 移植自Ros的TF2坐标转换库,实现了坐标系转换的发布、查询功能。 ## 待开发移植的功能模块的技术路线 ### Map模块 1. 针对S57海图格式,结合GDAL库,开发S57海图解析工具。 2. 针对S63海图格式,结合开源的S63解密库,开发S63海图解析工具。 3. 针对S100海图格式,结合GDAL库,开发S100海图解析工具。 4. 设计海图消息格式,定义海图数据的proto文件(可同时兼容S57和S100海图)。 5. 实现海图数据的动态读取和发布功能,确保其他模块能够访问。 ### Router模块(全局规划) 1. 针对海图的特殊性,提高现有的A*算法,结合海图数据进行路径规划(S57海图)。 2. 结合S100海图标准中的S104、S111数据,采用进化算法、A*算法等,设计全局路径规划算法(考虑水流、水深数据)。 3. 上述两类算法的重点在于海图数据向栅格地图的转换。 4. 改造route_msgs,设计适用于水面无人艇的路径消息格式。 ### Localization模块 待补充 ### Perception模块 待补充 ### Prediction模块 待补充 ### Planning模块 1. 采用DWA算法,结合COLREGs规则,设计适用于水面无人艇的局部路径规划算法。 2. 适当考虑EGO算法在无人艇上的可移植性。 3. 适当考虑在frenet坐标系下的路径规划方法。 4. 改造planning_msgs,设计适用于水面无人艇的路径消息格式。 ### Control模块 1. 结合已有的工程经验设计无人艇横向和纵向控制器。 2. 适当考虑在frenet坐标系下的运动控制方法。 ### Guardian模块 待补充 ## 新增特色功能模块 ### AIS驱动模块(已开发) 本项目已在drivers模块中开发了AIS驱动,能够接收AIS数据,并发布AIS数据。 ### 导航雷达驱动模块(未开发) 待补充 ### Mavlink驱动模块(未开发) Mavlink为无人机的标准通信协议,开发Mavlink驱动,能够使无人艇具备与无人机的交互能力,进而为无人艇的无人机载荷功能开发提供基础的通信服务。 ### 水声通信驱动模块(未开发) 水声通信模块用于实现与水下机器人的通信和定位功能,开发水声定位驱动模块,能够使无人艇具备与水下机器人的通信和定位能力,进而为水下机器人协同作业提供基础的通信服务。 ### 水下声纳驱动模块(未开发) 声纳驱动模块接收声纳数据,并发布声纳消息至相应通道,供感知模块使用,使无人艇具备水下环境感知和避碰的能力。 ### 远端遥控站模块(未开发) 由于现有无线图传设备的带宽和距离限制,可参考Apollo的bridge模块进行实现。 ## 技术路线图 ![RoadMap](./pic/RoadMap.jpg)