关于ros2、turtlebot3和nav2的应用总结

关于ros2、turtlebot3和nav2的应用总结

一、资源简介
(1)版本要求
ros2 foxy
turtlebot3 waffle
nav2 0.4.1
gazebo gazebo_ros_pkgs-3.5.0.zip
(2)资源链接
ros2:https://index.ros.org/doc/ros2
https://github.com/ros2
https://github.com/ros2/cartographer
https://github.com/ros2/cartographer_ros
nav2:https://github.com/ros-planning/navigation2
https://navigation.ros.org/
turtlebot3:https://github.com/ROBOTIS-GIT/turtlebot3_simulations
gazebo:https://github.com/ros-simulation/gazebo_ros_pkgs
(3)工具安装
ros2 foxy官网安装:
https://index.ros.org/doc/ros2/Installation/Foxy/Linux-Install-Debians/
sudo apt install ros-foxy-desktop
nav2官网安装:
https://navigation.ros.org/build_instructions/index.html#install
sudo apt install ros-foxy-navigations2
sudo apt install ros-foxy-nav2-bringup
sudo apt install ros-foxy-turtlebot3*
turtlebot3安装:
https://www.ncnynl.com/archives/201809/2593.html
#加载apt包环境
$ . /opt/ros/foxy/setup.bash
#加载ros2源码安装环境
$ . ~/ros2/install/local_setup.bash
$ mkdir -p ~/tb3_ws2/src
$ cd ~/tb3_ws2
$ wget https://raw.githubusercontent.com/ROBOTIS-GIT/turtlebot3/ros2/turtlebot3.repos
$ vcs import src < turtlebot3.repos
$ colcon build --symlink-install --merge-install #合并工作空间
相关工具按照官网安装完成后,后续即可使用这些工具。
(4)编译示例
gazebo:https://github.com/ros-simulation/gazebo_ros_pkgs
首先在 gazebo_ros_pkgs-3.5.0文件夹下创建colcon文件夹,然后进入colcon文件夹,执行编译命令 :

colcon build --merge-install --base-path .. 

(5)软件管理命令 synaptic
二、gazebo使用
(1)启动world模型
gazebo --verbose /opt/ros/foxy/share/gazebo_plugins/worlds/gazebo_ros_diff_drive_demo.world
world模型启动后的示意图如下所示: 关于ros2、turtlebot3和nav2的应用总结_第1张图片(2)控制小车运动
1.用命令控制
ros2 topic pub /demo/cmd_demo geometry_msgs/Twist ‘{linear: {x: 1.0}}’ -1
ros2 topic pub /demo/cmd_demo geometry_msgs/Twist ‘{angular: {z: 0.1}}’ -1
2.用键盘控制
首先,需要注释gazebo_ros_diff_drive_demo.world中的代码:

   <!--
        <ros>
          <namespace>/demo</namespace>
          <remapping>cmd_vel:=cmd_demo</remapping>
          <remapping>odom:=odom_demo</remapping>
        </ros>
   -->

然后,运行以下命令,即可控制小车运动。
ros2 run teleop_twist_keyboard teleop_twist_keyboard

