webots版本升级 webots 2021a 注意点[补写2021.02.28]

  • Post author:
  • Post category:其他


  • 此教程以

    webots_demo

    为基础


    为了能和读者进一步讨论问题,建立了一个微信群,方便给大家解答问题,也可以一起讨论问题。


    加群链接



前言

前段时间升级了webots 2021a,也没写博客记录一下,逞着礼拜天记录一下。



1. Webots2021a更新了什么

来自官网(简单的翻译了一下)

  • 新特征

    • 添加

      wb_supervisor_node_get_from_device

      函数去获取设备的节点句柄(

      #2074

      )
    • 现在可以在仿真时向机器人控制器添加设备(

      #2237

      )
    • 添加

      wb_connector_is_locked

      函数来返回

      Connector

      的目前

      isLocked

      状态(

      #2087

      )
    • 添加在

      WorldInfo

      节点下的

      coordinateSystem

      场地来使用EUN(East-Up-North)坐标系统(

      #2228

      )
    • 添加了在

      realtime

      模式下禁用渲染的可能性(

      #2286

      )



    • wb_supervisor_node_get_number_of_contact_points


      Supervisor

      API函数中添加了一个新参数,以获取包括模块化节点的联系点的数量(

      #2228

      )
    • 添加了新的

      wb_supervisor_node_get_contact_point_node


      Supervisor

      API函数,以获取节点引用联系的有联系的点(

      #2228

      )


    • Camera

      API添加了两个新功能,分别为

      wb_camera_get_exposure



      wb_camera_set_exposure

      ,以获取和更改

      Camera

      的曝光度(

      #2363

      )


    • Recognition

      节点和Camera API中添加了新功能,用于生成分段的地面真实图像(

      #2199

      )
    • 在默认机器人窗口的 Camera 选项卡中添加了用于启用和禁用 recognition 和 segmentation 功能的选项(

      #2431

      )


    • InertialUnit

      API添加了

      wb_inertial_unit_get_quaternion

      函数来获取作为四元数的方向数据(

      #2424

      )

    • 不推荐使用 InertialUnit.lookupTable 参数,相关的

      wb_inertial_unit_get_lookup_table_size



      wb_inertial_unit_get_lookup_table

      函数已经移除(

      #2424

      )
    • 添加

      PlasticFruitBox



      MetalStorageBox

      PROTO 物体(

      #2427

      )
    • 在 Python的

      getPointCloud

      方法下添加

      data_type

      参数。相比较以前的版本可以更快的获取

      bytearray

      点的代表
  • 增强的功能

    • 添加支持Python3.9(

      #2318

      )


    • BiscuitBox

      PROTO 模型改良

      Solid.recognitionColors

      值(

      #2401

      )
    • 改进了相机图像格式的文档,以及通过相机API获取到的图像如何在显示设备中显示(

      #2443

      )
    • 现在,当测量深度超出范围时,Lidar和RangeFinder设备将返回无穷大(

      #2509

      )
  • 优化的功能


    • 现在,可以通过在保持渲染打开的情况下使用

      fast

      模式来实现以删除的具有相同行为的

      run

      模式(

      #2286

      )

    • 当配置为在

      local

      GPS 坐标系统中工作时,由 GPS 节点发布的 ROS 消息已经改变(

      #2368

      )
    • 修复了在运行时在从关节降级的字段中导入设备节点后更新机器人的设备列表的问题(

      #2482

      )
  • 依赖更新

    • Windows Qt版本更新到 5.15.1 (

      #2312

      )

    • 停止发布与Ubuntu 16.04兼容的Webots软件包。要在Ubuntu 16.04上运行Webots,请从源代码进行编译(

      #2473

      )
    • 将Thymio II Aseba控制器更新为Aseba 1.3.3(

      #2518

      )



2. 以webots_demo为案例 哪些地方发生了更新

  1. launch文件启动webots时参数

    no-gui

    要改成

    no_gui

    。以webots_demo 的

    webots.launch

    文件为例
