Chapter4:机器人仿真
创始人
2024-05-23 19:25:46
0

ROS1{\rm ROS1}ROS1的基础及应用,基于古月的课,各位可以去看,基于hawkbot{\rm hawkbot}hawkbot机器人进行实际操作。
ROS{\rm ROS}ROS版本:ROS1{\rm ROS1}ROS1的Melodic{\rm Melodic}Melodic;实际机器人:Hawkbot{\rm Hawkbot}Hawkbot;



1.机器人URDF模型优化

  1. URDF{\rm URDF}URDF模型进化版本–xacro{\rm xacro}xacro模型文件

    1. 精简模型代码
      • 创建宏定义;
      • 文件包含;
    2. 提供可编程接口
      • 常量;
      • 变量;
      • 数学计算;
      • 条件语句;
  2. 常量定义

    # 常量定义
    # 常量使用
    
    
  3. 数学计算

    # 数学计算
    
    
  4. 宏定义

    # 宏定义
    
    ...
    # 宏调用
    
    
  5. 文件包含

    # 文件包含
    
    

2.使用xacro建立模型

# 1.在urdf文件夹下建立xacro文件夹
mkdir xacro# 在xacro目录下新建mbot_base.xacro和mbot.xacro文件
# 文件内容见下个代码块,请勿直接复制粘贴
touch mbot_base.xacro mbot.xacro# 2.新建display_mbot_base_xacro.launch文件
# 文件内容见下个代码块,请勿直接复制粘贴
touch display_mbot_base_xacro.launch# 3.模型显示
# 法1:将xacro文件转换成URDF文件显示
rosrun xacro xacro.py mbot.xacro > mbot.urdf# 法2:直接调用xacro文件解析器,在.launch文件中写入
# 4.启动.launch文件
roslaunch mbot_description display_mbot_base_xacro.launch
# mbot_base.xacro文件内容

         

# mbot.xacro文件内容


# display_mbot_base_xacro.launch文件内容

