实验二 ROS控制底盘运动
实验二 ROS控制底盘运动 【实验目标】 通过roslaunch指令启动小车底盘,了解如何通过ROS启动TOM车底盘对可视化工具Rviz进行简单的配置操作,体验底盘的运行效果通过话题消息,学习ROS是如何控制TOM车运动的通过teleop节点,学习如何用键盘按键控制底盘运动【实验内容】 SSH远程连接小车 为了方便远程控制小车,我们在电脑端用SSH连接小车上位机端,这样只需要在笔记本电脑上操作,就可以直接控制小车
1、查看个人PC端和小车端的IP地址 同时按下键盘组合键Ctrl + Alt + T启动终端,或直接点击Terminal终端图标
(个人PC端) 打开终端输入:ifconfig,记住这个地址
(小车端)可以外接显示器、键盘,按同样方法查看小车IP,如果是TOM车升级版套餐,我们会附赠键鼠显一体设备,可直接用双Type-C线连接,长按开机键打开屏幕
2、主从机配置
查看两机地址后,将IP地址写入.bashrc文件中:gedit ~/.bashrc
上面写主机(小车端)地址,下面写从机(个人PC端)地址
修改完保存后source一下:source ~/.bashrc
3、SSH连接ssh tianbot@192.168.0.29输入密码‘ROS’按回车,进入小车终端,会发现@后面的计算机名变成了tianbot,说明当前终端已经进入了tianbot端
注意!!!
个人PC端为:tianbot@ros2go 小车端为:tianbot@tianbot
每次新打开终端,如果要进入小车端都要先SSH连接 启动rviz、rqt等图形化界面,建议在个人PC端启动,也就是在计算机名为ros2go的终端
底盘全部启动 打开小车电源和上位机电源,并确保上位机端和个人PC端连接在同一局域网下 1、打开终端2、SSH远程连接小车
shellssh tianbot@192.168.0.293、启动底盘 在终端为tianbot@tianbot的小车端输入命令:
shellroslaunch tianbot_bringup tianbot_bringup.launch4、查看话题消息 打开新终端,此时端口是个人PC端,输入命令:
shellrostopic list发现有一堆信息,这就是底盘启动的话题 5、发布速度话题消息 我们发布一个速度话题消息,来控制底盘运动,继续在PC端输入(后面用Tab补全):
shellrostopic echo -r 10 /cmd_vel geometry_msgs/Twist "linear:
x: 0.2
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.5"按下回车,会发现小车在转圈,说明ROS就是通过这个话题与智能车进行通信,从而控制小车运动的
底盘单独启动 单独启动需要在tianbot端口启动
Tianbot 底盘 shellroslaunch tianbot_core tianbot_core.launch激光雷达 shellroslaunch tianbot_bringup lidar.launch
roslaunch tianbot_rviz view_lidar.launch深度相机 (if applicable) shellroslaunch tianbot_bringup rgbd_camera.launchUSB摄像头 shellroslaunch tianbot_bringup usb_cam.launchGPS (if applicable) shellroslaunch tianbot_bringup gps.launch键盘控制 shellroslaunch tianbot_bringup tianbot_bringup.launch
rosrun teleop_twist_keyboard teleop_twist_keyboard.py按照输出框提示,按键控制小车运动
写一个简单的Python程序,控制小车画圆 我们选择VS Code进行程序的编写
在tianbot_bringup功能包下新建文件夹scripts,用来存放python文件,新建draw_circle.py文件,将下列源码复制粘贴进去,最好自己敲一遍。python#!/usr/bin/env python
import rospy
from std_msgs.msg import String
from geometry_msgs.msg import Twist
def talker():
pub = rospy.Publisher('cmd_vel', Twist, queue_size=10)
rospy.init_node('draw_circle', anonymous=True)
rate = rospy.Rate(10)
vel_cmd = Twist()
vel_cmd.linear.x = 0.2
vel_cmd.linear.y = 0
vel_cmd.linear.z = 0
vel_cmd.angular.x = 0
vel_cmd.angular.y = 0
vel_cmd.angular.z = 0.5
pub.publish(vel_cmd)
while not rospy.is_shutdown():
str = "run time %s" % rospy.get_time()
rospy.loginfo(str)
pub.publish(str)
rate.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass保存退出,设置文件为可执行权限,右键属性-->权限-->允许作为程序执行文件 运行 启动小车底盘,运行刚写好的程序:rosrun tianbot_bringup draw_circle.py 小车就会开始做画圆运动!