<?xml version="1.0"?>
<launch>
  <!-- 启动webots -->
  <arg name="no_gui" default="false," doc="Start Webots with minimal GUI"/>
  <include file="$(find webots_ros)/launch/webots.launch">
    <arg name="mode" value="realtime"/>
    <arg name="no_gui" value="$(arg no_gui)"/>
    <arg name="world" value="$(find webots_demo)/worlds/webots_map.wbt"/>
  </include>
</launch>
  1. GPS 数据类型从

    sensor_msgs::NavSatFix

    改为了

    geometry_msgs/PointStamped

    ,直接使用2020版本会在webots中报如下错误。
[ERROR] [1614430952.900944139]: Client [/robot_cartographer_bringup] wants topic /robot/gps/values to have datatype/md5sum [sensor_msgs/NavSatFix/2d3a8cd499b9b4a0249fb98fd05cfa48], but our version has [geometry_msgs/PointStamped/c63aecb41bfdfd6b7e1fac37c7cbe7bf]. Dropping connection.


解决方案

  • 将头文件

    #include <sensor_msgs/NavSatFix.h>

    改为

    #include <geometry_msgs/PointStamped.h>
  • GPS回调函数数据类型更改,数据格式更改。如下
double GPSvalues[4];                        
void GPSCallback(const geometry_msgs::PointStamped::ConstPtr &value)
{
    GPSvalues[0] = value->point.x; // 对应rviz坐标轴x
    GPSvalues[1] = value->point.z; // 对应rviz坐标轴y
    if (gps_flag)
    {
        GPSvalues[2] = value->point.x;
        GPSvalues[3] = value->point.z;
        gps_flag=0;
    }
    broadcastTransform();  
}
  1. IMU数据改为从quaternion发出

    topic名称从

    robot/inertial_unit/roll_pitch_yaw

    改为了

    robot/inertial_unit/quaternion

IMU 始能代码改为如下代码:

    // 订阅inertial_unit服务
    ros::ServiceClient inertial_unit_Client;          
    webots_ros::set_int inertial_unit_Srv;            
    ros::Subscriber inertial_unit_sub;
    inertial_unit_Client = n->serviceClient<webots_ros::set_int>("/robot/inertial_unit/enable");
    inertial_unit_Srv.request.value = TIME_STEP;
    if (inertial_unit_Client.call(inertial_unit_Srv) && inertial_unit_Srv.response.success) {
        ROS_INFO("inertial_unit enabled.");
        inertial_unit_sub = n->subscribe("robot/inertial_unit/quaternion", 1, inertial_unitCallback);
        ROS_INFO("Topic for inertial_unit initialized.");
        while (inertial_unit_sub.getNumPublishers() == 0) {
        }
        ROS_INFO("Topic for inertial_unit connected.");
    } else {
        if (!inertial_unit_Srv.response.success)
        ROS_ERROR("Sampling period is not valid.");
        ROS_ERROR("Failed to enable inertial_unit.");
        return 1;
    }


虽然topic名称发生改变,但是数据格式没有改变,依旧是sensor_msgs::Imu

  1. 坐标轴转换函数改变(

    如果出现webots转向和rviz不符或者坐标系不符,请检查速度、坐标轴,自行调试

    )
void broadcastTransform()
{
    static tf::TransformBroadcaster br;
    tf::Transform transform;
    transform.setOrigin(tf::Vector3(GPSvalues[0]-GPSvalues[2],GPSvalues[1]-GPSvalues[3],0));// 设置原点
    tf::Quaternion q(Inertialvalues[0],Inertialvalues[2],Inertialvalues[1],-Inertialvalues[3]);
    transform.setRotation(q);
    br.sendTransform(tf::StampedTransform(transform,ros::Time::now(),"odom","base_link"));
    transform.setIdentity();
    br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "base_link", "/robot/Sick_LMS_291"));

}
  1. webots中 IMU 方向发生改变(

    注意

  • IMU方向如下图所示,

    蓝色朝上,绿色向前,红色向右


    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mFleyEwu-1614515377146)(1.png)]

  • robot方向如下图所示

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qTC0B6aa-1614515377148)(2.png)]

  1. 在webots2021a版本,需要配置两个

    robot_broadcaster

    ,分别支持gmapping和cartographer

    详细见

    github

✌Bye

此项目github地址:

https://github.com/JackyMao1999/webots_demo



版权声明:本文为xiaokai1999原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。