• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

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

人工智能 锡城筱凯 1354次浏览 0个评论

前言

  前段时间升级了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_exposurewb_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_sizewb_inertial_unit_get_lookup_table 函数已经移除(#2424)
    • 添加PlasticFruitBoxMetalStorageBox 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>
    
  2. 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不符或者坐标系不符,请检查速度、坐标轴,自行调试)
``` c++
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方向如下图所示,蓝色朝上,绿色向前,红色向右 webots版本升级 webots 2021a 注意点[补写]
  • robot方向如下图所示 webots版本升级 webots 2021a 注意点[补写]
  1. 在webots2021a版本,需要配置两个robot_broadcaster,分别支持gmapping和cartographer 详细见github

  ✌Bye 此项目github地址:https://github.com/JackyMao1999/webots_demo


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明webots版本升级 webots 2021a 注意点[补写]
喜欢 (0)

您必须 登录 才能发表评论!

加载中……