3.ArbotiX+rviz功能仿真

  1. ArbotiX{\rm ArbotiX}ArbotiX简介

    • 一款控制电机、舵机的硬件控制板;
    • 提供了相应的ROS{\rm ROS}ROS功能包;
    • 提供了一个差速控制器,通过接收速度控制指令,更新机器人的里程计状态;
  2. ArbotiX{\rm ArbotiX}ArbotiX安装

    # ros相关信息:Ubuntu 18.04+melodic
    # 1.下载ArbotiX功能包
    cd willard_ws/src/
    git clone -b indigo-devel
    https://github.com/vanadiumlabs/arbotix_ros.git# 2.工作空间下编译
    cd ~/willard_ws/
    catkin_make
  3. 配置ArbotiX{\rm ArbotiX}ArbotiX控制器

    # 1.创建launch文件
    cd willard_ws/src/mbot_description/launch/xacro/# 文件内容见下个代码块,请勿直接复制粘贴
    touch arbotix_mbot_with_camera_xacro.launch# 2.创建配置文件
    cd willard_ws/src/mbot_description/config/# 文件内容见下个代码块,请勿直接复制粘贴
    touch fake_mbot_arbotix.yaml# 3.启动仿真器
    roslaunch mbot_description arbotix_mbot_with_camera_xacro.launch# 4.键盘控制相关
    # 4.1 新建mbot_teleop功能包
    catkin_create_pkg willard_teleop roscpp std_msgs rospy# 4.2 在willard_teleop下创建launch、scripts文件夹
    mkdir launch scripts# 4.3 在/scripts文件夹下创建.py文件
    # 文件内容见下个代码块,请勿直接复制粘贴
    touch willard_teleop.py# 4.4 给.py文件添加可执行权限
    chmod 777 willard_teleop.py# 4.5 新建.launch文件
    # 文件内容见下个代码块,请勿直接复制粘贴
    touch willard_teleop.launch # 5.启动键盘控制
    roslaunch willard_teleop willard_teleop.launch
    # arbotix_mbot_with_camera_xacro.launch文件内容
    
    # fake_mbot_arbotix.yaml文件内容
    controllers: {base_controller: {type: diff_controller, base_frame_id: base_footprint, base_width: 0.26, ticks_meter: 4100, Kp: 12, Kd: 12, Ki: 0, Ko: 50, accel_limit: 1.0 }
    }
    # willard_teleop.py文件内容
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-import rospy
    from geometry_msgs.msg import Twist
    import sys, select, termios, ttymsg = """
    Control mbot!
    ---------------------------
    Moving around:u    i    oj    k    lm    ,    .q/z : increase/decrease max speeds by 10%
    w/x : increase/decrease only linear speed by 10%
    e/c : increase/decrease only angular speed by 10%
    space key, k : force stop
    anything else : stop smoothlyCTRL-C to quit
    """moveBindings = {'i':(1,0),'o':(1,-1),'j':(0,1),'l':(0,-1),'u':(1,1),',':(-1,0),'.':(-1,1),'m':(-1,-1),}speedBindings={'q':(1.1,1.1),'z':(.9,.9),'w':(1.1,1),'x':(.9,1),'e':(1,1.1),'c':(1,.9),}def getKey():tty.setraw(sys.stdin.fileno())rlist, _, _ = select.select([sys.stdin], [], [], 0.1)if rlist:key = sys.stdin.read(1)else:key = ''termios.tcsetattr(sys.stdin, termios.TCSADRAIN, settings)return keyspeed = .2
    turn = 1def vels(speed,turn):return "currently:\tspeed %s\tturn %s " % (speed,turn)if __name__=="__main__":settings = termios.tcgetattr(sys.stdin)rospy.init_node('mbot_teleop')pub = rospy.Publisher('/cmd_vel', Twist, queue_size=5)x = 0th = 0status = 0count = 0acc = 0.1target_speed = 0target_turn = 0control_speed = 0control_turn = 0try:print msgprint vels(speed,turn)while(1):key = getKey()# 运动控制方向键(1:正方向,-1负方向)if key in moveBindings.keys():x = moveBindings[key][0]th = moveBindings[key][1]count = 0# 速度修改键elif key in speedBindings.keys():speed = speed * speedBindings[key][0]  # 线速度增加0.1倍turn = turn * speedBindings[key][1]    # 角速度增加0.1倍count = 0print vels(speed,turn)if (status == 14):print msgstatus = (status + 1) % 15# 停止键elif key == ' ' or key == 'k' :x = 0th = 0control_speed = 0control_turn = 0else:count = count + 1if count > 4:x = 0th = 0if (key == '\x03'):break# 目标速度=速度值*方向值target_speed = speed * xtarget_turn = turn * th# 速度限位,防止速度增减过快if target_speed > control_speed:control_speed = min( target_speed, control_speed + 0.02 )elif target_speed < control_speed:control_speed = max( target_speed, control_speed - 0.02 )else:control_speed = target_speedif target_turn > control_turn:control_turn = min( target_turn, control_turn + 0.1 )elif target_turn < control_turn:control_turn = max( target_turn, control_turn - 0.1 )else:control_turn = target_turn# 创建并发布twist消息twist = Twist()twist.linear.x = control_speed; twist.linear.y = 0; twist.linear.z = 0twist.angular.x = 0; twist.angular.y = 0; twist.angular.z = control_turnpub.publish(twist)except:print efinally:twist = Twist()twist.linear.x = 0; twist.linear.y = 0; twist.linear.z = 0twist.angular.x = 0; twist.angular.y = 0; twist.angular.z = 0pub.publish(twist)termios.tcsetattr(sys.stdin, termios.TCSADRAIN, settings)
    # willard_teleop.launch
    
    
  4. 仿真效果图

    1

4.Gazebo物理仿真环境搭建

4.1 ros_control
  1. ros_control{\rm ros\_control}ros_control简介

    • ROS{\rm ROS}ROS为开发者提供的机器人控制中间件;
    • 包含一系列控制器接口、传动装置接口、硬件接口、控制器工具等;
    • 可以帮助机器人应用功能包快速落地,提高开发效率;
  2. ros_control{\rm ros\_control}ros_control框架

    2

    3

    • 控制器管理器:提供一种通用的接口来管理不同的控制器;
    • 控制器:读取硬件状态,发布控制命令,完成每个joint{\rm joint}joint的控制;
    • 硬件资源:为上下两层提供硬件资源的接口;
    • 机器人硬件抽象:机器人硬件抽象和硬件资源直接打交道,通过write{\rm write}write和read{\rm read}read方法完成硬件操作;
    • 真实机器人:执行接收到的命令;

    4

  3. 控制器(controllers)({\rm controllers})(controllers)介绍

    5

4.2 仿真步骤
  1. 配置机器人模型;
  2. 创建仿真环境;
  3. 开始仿真;
