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、安装接口
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/
文件夹下面的srv
和msg
文件夹复制到刚刚放在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文件夹中复制srv
,msg
,script
文件夹到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、创建launch
和worlds
文件夹
在webots_demo功能包内创建worlds
和launch
文件夹,worlds
文件夹中放置.wbt
文件,launch
文件夹中放置launch文件,先把webots-ros
同名文件夹中的webots.launch
和webots_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)!