自訂義訊息
===
檔案結構
---
:::spoiler core
> :::spoiler bin
> 二進檔案存放
> :::
> :::spoiler core
>> :::spoiler include
>> 抬頭檔
>> :::
>> :::spoiler src
>> 文件檔
>> :::
> :::
> :::spoiler msg
> 訊息檔案添加區
> :::
:::
新增檔案
---
在<font face="monospace" color="green">msg</font>區選擇合適的<font face="monospace" color="green">.hpp</font>檔中,加入你需要的訊息定義,格式如範例<font face="monospace" color="green">motor_msg.hpp</font>:
```cpp=
struct MotorModule : public BaseMsg
{
public:
double angle[2] = {0, 0};
double twist[2] = {0, 0};
double current[2] = {0, 0};
double torque[2] = {0, 0};
bool state[2] = {false, false};
double pid[6] = {0, 0, 0, 0, 0, 0}; // pidpid
template<class Archive>
void serialize( Archive & ar )
{
ar( CEREAL_NVP(state), CEREAL_NVP(angle), CEREAL_NVP(twist), CEREAL_NVP(current), CEREAL_NVP(pid), CEREAL_NVP(torque) );
}
virtual void record(std::string name, core::FileArchive &fa) override
{
fa(name, CORE_NVP(angle), CORE_NVP(twist), CORE_NVP(current), CORE_NVP(state), CORE_NVP(pid), CORE_NVP(torque));
}
virtual void show() override
{
std::cout << "Motor Module\n";
std::cout << "state:\t" << state[0] << "\t" << state[1] << "\n";
std::cout << "angle:\t" << angle[0] << "\t" << angle[1] << "\n";
std::cout << "twist:\t" << twist[0] << "\t" << twist[1] << "\n";
std::cout << "current:\t" << current[0] << "\t" << current[1] << "\n";
std::cout << "torque:\t" << torque[0] << "\t" << torque[1] << "\n";
std::cout << "pid 1:\t" << pid[0] << "\t" << pid[1] << "\t" << pid[2] << "\n";
std::cout << "pid 2:\t" << pid[3] << "\t" << pid[4] << "\t" << pid[5] << "\n";
}
};
```
public中定義需要存放的資料,例如angle、twist等,serialize的函數定義是只要序列化的資料,基本上格式就是CEREAL_NVP(your-data),record函數是用於記錄的函數,格式定義一樣如上,最後是show函數是用以debug時使用的,定義你想輸出的訊息即可,若這些都有定義了即可使用預先編譯的紀錄功能與debug功能,詳見教學篇[讀寫檔案]()。
```cpp=
CEREAL_REGISTER_TYPE(motor_msg::MotorModule);
CEREAL_REGISTER_POLYMORPHIC_RELATION(BaseMsg, motor_msg::MotorModule)
```
最後在文件尾部加入這兩行即可。
重新編譯
---
與[**README**](https://hackmd.io/@peichunhuang/SypJOLSlh)的<font face="monospace" color="ultramarine blue">**“專案核心:編譯與安裝”**</font>篇一致。