4.2.1 配置物理仿真模型
  • STEP1{\rm STEP1}STEP1:为link{\rm link}link添加惯性参数和碰撞属性;
  • STEP2{\rm STEP2}STEP2:为link{\rm link}link添加gazebo{\rm gazebo}gazebo标签;
  • STEP3{\rm STEP3}STEP3:为joint{\rm joint}joint添加传动装置;
  • STEP4{\rm STEP4}STEP4:添加gazebo{\rm gazebo}gazebo控制器插件;
    • :机器人的命名空间;
    • :左右轮转动的关节joint{\rm joint}joint;
    • :机器人模型的相关尺寸,在计算差速参数时需要使用;
    • :控制器订阅的速度控制指令,生成全局命名时需要结合中设置的命名空间;
    • :里程计数据的参考坐标系,ROS{\rm ROS}ROS中一般命名为odom{\rm odom}odom;

物理仿真模型配置实例:

# mbot_base_gazebo.xacro文件内容
    Gazebo/Graytransmission_interface/SimpleTransmissionhardware_interface/VelocityJointInterfacehardware_interface/VelocityJointInterface1      Gazebo/Blackfalse           Gazebo/BlueDebugtrue/1truetrue100.0trueleft_wheel_jointright_wheel_joint${wheel_joint_y*2}${2*wheel_radius}1301.8cmd_velodom odom base_footprint 
4.2.2 创建仿真环境
# view_mbot_gazebo_empty_world.launch文件内容   
# 1.启动空环境下的.launch文件
roslaunch mbot_gazebo view_mbot_gazebo_empty_world.launch # 2.启动键盘控制节点
roslaunch mbot_teleop mbot_teleop.launch# 3.添加环境模型
# 3.1 直接添加,把模型保存到~/.gazebo/models/下
cd ~/.gazebo/models/
git clone https://github.com/osrf/gazebo_models.git# 添加好模型后,保存为.world文件# 3.2 使用Buiding Editor,在gazebo的edit下
# 4.把仿真模型路径写入.launch文件,即可加载

效果如下图:

6

7

8

4.3 传感器仿真
4.3.1 摄像头仿真
  • 标签:描述传感器;

    • type{\rm type}type:传感器类型,camera{\rm camera}camera;
    • name{\rm name}name:摄像头命名,自由设置;
  • 标签:描述摄像头参数;

    • 分辨率、编码格式、图像范围、噪音参数等;
  • 标签:加载摄像头仿真插件libgazebo_ros_camera.so{\rm libgazebo\_ros\_camera.so}libgazebo_ros_camera.so;

    • 设置插件的命名空间、发布图像的话题、参考坐标系等;
  • 摄像头仿真的.xacro{\rm .xacro}.xacro文件实例

    # camera_gazebo.xacro文件内容
    Gazebo/Black30.01.39626341280720R8G8B80.02300gaussian0.00.007true0.0/cameraimage_rawcamera_infocamera_link0.070.00.00.00.00.0
    
# 1.在~/willard_ws/src/mbot_description/urdf/xacro/sensors/下新建camera_gazebo.xacro文件,内容见上一代码块
touch camera_gazebo.xacro# 2.启动仿真环境
# view_mbot_with_camera_gazebo.launch内容见下一代码块
roslaunch mbot_gazebo view_mbot_with_camera_gazebo.launch# 3.查看图像
rqt_image_view# 4.启动键盘控制机器人移动
roslaunch mbot_teleop mbot_teleop.launch
# view_mbot_with_camera_gazebo.launch文件内容   

9

4.3.2 RGB-D摄像头(kinect)仿真
# 1.在~/willard_ws/src/mbot_description/urdf/xacro/sensors/下新建kinect_gazebo.xacro文件,内容见下一代码块
touch kinect_gazebo.xacro# 2.启动仿真环境
# view_mbot_with_kinect_gazebo.launch内容见下一代码块
roslaunch mbot_gazebo view_mbot_with_kinect_gazebo.launch# 3.查看图像
rosrun rviz rviz# 4.启动键盘控制机器人移动
roslaunch mbot_teleop mbot_teleop.launch
# kinect_gazebo.xacro文件内容
true20.0${60.0*M_PI/180.0}R8G8B86404800.058.0${prefix}true10rgb/image_rawdepth/image_rawdepth/pointsrgb/camera_infodepth/camera_info${prefix}_frame_optical0.10.00.00.00.00.00.4
# view_mbot_with_kinect_gazebo.launch文件内容   

仿真效果图:

10

