ROS上利用turtlebot3对navigation和gmapping进行仿真

ROS上利用turtlebot3对navigation和gmapping进行仿真

对于网上各种花式仿真包,我只能说这些要么没有对新版ros进行维护,要么直接源码就是错误的。最后在苦苦寻找下找到了一个维护比较积极的仿真包:turtlebot3(好像和ros官方有很好的关系,支持度很不错)
里面已经包含了一些仿真地图,和已经写好的机器人的模型。 我觉得这是对新手最友好的了。
环境:ROS melodic

第一步:下载安装turtlebot3:

cd ~/catkin_ws/src/
git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
cd ~/catkin_ws && catkin_make

也可以手动到github上下载解压到自己的工作空间的src目录下。

官方提供了3中形态:burger, waffle, waffle_pi
我们仿真就挑个waffle来使用就行了。(你非要挑其他的也可以用。这里随意都行)

第二步:把turtlebot的包添加到环境支持里面:

打开终端,先运行这一句话(当然你也可以在/home目录下修改bashrc文件一劳永逸)

export TURTLEBOT3_MODEL=waffle

然后运行gazebo,对整个仿真建立地图数据:

roslaunch turtlebot3_gazebo turtlebot3_world.launch

会自动打开gazebo,并会加载一张地图:
在这里插入图片描述

第三步:在仿真地图数据中,跑slam_gmapping,对仿真地图数据建图:

export TURTLEBOT3_MODEL=waffle
roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping

运行之后,会自动打开rviz,并且开始建图了:
在这里插入图片描述
可以在上面看到机器人的形状和位置这些。

第四步:运行teleop节点或者自动移动节点(二选一),让机器人到处跑,来完成建图:

teleop节点:

export TURTLEBOT3_MODEL=waffle
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

在这里插入图片描述
可以利用wasdx键对机器人进行移动。并且终端上会提示你每个键的作用。

自动移动节点:

export TURTLEBOT3_MODEL=waffle
roslaunch turtlebot3_gazebo turtlebot3_simulation.launch

运行之后机器人开始自己乱动了hhh。

同时可以发现 gazebo里的机器人和rviz里的机器人都在同步运动,同时建图的完成度也在rviz里直观可见。
在这里插入图片描述
等建图完成得差不多的时候(每个障碍都被记录下来),运行map_server保存地图。

rosrun map_server map_saver -f ~/Desktop/map

其中:-f表示我们的希望输入保存的路径,保存完有两个文件map.pgmmap.yaml,yaml里面调用了map.pgm

在这里插入图片描述
在这里插入图片描述

第五步:在建好的地图之上,跑navigation。

export TURTLEBOT3_MODEL=waffle
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=(地图的路径)

利用rviz中的 2D Pose Estimate按钮,调整机器人位姿信息,并将其雷达信息与地图信息对其,然后就可以利用2D Nav Goal来进行导航了。
在这里插入图片描述
rviz和gazebo里的机器人都在一起运动。

至此仿真完成。
注意事项:运行navigation节点的时候,要保持gazebo的打开状态,不然就会导致没有map话题,最后在rviz里就会报错。

参考文章:ROS从入门到放弃——用TurtleBot3做Navigation

### TurtleBot3Navigation2集成及使用 #### 集成背景 为了使机器人能够在未知环境中自主导航,通常会采用SLAM(Simultaneous Localization And Mapping)技术来构建地图并定位自身位置。对于已知环境,则可以直接加载预先创建的地图文件,并基于此实现路径规划避障功能[^1]。 #### 安装依赖包 确保安装了必要的ROS 2软件包,这些软件包包含了支持TurtleBot3以及Navigation2所需的一切工具服务: ```bash sudo apt update && sudo apt install ros-humble-navigation2 \ ros-humble-nav2-bringup \ ros-humble-tb3-description \ ros-humble-slam-toolbox ``` #### 启动基本设置 启动Gazebo仿真器中的世界模型,并初始化TurtleBot3的相关配置: ```bash source /opt/ros/humble/setup.bash export TURTLEBOT3_MODEL=waffle_pi ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py ``` #### 加载静态地图 如果已经有一个现成的地图文件(例如`my_map.yaml`),可以通过以下命令将其加载到内存中供后续操作使用: ```bash ros2 launch nav2_bringup bringup_launch.py map:=<path_to_your_map>/my_map.yaml use_sim_time:=True params_file:=<path_to_params>/nav2_params.yaml ``` 此处需要注意的是参数文件(`params_file`)的选择应该匹配具体的硬件平台特性,比如传感器布局、运动学约束条件等[^4]。 #### 实施自动导航任务 当一切准备就绪之后,就可以向目标点发送动作请求以执行移动指令了。这里给出一段Python脚本作为示范,用于设定目的地坐标(x,y),并通过客户端接口提交给导航栈处理: ```python import rclpy from geometry_msgs.msg import PoseStamped from action_tutorials_interfaces.action import NavigateToPose def send_goal(client_node, goal_pose): client = ActionClient(client_node, NavigateToPose, &#39;navigate_to_pose&#39;) while not client.wait_for_server(timeout_sec=1.0): print(&#39;Waiting for server...&#39;) goal_msg = NavigateToPose.Goal() goal_msg.pose.header.frame_id = "map" goal_msg.pose.pose.position.x = float(goal_pose[&#39;x&#39;]) goal_msg.pose.pose.position.y = float(goal_pose[&#39;y&#39;]) future = client.send_goal_async(goal_msg) rclpy.init(args=None) node = rclpy.create_node(&#39;simple_navigation_client&#39;) try: target_position = {&#39;x&#39;: 1.0, &#39;y&#39;: -2.0} send_goal(node, target_position) except Exception as e: node.get_logger().error(f&#39;Failed to reach goal position: {e}&#39;) finally: node.destroy_node() rclpy.shutdown() ``` 这段代码展示了如何通过Action API发起一次前往指定坐标的航行请求,在实际应用当中还可以进一步扩展逻辑以便更好地适应复杂场景下的需求变化[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值