编码器ROS2构建错误(colcon)定制ROS2消息

40视图(30天)
我自定义ROS2消息,融入一个Matlab函数,正在部署远程Linux上使用编码器加工。在编码器的colcon构建的步骤执行,我的错误:
错误:不能把‘struct_T *’‘const uavrt_interfaces_PulseStruct_T *’
82 | MATLABROS2Publisher_publish (pulsePub。PublisherHelper &pulseMsg);
| ^ ~ ~ ~ ~ ~ ~ ~ ~
| |
| struct_T *
其余的终端输出后这是底部的这个消息。我的最低限度功能下面的Matlab函数。相关的错误是c++代码对应 发送(pulsePub pulseMsg) 线在我的Matlab函数。似乎不满pulseMsg的类型,但这变量被定义为一个ros2message早些时候在我的代码。下面,我还包括自定义ROS2 Pulse.msg消息定义。我也包括使用编码器的命令我使用。令人沮丧的是,在几个星期前,我似乎无法找出改变导致colcon错误。
MATLAB函数:
函数[]= uavrt_detection_debug ()
% # codegen
% ROS2设置
ros2Enable = true;%硬编码开关,这样可以ROS2可以关闭测试/调试
如果ros2Enable
流(“准备ROS2节点和消息……”)
节点= ros2node (“探测器”,0);
pulsePub = ros2publisher(节点,“/脉冲”,“uavrt_interfaces /脉冲”);
pulseMsg = ros2message (pulsePub);
流(“完成。\ n”)
结束
pulseCount = 1;
ID = num2str (564321);
i = 1:5
%设置pulseMsg参数发送
pulseMsg.detector_id = char (ID);
pulseMsg.frequency = 1;
pulseMsg.start_time。秒= int32 (1);
pulseMsg.start_time。nanosec = uint32 (1);
pulseMsg.end_time。秒= int32 (1);
pulseMsg.end_time。nanosec = uint32 (1);
pulseMsg.predict_next_start。秒= int32 (1);
pulseMsg.predict_next_start。nanosec = uint32 (1);
pulseMsg.predict_next_end。秒= int32 (1);
pulseMsg.predict_next_end。nanosec = uint32 (1);
pulseMsg。信噪比= 100;
pulseMsg。dft_real= 2;
pulseMsg。dft_imag= 3;
pulseMsg。group_ind= uint16(3);
pulseMsg。group_SNR= 123;
pulseMsg.detection_status = true;
pulseMsg。confirmed_status = false;
发送(pulsePub pulseMsg)
pulseCount = pulseCount + 1;
暂停(1);
流(“传输脉冲…\ n”)
结束
流(“完成。\ n”)
结束
ROS2脉冲。味精定义:
#我们对脉冲的自定义消息吗
字符串detector_id
float64频率
builtin_interfaces /时间start_time
builtin_interfaces /时间end_time
builtin_interfaces /时间predict_next_start
builtin_interfaces /时间predict_next_end
float64信噪比
float64snr_per_sample
float64psd_sn
float64psd_n
float64dft_real
float64dft_imag
uint16group_ind
float64group_snr
booldetection_status
boolconfirmed_status
代码生成命令:
cfg = coder.config (exe”);
cfg。硬件= coder.hardware (“机器人操作系统(ROS 2) 2”);
cfg.Hardware。BuildAction =构建和负载的;
cfg.Hardware。RemoteDeviceAddress =“XXX.XXX.XXX.XXX”;%的目标机器的IP地址
cfg.Hardware。RemoteDeviceUsername =“XXXXXXX”;%的目标机器的登录凭证
cfg.Hardware。RemoteDevicePassword =“XXXXXXX”;
cfg.Hardware。DeployTo =“远程设备”;
cfg.Hardware。ROS2Folder =' / opt / ros /银河;
cfg.Hardware。ROS2Workspace =“~ / uavrt_ws”;
cfg.HardwareImplementation。ProdHWDeviceType =“英特尔- > x86 - 64(64年Linux)”;
cfg。RuntimeChecks = true;%禁用对于最终的部署。
codegenuavrt_detection_debug args{}配置cfg
这个错误是出现在Matlab终端:
/home/dasl/uavrt_ws/src/uavrt_detection_debug / src / uavrt_detection_debug。cpp: 82:59:错误:不能把‘struct_T *’‘const uavrt_interfaces_PulseStruct_T *’
82 | MATLABROS2Publisher_publish (pulsePub。PublisherHelper &pulseMsg);
| ^ ~ ~ ~ ~ ~ ~ ~ ~
| |
| struct_T *
/home/dasl/uavrt_ws/src/uavrt_detection_debug / include / uavrt_detection_debug / mlros2_pub。h: 15:65:注意:在宏的定义“MATLABROS2Publisher_publish”
15 | # define MATLABROS2Publisher_publish (obj structPtr) obj - >发布(structPtr)
| ^ ~ ~ ~ ~ ~ ~ ~ ~
/home/dasl/uavrt_ws/src/uavrt_detection_debug / include / uavrt_detection_debug / mlros2_pub。h: 50:37:注意:初始化参数1的空白MATLABROS2Publisher < MsgType StructType >::发布(const StructType *) [MsgType = uavrt_interfaces::味精::Pulse_ < std::分配器<空白> >;StructType = uavrt_interfaces_PulseStruct_T) '
50 |空发布(const StructType * msgStructPtr) {
| ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ^ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
[2]:* * * (CMakeFiles / uavrt_detection_debug.dir /构建。:144:CMakeFiles / uavrt_detection_debug.dir / src / uavrt_detection_debug.cpp。o]错误1
[2]:* * *等待....未完成的工作
[1]:* * * (CMakeFiles / Makefile2:81: CMakeFiles / uavrt_detection_debug。dir /所有)错误2
:* * * 2 (Makefile: 144:所有)错误
推荐- - - - - -
失败的< < < uavrt_detection_debug [8.34 s,退出代码2]
总结:1包完成(10.4秒)
1包失败:uavrt_detection_debug
1包有stderr输出:uavrt_detection_debug
? ? ?以下错误发生在部署到您的硬件板:
为模型构建成功“uavrt_detection_debug”。检查诊断中构建日志查看器错误
消息。

接受的答案

恋人Reddy Vennapureddy
恋人Reddy Vennapureddy 2022年10月26日
编辑:恋人Reddy Vennapureddy 2022年10月26日
嗨,迈克尔,
谢谢你提供自定义消息定义和必要的脚本复制问题。我对此进行了研究,发现有问题在MATLAB函数: uavrt_detection_debug ()。 请更改以下线
pulseMsg。group_SNR= 123;
pulseMsg。group_snr = 123;
ros2message是MATLAB结构,它只是附加任何新领域 (group_SNR) 对现有结构包含一个字段 (group_snr) 并使用默认值。在自定义消息定义,有字段 group_snr 但是没有这样的领域 group_SNR ,这是根本原因导致构建失败。
让我们知道,如果你做建议改变后仍然面临的问题。
谢谢,
恋人Reddy
8的评论
恋人Reddy Vennapureddy
恋人Reddy Vennapureddy 2023年1月30日
编辑:恋人Reddy Vennapureddy 2023年1月30日
嗨,迈克尔,
这个问题解决的一部分R2022b_update4 R2022a_update3。请更新你的MATLAB R2022b update4。注意,此修复在R2023a可用。
谢谢,
恋人Reddy

登录置评。

更多的答案(0)

类别

找到更多的在发布者和订阅者帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的