[ROS2]ROS2 Humble+Ignition Fortress安装及麦克纳姆轮机器人仿真

news/2024/11/18 2:59:08/

文章目录

  • ROS2仿真安装及基本测试
    • Ignition安装:
    • Ignition测试:
    • 使用键盘控制小车:
    • Rviz中可视化雷达数据:
  • 麦克纳姆轮机器人仿真:
    • 模型文件编写及启动
    • 过程中遇到的问题:
      • 1. 报错:`Expected exactly one top-level <model>, <light> or <actor> on SDF`
      • 2. 在命令行发布速度,小车不动。

ROS2仿真安装及基本测试

官方教程:https://docs.ros.org/en/humble/Tutorials/Advanced/Simulators/Ignition.html

Ignition安装:

有新版本了兄弟们,适用于Ubuntu20/22
官方地址:https://gazebosim.org/docs/garden
Iginition官方地址:[https://gazebosim.org/docs/fortress] (https://gazebosim.org/docs/fortress)
(虽然fortress上面写的只支持bionic/focal,但我试了下在ubuntu22上也能用,暂时没出现问题。)
新的流程:

sudo apt-get update
sudo apt-get install lsb-release wget gnupg
sudo wget https://packages.osrfoundation.org/gazebo.gpg -O /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gazebo-stable.list > /dev/null
sudo apt-get update
sudo apt-get install gz-garden

Ignition测试:

ign gazebo -v 4 -r visualize_lidar.sdf

在这里插入图片描述

分别运行以下命令:

ros2 topic list
ign topic -l

可以发现ros2 topic不显示,这是因为ros和ignition之间需要消息连接
在这里插入图片描述
安装并使用ros-ign-bridge:

sudo apt-get install ros-humble-ros-ign-bridge
ros2 run ros_ign_bridge parameter_bridge /model/vehicle_blue/cmd_vel@geometry_msgs/msg/Twist]ignition.msgs.Twist
ros2 topic pub /model/vehicle_blue/cmd_vel geometry_msgs/Twist  "linear: { x: 0.1 }"

想要让小车停下来ctrl c似乎没用,重新发布一个0的速度就可以了。
在这里插入图片描述

使用键盘控制小车:

sudo apt-get install ros-humble-teleop-twist-keyboard

由于默认的键盘发布话题为/cmd_vel,而仿真小车订阅的话题为.model/ehicle_blue/cmd_vel,需要重新映射,最终运行命令如下:

ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -r /cmd_vel:=/model/vehicle_blue/cmd_vel

关于ROS2命令行传参数可以参考:https://zhuanlan.zhihu.com/p/354479100
之后就可以键盘控制,可以看到小车是有惯性和碰撞的。

Rviz中可视化雷达数据:

