通过源码fishbot_motion_control_microros构建的固件,话题odom发布失败
-
我想请教一下两轮小车。
- 烧录了github上对应的fishbot_motion_control_v1.0.0.alpha1.240423.bin固件,odom是可以发布的。
- 而烧录自己编译对应的源码https://github.com/fishros/fishbot_motion_control_microros.git,
提示发布odom话题失败,而imu的话题发布是成功的。
代码和工程配置均没有修改,只是通过配置工具修改了wifi和server ip。
这个大概什么原因?我看了社区,没找到有相关的问题。下面是打印的信息:
[58]@53>D:first_startup=0 ================================================= wwww.fishros.com fishbot-motion-control-v1.0.0 ================================================= [69]@53>D:first_startup=0 $first_startup=0 $serial_baud=921600 $serial_id=0 $wifi_ssid=TEST-WIFI $wifi_pswd=12345678 $wifi_ap_ssid=FISHBOT_FDB0 $wifi_ap_pswd= $microros_mode=udp_client $udpserver_ip=10.177.1.211 $udpserver_port=8888 $ros2_nodename=fishbot_motion_control $ros2_namespace= $odom_topic=odom $odom_frameid=odom $odom_c_frameid=base_link $twist_topic=cmd_vel $odom_pub_period=50 $reducate_ration=40.50 $pulse_ration=44 $wheel_diameter=65 $wheel_distance=172.75 $pid_kp=0.62 $pid_ki=0.13 $pid_kd=0.00 $pid_outlimit=100.00 $board=motion_board $version=v1.1.0 init motor param 0: 0.114592=65.000000*PI/(0*1078214656) speed_factor=44 init motor param 1: 0.114592=65.000000*PI/(0*1078214656) speed_factor=44 WIFI EVENT! WIFI EVENT! WIFI EVENT! WIFI EVENT! WIFI EVENT! [5931]@405>D:current_time:1074636612 [5973]@517>D:Failed status on line 517: 1. Continuing. [6023]@517>D:Failed status on line 517: 1. Continuing. [6073]@517>D:Failed status on line 517: 1. Continuing.
在ubuntu2204的ROS2环境下执行
ros2 node list
,得到如下信息:/fishbot_motion_control ros@ubuntu-ros:~$ ros2 node info /fishbot_motion_control /fishbot_motion_control Subscribers: /cmd_vel: geometry_msgs/msg/Twist Publishers: /imu: sensor_msgs/msg/Imu /odom: nav_msgs/msg/Odometry Service Servers: /fishbot_config: fishbot_interfaces/srv/FishBotConfig Service Clients: Action Servers: Action Clients:
执行
ros2 topic echo /imu
header: stamp: sec: 1729659226 nanosec: 115000000 frame_id: imu orientation: x: -8.148830966092646e-05 y: -0.0006152255809865892 z: 0.10753974318504333 w: 0.994200587272644 orientation_covariance: - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 - 0.0 angular_velocity: x: 0.1942291259765625 y: -0.23795455694198608 z: 0.018565893173217773 angular_velocity_covariance:
执行
ros2 topic hz /imu
average rate: 20.790 min: 0.021s max: 0.078s std dev: 0.01170s window: 22 average rate: 19.814 min: 0.021s max: 0.106s std dev: 0.01459s window: 42 average rate: 20.244 min: 0.020s max: 0.106s std dev: 0.01420s window: 64 average rate: 20.233 min: 0.009s max: 0.113s std dev: 0.01657s window: 85
-
从你提供的信息来看,IMU话题能够正常发布,但odom(里程计)话题发布失败。这种情况通常与几个方面的配置或代码实现有关。以下是一些可能的原因和解决方法:
-
检查odom话题发布逻辑:
- 查看源码中odom话题的发布逻辑是否完整无误。特别是检查odom消息是否在适当的地方被构造并发布。
- 确认odom发布逻辑是否依赖于某些特定的传感器数据或计算结果,这些数据或结果可能未正确生成或传递。
-
检查ROS 2节点状态:
- 虽然
/fishbot_motion_control
节点显示在ROS 2节点列表中,但ros2 node info
显示odom为发布者,但实际上并未成功发布数据。这可能是因为发布过程中出现了异常或错误。 - 尝试在源码中添加更多的日志输出,尤其是在odom消息发布前后,以便跟踪问题。
- 虽然
-
检查ROS 2网络通信:
- 确保ROS 2网络设置正确,UDP通信没有问题。你已经设置了
$microros_mode=udp_client
和$udpserver_ip
/$udpserver_port
,但还需确认ROS 2主节点(通常是你的ROS 2环境)是否监听在指定的端口上,并且没有防火墙或网络配置阻止UDP通信。 - 尝试使用
tcpdump
或类似的网络分析工具来监控UDP通信,看是否有数据从设备发送到ROS 2环境。
- 确保ROS 2网络设置正确,UDP通信没有问题。你已经设置了
-
检查硬件和传感器数据:
- 如果odom的发布依赖于编码器或其他传感器数据,请确保这些传感器正常工作并正确连接到设备。
- 检查是否有任何硬件故障或传感器数据异常,这可能导致odom消息无法正确构造。
-
编译和配置问题:
- 尽管你提到代码和工程配置没有修改,但有时候编译过程中的小错误或依赖问题可能导致最终固件的行为与预期不符。
- 尝试清理并重新编译整个项目,确保所有依赖都是最新的并且没有遗漏。
- 检查任何可能影响编译结果的配置设置,如编译器优化级别、宏定义等。
-
固件和ROS 2版本兼容性:
- 确保你编译的固件与你的ROS 2环境版本兼容。不同版本的ROS 2可能在消息类型、服务接口等方面存在差异。
-
查看错误日志:
- 你提到打印信息中有“Failed status on line 517: 1. Continuing.”这样的错误日志。尽管它说“Continuing.”,但这仍然可能是一个关键的错误线索。检查该行代码及其周围的逻辑,看是否有任何可能导致odom发布失败的因素。
通过上述步骤,你应该能够更接近问题的根源,并找到解决odom话题发布失败的方法。如果问题仍然存在,可能需要更深入地分析代码或寻求来自项目维护者或社区的帮助。
以上为生成回答,仅供参考~
-
-
我使用的四驱版也遇到的这个问题,请问你解决了吗