• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简

人工智能 布剪刀石头 1402次浏览 0个评论

前言

本文目标,史上最全,入门最简。工程链接下载地址 这一节参考书上的例子,用gazobo仿真开源项目turtlebot3,我的环境是ubuntu16.04,kinetic版本ros。

(1)创建工作区以及包

创建wanderbot_ws工作区

mkdir -p ~/wanderbot_ws/src
cd ~/wanderbot_ws/src
catkin_init_workspace

 

创建wanderbot包

cd ~/wanderbot_ws/src
catkin_create_pkg wanderbot rospy geometry_msgs sensor_msgs

  wanderbot:包名 rospy:ros的python支持库 geometry_msgs sensor_msgs:依赖的消息  

(2)安装过程

安装turtlebot3以及仿真环境

cd wanderbot_ws/src
git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
git clone https://github.com/ROBOTIS-GIT/turtlebot3.git
git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git

  提示:如果下载速度太慢可以下载我的csdn包,然后把相对应的文件拖进去。 工程链接下载地址  

安装gmapping包

gampping必装不然后面slam自助导航会报错,如果你不想实现slam可以跳过这一步。这里给出两种方法安装。 从源码安装的方法:

cd wanderbot_ws/src
git clone https://github.com/ros-perception/openslam_gmapping.git
git clone https://github.com/ros-perception/slam_gmapping.git
git clone https://github.com/ros-planning/navigation.git
git clone https://github.com/ros/geometry2.git
git clone https://github.com/ros-planning/navigation_msgs.git

  直接安装的方法:

sudo apt-get install ros-kinetic-gmapping

  这里我选择的是从源码安装,直接安装的方法我电脑定位不了软件包,然后更新了我的软件库之后有关ros的几个源sudo apt-get update极慢,是超级超级超级超级爆炸慢,给我整吐了。  

编译

cd ~/wanderbot_ws
catkin_make

  这里如果你选择安装了gampping包而且是从源码安装的,不出意外编译完了之后一片大红,哈哈哈哈开心吗。   不过问题不大,都是编译器版本的小问题。   首先修改CMakeLists.txt:  

vi ~/wanderbot_ws/src/CMakeLists.txt

  添加这句话:  

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  -std=c++0x")

  如图第六行   ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简   然后不出意外还有报错【error】‘isnan’ was not declared in this scope。   我这里是~/wanderbot_ws/src/turtlebot3_simulations/turtlebot3_fake/src下的turtlebot3_fake.cpp这个文件报错,进去之后右键选择gedit打开,ctrl+f查找isnan。然后在前面加上std::。   ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简   修改完后重新编译  

cd ~/wanderbot_ws
catkin_make
rosdep install --from-paths src -i -y
source ~/wanderbot_ws/devel/setup.bash

 

3)仿真

准备

把模型拷贝到gazebo中: 下面两个二选一:   仿真burger:

mkdir -p ~/.gazebo/models/
cp -r  ~/wanderbot_ws/src/turtlebot3_simulations/turtlebot3_gazebo/models/turtlebot3_burger ~/.gazebo/models/
echo "export TURTLEBOT3_MODEL=burger" >> ~/.bashrc
echo "source ~/wanderbot_ws/devel/setup.bash" >>~/.bashrc
source ~/.bashrc

 

启动仿真

启动仿真环境:

roslaunch turtlebot3_gazebo turtlebot3_world.launch

  ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简  

(4)脚本控制

准备过程:

cd ~/wanderbot_ws/src/wanderbot/src
vi range_ahead.py
vi red_light_green_light.py
vi wander.py
chmod 777 range_ahead.py
chmod 777 red_light_green_light.py
chmod 777 wander.py

  粘贴下面代码进去。 红灯倒车绿灯前进脚本:red_light_green_light.py  

#!/usr/bin/env python
# coding = utf-8
import rospy
from geometry_msgs.msg import Twist
 
cmd_vel_pub=rospy.Publisher('cmd_vel',Twist,queue_size=1)
rospy.init_node('red_light_green_light')
 
