当前位置:首页 > webots与ros联合仿真

webots与ros联合仿真

联合仿真环境配置

假设webots和ros都已安装完成,本文环境为webots R2020b revision 1,ubuntu18.04/Ros Melodic

在2022年12月按照此种步骤安装默认会安装5.0.1版本,对于webots R2020b来说已经不适配,下面过程的第1步可以不执行,从第2步开始,第3步按照第六步后面的说明进行,其余步骤不变。

官方教程:

  • https://www.cyberbotics.com/doc/guide/tutorial-9-using-ros ROS tutorial for Webots:
  • https://www.cyberbotics.com/doc/guide/using-ros

1、安装接口

sudoaptinstallros-melodic-webots-ros

2、创建工作空间

mkdircatkin_ws &&cdcatkin_wswstool init src

3、复制相关文件

1)从webots安装目录(/usr/local/webots/projects/languages/ros/)复制webots_ros文件夹到工作空间src文件夹下

在这里插入图片描述

2)将/usr/local/webots/projects/default/controllers/ros/include/文件夹下面的srvmsg文件夹复制到刚刚放在catkin_ws工作空间下的webots_ros功能包内

在这里插入图片描述
3)在catkin_ws目录下编译工作空间

catkin_make

4)添加webots环境变量,若是默认安装路径则在~/.bashrc中添加以下内容:

export WEBOTS_HOME=/usr/local/webots

否则会出现以下错误:

在这里插入图片描述
5)souce 到工作空间

cdcatkin_wssourcedevel/setup.bash

6)运行官方例程pioneer3at机器人,或者其他机器人

roslaunch webots_ros pioneer3at.launch

上述方法仅针对最新版本的webots有效,因为使用命令行安装webot-ros默认会安装高版本的,但如果webots不是高版本则会出现许多错误,比如2020b和之后的版本模型的世界坐标系不同,通信错误等等。

因此,若webots不是最新的版本,可以前往GitHub下载和自己webots对应版本的webots-ros,如2020b rev1对应的是2.1.1,之后将下载的源码文件复制到工作空间的src文件夹下,再执行4-6步即可。

注意:每次运行终端时都必须要运行第5步的source,不然会报错。

下面是官方的从源码编译的教程(假设工作空间已定义好)

1cd/path/to/catkin_ws/src   23# retrieve the sources4gitclone https://github.com/cyberbotics/webots_ros.git   5# if you are not using the latest version of Webots, you need to checkout the tag corresponding to the Webots version: https://github.com/cyberbotics/webots_ros/releases6# if you are using the development version of Webots, you need to checkout the develop branch.78cd/path/to/catkin_ws   910# checking dependencies11rosdep update  12rosdep install--from-paths src --ignore-src --rosdistro noetic  1314# building15catkin_make  1617# source this workspace (careful when also sourcing others)18source/path/to/catkin_ws/devel/setup.bash

在这里插入图片描述

从零开始建立webots-ros仿真环境

1、创建工作空间和功能包

mkdir-p ~/catkin_ws/srccd~/catkin_ws/srccatkin_create_pkg webots_demo std_msgs rospy roscpp sensor_msgs #webots_demo可以改成自己定义的功能包名

2、编译功能包

cd~/catkin_wscatkin_make

3、复制相关文件

从对应版本的webots-ros文件夹中复制srvmsgscript文件夹到webots_demo功能包内

4、配置webots_demo/CMakeList.txt文件

CMakeList.txt文件参考webots-ros包中的同名文件修改

