This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
尊敬的专家:
我想获取目标列表(检测到的目标数组、包括位置和速度)并通过 CAN 进行传输。 我根据要尝试的演示源代码进行了以下修改。
设置 gMmwMssMCB.guiMonSel.pointCloud = 1 (guiMonitor 的第一个参数)
2.添加可以传输"void mmww Demo_Transmit esedOutputTask()"函数中的代码,见下图
但存在一个问题、"GET_CANMessageIdentifier"函数没有"MMWDEMO_OUTPUT_EXT_MSG_TARGET_LIST" 类型、它被判定为"CAN_MESSAGE_MMWDEMO_MAX"
您能给我一些建议、以便 通过 CAN 实现目标列表数据传输吗?
B.R.
尊敬的 Li:
要进行确认、您是否能够传输目标列表数据、但获得了不正确的消息 ID?
如果是这样、只需少量修改、即可将 MMWDEMO_OUTPUT_EXT_MSG_TARGET_LIST 添加为 ID:
typedef enum mmwDemo_can_message_type_e { /*! @brief List of detected points */ - CAN_MESSAGE_MMWDEMO_DETECTED_POINTS = 0xD1, + CAN_MESSAGE_MMWDEMO_OUTPUT_EXT_MSG_TARGET_LIST = 0xD1, /*! @brief List of detected points */ CAN_MESSAGE_MMWDEMO_DETECTED_POINTS, /*! @brief List of detected points */ CAN_MESSAGE_MMWDEMO_EXT_DETECTED_POINTS, /*! @brief Range profile */ CAN_MESSAGE_MMWDEMO_RANGE_PROFILE, /*! @brief Noise floor profile */ CAN_MESSAGE_MMWDEMO_NOISE_PROFILE, /*! @brief Samples to calculate static azimuth heatmap */ CAN_MESSAGE_MMWDEMO_AZIMUT_STATIC_HEAT_MAP, /*! @brief Range/Doppler detection matrix */ CAN_MESSAGE_MMWDEMO_RANGE_DOPPLER_HEAT_MAP, /*! @brief Stats information */ CAN_MESSAGE_MMWDEMO_STATS, /*! @brief List of detected points */ CAN_MESSAGE_MMWDEMO_DETECTED_POINTS_SIDE_INFO } mmwDemo_can_message_type;
mmwDemo_can_message_type Get_CANMessageIdentifier(MmwDemo_output_message_type type) { mmwDemo_can_message_type can_msgId; + if(type == MMWDEMO_OUTPUT_EXT_MSG_TARGET_LIST) + { + can_msgId = (mmwDemo_can_message_type)CAN_MESSAGE_MMWDEMO_OUTPUT_EXT_MSG_TARGET_LIST + { * else if(type == MMWDEMO_OUTPUT_MSG_DETECTED_POINTS) { can_msgId = (mmwDemo_can_message_type)CAN_MESSAGE_MMWDEMO_DETECTED_POINTS; } else if(type == MMWDEMO_OUTPUT_EXT_MSG_DETECTED_POINTS) { can_msgId = (mmwDemo_can_message_type)CAN_MESSAGE_MMWDEMO_EXT_DETECTED_POINTS; }
通常、CAN ID 旨在针对最终应用进行自定义。 只要考虑到邮件优先级和过滤器、您就可以根据需要对它们进行自定义。
谢谢!
Jin
尊敬的 Jin:
首先、我添加了以下代码、以 从 UART 获取目标列表数据来进行 CAN 数据传输、对吗?
其次、根据您的建议、我为 MMWDEMO_OUTPUT_EXT_MSG_TARGET_LIST 添加了相关代码。 然后、我测试 CAN 数据传输、可以看到我从1432接收到的数据、一个帧数据的末尾有许多0、我不知道它是否正确?
谢谢您和 B.R.
Daowei
尊敬的 Daowei:
首先、我添加了以下代码、以 从 UART 获取目标列表数据来进行 CAN 数据传输、对吗?
是的、我觉得很好。
其次、根据您的建议、我为 MMWDEMO_OUTPUT_EXT_MSG_TARGET_LIST 添加了相关代码。 然后、我测试 CAN 数据传输、可以看到我从1432接收到的数据、一个帧数据的末尾有许多0、我不知道它是否正确?
在实际消息之后似乎有一条包含64字节 DLC 的空消息。 您能分享一下 它们的价值吗 uint8_t * Result->objOut 和 sizeof (DPIF_PointCloudCartesian * Result->numObjOut ? 在 CCS 上运行时、您可以在 Variables 选项卡中查看它们。
尊敬的 Jin:
以下是的值 uint8_t * Result->objOut
是以下值 sizeof (DPIF_PointCloudCartesian * Result->numObjOut
供参考。
谢谢您和 B.R.
Daowei
尊敬的 Daowei:
感谢您提供屏幕截图。
CAN-FD 发送长度是正确的。 如果 length=112、TCAN4550将发送128 (2*64字节)的消息。
但是、MMW_UartWrite()正在发送(uint8_t*)Result->objOut、其中 TCAN4550_TCAN4550_T* Transmit_Schedule 正在发送(uint8_t*) 和 屏幕截图中的 results->objOut。
这可能是为什么每次传输*(objOut)(=0x004154C0)(后跟相同的随机数据序列)的地址、而不是目标数据本身。
谢谢!
Jin
尊敬的 Jin:
根据您的建议、我删除了 和 在 Results->objOut 之前、然后出现 类似这样的 CAN 消息、请 参见下图
我认为现在很正常、对吧?
顺便说一下、我们仍然不知道如何解码 CAN 消息(版本是 awrl1432_adas_BSD_demo_v2.2)、您能给我一些帮助吗?
谢谢您和 B.R.
Daowei
尊敬的 Daowei:
是的、数据现在看起来正常。
顺便说一下、我们仍然不知道如何解码 CAN 消息(版本是 awrl1432_adas_BSD_demo_v2.2)、您能给我一些帮助吗?
由于我们通过 CAN-FD 发送与通过 UART 发送相同的数据、因此 UART 和到主机的输出可用作 TLV 结构的参考:
typedef struct DPIF_PointCloudCartesian_t { float x; /* x - coordinate in meters. */ float y; /* y - coordinate in meters. */ float z; /* z - coordinate in meters. */ float velocity; /* radial velocity away from sensor in m/s */ } DPIF_PointCloudCartesian;
因此、每个点云结构为16个字节。
如果问题是关于解释来自 CAN 总线的消息、则需要 CAN 收发器或测试仪(例如 PCAN-USB)来接收消息。
谢谢!
Jin