ros2 run ros_ign_bridge parameter_bridge /lidar2@sensor_msgs/msg/LaserScan[ignition.msgs.LaserScan --ros-args -r /lidar2:=/laser_scan
rviz2

更改Global Options为:vehicle_blue/lidar_link/gpu_lidar
之后点击Add添加laser_scan,觉得不明显的话可以把Size改大一点。
在这里插入图片描述
在这里插入图片描述

麦克纳姆轮机器人仿真:

麦克纳姆轮的建模并不容易,官方的教程使用了圆球来替代所有类型的轮子,但我也找到一份开源的麦克纳姆轮机器人的文档,先克隆到本地备用。

模型文件编写及启动

git clone https://github.com/joshvillbrandt/mecanumbot-ros-pkg

下面新建一个工作空间来进行仿真工作

mkdir -p sim2_ws/src
cd sim2_ws/src
ros2 pkg create mecanumbot

将上面克隆的文件夹中的description移动进刚创建的文件夹后编译

cd ..
colcon build

这里按照之前的流程应该在bashrc中添加bash,但这次需要添加的是local_setup.bash,理由参考:https://www.guyuehome.com/38443

gedit ~/.bashrc

作如下修改:

#source ~/ros2_ws/install/setup.bash
source ~/sim2_ws/install/local_setup.bash
#export _colcon_cd_root=~/ros2_ws
export _colcon_cd_root=~/sim2_ws

使用命令行查看小车模型:

ign service -s /world/empty/create --reqtype ignition.msgs.EntityFactory --reptype ignition.msgs.Boolean --timeout 1000 --req 'sdf_filename: "/home/b408/sim2_ws/src/mecanumbot/description/mecanumbot.urdf", name: "urdf_model"'

可以把小车的urdf文件转换为sdf:

ign sdf -p mecanumbot.urdf > mecanum.sdf

创建launch文件来启动仿真:

colcon_cd mecanum
mkdir launch
cd launch
touch demo.launch.py

填入内容:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription, ExecuteProcess
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch_ros.actions import Node
from launch.substitutions import LaunchConfigurationdef generate_launch_description():ld = LaunchDescription()pkg_ros_ign = get_package_share_directory('ros_ign_gazebo')pkg_mecanumbot = get_package_share_directory('mecanumbot')sdf = DeclareLaunchArgument('sdf_file', default_value=os.path.join(pkg_mecanumbot, 'description', 'mecanum_drive.sdf'))gazebo = IncludeLaunchDescription(PythonLaunchDescriptionSource(os.path.join(pkg_ros_ign, 'launch', 'ign_gazebo.launch.py')), launch_arguments={'ign_args': '-r '+os.path.join(pkg_mecanumbot, 'description', 'mecanum_drive.sdf')}.items(),)bridge = Node(package='ros_ign_bridge', executable='parameter_bridge', arguments=['/model/mecanumbot/cmd_vel@geometry_msgs/msg/Twist@ignition.msgs.Twist'])ld.add_action(gazebo)ld.add_action(bridge)return ld

下面再创建一个小车的sdf文件,包含了地板、光照、小车模型
创建mecanum_drive.sdf,并填入以下内容:

<?xml version="1.0" ?>
<sdf version="1.6"><world name="mecanum_drive"><physics name="1ms" type="ignored"><max_step_size>0.001</max_step_size><real_time_factor>1.0</real_time_factor></physics><pluginfilename="ignition-gazebo-physics-system"name="ignition::gazebo::systems::Physics"></plugin><pluginfilename="ignition-gazebo-user-commands-system"name="ignition::gazebo::systems::UserCommands"></plugin><pluginfilename="ignition-gazebo-scene-broadcaster-system"name="ignition::gazebo::systems::SceneBroadcaster"></plugin><light type="directional" name="sun"><cast_shadows>true</cast_shadows><pose>0 0 10 0 0 0</pose><diffuse>1 1 1 1</diffuse><specular>0.5 0.5 0.5 1</specular><attenuation><range>1000</range><constant>0.9</constant><linear>0.01</linear><quadratic>0.001</quadratic></attenuation><direction>-0.5 0.1 -0.9</direction></light><model name="ground_plane"><static>true</static><link name="link"><collision name="collision"><geometry><plane><normal>0 0 1</normal><size>100 100</size></plane></geometry><surface><friction><ode><mu>50</mu></ode></friction></surface></collision><visual name="visual"><geometry><plane><normal>0 0 1</normal><size>100 100</size></plane></geometry><material><ambient>0.8 0.8 0.8 1</ambient><diffuse>0.8 0.8 0.8 1</diffuse><specular>0.8 0.8 0.8 1</specular></material></visual></link></model><include><uri>/home/b408/sim2_ws/src/mecanumbot/description/mecanum.sdf</uri></include></world>
</sdf>

修改CMakeLists.txt:

install(DIRECTORYlaunchdescriptionDESTINATION share/${PROJECT_NAME}
)

但是小车一直在抖动,不知道是自动转换的sdf文件错误还是因为模型本身就有问题。
在这里插入图片描述

过程中遇到的问题:

1. 报错:Expected exactly one top-level <model>, <light> or <actor> on SDF

在这里插入图片描述

原因:不能启动两个sdf,如果想要启动多个sdf,可以像前面的sdf文件中那样使用

2. 在命令行发布速度,小车不动。

原因:pose设置错误,卡在地面里了
修改mevanum.sdf中的pose,把z轴高度提高一点:

<sdf version='1.9'><model name='mecanumbot'><pose>0 0 0.14 0 0 0</pose>

在ignition官网的community查找到了一个麦克纳姆轮的例程:
https://github.com/gazebosim/gz-sim/blob/ign-gazebo6/examples/worlds/mecanum_drive.sdf
可以参照这个来编写自己的sdf文件。想控制小车需要添加插件,如例程中展示的:
在这里插入图片描述

插件的具体内容可以参照:
https://github.com/gazebosim/gz-sim/blob/270da60b9387d3751d8d65eafd60f6459b450b00/src/systems/mecanum_drive/MecanumDrive.cc


http://www.ppmy.cn/news/122567.html

相关文章

踩坑记录:ubuntu20.04+ROS noetic+gazebo11用UR5+robotiq+Xbox Kinect抓取乐高

项目地址&#xff1a;https://github.com/pietrolechthaler/UR5-Pick-and-Place-Simulation 此存储库演示了 ROS 和 Gazebo 中的 UR5 取放。UR5 使用 Xbox Kinect 摄像头检测 11 种类型的乐高积木&#xff0c;并发布其位置和角度。 该项目的目标是&#xff1a; 用乐高积木模…

win10下星际争霸II和Pymarl环境配置

win10配置星际争霸过程&#xff1a; 下载星际争霸&#xff08;这里用的是台湾版&#xff09;&#xff0c;设置环境变量&#xff0c;命名为SC2PATH路径&#xff0c;路径为游戏文件所在路径 用conda create创建一个pymarl环境&#xff1a; conda create -n pymarl python3.7 -y …

西伯利亚(Siberia)冷空气

http://zhidao.baidu.com/question/27537013.html 俄罗斯境内北亚地区的一片广阔带。西起乌拉尔山脉&#xff0c;东迄太平洋&#xff0c;北临北冰洋&#xff0c;西南抵哈萨克斯坦中北部山地&#xff0c;南与中国、蒙古和朝鲜等国为邻&#xff0c;面积1276万平方千米&#xff0…

UE5 官方案例Lyra 全特性详解 11.背包系统Inventory System 0

UE5 官方案例Lyra 全特性详解 0. 前言1. 前置声明2. 修复背包游戏体验不加载的问题2.1 通过输出日志的警告找到问题根源2.2 修复资源加载的问题3. 交互按钮不起作用4. 物品没有添加到背包5. 背包关不掉6. 背包中的物品没有图标7. 背包在打开的时候不会刷新8.重复物品警告9. 背包…

SLAM精度测评——EVO

1.install GitHub - MichaelGrupp/evo: Python package for the evaluation of odometry and SLAM 注意&#xff1a;安装好依赖&#xff01; sudo apt install python-pip pip install evo --upgrade --no-binary evo or pip install evo --upgrade --no-binary evo --use…

全新ALIENWARE外星人笔记本问世,预言设计迭代升级

2023年1月6日&#xff0c;ALIENWARE外星人宣布推出四款全新游戏笔记本电脑——ALIENWARE m18和m16、ALIENWARE x16和x14 R2。ALIENWARE外星人新品首次推出全新外观和材质、强劲的性能升级、进一步增强的设计和舒适性&#xff0c;以及经过全面优化的AWCC外星人智动能技术平台。 …

ROS2+nav2+激光雷达导航(上)

目录 写在前面安装nav2nav2介绍nav2实践map地图保存地图读取 状态估计(TF变换)所需TF坐标base_link -> sensor framesodom -> base_linkLaser Scan Matcher for ROS2 map -> odomAMCL使用AMCL参数配置文件amcl_config.yaml 效果过程中的知识点一、launch文件编写格式及…

sensei鼠标测试软件,「硬核测试:游戏鼠标精准度」赛睿SENSEI 310

原标题&#xff1a;「硬核测试&#xff1a;游戏鼠标精准度」赛睿SENSEI 310 作为赛睿最热销游戏鼠标之一&#xff0c;310有SENSEI(对称)和RIVAL(右手)两个版本&#xff0c;均采用今天要测的TrueMove3引擎&#xff0c;是基于PMW3360打造的1:1真实追踪的引擎&#xff0c;虽然现在…