######################################### Declare ROS messages and services ########################################### Generate messages in the 'msg' folderadd_message_files(FILES    BoolStamped.msg    Float64Stamped.msg    Int32Stamped.msg    Int8Stamped.msg    RadarTarget.msg    RecognitionObject.msg    StringStamped.msg  )## Generate services in the 'srv' folderadd_service_files(FILES    camera_get_focus_info.srv    camera_get_info.srv    camera_get_zoom_info.srv    display_draw_line.srv    display_draw_oval.srv    display_draw_pixel.srv    display_draw_polygon.srv    display_draw_rectangle.srv    display_draw_text.srv    display_get_info.srv    display_image_copy.srv    display_image_delete.srv    display_image_load.srv    display_image_new.srv    display_image_paste.srv    display_image_save.srv    display_set_font.srv    field_get_bool.srv    field_get_color.srv    field_get_count.srv    field_get_float.srv    field_get_int32.srv    field_get_node.srv    field_get_rotation.srv    field_get_string.srv    field_get_type.srv    field_get_type_name.srv    field_get_vec2f.srv    field_get_vec3f.srv    field_import_node.srv    field_import_node_from_string.srv    field_remove_node.srv    field_remove.srv    field_set_bool.srv    field_set_color.srv    field_set_float.srv    field_set_int32.srv    field_set_rotation.srv    field_set_string.srv    field_set_vec2f.srv    field_set_vec3f.srv    get_bool.srv    get_float_array.srv    get_float.srv    get_int.srv    get_string.srv    get_uint64.srv    get_urdf.srv    gps_decimal_degrees_to_degrees_minutes_seconds.srv    lidar_get_frequency_info.srv    lidar_get_info.srv    lidar_get_layer_point_cloud.srv    lidar_get_layer_range_image.srv    motor_set_control_pid.srv    mouse_get_state.srv    node_add_force_or_torque.srv    node_add_force_with_offset.srv    node_get_center_of_mass.srv    node_get_contact_point.srv    node_get_field.srv    node_get_id.srv    node_get_number_of_contact_points.srv    node_get_name.srv    node_get_orientation.srv    node_get_parent_node.srv    node_get_position.srv    node_get_static_balance.srv    node_get_status.srv    node_get_type.srv    node_get_velocity.srv    node_remove.srv    node_reset_functions.srv    node_move_viewpoint.srv    node_set_visibility.srv    node_set_velocity.srv    pen_set_ink_color.srv    range_finder_get_info.srv    receiver_get_emitter_direction.srv    robot_get_device_list.srv    robot_set_mode.srv    robot_wait_for_user_input_event.srv    save_image.srv    set_bool.srv    set_float.srv    set_float_array.srv    set_int.srv    set_string.srv    skin_get_bone_name.srv    skin_get_bone_orientation.srv    skin_get_bone_position.srv    skin_set_bone_orientation.srv    skin_set_bone_position.srv    speaker_is_sound_playing.srv    speaker_speak.srv    speaker_play_sound.srv    supervisor_get_from_def.srv    supervisor_get_from_id.srv    supervisor_movie_start_recording.srv    supervisor_set_label.srv    supervisor_virtual_reality_headset_get_orientation.srv    supervisor_virtual_reality_headset_get_position.srv  )## Generate added messages and services with any dependencies listed heregenerate_messages(DEPENDENCIES    std_msgs    sensor_msgs  )##################################### catkin specific configuration ####################################### The catkin_package macro generates cmake config files for your package## Declare things to be passed to dependent projects## INCLUDE_DIRS: uncomment this if you package contains header files## LIBRARIES: libraries you create in this project that dependent projects also need## CATKIN_DEPENDS: catkin_packages dependent projects also need## DEPENDS: system dependencies of this project that dependent projects also needcatkin_package(#  INCLUDE_DIRS include#  LIBRARIES webots_rosCATKIN_DEPENDS roscpp rospy std_msgs sensor_msgs message_runtime tf#  DEPENDS system_lib)############# Build #############include_directories(${ catkin_INCLUDE_DIRS})## Instructions for yourself node    这里的节点名自己改,上面的内容对照着复制到自己的文件当中add_executable(yourselfnode src/yourselfnode.cpp)add_dependencies(yourselfnode webots_ros_generate_messages_cpp)target_link_libraries(yourselfnode	${ catkin_LIBRARIES})

5、配置webots_demo/package.xml文件:

同样参考webots-ros包中的同名文件修改

6、创建launchworlds文件夹

在webots_demo功能包内创建worldslaunch文件夹,worlds文件夹中放置.wbt文件,launch文件夹中放置launch文件,先把webots-ros同名文件夹中的webots.launchwebots_ros_python.launch复制过来再创建自己的launch文件,可以同时启动ros和webots,名称自定,如test.launch,内容可以参考webots-ros同名文件夹中的pioneer3at.launch

<?xml version="1.0"?><launch><!-- start Webots --><argname="no-gui"default="false,"doc="Start Webots with minimal GUI"/><!-- webots_demo记得更换成自己功能包的名字 --><includefile="$(find webots_demo)/launch/test.launch"><argname="mode"value="realtime"/><argname="no-gui"value="$(arg no-gui)"/><!-- yourworlds.wbt记得改为自己的.wbt文件名字 --><argname="world"value="$(find webots_demo)/worlds/yourworlds.wbt"/></include></launch>

7、编写cpp文件,之后修改配置CMakeList.txt文件

Instructions for yourself node 这里的节点名自己改,上面的内容对照着复制到自己的文件当中

## Instructions for yourself node    这里的节点名自己改,上面的内容对照着复制到自己的文件当中add_executable(yourselfnode src/yourselfnode.cpp)add_dependencies(yourselfnode webots_ros_generate_messages_cpp)target_link_libraries(yourselfnode

多个节点要添加多个上述表述

8、编译功能包

cd~/catkin_wscatkin_make

9、source

source~/catkin_ws/devel/setup.bash

每开一个终端就需要source一次,也可以写到~/.bashrc文件的source /opt/ros/melodic/setup.bash下方

10、运行launch文件,打开webots

第一次可能TAB不出来,需要自己手动输入,后面就可以直接TAB出来了

roslaunch webots_demo test.launch

11、运行编写好的代码

rosrun webots_demo yourselfnode

webots相关操作

webots几个快捷键

  • ctrl+F1:显示/隐藏世界坐标系
  • ctrl+F5:显示旋转轴
  • shift+滚轮:移动
  • alt+5:切换到选中物体的视角
  • alt+左键:施加力
  • alt+右键:力矩

webots中几点tips:

  • 节点添加时要添加solid,如果直接添加shape会没有物理属性(boundingObject和physics)
  • 子节点添加shape时先命名(DEF),命名后在user中就可以看见节点
  • 物理属性中的质量和密度只能选其一
  • 形状(shape)可以直接复制粘贴到boundingObject,其中的geometry Sphere可以设置形状的细分度

分享到: