当前位置: 首页 > article >正文

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.2.1更改默认参数:
        • 3.2.1.1在vrx_gazebo / worlds / xacros / usv_wind_plugin.xacro中更改默认参数;
        • 3.2.1.2在vrx_gazebo / worlds / XXX.world.xacro中更改受风影响的模型或其系数,覆盖默认参数;
      • 3.2.2发布瞬时风速
      • 3.2.3波场(wave feild)
      • 3.2.4雾
        • 3.2.4.1Find your sence file in your world xacro
        • 3.2.4.2Add fog to the scene:
      • 3.2.4环境照明
      • 3.2.5save and build
      • 3.2.6run
    • 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

nametype
/clocksystem 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_infocamera info
/wamv/sensors/cameras/front_left_camera/image_rawimages
/wamv/sensors/cameras/front_left_camera/image_raw/compressedcompressed 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_infocamera info
/wamv/sensors/cameras/front_right_camera/image_rawimages
/wamv/sensors/cameras/front_right_camera/image_raw/compressedcompressed 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_infocamera info
/wamv/sensors/cameras/middle_right_camera/image_rawimages
/wamv/sensors/cameras/middle_right_camera/image_raw/compressedcompressed 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_cmdcontrol
/wamv/thrusters/left_thrust_angle
/wamv/thrusters/left_thrust_cmdcontrol
/wamv/thrusters/right_thrust_angle
/wamv/thrusters/right_thrust_cmdcontrol

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 &#x002D;&#x002D;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.
light buoy, dock and animal buoys- 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


http://www.kler.cn/a/570993.html

相关文章:

  • jenkins集成docker发布java项目
  • 各种类型网络安全竞赛有哪些 网络安全大赛的简称
  • 智能家居的二次进化:当三维设计遇见场景芯片
  • Spring +Spirng MVC+Mybatis +SpringBoot
  • 一个易用的.Net测试模拟库
  • Hive面试:行列转换
  • C# Unity 唐老狮 No.3 模拟面试题
  • Xsens动作捕捉+AI训练家用机器人:迈向智能生活的新篇章
  • linux下自旋锁(spin_lock)
  • Flutter状态管理框架GetX最新版详解与实践指南
  • 如何进行虚拟机IP配置
  • 下载pyenv
  • 栈和队列的模拟实现
  • 蓝桥杯 2022 Java 研究生省赛 3 题 质因数个数
  • 51单片机中reg52.h与regx52.h在进行位操作时的不同
  • C++:面向对象编程(封装、继承和多态)
  • 深入理解 `udev`:Linux 设备管理的核心机制
  • Leetcode 49: 字母异位词分组
  • Java自动拆箱装箱/实例化顺序/缓存使用/原理/实例
  • 基于SpringBoot的校园二手交易平台(源码+论文+部署教程)