在分布式多机通讯过程中使用ros_arduino_bridge功能包查看rqt_tf_tree出错:PluginHandlerDirect._restore_settings() plugin....

13 篇文章 1 订阅
8 篇文章 0 订阅

【问题描述】
这个问题发生使用多机通讯过程中,虽然能连接上下位机,而且有/odom话题发布,但是在接下来的一系列建图过程中出错,于是我检查tf_tree,就看到了这些错误。
在这里插入图片描述

PluginHandlerDirect._restore_settings() plugin "rqt_tf_tree/RosTfTree#0" raised an exception:
Traceback (most recent call last):
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/qt_gui/plugin_handler_direct.py", line 116, in _restore_settings
    self._plugin.restore_settings(plugin_settings_plugin, instance_settings_plugin)
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/rqt_tf_tree/tf_tree.py", line 131, in restore_settings
    self._refresh_tf_graph()
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/rqt_tf_tree/tf_tree.py", line 143, in _refresh_tf_graph
    self._update_graph_view(self._generate_dotcode())
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/rqt_tf_tree/tf_tree.py", line 152, in _generate_dotcode
    force_refresh=force_refresh)
  File "/opt/ros/kinetic/lib/python2.7/dist-packages/rqt_tf_tree/dotcode_tf.py", line 96, in generate_dotcode
    data = yaml_parser.load(yaml_data)
  File "/usr/local/lib/python2.7/dist-packages/yaml/__init__.py", line 114, in load
    return loader.get_single_data()
  File "/usr/local/lib/python2.7/dist-packages/yaml/constructor.py", line 66, in get_single_data
    node = self.get_single_node()
  File "/usr/local/lib/python2.7/dist-packages/yaml/composer.py", line 36, in get_single_node
    document = self.compose_document()
  File "/usr/local/lib/python2.7/dist-packages/yaml/composer.py", line 58, in compose_document
    self.get_event()
  File "/usr/local/lib/python2.7/dist-packages/yaml/parser.py", line 118, in get_event
    self.current_event = self.state()
  File "/usr/local/lib/python2.7/dist-packages/yaml/parser.py", line 193, in parse_document_end
    token = self.peek_token()
  File "/usr/local/lib/python2.7/dist-packages/yaml/scanner.py", line 129, in peek_token
    self.fetch_more_tokens()
  File "/usr/local/lib/python2.7/dist-packages/yaml/scanner.py", line 223, in fetch_more_tokens
    return self.fetch_value()
  File "/usr/local/lib/python2.7/dist-packages/yaml/scanner.py", line 579, in fetch_value
    self.get_mark())
ScannerError: mapping values are not allowed here
  in "<string>", line 2, column 32:
    === Robot drivetrain parameters: 

【问题解决】

猜测是不是因为有两个tf转换相冲突

目前没有找到确切原因,但是我把下位机中的 /ros_arduino_bridge/ros_arduino_python/config/my_arduino_params.yaml调成和上位机中的一模一样,结果就可以正常了,吃惊!
在这里插入图片描述
并且SLAM也可以正常建图了~
所以只是猜测有两个tf转换相冲突,大家不妨试一下。
也附上我的my_arduino_params.yaml,大家可以帮忙看一下这个问题到底出在哪里

# For a direct USB cable connection, the port name is typically
# /dev/ttyACM# where is # is a number such as 0, 1, 2, etc
# For a wireless connection like XBee, the port is typically
# /dev/ttyUSB# where # is a number such as 0, 1, 2, etc.

port: /dev/ttyACM0            #你要修改的部分,改为arduino板和上位机连接的串口号
baud: 57600
timeout: 0.1

rate: 50
sensorstate_rate: 10

use_base_controller: True     #你要修改的部分 改为True
base_controller_rate: 10

# For a robot that uses base_footprint, change base_frame to base_footprint
base_frame: base_link

# === 这部分是车子的参数,比如轮子直径,减速比,编码器信息等,根据你自己的车子来修改
wheel_diameter: 0.065        #你要修改的部分
wheel_track: 0.125          #你要修改的部分
encoder_resolution: 8384     #你要修改的部分
gear_reduction: 1.0          #你要修改的部分
motors_reversed: False        #你要修改的部分

# === PID 部分,控制轮速,修改到车子能够根据命令走直线且速度稳定
Kp: 10                       #你要修改的部分
Kd: 12                       #你要修改的部分
Ki: 0                        #你要修改的部分
Ko: 50                       #你要修改的部分
accel_limit: 1.0             #你要修改的部分

# === Sensor definitions.  Examples only - edit for your robot.
#     Sensor type can be one of the follow (case sensitive!):
#   * Ping
#   * GP2D12
#   * Analog
#   * Digital
#   * PololuMotorCurrent
#   * PhidgetsVoltage
#   * PhidgetsCurrent (20 Amp, DC)

sensors: {
  #motor_current_left:   {pin: 0, type: PololuMotorCurrent, rate: 5},
  #motor_current_right:  {pin: 1, type: PololuMotorCurrent, rate: 5},
  #ir_front_center:      {pin: 2, type: GP2D12, rate: 10},
  #sonar_front_center:   {pin: 5, type: Ping, rate: 10},
  arduino_led:          {pin: 13, type: Digital, rate: 5, direction: output}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ros_arduino_bridge 是一个 ROS 软件,它可以将 Arduino 板与 ROS 系统进行通信。下面是关于 ros_arduino_bridge 的安装和使用步骤: 安装: 1. 首先,在你的系统上安装 Arduino IDE。你可以从 Arduino 官方网站下载并安装适合你操作系统的版本。 2. 确保你的系统上已经正确安装了 ROS. 如果没有,请按照 ROS 官方网站的说明进行安装。 3. 在 ROS 创建一个工作空间,可以使用以下命令: ``` mkdir -p ~/ros_arduino_bridge_ws/src cd ~/ros_arduino_bridge_ws/src catkin_init_workspace ``` 4. 将 ros_arduino_bridge 软件克隆到你的工作空间的 src 目录下: ``` git clone https://github.com/hbrobotics/ros_arduino_bridge.git ``` 5. 使用以下命令编译并安装软件: ``` cd ~/ros_arduino_bridge_ws catkin_make source devel/setup.bash ``` 使用: 1. 首先,打开 Arduino IDE,并将你的 Arduino 板连接到电脑上。 2. 使用 Arduino IDE 打开 ros_arduino_bridge 软件Arduino 代码文件。代码文件位于 ros_arduino_firmware 文件夹。 3. 在 Arduino IDE 按下上传按钮将代码上传到你的 Arduino 板上。 4. 在终端使用以下命令启动 ros_arduino_bridge: ``` roslaunch ros_arduino_bridge arduino.launch ``` 5. 现在,你可以通过发布 ROS 消息来与 Arduino 板进行通信。例如,可以使用 rostopic 命令发布消息。可以通过查看软件文档了解更多关于 ROS 消息和话题的信息。 以上就是关于安装和使用 ros_arduino_bridge 的简要步骤。通过这个软件,你可以在 ROS 系统Arduino 板进行通信并控制各种传感器和执行器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值