三、nav2使用
(1)单独启动waffle.model
首先将~/app/tb3/src/turtlebot3/turtlebot3_simulations/turtlebot3_gazebo/models/文件夹下的turtlebot3_waffle,turtlebot3_world文件夹拷贝到/home/root/.gazebo/models,然后执行下面命令。
gazebo --verbose /opt/ros/foxy/share/nav2_bringup/worlds/waffle.model
示意图如下所示:
关于ros2、turtlebot3和nav2的应用总结_第2张图片
(2)nav2自带默认的turtlebot3 waffle和开源机器人turtlebot3的关系
1.nav2自带默认的turtlebot3 waffle,不用执行export TURTLEBOT3_MODEL=waffle。
2.source opt/ros/foxy/setup.bash环境即可,不用执行source ~/app/tb3/install/setup.bash。
3.将~/app/tb3/src/turtlebot3/turtlebot3_simulations/turtlebot3_gazebo/models/文件夹下的turtlebot3_waffle,turtlebot3_world文件夹拷贝到/home/root/.gazebo/models,则不用添加路径export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:~/app/tb3/src/turtlebot3/turtlebot3_simulations/turtlebot3_gazebo/models。
4.在/home文件夹下,ctrl + h 快捷键可以显示.gazebo文件夹。
(3)启动导航功能
首先,要强调的是,nav2自带默认的机器人turtlebot3 waffle。
source opt/ros/foxy/setup.bash
ros2 launch nav2_bringup tb3_simulation_launch.py
rviz界面启动成功后,首先用按钮“2D Pose Estimate”设置机器人的初始位置,然后用按钮“Navigation2 Goal”设置机器人的目的位置,机器人即可开始导航。导航中可以实现边导航边定位的功能。
示意图如下所示:
关于ros2、turtlebot3和nav2的应用总结_第3张图片
gazebo界面
关于ros2、turtlebot3和nav2的应用总结_第4张图片
rviz界面
关于ros2、turtlebot3和nav2的应用总结_第5张图片
导航效果

四、gazebo和ros2的通信机制
(1)gazebo和ros2之间是通过gazebo中的plugins来通信的,plugins一般保存在/opt/ros/foxy/lib文件夹下。
电机与ros2对应的plugin是libgazebo_ros_diff_drive.so。
camera与ros2对应的plugin是libgazebo_ros_camera.so。
laserscan与ros2对应的plugin是libgazebo_ros_ray_sensor.so。
(2)libgazebo_ros_diff_drive.so原理
该插件相当于通信工具,接收nav2的cmd_vel话题,同时发送机器人的odom话题。
/opt/ros/foxy/share/gazebo_plugins/worlds/gazebo_ros_diff_drive_demo.world例程中使用了libgazebo_ros_diff_drive.so插件,并对插件中的话题cmd_vel、odom进行了重命名,代码如下:

<plugin name='diff_drive' filename='libgazebo_ros_diff_drive.so'>
        <ros>
             <namespace>/demo</namespace>
            <remapping>cmd_vel:=cmd_demo</remapping>
             <remapping>odom:=odom_demo</remapping>
        </ros>
</plugin>

五、nav2中turtlebot3的模型waffle.model修改
opt/ros/foxy/share/nav2_bringup/worlds/waffle.model。
该模型相当于开源机器人turtlebot3的turtlebot3_waffle,turtlebot3_world两个文件夹。
机器人turtlebot3的外观可以根据自己的需求进行修改,导航启动后,可以看见修改后的机器人外观,如下图所示:
waffle.model改进前、后的代码对比,参考blog 《waffle.model改进前、后的代码对比》,https://editor.csdn.net/md?articleId=108895466。

六、问题点记录
(1)ros2 foxy版本中
1.自带demo
gazebo_ros_diff_drive_demo.world启动后,小车可以正常控制。
gazebo_ros_camera_demo.world启动后,rqt无法查看到图像,但话题有图像数据,自己写的订阅节点,也无法订阅到图像。
gazebo_ros_ray_sensor_demo.world启动后,rviz2无法查看到激光点云,但话题有激光点云数据。
2.古月居机器人mobot
https://www.guyuehome.com/6926
rqt无法查看到图像,rviz2无法查看到激光点云,自己写的订阅节点,也无法订阅到图像。
(2)VM ros2 dashing版本中
1.自带demo
gazebo_ros_diff_drive_demo.world启动后,小车可以正常控制。
gazebo_ros_camera_demo.world启动后,点击Plugins/Configuration/Dynamic Reconfigure, Plugins/Topics/Message Publisher,rqt即可查看到图像。
2.古月居机器人mobot
https://www.guyuehome.com/6926
点击Plugins/Configuration/Dynamic Reconfigure,rqt可以查看到图像。
Fixed Frame设为odom,Add加载/scan话题,rviz2可以查看到激光点云。
自己写的订阅节点,也可以订阅到图像,但图像有异常,异常图像如下所示:
关于ros2、turtlebot3和nav2的应用总结_第6张图片

你可能感兴趣的:(ros2,自动驾驶)