# RoboDolf Software (RDS)
![RoboDolf](images/robodolf.png "RoboDolf vehicle in trials in Belize")
The RoboDolf is an electric robot boat designed to conduct acoustic dolphin
research in Belize. Acoustic and visual recording of dolphins is conducted to
study dolphin vocalization gain insights into complex dolphin socialization.
A robotic boat platform that was silent and had minimal visual impact on natural
dolphin behavior was required, and drove the specifications for the RoboDolf.
The RoboDolf is an unmanned surface vessel (USV) that was built on a 16' long
SeaCycle catamaran platform. It has a LiFePo4 battery bank powering two modified
electric thrusters in a differential thrust configuration. It has two
communication radio systems, a long range 900 MHz radio for basic telemetry and
a 2.4GHz 802.11 link for a full data/video link. The vehicle can operate under 3
different modes. A manned mode with an operator on-board controlling the vehicle
with an xbox controller; under shore remote mode; and under autonomous mode. The
vehicle has a host of instruments and sensors along with 4 actuated instrument
pods that can be automatically raised and lowered into the water. The vehicle
and field OPS systems where shipped to a remote atoll off the coast of Belize
and where it successfully operated.
For a video of its construction and operation [click here](https://youtu.be/pHH6SKcS8ms).
In this repo, the software system powering the RoboDolf is supplied. The system
was written by Paul Sammut in LabVIEW using the Actor Framework and LV-OOP. A
custom message routing and subscription layer was written on top of the Actor
Framework that facilitated a one-to-many node communication system. A class
structure was created to facilitate the writing of common nodes, such as
controllers and serial instruments. This system is called the RDS Framework.
This project was made possible by the sponsor Dr. Marcelo Magnasco at the
Rockefeller University and Eric Angel Ramos who runs the dolphin research
programs in Belize.
***Quick Note: If coding anything like this, do it in ROS :)***
## RDS Framework Architecture
The RDS Framework makes heavy use of LV-OOP and the Actor Framework. Each major
function of the RoboDolf is written as a nested child actor object that inherits
from a special RDS Parent Actor class. This allowed for the creation of
node-like processes that run independently of each other, but can easily share
data between each other in a structured way.
The system works on a one to many publisher/subscribers principle. Each actor
subscribes to a list of message types on launch. During run-time the actor can
send whatever messages it likes. Logic code can be written on receipt of the
messages, on an internal actor loop or by some other means such as on receipt
of hardware events.
![RDS Framework Architecture](images/RDS_framework.png)
This framework was written because the LabVIEW Actor Framework does not have
native functionality for one to many message broadcasting. Each actor must have
access to a queue handle for any actor it wants to send messages to. This was
overcome by creating an actor called the RDS Router, and by creating an RDS
Parent class that has functionality to subscribe to a list of messages; send
messages to the router; and receive messages from the router. In this way, each
actor only needs to have the queue handle of the RDS Router Actor, sending it
messages and not worrying about who needs to see them. All messages are wrapped
in an RDS Message class which allows the RDS Router to handle them regardless of
their specific type implementation.
This framework allows for all common functionality to be shared across actors and
allowed one developer to be able to quickly code the robotic sub-systems.
Operational overhead was minimal and all inter-actor communications was handled
by performant LabVIEW queues, and implemented in the battle-tested LabVIEW Actor
Framework.
## RDS Actors
RDS comprises the following actors:
- [RDS Router Actor](#rds-router-actor)
- [AIP Actor](#aip-actor)
- [Port Motor Actor](#mcb-motor-actor-port-and-stbd)
- [STBD Motor Actor](#mcb-motor-actor-port-and-stbd)
- [Battery Manager Actor](#battery-manager-actor)
- [Depth Sensor Actor](#depth-sensor-actor)
- [LSR Actor](#lsr-actor)
- [Logger Actor](#logger-actor)
- [Local Remote Actor](#local-remote-actor)
- [GPS Actor](#gps-actor)
- [Compass Actor](#compass-actor)
- [State Tracker Actor](#state-tracker-actor)
- [Helm Actor](#helm-actor)
- [Controller Actor](#controller-actor)
- [Mission Control Actor](#mission-control-actor)
### RDS Router Actor
The RDS Router handles all inter-actor communications. It operates on a
principle of subscriptions. Each actor sends the RDS Router an array of messages
it is subscribed to. This subscription is implemented as a boolean array, with
the index corresponding to a unique id that addresses each message. This list of
unique message ID's is implemented as a typedef. This boolean array, along with
the actor's message queue is packed into an RDS Subscription object and sent to
the RDS Router. This functionality, which is common to all RDS actor's is
implemented in the RDS Parent Actor class which all RDS Actors inherit from. The
following image shows a specific RDS Actor, in this case the Mission Control
Actor, being configured with mission control settings and message subscriptions
and being "launched and subscribed". In the launch and subscribe phase the RDS
Actor is launched, given the handle of the RDS Router queue (so it can send it
RDS messages) and having its subscription list sent to the RDS router, so then
RDS Router knows what messages it wants to receive.
![RDS Actor launch and subscribe](images/RDS_actor_launch_sub.png)
During run time, RDS Actors send messages to the RDS Router. The router receives
the messages, and through each subscription it has (one for every RDS Actor) and
checks to see if that actor is subscribed to that message ID. It does this by
simply indexing a boolean array, which takes O(1) time for each actor
subscription. If that boolean is true, it sends the message to the associated
message queue. Easy peasy!
### AIP Actor
The Actuated Instrument Pod (AIP) system is a set of 4 poles that can be
deployed into the water automatically by a linear actuator. It can monitor
deployed, deploying, stowed, and stowing states of each pod independently and
can also actuate each pod independently. The AIP actor is responsible for the
following:
- create and maintains a serial connection to the AIP system
- subscribe and monitor to AIP-command messages
- subscribe and monitor water-depth messages and automatically raise the AIP if water-depth is below a minimum
#### Subscriptions and Publications
The AIP Actor subscribes to:
* AIP Command Message
* AIP Set Min Depth Message
* Depth Data Message
The AIP Actor publishes these RDS Messages:
* AIP Status Message
### MCB Motor Actor (Port and STBD)
The Port Motor Actor is an instance of an MCB Instrument Class which inherits
from an RDS Instrument class. The RDS Instrument class is a descendant of the
RDS Parent Actor class, and adds serial communications functionality. This actor
can be set up to be a Port or STBD motor controller, which follows the DRY
principle for identical motor controller code. The motor controller is an
MDC1230 RoboteQ single channel 80A brushed motor controller.
![MCB port](images/MCB_port.png)
This actor is responsible for the following:
- create and maintain a serial connection to the specified motor controller (port/STBD)
- subscribe to motor messages and enact motor commands to appropriate serial commands
- read back state information about thruster, pack a motor state message and send it out
#### Subscriptions and Publications
The MCB Motor Actor subscribes to:
* MCB Command Message
The MCB Motor Actor publishes these RDS Messages:
* Motor Data Message
### Battery Manager Actor
![Battery pack](images/BTB_pac
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
LabView图形化编程语言之机器人控制.zip (1562个子文件)
RDS Project.aliases 46B
RDS Shore Remote.aliases 46B
Log Reader.aliases 44B
NMEA_GPGGA-data.ctl 33KB
NMEA_GPRMC-data.ctl 31KB
Battery Data.ctl 23KB
Helm Status Control.ctl 22KB
Mission Controller State Control.ctl 21KB
SR-J-State.ctl 18KB
NMEA_GPVTG-data.ctl 18KB
Depth Data.ctl 18KB
MissionOp.ctl 16KB
MCB Motor Status.ctl 16KB
Mission Controller Navigation State.ctl 15KB
Steering Command Cntrl.ctl 15KB
Controller Message Type.ctl 15KB
PID Gains Control.ctl 15KB
Mission Controller Settings.ctl 15KB
Controller.ctl 15KB
Mission Controller State.ctl 15KB
Helm State.ctl 15KB
AIP Address.ctl 15KB
Controller Address.ctl 14KB
RDS Message ID.ctl 14KB
COM Port Table.ctl 13KB
NMEA_LongitudeDirection.ctl 13KB
NMEA_LatitudeDirection.ctl 13KB
NMEA_GPS-Quality.ctl 13KB
Compass Data.ctl 13KB
NMEA_Mode.ctl 13KB
Heading Command Cntrl.ctl 12KB
Logger Header.ctl 12KB
AIP Command Control.ctl 12KB
RDS Instrument Enums.ctl 12KB
MCB Channel.ctl 11KB
RDS Configuration.ctl 11KB
Battery Data.ctl 10KB
AIP Status.ctl 10KB
Processed PA Block.ctl 10KB
Battery Status.ctl 9KB
AIP States.ctl 9KB
Robodolf Controller State.ctl 9KB
SR_Overview.ctl 8KB
AttitudeHandle.ctl 6KB
Raw RMC.ctl 6KB
RMC.ctl 6KB
Instrument COM Table.ctl 5KB
Throttles.ctl 5KB
SR_Thermal.ctl 5KB
PictureTypes.ctl 4KB
RDS Q Message.ctl 4KB
Cluster write test.ini 502B
COM_PORT_TABLE.ini 65B
RDS_CONFIG.ini 64B
unnamed.jpg 239KB
RDS State.lvclass 434KB
RDS Test Child.lvclass 320KB
RDS Mission Controller Actor.lvclass 126KB
RDS Local Remote Actor.lvclass 122KB
RDS Parent Actor.lvclass 112KB
RDS Helm Actor.lvclass 91KB
RDS Message.lvclass 72KB
GPS Data Message.lvclass 68KB
Helm Status Message.lvclass 68KB
RDS Serial Instrument Actor.lvclass 63KB
AIP Instrument.lvclass 62KB
RDS Child Receive Message Msg.lvclass 60KB
LSR Instrument.lvclass 60KB
Send RDS Message Over LSR Msg.lvclass 60KB
RDS Serial Handle Frame Msg.lvclass 60KB
RDS Serial Send Frame Msg.lvclass 60KB
RDS Router Subscribe Msg.lvclass 58KB
RDS Child Receive Message Msg.lvclass 57KB
RSD Msg Send To Router Msg.lvclass 57KB
RDS Serial Handle Frame Msg.lvclass 57KB
RDS Post Launch Init Msg.lvclass 55KB
Start Read Thread Msg.lvclass 54KB
AIP Status Response.lvclass 54KB
RDS Root Actor.lvclass 54KB
Battery Message.lvclass 54KB
RDS Router Subscription.lvclass 52KB
Mission Controller State Message.lvclass 50KB
RDS Router Actor.lvclass 49KB
Compass Data Message.lvclass 47KB
RDS Serial Instrument.lvclass 46KB
RDS Logger Actor.lvclass 44KB
Controller Send State Msg.lvclass 43KB
RDS Serial Frame.lvclass 42KB
Compass Instrument.lvclass 42KB
Mission Controller Send State Msg.lvclass 42KB
Mission Controller Cycle Msg.lvclass 42KB
MCB Instrument.lvclass 42KB
Send State Message Over LSR Msg.lvclass 42KB
Input Cycle Msg.lvclass 41KB
State Tracker Send Sample Msg.lvclass 41KB
Helm State Machine Cycle Msg.lvclass 41KB
RDS State Tracker.lvclass 40KB
Battery Instrument.lvclass 40KB
Controller Message.lvclass 38KB
MCB Status.lvclass 36KB
共 1562 条
- 1
- 2
- 3
- 4
- 5
- 6
- 16
资源评论
- weixin_572780752024-03-06资源不错,内容挺好的,有一定的使用价值,值得借鉴,感谢分享。
芝麻粒儿
- 粉丝: 5w+
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于JSP在线维他茶饮销售网站平台源码.zip
- web学习笔记.doc
- 基于pytorch+Unet进行MRI肝脏图像分割源码+数据集+模型.zip
- 在Android Studio中开发一个Android App项目步骤
- 基于yolov8实现进行物体跟踪源码.zip
- Java多线程学习Java多线程学习Java多线程学习Java多线程学习.txt
- 算法数据结构-动态规划算法(Dynamic Programming)超详细总结加应用案例讲解.txt
- 2024最强秋招八股文(精简、纯手打)2024最强秋招八股文(精简、纯手打).txt
- 基于tensorflow多特征融合的微表情识别python源码.zip
- 基于yolov8实现人脸检测的python源码+运行说明.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功