4.3.3 激光雷达仿真
# 1.在~/willard_ws/src/mbot_description/urdf/xacro/sensors/下新建lidar_gazebo.xacro文件,内容见下一代码块
touch lidar_gazebo.xacro# 2.启动仿真环境
# view_mbot_with_laser_gazebo.launch内容见下一代码块
roslaunch mbot_gazebo view_mbot_with_laser_gazebo.launch# 3.查看图像
rosrun rviz rviz# 4.启动键盘控制机器人移动
roslaunch mbot_teleop mbot_teleop.launch
# lidar_gazebo.xacro文件内容
Gazebo/Black0 0 0 0 0 0false5.53601-330.106.00.01gaussian0.00.01/scanlaser_link

仿真效果图:

11

相关内容

热门资讯

oppo安卓版系统设置,全面解... 亲爱的手机控们,你是不是也和我一样,对OPPO安卓版系统的设置充满了好奇?想要让你的OPPO手机更加...
安卓系统是什么cp,CP架构下... 你有没有想过,你的手机里那个默默无闻的安卓系统,其实就像是一个超级贴心的CP(情侣搭档)呢?没错,就...
系统垃圾清理大师 安卓,安卓手... 手机里的垃圾文件是不是让你头疼不已?别急,今天我要给你介绍一位安卓系统里的“清洁小能手”——系统垃圾...
安卓系统分为几层,安卓系统分层... 你知道吗?安卓系统,这个陪伴我们手机生活的“小助手”,其实它内部结构可是相当复杂的呢!今天,就让我带...
系统最像苹果的安卓,揭秘最像苹... 你有没有发现,现在的安卓手机越来越像苹果了?没错,就是那个以简洁设计和流畅体验著称的苹果。今天,就让...
安卓更新13系统游戏,性能升级... 你知道吗?最近安卓系统又来了一次大变身,那就是安卓13系统!这次更新可是带来了不少惊喜,尤其是对那些...
安卓系统开机出错了,安卓系统开... 手机突然开不了机了,这可怎么办?别急,让我来帮你分析一下安卓系统开机出错的那些事儿。一、安卓系统开机...
vovg是安卓系统吗,安卓系统... 你有没有听说过Vovg这个操作系统?最近,这个名词在数码圈里可是引起了不小的热议呢!很多人都在问,V...
谷歌终止安卓系统更新,影响与未... 你知道吗?最近科技圈可是炸开了锅,因为谷歌突然宣布了一项重大决定——终止对某些安卓系统的更新!这可不...
塞班系统比安卓好,超越安卓的卓... 你知道吗?在手机操作系统的大战中,塞班系统和安卓系统一直是你争我斗的态势。但你知道吗?塞班系统在某些...
安卓系统手机便宜测评,深度测评... 你有没有想过,为什么安卓系统手机总是那么便宜呢?是不是觉得它们质量不好?别急,今天我就要带你深入了解...
安卓怎么扫描门禁系统,安卓设备... 你有没有想过,家里的门禁系统竟然也能用手机轻松搞定?没错,就是那个你每天进出都离不开的安卓手机!今天...
安卓系统账号注册过程,安卓系统... 你终于决定加入安卓系统的大家庭啦! 想必你对这个系统充满了期待,不过别急,注册账号可是第一步哦!今天...
日产天籁的安卓系统,智能驾驶体... 你有没有注意到,最近开车的朋友们都在议论纷纷,说他们的日产天籁换了个新玩意儿——安卓系统!这可不是什...
安卓系统怎么下载闹钟,安卓系统... 你有没有发现,每天早晨闹钟一响,整个人就像被电击了一样,瞬间清醒?没错,闹钟可是我们生活中不可或缺的...
手机系统设置铃声安卓,个性化定... 手机里那首动听的铃声,是不是让你每次听到都忍不住嘴角上扬呢?今天,就让我带你一起探索安卓手机系统设置...
安卓电脑双系统平板,畅享多模态... 你有没有想过,一台平板电脑既能满足你办公的需求,又能让你畅享娱乐时光?现在,有一种神奇的设备——安卓...
创维电视安卓系统2.3,回顾经... 你有没有发现家里的创维电视有点儿“老态龙钟”了?别急,别急,今天就来给你揭秘一下这款电视的“内心世界...
如何破解车载安卓系统,轻松解锁... 如何破解车载安卓系统:揭秘背后的技术与风险在当今这个数字化飞速发展的时代,汽车已经不仅仅是一种交通工...
安卓机上的windows系统,... 你有没有想过,把Windows系统的强大功能搬到安卓机上?想象那可是个让人眼前一亮的操作体验呢!今天...