《Ignition》
#安装ignition
sudo apt install ros-humble-ros-ign
#运行示例
ros2 launch ros_ign_gazebo_demos rgbd_camera_bridge.launch.py
《Gazebo》
1.下载与环境配置
#1.安装相应库文件
sudo apt install ros-humble-gazebo-*
#2.添加环境变量
echo "source /usr/share/gazebo/setup.sh" >> ~/.bashrc
#3.下载models库文件
git clone https://gitee.com/ohhuo/gazebo_models.git ~/.gazebo/models
#4.添加库文件环境变量(不明确是否必要)
# 临时添加路径(当前终端有效)
export GAZEBO_MODEL_PATH=~/.gazebo/models:/usr/share/gazebo/models
# 永久生效:添加到~/.bashrc
echo "export GAZEBO_MODEL_PATH=~/.gazebo/models:/usr/share/gazebo/models" >> ~/.bashrc
source ~/.bashrc
#5.切换渲染方式
在.bashrc中添加export SVGA_VGPU10=0
#gazebo的相关功能包大全安装
sudo apt install ros-$ROS_DISTRO-gazebo-ros-pkgs
#6.运行标准launch文件打开gazebo
ros2 launch gazebo_ros gazebo.launch.py
2.《模型文件准备》
如果要仿真,就需要有一些模型文件上面的功能项需要添加
“插件讲解”
用于根据速度指令计算出自身的相对位移和旋转,是辅助定位的关键算法
3.《Launch文件准备》
#小launch文件目标是加载模型文件并发布到话题
def generate_launch_description():
# 是否使用sim时间
use_sim_time = LaunchConfiguration('use_sim_time')
# 加载xacro文件并处理成urdf文件
pkg_path = os.path.join(get_package_share_directory('learning_gazebo'))
xacro_file = os.path.join(pkg_path,'urdf','mbot_with_rgbd_gazebo.xacro')
robot_description_config = xacro.process_file(xacro_file)
# 执行特定结点以发布模型信息到特定话题
params = {'robot_description': robot_description_config.toxml(), 'use_sim_time': use_sim_time}
node_robot_state_publisher = Node(
package='robot_state_publisher',
executable='robot_state_publisher',
output='screen',
parameters=[params]
)
# Launch!
return LaunchDescription([
DeclareLaunchArgument(
'use_sim_time',
default_value='false',
description='Use sim time if true'),
node_robot_state_publisher
])
# 大launch文件目标是:加入小launch文件-加载gazebo基本环境-以话题信息创建gazebo实体
def generate_launch_description():
package_name='learning_gazebo'
world_file_path = 'worlds/neighborhood.world'
pkg_path = os.path.join(get_package_share_directory(package_name))
world_path = os.path.join(pkg_path, world_file_path)
# 机器人加载到gazebo的初始位置设置
spawn_x_val = '0.0'
spawn_y_val = '0.0'
spawn_z_val = '0.0'
spawn_yaw_val = '0.0'
#机器人launch文件-发布话题信息
mbot = IncludeLaunchDescription(
PythonLaunchDescriptionSource([os.path.join(
get_package_share_directory(package_name),'launch','mbot_rgbd.launch.py'
)]), launch_arguments={'use_sim_time': 'true', 'world':world_path}.items()
)
# gazebo的laucnh文件
gazebo = IncludeLaunchDescription(
PythonLaunchDescriptionSource([os.path.join(
get_package_share_directory('gazebo_ros'), 'launch', 'gazebo.launch.py')]),
)
#创建实体节点-订阅话题信息
spawn_entity = Node(package='gazebo_ros', executable='spawn_entity.py',
arguments=['-topic', 'robot_description',
'-entity', 'mbot',
'-x', spawn_x_val,
'-y', spawn_y_val,
'-z', spawn_z_val,
'-Y', spawn_yaw_val],
output='screen')
# Launch them all!
return LaunchDescription([
mbot,
gazebo,
spawn_entity,
])
流程就是首先编写一个完整的包含机器人和各种传感器的xacro文件
接着编写小launch以将完整机器人模型信息发布到话题robot_description
接着编写大launch以 执行小launch发布—加载gazebo环境命令—添加机器人实体命令
小鱼补充:
在加载了模型后缺乏各实例间的TF坐标关系
安装ros-$ROS_DISTRO-joint-state-publisher和安装ros-$ROS_DISTRO-robot-state-publisher节点
install/share/功能包下面放置了所有资源文件(如launch文件,urdf文件)
get_package_share_directory('fishbot_description')这一步实际上是在install的share文件夹下找功能包路径
《RVIZ》
使用
机器人眼中的环境是怎么样的呢?—— Rviz数据可视化
Rviz的使用比较简单
1.ros2 run rviz2 rviz2 打开软件
2.然后选择相应的传感器目标
3.选择对应的话题(数据来源)
话题中的数据来自仿真软件或者实体机
相关的话题:joint_state_robot和robot_state_publisher
RVIZ依赖robot_state_publisher发布的相关信息来加载机器人并匹配相关TF关系
当URDF中关节的type都是fixed(即纯静态tf关系),/joint_state中无数据,robot_state_publisher也能正确处理tf问题
保存与使用
保存——编译生成——启动使用
《RQT》
日志打印-话题发布-请求服务
可视化实时话题数据-可视化节点结构-录音包查看往期数据