---
# System prepended metadata

title: Practical Session 3

---

# Practical Session 3

In this final practical session, we will take the 
DCCL message that we made yesterday and send it using pAcommsHandler and a very simple CTD simulator that we will write first.

## CTD Simulator

Copy the code in `goby3-course/src/moos/pattern/` to a new directory (`goby3-course/src/moos/ctd`) and rename all the files and class names to `pGobyCourseCTDSim`.

In the `loop()` method (called by `CMOOSApp::Iterate` at the AppTick frequency), generate a randomly populated CTD message using your DCCL message from yesterday and publish it (using `publish_pb`) to the MOOS variable "CTD_DATA_OUT".

## Update the moos mission

In `goby3-course/launch/moos`, add your CTD Simulator (`pGobyCourseCTDSim`) to the ANTLER launch list and create a ProcessConfig block for it in `auv.moos`.

Make sure that it runs and that you see the CTD_DATA_OUT in `uMS`:

```
pAntler auv.moos
```

```
uMS
```
(connect to port 9000)

## Add to pAcommsHandler

In the `ProcessConfig = pAcommsHandler` block of both `auv.moos` and `topside.moos`, add your new CTD message to the `queue_cfg` and `translator_entry` blocks. Use the "CTD_DATA_OUT" variable as the trigger and the "create" variable and the "CTD_DATA_IN" as the publish variable.

Some things to consider (which are often more important in a real system than in this simple example):

- How should you prioritize the CTD data relative to the other messages (currently just the NavigationReport)
- Do you want acknowledgments for each CTD message received or would it better to avoid the extra mini-packet in the water?
- Do you want to send the newest sample first (`newest_first: true`), or send them in the order they are generated (`newest_first: false`)?

Keep in mind that the queue_cfg must exist for both sides of the link, but in pAcommsHandler only the *sender's* (in this case the AUV) `queue_cfg` values matter (using Goby3's gobyd either the subscriber or the publisher can set these values).

## See your data on the topside

Run both the AUV and the topside and check that your CTD_DATA_IN values are reaching the topside MOOS community (using `uMS` on port 9001).

## Bonus

Switch to using the WHOI Micro-Modem instead of the UDP Multicast driver by changing the `driver_cfg` and `mac_cfg` on the AUV (`auv.moos`) to:

```
    driver_cfg {
         driver_type: DRIVER_WHOI_MICROMODEM
         serial_port: "/tmp/ttymm0"
         serial_baud: 19200
         [goby.acomms.micromodem.protobuf.config] {
            reset_nvram: true
         }
    }
    mac_cfg {
        type: MAC_FIXED_DECENTRALIZED
        slot { src: 1 rate: 1 slot_seconds: 10 }
        slot { src: 3 rate: 1 slot_seconds: 10 }
    }
```

and the same for the topside (`topside.moos`) except for the serial port (`/tmp/ttymm1` instead of `/tmp/ttymm0`).

Also:

- Make sure you're connected to NETSIM and using the `./netsim_pty.sh` script as we did yesterday.
- Set `MOOSTimeWarp = 1` as you can't use the real Micro-Modems faster than real speed.

Relaunch the AUV and topside and after a minute or so you should start seeing the vehicle (every 20 seconds):

To see what's happening in pAcommsHandler you can always attach the screen sessions:

```
screen -r auv.pAcommsHandler
screen -r topside.pAcommsHandler
```
