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

相关内容

热门资讯

安卓子系统windows11,... 你知道吗?最近科技圈可是炸开了锅,因为安卓子系统在Windows 11上的兼容性成了大家热议的话题。...
电脑里怎么下载安卓系统,电脑端... 你有没有想过,你的电脑里也能装上安卓系统呢?没错,就是那个让你手机不离手的安卓!今天,就让我来带你一...
索尼相机魔改安卓系统,魔改系统... 你知道吗?最近在摄影圈里掀起了一股热潮,那就是索尼相机魔改安卓系统。这可不是一般的改装,而是让这些专...
安卓系统哪家的最流畅,安卓系统... 你有没有想过,为什么你的手机有时候像蜗牛一样慢吞吞的,而别人的手机却能像风一样快?这背后,其实就是安...
安卓最新系统4.42,深度解析... 你有没有发现,你的安卓手机最近是不是有点儿不一样了?没错,就是那个一直在默默更新的安卓最新系统4.4...
android和安卓什么系统最... 你有没有想过,你的安卓手机到底是用的是什么系统呢?是不是有时候觉得手机卡顿,运行缓慢,其实跟这个系统...
平板装安卓xp系统好,探索复古... 你有没有想过,把安卓系统装到平板上,再配上XP系统,这会是怎样一番景象呢?想象一边享受着安卓的便捷,...
投影仪装安卓系统,开启智能投影... 你有没有想过,家里的老式投影仪也能焕发第二春呢?没错,就是那个曾经陪你熬夜看电影的“老伙计”,现在它...
安卓系统无线车载carplay... 你有没有想过,开车的时候也能享受到苹果设备的便利呢?没错,就是那个让你在日常生活中离不开的iOS系统...
谷歌安卓8系统包,系统包解析与... 你有没有发现,手机更新换代的速度简直就像坐上了火箭呢?这不,最近谷歌又发布了安卓8系统包,听说这个新...
微软平板下软件安卓系统,开启全... 你有没有想过,在微软平板上也能畅享安卓系统的乐趣呢?没错,这就是今天我要跟你分享的神奇故事。想象你手...
coloros是基于安卓系统吗... 你有没有想过,手机里的那个色彩斑斓的界面,背后其实有着一个有趣的故事呢?没错,我要说的就是Color...
安卓神盾系统应用市场,一站式智... 你有没有发现,手机里的安卓神盾系统应用市场最近可是火得一塌糊涂啊!这不,我就来给你好好扒一扒,看看这...
黑莓平板安卓系统升级,解锁无限... 亲爱的读者们,你是否还记得那个曾经风靡一时的黑莓手机?那个标志性的全键盘,那个独特的黑莓体验,如今它...
安卓文件系统采用华为,探索高效... 你知道吗?最近安卓系统在文件管理上可是有了大动作呢!华为这个科技巨头,竟然悄悄地给安卓文件系统来了个...
深度系统能用安卓app,探索智... 你知道吗?现在科技的发展真是让人惊叹不已!今天,我要给你揭秘一个超级酷炫的话题——深度系统能用安卓a...
安卓系统的分区类型,深度解析存... 你有没有发现,你的安卓手机里藏着不少秘密?没错,就是那些神秘的分区类型。今天,就让我带你一探究竟,揭...
安卓系统铠无法兑换,揭秘无法兑... 最近是不是有很多小伙伴在玩安卓系统的游戏,突然发现了一个让人头疼的问题——铠无法兑换!别急,今天就来...
汽车安卓系统崩溃怎么刷,一键刷... 亲爱的车主朋友们,你是否曾遇到过汽车安卓系统崩溃的尴尬时刻?手机系统崩溃还能重启,但汽车系统崩溃了,...
miui系统可以刷安卓p系统吗... 亲爱的手机控们,你是否对MIUI系统情有独钟,同时又对安卓P系统的新鲜功能垂涎欲滴?今天,就让我带你...