从ROS2 /扫描主题接收数据不起作用,而ODOM和/ CMD_VEL主题也可能

29次(最近30天)
贝恩德•施密特
贝恩德•施密特 2021年3月11日
评论道: Cam Salzberger. 在2021年3月15日
  1. 根据金宝app教程的一个模拟模型这里是创造的。Matlab提供的虚拟机潇洒和凉亭(其中ROS桥用于ROS2交互)成功地从Gazebo模拟中提取了Turtlebot3 /scan和/odom主题,以构建2D地图。
2.在一个真实的Tur金宝apptlebot3上使用了相同的Simulink模型,该Turtlebot3预装了Ubuntu 18.04.3服务器作为sbc操作系统。奇怪的是,奥多姆的数据是可用的,
但是可以测量/扫描数据(所有Scan.Signal.Values是0)。
3.从2。可以通过在主机PC上新安装的Gazebo模拟来确认
  • Ubuntu 18.04 LTS.
  • 为ROS2划伤DIADEMATA
  • MATLAB 2020B.
使用从3中描述的设置执行以下测试。为了更容易地测试基本的ROS2 MATLAB命令。
准备进一步调查
露台和键盘远程操作启动:
$ ros2发布turtlebot3_gazebo turtlebot3_world.launch.py
$ ros2运行turtlebot3_teleop teleop_keyboard
Matlab和Ubuntu主机之间的连接正在工作:
>> ROS2主题list -t.
话题MessageType
________________________________________________________
{'/ camera / camera_info'} {“sensor_msgs / CameraInfo”}
{'/ camera / image_raw'} {'sensor_msgs /图像'}
{'/时钟'} {'rosgraph_msgs / clock'}
{' / cmd_vel '} {geometry_msgs /“扭转操作”}
{'/ imu'} {'sensor_msgs / imu'}
{'/ connt_states'} {'sensor_msgs / thredstate'}
{'/ odom'} {'nav_msgs / odometry'}
{'/ parameter_events'} {'rcl_interfaces / parameterevent'}
{'/ robot_description'} {“std_msgs /字符串”}
{' / rosout '} {“rcl_interfaces /日志”}
{“/扫描”} {'sensor_msgs / laserscan'}
{'/ tf'} {'tf2_msgs / tfmessage'}
{'/ tf_static'} {'tf2_msgs / tfmessage'}
错误信息
要获得激光扫描数据,使用以下命令:
检测= ros2node(“/ tb3_scan”);
暂停(2)
LaserSub = ROS2Subscriber(检测,“/扫描”);
暂停(2)
Scandata =接收(Lasersub,10);
这导致错误消息
错误使用ROS2subscriber /接收(第458行)
订户没有收到任何消息,超时。
在Ubuntu主持人上,
$ ros2主题回声扫描
将激光扫描数据输出到GN​​OME终端:数据似乎可用。
进一步测试
  1. 用/ odom测试:
DetectNodeDoM = ROS2NODE(“/ tb3_odom”);
暂停(2)
ODOMOSUB = ROS2SUBSCRIBER(DetectNodeodoM,“/”奥多姆);
暂停(2)
odomdata =接收(odomsub,10);
没有错误消息,工作区中可用ODOMData。
2.用/cmd_vel测试得到的结果与用/odom小于1时相同。(工作区中可用的数据)。
3.命令
>> ROS2 msg.列表
显示没有消息。
相同的命令显示GNOME终端中的邮件量。
任何帮助都得到了赞赏。
5点评论
Cam Salzberger.
Cam Salzberger. 在2021年3月15日
谢谢你让我知道。我会调查它正在发生的事情,但现在这可能是一个很好的解决方法。
-CAM.

登录评论。

接受的答案

Cam Salzberger.
Cam Salzberger. 2021年3月11日
编辑:Cam Salzberger. 2021年3月12日
你好伯尔尼,
有两个主要的罪魁祸首,我总是在ROS 2沟通时首先看一下,但有关于主题的信息,指示一些级别的通信:
服务设置的兼容性
发布者和订户之间的QoS设置有一定的组合,可能导致他们无法通信。查看解释 这里 这里 .您可以通过检查其属性(在MATLAB中)或创建它(在MATLAB之外)来检查发布者和订阅者使用的设置。
根据第一个链接中的表格,确保设置是兼容的。
子网/扩展网络
检查网络两端计算机的IP地址。如果它们处于同一个“子网”,那么他们应该能够自由沟通。通常这意味着IP地址中的前三个序列需要相同,但是子网的定义可能因网络掩码而异。
如果计算机不在同一子网中,则需要扩展网络。MATLAB为ROS 2使用了Fast-RTPS DDS后端,因此它需要在当前目录中创建一个DEFAULT_FASTRTPS_PROFILES.xml文件来扩展网络。这必须以对等的方式完成,尽管,所以另一台机器需要相同的文件指向MATLAB计算机的IP。如果另一台机器在后端也使用了Fast-RTPS (dash的默认值),那么同一个文件应该足够了,只要它列出了两个IP地址。我没有跨不同DDS实现进行通信的经验,但我认为有一种类似的方法可以扩展网络到其他后端。
这里 对于示例配置文件XML文件。确保在文件中正确设置域ID。需要删除任何节点并重新创建以进行更改以生效以生效。
完全缺乏沟通
为了完整起见,我想链接到在根本不发生通信时的问题的其他修复程序。在这里不一定适用,因为这个主题在MATLAB中是可见的。
-CAM.
2评论
Cam Salzberger.
Cam Salzberger. 2021年3月12日
糟糕,这就是我没有在我的时髦虚拟机上确认我的建议的后果。很抱歉这个“冗长”的建议。
QoS的默认Matlab / Simu金宝applink使用基于发布者和订阅者的默认QoS配置文件。但是,建议用于极其频繁的数据和/或大数据(例如点云或图像)的“传感器轮廓”使用Besteffort,因为它通常不接收到每个消息。选择适合您的应用程序的QoS设置很好。
-CAM.

登录评论。

更多的答案(0)

下载188bet金宝搏


释放

R2020b

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!