前言

巡线设计

用自定义的图片设计gazebo的地板

首先我们需要设计一个gazebo的地板,这里感谢前辈的回答:参考问答

第一步:在home目录下ctrl+h显示隐藏文件

第二步:在.gazebo文件夹创建如下文件夹

mkdir ~/.gazebo/models/my_ground_plane

mkdir -p ~/.gazebo/models/my_ground_plane/materials/textures

mkdir -p ~/.gazebo/models/my_ground_plane/materials/scripts

第三步:创建材料文件

cd ~/.gazebo/models/my_ground_plane/materials/scripts

vi my_ground_plane.material

my_ground_plane.material文件如下:

material MyGroundPlane/Image

{

receive_shadows on

technique

{

pass

{

ambient 0.5 0.5 0.5 1.0

texture_unit

{

texture MyImage.png

}

}

}

}

第四步:在textures下存我们想要用的地板图片MyImage.png

如图,将它放到~/.gazebo/models/my_ground_plane/materials/textures下面

可以使用命令:

cp 你的图片路径/MyImage.png ~/.gazebo/models/my_ground_plane/materials/textures/

第五步:在my_ground_plane文件夹下,创建文件model.sdf

cd ~/.gazebo/models/my_ground_plane

vi model.sdf

model.sdf如下:

true

0 0 1

15 15

100

50

false

0 0 1

15 15

model://my_ground_plane/materials/scripts

model://my_ground_plane/materials/textures/

MyGroundPlane/Image

第六步:在my_ground_plane文件夹下,创建文件model.config,内容如下:

My Ground Plane

1.0

model.sdf

My textured ground plane.

在gazebo中导入自己的地板模型

打开gazebo:

roslaunch turtlebot_gazebo turtlebot_world.launch

在另一个终端输入下面命令打开rviz:

roslaunch turtlebot_rviz_launchers view_robot.launch --screen

点击gazebo左上角的insert插入刚才建的模型:

选择My Ground Plane:

左键点击一下然后移动鼠标拖进去:

右键models列表里删除除了自己建的地板和机器人以外的其他家具:

用gazebo的移动工具,将机器人放到线上:

用gazebo的旋转工具将机器人的摄像机对准黄线:

旋转蓝色那条,让机器人绕z轴旋转,并对准:

写脚本控制机器人巡线

创建ros工作区间

mkdir -p ~/turtlebot_ws/src

cd ~/turtlebot_ws

catkin_init_workspace

cd src

catkin_create_pkg turtlebot1 rospy geometry_msgs sensor_msgs

cd ..

catkin_make

source ./devel/setup.bash

写过滤黄线的脚本

这里使用hsv提取黄线

先百度搜索黄色的hsv最大最小值:

在turtlebot1包的src下写过滤脚本follower_color_filter.py

cd src/turtlebot1/src

vi follower_color_filter.py

rosrun turtlebot1 follower_color_filter.py

follower_color_filter.py如下:

#!/usr/bin/env python

# BEGIN ALL

import rospy, cv2, cv_bridge, numpy

from sensor_msgs.msg import Image

class Follower:

def __init__(self):

self.bridge = cv_bridge.CvBridge()

cv2.namedWindow("window", 1)

self.image_sub = rospy.Subscriber('camera/rgb/image_raw',

Image, self.image_callback)

def image_callback(self, msg):

# BEGIN BRIDGE

image = self.bridge.imgmsg_to_cv2(msg)

cv2.imshow("ori", image )

# END BRIDGE

# BEGIN HSV

hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

cv2.imshow("hsv", hsv )

# END HSV

# BEGIN FILTER

lower_yellow = numpy.array([ 26, 43, 46])

upper_yellow = numpy.array([34, 255, 255])

mask = cv2.inRange(hsv, lower_yellow, upper_yellow)

# END FILTER

masked = cv2.bitwise_and(image, image, mask=mask)

cv2.imshow("window2", mask )

cv2.waitKey(3)

rospy.init_node('follower')

follower = Follower()

rospy.spin()

# END ALL

运行效果:

可以看到very nice!!!

写巡线脚本

vi follower_line.py

rosrun turtlebot1 follower_line.py

#!/usr/bin/env python

# BEGIN ALL

import rospy, cv2, cv_bridge, numpy

from sensor_msgs.msg import Image

from geometry_msgs.msg import Twist

class Follower:

def __init__(self):

self.bridge = cv_bridge.CvBridge()

cv2.namedWindow("window", 1)

self.image_sub = rospy.Subscriber('camera/rgb/image_raw',

Image, self.image_callback)

self.cmd_vel_pub = rospy.Publisher('cmd_vel_mux/input/teleop',

Twist, queue_size=1)

self.twist = Twist()

def image_callback(self, msg):

image = self.bridge.imgmsg_to_cv2(msg,desired_encoding='bgr8')

hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

lower_yellow = numpy.array([ 26, 43, 46])

upper_yellow = numpy.array([34, 255, 255])

mask = cv2.inRange(hsv, lower_yellow, upper_yellow)

h, w, d = image.shape

search_top = 3*h/4

search_bot = 3*h/4 + 20

mask[0:search_top, 0:w] = 0

mask[search_bot:h, 0:w] = 0

M = cv2.moments(mask)

if M['m00'] > 0:

cx = int(M['m10']/M['m00'])

cy = int(M['m01']/M['m00'])

