ROS1{\rm ROS1}ROS1的基础及应用,基于古月的课,各位可以去看,基于hawkbot{\rm hawkbot}hawkbot机器人进行实际操作。
ROS{\rm ROS}ROS版本:ROS1{\rm ROS1}ROS1的Melodic{\rm Melodic}Melodic;实际机器人:Hawkbot{\rm Hawkbot}Hawkbot;
URDF{\rm URDF}URDF模型进化版本–xacro{\rm xacro}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文件内容
ArbotiX{\rm ArbotiX}ArbotiX简介
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
配置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
仿真效果图
ros_control{\rm ros\_control}ros_control简介
ros_control{\rm ros\_control}ros_control框架
控制器(controllers)({\rm controllers})(controllers)介绍
物理仿真模型配置实例:
# mbot_base_gazebo.xacro文件内容
Gazebo/Gray transmission_interface/SimpleTransmission hardware_interface/VelocityJointInterface hardware_interface/VelocityJointInterface 1 Gazebo/Black false Gazebo/Blue Debug true / 1 true true 100.0 true left_wheel_joint right_wheel_joint ${wheel_joint_y*2} ${2*wheel_radius} 1 30 1.8 cmd_vel odom odom base_footprint
# 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文件,即可加载
效果如下图:
摄像头仿真的.xacro{\rm .xacro}.xacro文件实例
# camera_gazebo.xacro文件内容
Gazebo/Black 30.0 1.3962634 1280 720 R8G8B8 0.02 300 gaussian 0.0 0.007 true 0.0 /camera image_raw camera_info camera_link 0.07 0.0 0.0 0.0 0.0 0.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文件内容
# 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文件内容
true 20.0 ${60.0*M_PI/180.0} R8G8B8 640 480 0.05 8.0 ${prefix} true 10 rgb/image_raw depth/image_raw depth/points rgb/camera_info depth/camera_info ${prefix}_frame_optical 0.1 0.0 0.0 0.0 0.0 0.0 0.4
# view_mbot_with_kinect_gazebo.launch文件内容
仿真效果图:
# 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/Black 0 0 0 0 0 0 false 5.5 360 1 -3 3 0.10 6.0 0.01 gaussian 0.0 0.01 /scan laser_link
仿真效果图: