How to use VRX on ubuntu20.04 with ROS1 Noetic?[2]
How to use VRX on ubuntu20.04 with ROS1 Noetic?[2]
- 1.Which topics
- 2.Control
- 1.1操作模拟船
- (1)命令行直接发布
- (2)启动键盘控制文件
- 3.Customer your VRX world
- 3.1Which world parameters
- 3.2改变风的参数
- 3.3.Add ships
- 3. 添加障碍元素
- Add light buoy
- 4. Add your own dock
- 4.1首先在vrx的/gazebo/models文件夹下创建dock_base_my文件夹,用来保存模型信息,进入该文件夹(-p表示如果没有路径中的文件夹也一并创建,可同时创建多个不同层次的文件夹)
- 4.2在dock_my文件夹中创建model.config文件,并将以下内容复制进去
- 4.3在dock_base_my文件夹中创建model.sdf.erb文件,并将以下内容复制进去
- 4.4在vrx_gazebo的CMakeList.txt中添加编译信息
- 4.5回到编译工作空间
- 4.6打开gazebo,通过insert添加自定义模型
- 4.7报错
- 5.创建自定义WAM-V推进器和传感器
- 5.1创建和使用自定义WAM-V urdf文件步骤
- 5.2自定义可配置内容及配置文件格式
- 5.3创建和使用自定义urdf文件的其他方法(并未成功,有些位置添加标签可以但有些位置不行)
- 航路点waypoint可视化
- Biography:
1.Which topics
name | type |
---|---|
/clock | system time |
/gazebo/link_states | |
/gazebo/model_states | |
/gazebo/parameter_descriptions | |
/gazebo/parameter_updates | |
/gazebo/performance_metrics | |
/gazebo/set_link_state | |
/gazebo/set_model_state | |
/rosout | |
/rosout_agg | |
/vrx | |
/vrx/debug/wind/direction | |
/vrx/debug/wind/speed | |
/vrx/dock_2022_placard1/shuffle | |
/vrx/dock_2022_placard2/shuffle | |
/vrx/dock_2022_placard3/shuffle | |
/wamv/joint_states | |
/wamv/sensors/cameras/front_left_camera/camera_info | camera info |
/wamv/sensors/cameras/front_left_camera/image_raw | images |
/wamv/sensors/cameras/front_left_camera/image_raw/compressed | compressed images |
/wamv/sensors/cameras/front_left_camera/image_raw/compressed/parameter_descriptions | |
/wamv/sensors/cameras/front_left_camera/image_raw/compressed/parameter_updates | |
/wamv/sensors/cameras/front_left_camera/image_raw/compressedDepth | |
/wamv/sensors/cameras/front_left_camera/image_raw/compressedDepth/parameter_descriptions | |
/wamv/sensors/cameras/front_left_camera/image_raw/compressedDepth/parameter_updates | |
/wamv/sensors/cameras/front_left_camera/image_raw/theora | |
/wamv/sensors/cameras/front_left_camera/image_raw/theora/parameter_descriptions | |
/wamv/sensors/cameras/front_left_camera/image_raw/theora/parameter_updates | |
/wamv/sensors/cameras/front_left_camera/parameter_descriptions | |
/wamv/sensors/cameras/front_left_camera/parameter_updates | |
/wamv/sensors/cameras/front_right_camera/camera_info | camera info |
/wamv/sensors/cameras/front_right_camera/image_raw | images |
/wamv/sensors/cameras/front_right_camera/image_raw/compressed | compressed images |
/wamv/sensors/cameras/front_right_camera/image_raw/compressed/parameter_descriptions | |
/wamv/sensors/cameras/front_right_camera/image_raw/compressed/parameter_updates | |
/wamv/sensors/cameras/front_right_camera/image_raw/compressedDepth | |
/wamv/sensors/cameras/front_right_camera/image_raw/compressedDepth/parameter_descriptions | |
/wamv/sensors/cameras/front_right_camera/image_raw/compressedDepth/parameter_updates | |
/wamv/sensors/cameras/front_right_camera/image_raw/theora | |
/wamv/sensors/cameras/front_right_camera/image_raw/theora/parameter_descriptions | |
/wamv/sensors/cameras/front_right_camera/image_raw/theora/parameter_updates | |
/wamv/sensors/cameras/front_right_camera/parameter_descriptions | |
/wamv/sensors/cameras/front_right_camera/parameter_updates | |
/wamv/sensors/cameras/middle_right_camera/camera_info | camera info |
/wamv/sensors/cameras/middle_right_camera/image_raw | images |
/wamv/sensors/cameras/middle_right_camera/image_raw/compressed | compressed images |
/wamv/sensors/cameras/middle_right_camera/image_raw/compressed/parameter_descriptions | |
/wamv/sensors/cameras/middle_right_camera/image_raw/compressed/parameter_updates | |
/wamv/sensors/cameras/middle_right_camera/image_raw/compressedDepth | |
/wamv/sensors/cameras/middle_right_camera/image_raw/compressedDepth/parameter_descriptions | |
/wamv/sensors/cameras/middle_right_camera/image_raw/compressedDepth/parameter_updates | |
/wamv/sensors/cameras/middle_right_camera/image_raw/theora | |
/wamv/sensors/cameras/middle_right_camera/image_raw/theora/parameter_descriptions | |
/wamv/sensors/cameras/middle_right_camera/image_raw/theora/parameter_updates | |
/wamv/sensors/cameras/middle_right_camera/parameter_descriptions | |
/wamv/sensors/cameras/middle_right_camera/parameter_updates | |
/wamv/sensors/pingers/pinger/marker/signal | |
/wamv/sensors/pingers/pinger/range_bearing | |
/wamv/sensors/pingers/pinger/set_pinger_position | |
/wamv/shooters/ball_shooter/fire | |
/wamv/thrusters/lateral_thrust_angle | |
/wamv/thrusters/lateral_thrust_cmd | control |
/wamv/thrusters/left_thrust_angle | |
/wamv/thrusters/left_thrust_cmd | control |
/wamv/thrusters/right_thrust_angle | |
/wamv/thrusters/right_thrust_cmd | control |
2.Control
1.1操作模拟船
(1)命令行直接发布
//启动仿真环境
roslaunch vrx_gazebo sandisland.launch
将指令发布给左右推进器。
- speed
rostopic pub /wamv/thrusters/left_thrust_cmd std_msgs/Float32 "data: 5" -r 0.5
rostopic pub /wamv/thrusters/right_thrust_cmd std_msgs/Float32 "data: 0.5"
- angle
rostopic pub /wamv/thrusters/left_thrust_angle std_msgs/Float32 "data: 5" -r 0.5
(2)启动键盘控制文件
sudo apt-get install ros-noetic-teleop-twist-keyboard
//启动仿真环境
roslaunch vrx_2019 sandisland.launch
//启动键盘控制文件
roslaunch vrx_gazebo usv_keydrive.launch
3.Customer your VRX world
- Attention!: find world file in your launch file.
- change your parameters in world file, here is my_example_course.world
3.1Which world parameters
- in files
3.2改变风的参数
关于风的参数写在vrx_gazebo / worlds / xacros / usv_wind_plugin.xacro中;与风有关的模型以其与风参数之间的关系写在vrx_gazebo / worlds / XXXX.world.xacro中。
3.2.1更改默认参数:
3.2.1.1在vrx_gazebo / worlds / xacros / usv_wind_plugin.xacro中更改默认参数;
vrx_gazebo / worlds / xacros / usv_wind_plugin.xacro文件
关于=和:= (网上有的说)=是相等,:=是赋值;
定义了一个宏,名称为usv_wind_gazebo,参数如下,根据以下参数生成一个标签块;其中有**的表示可以插入任意多个元素,*表示可以插入一个元素,啥也没有的为一简单的文本参数。
<?xml version="1.0"?> 版本号;
xmlns:xacro="http://ros.org/wiki/xacro" 为xacro使用声明;
3.2.1.2在vrx_gazebo / worlds / XXX.world.xacro中更改受风影响的模型或其系数,覆盖默认参数;
用<xacro:include filename=“路径”/> <xacro:usv_wind_gazebo />调用宏,中间<wind_objs>为宏的参数。
3.2.2发布瞬时风速
使用插件发布风速
rqt_plot / vrx / debug / wind / speed / data
3.2.3波场(wave feild)
波浪宏定义在wave_gazebo/world/models/ocean/waves/model.xacro文件中。
3.2.4雾
雾和其他照明条件没有直接写在文件中,如果需要要自己根据标准格式写该部分的标签块,写到vrx_gazebo/worlds/XXX.xacro文件中。
3.2.4.1Find your sence file in your world xacro
3.2.4.2Add fog to the scene:
<scene>
<sky></sky>
<grid>false</grid>
<ambient>1.0 1.0 1.0</ambient>
<background>0.8 0.8 0.8</background>
<fog>
<type>linear</type>
<color>1 1 1 1</color>
<start>1</start>
<end>100</end>
<density>1</density>
</fog>
</scene>
3.2.4环境照明
<scene>
<sky></sky>
<grid>false</grid>
<ambient>1.0 1.0 1.0</ambient>
<background>0.8 0.8 0.8</background>
</scene>
3.2.5save and build
source path to your workspace/devel/setup.zsh
rosrun xacro xacro my_example_course.world.xacro > my_example_course.world
3.2.6run
roslaunch vrx_gazebo vrx_my.launch
roslaunch vrx_gazebo XXX.launch world:=pwd
/my_world.world
注意pwd两边不是单引号,是esc下边那个摁键打出来的英文符号。
3.3.Add ships
- add namesapce in vrx.launch : raplace name(1), default(1)
<arg name="namespace1" default="wamv1"/>
- add coodinates : repalce name(6)
<!-- Initial USV location and attitude-->
<arg name="x1" default="-532" />
<arg name="y1" default="200" />
<arg name="z1" default="0.1" />
<arg name="P1" default="0" />
<arg name="R1" default="0" />
<arg name="Y1" default="1" />
- add param : replace namespace(2)
<!-- USV01 -->
<param name="$(arg namespace1)/robot_description"
command="$(find xacro)/xacro --inorder '$(arg urdf)'
locked:=$(arg wamv_locked)
thruster_config:=$(arg thrust_config)
vrx_sensors_enabled:=$(arg vrx_sensors_enabled)
namespace:=$(arg namespace1) "/>
- add node :replace name(1),arg(6),namespace(1),model(1)
<node name="spawn_model1" pkg="gazebo_ros" type="spawn_model"
args="-x $(arg x1) -y $(arg y1) -z $(arg z1)
-R $(arg R1) -P $(arg P1) -Y $(arg Y1)
-urdf -param $(arg namespace1)/robot_description -model wamv1"/>
3. 添加障碍元素
可在终端用cat example_course.world.xacro来查看文件内容,
可通过在example_course.world.xacro文件中添加新的标签来添加需要避开的障碍等模型,
Add light buoy
In world files,其中<uri/>为模型标签,可在model://后添加自带的模型名称来设值,为位置标签,六个值分别为x,y,z,roll,pitch.yaw.
use different name for every model.
- code after add
4. Add your own dock
4.1首先在vrx的/gazebo/models文件夹下创建dock_base_my文件夹,用来保存模型信息,进入该文件夹(-p表示如果没有路径中的文件夹也一并创建,可同时创建多个不同层次的文件夹)
mkdir -p ~/vrx_ws/src/vrx/vrx_gazebo/models/dock_base_my
cd ~/vrx_ws/src/vrx/vrx_gazebo/models/dock_base_my
4.2在dock_my文件夹中创建model.config文件,并将以下内容复制进去
创建文件
gedit model.config
内容如下,其中model标签下的name标签为所创建的自定义模型的名字
<?xml version="1.0"?>
<model>
<name>dock_base_my</name>
<version>1.0</version>
<sdf version="1.6">model.sdf</sdf>
<author>
<name>Carlos Agüero</name>
<email>caguero@openrobotics.org</email>
</author>
<description>
My custom dock_my.
</description>
</model>
4.3在dock_base_my文件夹中创建model.sdf.erb文件,并将以下内容复制进去
gedit model.sdf.erb
内容如下,修改模型只需要修改layout中的内容,包括在一堆单引号中的为一行,每一行用逗号隔开,一个X代表一个4x4的码头块,一个空格代表一个4x4的空白块
<?xml version="1.0" ?>
<sdf version="1.6">
<!-- Important: This file is generated. DO NOT EDIT! -->
<model name="robotx_dock_2016_base">
<%
layout = [
'X X',
'X X',
'X X',
'XXXXXXX',
'XXXX',
'XXXXXXX',
'X X',
'X X',
'X X',
]
%>
<%= ERB.new(File.read('dock_generator.erb'),
nil, '-', 'dock').result(binding) %>
</model>
</sdf>
效果如下
4.4在vrx_gazebo的CMakeList.txt中添加编译信息
在set(dock_base_erb_files )(若文件未被修改过则位于第233行)中添加models/dock_base_my/model.sdf.erb,其中dock_base_my为新建模型的名字。
4.5回到编译工作空间
catkin build vrx_gazebo
4.6打开gazebo,通过insert添加自定义模型
roslaunch vrx_gazebo vrx.launch
在左上方有insert选项,找到dock_base_my单击即可在世界中添加。
4.7报错
报错信息
[gazebo-2] process has died [pid 21545, exit code 255, cmd /opt/ros/melodic/lib/gazebo_ros/gzserver -e ode /home/jyh/vrx_ws/devel/share/vrx_gazebo/worlds/example_course.world __name:=gazebo __log:=/home/jyh/.ros/log/95d77786-66b9-11eb-a0d3-181deaf58039/gazebo-2.log].
解决方法
$ killall gzserver
5.创建自定义WAM-V推进器和传感器
5.1创建和使用自定义WAM-V urdf文件步骤
首先创建一个文件夹,创建并写好推进器和传感器的yaml配置文件(后面给出示例),然后利用vrx提供的脚本启动文件直接从两个yaml配置文件生成WAM-V的urdf文件,该过程首先从两个yaml文件分别生成传感器和推进器的同名xacro文件,然后通过两个xacro文件生成WAM-V的urdf文件,该脚本还会检测输入的两个yaml文件是否符合compliance.py文件标准,该文件是一个vrx比赛所用船的推进器和传感器标准文件,对于自己定义的船不需要完全按照该标准定义,可以作为参考,但要保证船只物理可实现,要如果未通过标准检测会出现红色的报错信息,但在gazebo中依旧可用。
mkdir ~/my_wamv
gedit ~/my_wamv/thruster_config.yaml
gedit ~/my_wamv/sensor_config.yaml
写好配置文件之后,用下面的命令利用generate_wamv.launch启动脚本生成WAM-V的urdf文件,其中$HOME表示/home/.
roslaunch vrx_gazebo generate_wamv.launch thruster_yaml:=$HOME/my_wamv/thruster_config.yaml sensor_yaml:=$HOME/my_wamv/sensor_config.yaml wamv_target:=$HOME/my_wamv/my_wamv.urdf
参数说明
thruster_yaml 推进器yaml配置文件的完整路径
sensor_yaml 传感器yaml配置文件的完整路径
wamv_target 生成WAM-V的urdf文件所在位置的完整路径
编译成功(无论是否通过检测)会输出:
[INFO] [1566845959.198003]:
Using /home/jyh/my_wamv/thruster_config.yaml as the thruster configuration yaml file
[INFO] [1566845959.208003]:
Using /home/jyh/my_wamv/sensor_config.yaml as the sensor configuration yaml file
xacro: in-order processing became default in ROS Melodic. You can drop the option.(该句不一定会输出,没输出也不要紧)
WAM-V urdf file sucessfully generated. File location: /home/tylerlum/my_wamv/my_wamv.urdf
================================================================================
REQUIRED process [wamv_config/wamv_generator-2] has died!
process has finished cleanly
log file: /home/jyh/.ros/log/58174356-65c7-11eb-9f1c-181deaf58039/wamv_config-wamv_generator-2*.log
Initiating shutdown!
================================================================================
通过以下配置urdf参数来调用自定义的WAM-V的urdf文件,参数值为所生成的urdf文件的完整路径,若没有给定urdf参数会使用启动文件中的默认配置。
roslaunch vrx_gazebo sandisland.launch urdf:=$HOME/my_wamv/my_wamv_2.urdf
5.2自定义可配置内容及配置文件格式
打开任意 可配置内容 文件夹中的xacro文件,查看其中宏定义的参数,例如打开engine.xacro,可以看到其宏定义中参数如下;
可以看出prefix为无默认值的必须参数,position、orientation为有默认值的可选参数。
<xacro:macro name="engine" params="prefix position:='0 0 0' orientation:='0 0 0'">
yaml文件格式:yaml对大小写敏感;使用缩进来表达层次逻辑,yaml的缩进不能用tab,只能用空格,只需保证同层次的代码左对齐即可;用#来表示注释。
yaml数据结构:类比Python,以键值对为基础,如position: "-2.373776 1.027135 0.318237"为一键值对;同层次的键值对构成一个字典,前边有-的同层级内容视为一个整体构成一个字典,多个前边有-的同层级内容整体构成一个列表,以此为基础存储参数信息。
yaml配置文件的一般格式如下,以传感器的配置文件为例,文件相当于一个字典,最外层字典的键名和配置内容文件夹中xacro文件同名,该键的值为一个字典,字典中存储的键名为参数名,值为参数值。
wamv_camera:
- name: front_left_camera
x: 0.75
y: 0.1
P: ${radians(15)}
- name: front_right_camera
x: 0.75
y: -0.1
P: ${radians(15)}
- name: middle_right_camera
x: 0.75
y: 0.3
P: ${radians(15)}
wamv_gps:
- name: gps_wamv
x: -0.85
wamv_imu:
- name: imu_wamv
y: -0.2
wamv_p3d:
- name: p3d_wamv
lidar:
- name: lidar_wamv
type: 16_beam
P: ${radians(8)}
5.3创建和使用自定义urdf文件的其他方法(并未成功,有些位置添加标签可以但有些位置不行)
类似自定义世界环境的方法,创建一个文件夹,并把原本的基本xacro文件赋值过来。
mkdir example_vrx_package
cd example_vrx_package/
roscp wamv_gazebo wamv_gazebo.urdf.xacro my_wamv.urdf.xacro
然后在复制过来的xacro文件中调用xacro宏来添加新的传感器,例如添加摄像头(不用包含所需的xacro宏描述文件吗?)
<xacro:property name="stereo_x" value="1.0" />
<xacro:wamv_camera name="stereo_left" x="${stereo_x}" y="0.3" z="1.5" P="${radians(15)}" />
<xacro:wamv_camera name="stereo_right" x="${stereo_x}" y="-0.3" z="1.5" P="${radians(15)}" />
然后在包含该文件的文件夹下进行编译,并用urdf参数赋值运行
rosrun xacro xacro --inorder my_wamv.urdf.xacro > my_wamv.urdf
roslaunch vrx_gazebo sandisland.launch urdf:=`pwd`/my_wamv.urdf
航路点waypoint可视化
Biography:
技术-XTDrone项目学习-VRX无人艇项目例程-多无人艇生成-ROS-Matlab通信编程
学习笔记1.1.1——vrx仿真环境的使用
VRX tutorials