ROS2 Foxy环境下TurtleBot3启动失败问题求助
TurtleBot3 ROS2 Foxy启动失败问题排查方案
环境信息
- 系统:Ubuntu 20.04.2 LTS
- ROS版本:ROS2 Foxy
- 安装方式:官方SBC安装包
问题描述
执行ros2 launch turtlebot3_bringup robot.launch.py后,turtlebot3_ros进程崩溃,核心错误为设备连接失败,后续触发rclcpp::exceptions::RCLError导致进程退出。
错误日志
ros2 launch turtlebot3_bringup robot.launch.py [INFO] [launch]: All log files can be found below /home/ubuntu/.ros/log/2023-04-27-11-02-20-355271-ubuntu-3669 [INFO] [launch]: Default logging verbosity is set to INFO urdf_file_name : turtlebot3_burger.urdf /opt/ros/foxy/share/hls_lfcd_lds_driver/launch/hlds_laser.launch.py:46: UserWarning: The parameter 'node_executable' is deprecated, use 'executable' instead Node( /opt/ros/foxy/share/hls_lfcd_lds_driver/launch/hlds_laser.launch.py:46: UserWarning: The parameter 'node_name' is deprecated, use 'name' instead Node( [INFO] [robot_state_publisher-1]: process started with pid [3671] [INFO] [hlds_laser_publisher-2]: process started with pid [3673] [INFO] [turtlebot3_ros-3]: process started with pid [3675] [hlds_laser_publisher-2] [INFO] [1682593340.839127617] [hlds_laser_publisher]: Init hlds_laser_publisher Node Main [hlds_laser_publisher-2] [INFO] [1682593340.840464111] [hlds_laser_publisher]: port : /dev/ttyUSB0 frame_id : base_scan [robot_state_publisher-1] Parsing robot urdf xml string. [robot_state_publisher-1] Link base_link had 5 children [robot_state_publisher-1] Link caster_back_link had 0 children [robot_state_publisher-1] Link imu_link had 0 children [robot_state_publisher-1] Link base_scan had 0 children [robot_state_publisher-1] Link wheel_left_link had 0 children [robot_state_publisher-1] Link wheel_right_link had 0 children [robot_state_publisher-1] [INFO] [1682593340.859633235] [robot_state_publisher]: got segment base_footprint [robot_state_publisher-1] [INFO] [1682593340.860069770] [robot_state_publisher]: got segment base_link [robot_state_publisher-1] [INFO] [1682593340.860150825] [robot_state_publisher]: got segment base_scan [robot_state_publisher-1] [INFO] [1682593340.860185825] [robot_state_publisher]: got segment caster_back_link [robot_state_publisher-1] [INFO] [1682593340.860215103] [robot_state_publisher]: got segment imu_link [robot_state_publisher-1] [INFO] [1682593340.860242362] [robot_state_publisher]: got segment wheel_left_link [robot_state_publisher-1] [INFO] [1682593340.860271306] [robot_state_publisher]: got segment wheel_right_link [turtlebot3_ros-3] [INFO] [1682593340.863684033] [turtlebot3_node]: Init TurtleBot3 Node Main [turtlebot3_ros-3] [INFO] [1682593340.864748251] [turtlebot3_node]: Init DynamixelSDKWrapper [turtlebot3_ros-3] [INFO] [1682593340.867532980] [DynamixelSDKWrapper]: Succeeded to open the port(/dev/ttyACM0)! [turtlebot3_ros-3] [INFO] [1682593340.873247826] [DynamixelSDKWrapper]: Succeeded to change the baudrate! [turtlebot3_ros-3] [ERROR] [1682593340.907558905] [turtlebot3_node]: Failed connection with Devices [turtlebot3_ros-3] [INFO] [1682593340.909686230] [turtlebot3_node]: Add Motors [turtlebot3_ros-3] [INFO] [1682593340.910015358] [turtlebot3_node]: Add Wheels [turtlebot3_ros-3] [INFO] [1682593340.910190153] [turtlebot3_node]: Add Sensors [turtlebot3_ros-3] terminate called after throwing an instance of 'rclcpp::exceptions::RCLError' [turtlebot3_ros-3] what(): could not create publisher: rcl node's context is invalid, at /tmp/binarydeb/ros-foxy-rcl-1.1.11/src/rcl/node.c:441 [ERROR] [turtlebot3_ros-3]: process has died [pid 3675, exit code -6, cmd '/home/ubuntu/turtlebot3_ws/install/turtlebot3_node/lib/turtlebot3_node/turtlebot3_ros -i /dev/ttyACM0 --ros-args --params-file /home/ubuntu/turtlebot3_ws/install/turtlebot3_bringup/share/turtlebot3_bringup/param/burger.yaml'].
已尝试操作
- 重置OpenCR
- 删除burger.yaml文件
排查与解决步骤
日志显示核心问题是Dynamixel电机设备连接失败,后续的rcl节点错误是连接失败引发的连锁反应,按以下步骤处理:
1. 修复串口权限
当前用户可能无/dev/ttyACM0访问权限,执行以下命令添加权限:
sudo usermod -aG dialout $USER
执行后注销再重新登录,确保权限生效。
2. 刷入适配Foxy的OpenCR固件
OpenCR固件需与ROS2版本匹配,重新刷入对应固件:
- 进入OpenCR刷机模式:按住RESET按钮,再按下POWER按钮,LED变为红色闪烁时松开
- 运行官方刷机脚本:
cd ~/turtlebot3_ws/src/turtlebot3/turtlebot3_bringup/scripts ./update_opencr.sh burger opencr_update.tar.bz2
注:若为waffle/waffle_pi型号,将burger替换为对应型号。
3. 验证串口通信
用screen工具测试串口是否正常:
sudo screen /dev/ttyACM0 115200
若能看到OpenCR启动日志,说明串口硬件连接正常;若无法打开,检查USB线是否损坏、OpenCR供电是否正常。
4. 重新生成配置文件
修复可能损坏的burger.yaml:
cd ~/turtlebot3_ws colcon build --packages-select turtlebot3_bringup source install/setup.bash
5. 确认机器人型号环境变量
确保设置了正确的机器人型号:
echo "export TURTLEBOT3_MODEL=burger" >> ~/.bashrc source ~/.bashrc
完成以上步骤后,重新执行启动命令,观察进程是否正常运行。
内容的提问来源于stack exchange,提问作者Nomercy777
相关产品推荐
相关产品推荐