red_light_twist=Twist()
green_light_twist=Twist()
deriving_forward=False
 
 
green_light_twist.linear.x=0.5 #绿灯前进
red_light_twist.linear.x=-0.5 #红灯后退
light_change_time=rospy.Time.now()+rospy.Duration(3)
rate=rospy.Rate(10)
 
while not rospy.is_shutdown():
    if deriving_forward :
        cmd_vel_pub.publish(green_light_twist)
    else:
        cmd_vel_pub.publish(red_light_twist)
        
    if light_change_time < rospy.Time.now():
        deriving_forward= not deriving_forward
        light_change_time= rospy.Time.now()+rospy.Duration(3)
    rate.sleep()


显示前方距离脚本:range_ahead.py  

#!/usr/bin/env python
# coding = utf-8
import rospy
from sensor_msgs.msg import LaserScan
 

def scan_callback(msg):
  range_ahead = msg.ranges[len(msg.ranges)/2]
  print "range ahead: %0.1f" % range_ahead

 
rospy.init_node('range_ahead')
scan_sub = rospy.Subscriber('scan', LaserScan, scan_callback)
rospy.spin()

自动避障脚本:wander.py  

#!/usr/bin/env python
# coding = utf-8
import rospy
from geometry_msgs.msg import Twist
from sensor_msgs.msg import LaserScan

def scan_callback(msg):
	global range_ahead 
	range_ahead = msg.ranges[len(msg.ranges)/2]
	print(range_ahead)

range_ahead = 0	
rospy.init_node('pub_speed')
scan_sub = rospy.Subscriber('scan',LaserScan,scan_callback)
cmd_vel_pub=rospy.Publisher('cmd_vel',Twist,queue_size=1)
speed = Twist()
rate = rospy.Rate(10)
mode = 0

while not rospy.is_shutdown():
	if range_ahead>1:
		speed.linear.x = -0.5
		speed.angular.z = 0
		cmd_vel_pub.publish(speed)
	elif range_ahead<0.5:
                speed.linear.x = 0.5
                speed.angular.z = 0
                cmd_vel_pub.publish(speed)
	else:

		speed.linear.x=0
		speed.angular.z=0.5
		cmd_vel_pub.publish(speed)		
	rate.sleep()	

 

运行红绿灯脚本:

rosrun wanderbot red_light_green_light.py

  ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简 ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简   可以看到小车一前一后的运动。  

检查现在发布的话题

rostopic list

  ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简   可以看到由cmd_vel话题来控制小车的速度。  

查看被声明的话题

 

rostopic info cmd_vel

  ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简   可以看到发布这个话题的发布者就是我们写的控制脚本,接受者是gazebo仿真。

运行测距脚本:

rosrun wanderbot range_ahead.py

  ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简  

运行自动避障脚本:

 

rosrun wanderbot wander.py

  他将根据雷达的距离值,自主避障。  

(5)自主导航

ctrl c关闭之前的全部终端。

启动环境地图

roslaunch turtlebot3_gazebo turtlebot3_world.launch

  ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简  

启动激光雷达自主避障

roslaunch turtlebot3_gazebo turtlebot3_simulation.launch

  ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简 ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简  

启动rviz可视化

roslaunch turtlebot3_gazebo turtlebot3_gazebo_rviz.launch

  ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简  

(6)slam建图导航

ctrl c关闭之前的全部终端。

启动环境地图

roslaunch turtlebot3_gazebo turtlebot3_world.launch

  ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简  

启动键盘控制

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

  ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简   可以通过wxad控制前后前进速度,顺时针逆时针旋转速度,s停止

开启激光雷达壁障

 

roslaunch turtlebot3_slam turtlebot3_slam.launch

  ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简  

启动slam建图

roslaunch turtlebot3_slam turtlebot3_slam.launch

  ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简   这时候打开rviz和键盘控制的终端窗口,确保你的鼠标光标在键盘控制的终端里。   ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简   然后通过wasdx这几个按键控制把地图建立完整。   ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简   感觉整个地图完整了即可。   ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简  

