自学内容网 自学内容网

webots与ros联合仿真

联合仿真环境配置

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

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

官方教程:

1、安装接口

sudo apt install ros-melodic-webots-ros

2、创建工作空间

mkdir catkin_ws && cd catkin_ws
wstool 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 到工作空间

cd catkin_ws
source devel/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,不然会报错。

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

   1 cd /path/to/catkin_ws/src
   2 
   3 # retrieve the sources
   4 git clone 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/releases
   6 # if you are using the development version of Webots, you need to checkout the develop branch.
   7 
   8 cd /path/to/catkin_ws
   9 
  10 # checking dependencies
  11 rosdep update
  12 rosdep install --from-paths src --ignore-src --rosdistro noetic
  13 
  14 # building
  15 catkin_make
  16 
  17 # source this workspace (careful when also sourcing others)
  18 source /path/to/catkin_ws/devel/setup.bash

在这里插入图片描述

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

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

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

2、编译功能包

cd ~/catkin_ws
catkin_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' folder
  add_message_files(
    FILES
    BoolStamped.msg
    Float64Stamped.msg
    Int32Stamped.msg
    Int8Stamped.msg
    RadarTarget.msg
    RecognitionObject.msg
    StringStamped.msg
  )

## Generate services in the 'srv' folder
  add_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 here
  generate_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 need
catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES webots_ros
   CATKIN_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 -->
  <arg name="no-gui" default="false," doc="Start Webots with minimal GUI"/>
  <!-- webots_demo记得更换成自己功能包的名字 -->
  <include file="$(find webots_demo)/launch/test.launch">
    <arg name="mode" value="realtime"/>
    <arg name="no-gui" value="$(arg no-gui)"/>
     <!-- yourworlds.wbt记得改为自己的.wbt文件名字 -->
    <arg name="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_ws
catkin_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可以设置形状的细分度

原文地址:https://blog.csdn.net/qq_43309940/article/details/128292207

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!