cv2.circle(image, (cx, cy), 20, (0,0,255), -1)

# BEGIN CONTROL

err = cx - w/2

self.twist.linear.x = 0.2

self.twist.angular.z = -float(err) / 100

self.cmd_vel_pub.publish(self.twist)

# END CONTROL

cv2.imshow("window", image)

cv2.waitKey(3)

rospy.init_node('follower')

follower = Follower()

rospy.spin()

# END ALL

运行脚本:

总结

挺好玩的吧,可以仿真下巡线的算法哈哈哈哈,做过智能车的小伙伴应该不陌生哦~

enjoy it~

机器人编程按时巡线_ros机器人编程实践(12.2)- 用turtlebot仿真巡线机器人相关推荐

  1. 厦门诺宝机器人_诺宝机器人编程软件下载-诺宝rc编程软件11.2 官方最新版-东坡下载...

    诺宝RC编程软件是一款哈尔滨工业大学深圳机器人教育中心研发的图形化编程与C语言相结合的编程软件,可以用直观的流程图编程,也可以用C代码编写更为复杂高级的机器人程序.提供了能模拟机器人运行程序的可修改. ...

  2. 这款折纸机器人玩具,可以帮助孩子学习编程和Robot知识

    据了解,8岁以上的孩子通常需要30分钟组装一台Kamigami机器人. Dash Robotics公司的折纸机器人系列Kamigami广受欢迎,其以工具包的形式为各年龄层的孩子们提供更多关于STEM. ...

  3. 机器人编程趣味实践14-机器人三维仿真(Gazebo+TurtleBot3)

    之前,介绍了节点.主题.服务和行动等基本概念,以及rqt和rosbag2等工具. 采用了官方改版的二维环境,那么现在玩耍一下更为逼真的三维仿真环境吧. 仿真软件Gazebo 机器人TurtleBot3 ...

  4. 遨博Aubo-i10机器人正逆运动学公式推导及其C++编程实现

    最近在项目中用到了Aubo-i10机器人,遨博机器人跟UR机器人有很多共同点,都是模块化的协作机器人,它们构形相同.但是这两家公司的机器人还是有区别的,比如Aubo机器人的第三个关节是反着转的,跟UR ...

  5. 机器人操作系统ROS(6)动作编程

    注:在 catkin\_ws 工作空间下的功能包earning\_communication 下继续实现通信编程,参考上节-服务编程 一.动作通讯模型 二.动作编程实现 1. 自定义动作文件actio ...

  6. 青灯教育 python录播课_9款线上少儿编程课测评合集:录播课、直播课,最后2家的老师难选到飙泪!...

    [写在前面]如果大家在给孩子选择英语.数学.编程.语文等课上有疑问,欢迎加我个人微信:18069192768 详谈,为方便我及时通过好友申请,请备注"知乎家长". 少儿编程教育是近 ...

  7. python线上编程-线上的编程课哪家好

    深圳小码精灵编程培训 让孩子爱上自主学习,成为未来世界的佼佼者. 快速咨询 学习少儿编程有什么好处? 1.学习编程有利于培养良好的思维方式,早期接触编程可以帮助孩子们养成良好的思维方式.因为编程学习主 ...

  8. java k线绘制,用Java绘制K线图[Java编程]

    赞助商链接 本文"用Java绘制K线图[Java编程]"是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具 ...

  9. springboot实现企业微信机器人自动按时播报天气

    springboot实现企业微信机器人自动按时播报天气 第一步搭建项目...这个没有什么好说的 配置: <dependency><groupId>org.apache.http ...

最新文章

  1. Mac下使用crontab来实现定时任务
  2. SAP医药医疗行业解决方案
  3. python解决四舍五入问题
  4. C++实现huffman哈夫曼编码的算法(附完整源码)
  5. HashMap的实现与优化
  6. matlab求半径范围内的点,matlab怎么快速搜索距离某点球形范围内的所有点
  7. vue开源Element UI表单设计及代码生成器
  8. spark sortBy sortByKey实战详解
  9. BZOJ2754 [SCOI2012]喵星球上的点名
  10. 图形学中常用计算几何总结
  11. Flux、Mono、Reactor 实战(史上最全)
  12. 手机键盘(简单模拟)
  13. C语言递归之苹果分盘问题
  14. LVS负载均衡DR模式安装和配置过程详解
  15. Excel学习日记:L20-excel的12个小技巧
  16. 从CSDN博客到出书,我的新书《SQL编程思想》是这样诞生的
  17. JSON对象数组去重
  18. Bootstrap系列之卡片(Cards)
  19. 中国工业转向架炉膛市场深度研究分析报告
  20. Codeforces Round #252 (Div. 2)-C,D

热门文章

  1. 信息系统项目管理师-项目沟通和干系人管理考点笔记
  2. 2023软件测试常见面试题面试宝典,刷完这些一周拿6个offer
  3. 修改浏览器UA的作用汇总
  4. veristand c语言编程,VeriStand2017版软件下载
  5. 分布式事务——Saga实现思路
  6. (自适应手机端)响应式高端摄影网站pbootcms模板 黑色酷炫数码摄影网站源码下载
  7. c语言编程 生理周期的程序,C语言程序设计100例之(9):生理周期
  8. matlab gui界面边框表头如何设置,MATLAB GUI制作快速入门
  9. 【Java】日期Calendar类关于星期的问题
  10. hades 冥府伴偶