保存地图

rosrun map_server map_saver -f ~/map

  这将地图存在了~/目录下面   ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简   图中的map.yaml文件和map.pgm文件。  

利用建好的地图导航

除了gazebo关闭其他的终端然后打开rviz:  

roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map.yaml

  ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简   这时候可以看到雷达扫面的边界和地图的边界有偏差。  

利用2D pose Estimate修改位置

  ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简   鼠标点击地图上的位置就是你的初始位置,箭头指向就是你的机器人初始朝向。 修改成如下图所示即可:   ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简  

利用2D Nav Goal导航

  ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简   ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简  

(7)打开其他仿真场景

打开简单的仿真器场景:

roslaunch turtlebot3_fake turtlebot3_fake.launch 

  ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简   启动空世界地图:

roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch

  ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简   启动家庭环境地图:

cp -r  ~/catkin_ws/src/turtlebot3_simulations/turtlebot3_gazebo/models/turtlebot3_house ~/.gazebo/models/
roslaunch turtlebot3_gazebo turtlebot3_house.launch

  第一次加载可能有点慢,如果长时间加载不出来可以试试这个方法:  

在.gazebo文件下新建model文件夹,.gazebo文件隐藏在home下,ctrl+h可以看到,然后下载这个链接的包https://bitbucket.org/osrf/gazebo_models/downloads/,解压到model下,然后就ok了,再打开gazebo 原文链接:https://blog.csdn.net/puqian13/article/details/90635885

  ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简  

总结

疫情原因毕设无法回校在硬件上做,所以选择了仿真,希望能给大家提供一点帮助,记录下自己的学习也好方便查阅。《ros机器人编程实践》这本书挺适合入门的,但是他用的是ubuntu14.04好像,ros版本是indigo在许多使用上有很大的差异,而且这本书是外文翻译过来的,里面太多错了。。。对着书上的步骤一步一步做是不可能实现的,这也是很不友好的地方。

参考

Ubuntu16.04+Ros Kinetic+TurtleBot3仿真搭建教程 在Ubuntu16.04 + ROS kinetic环境下安装TurtleBot3 Ubuntu16.04+Ros Kinetic+TurtleBot3仿真搭建教程 参考书籍:《ros机器人编程实践》

可能出现的问题以及解决方案

问题一

从我的csdn资源下载好工程后,在工作区下catkin_make报错:

/home/xmy/wanderbot_ws/src/navigation/map_server/src/image_loader.cpp:43:27: fatal error: SDL/SDL_image.h: No such file or directory compilation terminated.

 

解决方案:

百度查了下SDL是Ubuntu的库,所以新装的系统可能没下载这个。 参考:https://blog.csdn.net/qq_21334991/article/details/78709414  

sudo apt-get install libsdl1.2-dev

    安装附加依赖:

sudo apt-get install libsdl-image1.2-dev

sudo apt-get install libsdl-mixer1.2-dev

sudo apt-get install libsdl-ttf2.0-dev

sudo apt-get install libsdl-gfx1.2-dev

 

问题二

如果最开始几步git clone下载github东西速度太慢可以下载我的csdn的资源,然后把相对应的包拷贝进去。   发现一个很奇怪的问题,因为昨天装东西把电脑弄死机了,重启ubuntu没了ui界面所以重装了ubuntu,然后正好根据自己写的这篇博客全来过了一遍,下载自己的csdn包,然后在工作区catkin_make发现报了很多错,说我的ros少了很多类似SDL/SDL_image.h的头文件,然后我查看安装ros时候给的安装项目提示明明都有这些包呀。所以没办法只能再从git上下载来安装过,然后github下载属实太慢了几k每秒。。。所以直接从csdn下载资源这就很快,然后把缺少的包拖了过来。


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明ros机器人编程实践(7)- turtlebot3仿真与脚本控制!!!史上最全,入门最简
喜欢 (0)

您必须 登录 才能发表评论!

加载中……