略,参看古月21讲!
第一步: roscore
第二步: rosrun turtlesim turtlesim_node
第三步 rosrun turtlesim turtle_teleop_key
此时就可以通过键盘的上下左右键控制 小海龟了!
它会显示当前全局的节点图
rosnode list :
它会把所有的节点都列出来。
rosnode info :
它可以查看某个节点的信息:
例如:
rosnode info turtlesim
输出为:
-------------------------------------------------------------------------------- Node [/turtlesim] Publications: * /rosout [rosgraph_msgs/Log] * /turtle1/color_sensor [turtlesim/Color] * /turtle1/pose [turtlesim/Pose] Subscriptions: * /turtle1/cmd_vel [geometry_msgs/Twist] Services: * /clear * /kill * /reset * /spawn * /turtle1/set_pen * /turtle1/teleport_absolute * /turtle1/teleport_relative * /turtlesim/get_loggers * /turtlesim/set_logger_level contacting node http://zcb-vm:35989/ ... Pid: 3141 Connections: * topic: /rosout * to: /rosout * direction: outbound * transport: TCPROS * topic: /turtle1/cmd_vel * to: /teleop_turtle (http://zcb-vm:32913/) * direction: inbound * transport: TCPROS
它是和话题相关的命令
rostopic list :
可以打印出所有的话题列表!
输出为:
/rosout
/rosout_agg
/turtle1/cmd_vel (它就是前面用于 操控海龟运动的消息 )
/turtle1/color_sensor
/turtle1/pose
我们可以 给消息传入数据(通过 rostopic pub 发布) 以实现通过命令行 操控海龟,如下:
通过 -r 参数设置发布频率
-r 10 就是10HZ 就是1s发布10次 。
下面查看rosmsg 的结构:
rosmsg show geometry_msgs/Twist
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z
rostopic list :
可以打印出所有的服务列表!
/clear
/kill
/reset
/rosout/get_loggers
/rosout/set_logger_level
/spawn
/teleop_turtle/get_loggers
/teleop_turtle/set_logger_level
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/get_loggers
/turtlesim/set_logger_level
产生一个新的海龟(使用spawn 服务):
rosservice call call个服务!!!
它就是用来复现 操作的。
rosbag record
-a 选项的意思是记录全部
后面的cmd_record 是保存到的压缩文件。
之后ctrl c
数据就自动保存到当前终端的目录下了!
然后可以使用rosbag play 命令进行复现!
工作空间,就类似于IDE中创建的工程,
src是放 功能包 的!
build 是放置 中间产生的 编译文件的,(基本不用关心它)
devel 是放置 生成的可执行文件,一些库,一些脚本等等,(最终运行都是在这里的!)
install 是 安装成功之后,安装的路径,(类似 win 中program files 是默认的路径一样)
注意:一定要在 src空间创建功能包。
下面看下它们的作用,
先看package.xml
它主要是关于 功能包的一些信息!
再看CMakeLists.txt
它主要是描述功能包中的编译规则。它使用的语法是cmake 的语法,
总结:
通过功能包可以完成代码的组织,通过工作空间可以完成功能包中代码的编译和运行!!!
后面的roscpp rospy std_msgs geometry_msgs turtlesim 都是依赖。
add_executable () 的作用是将 src/velocity_publisher.cpp 编译成 velocity_publisher 可执行文件。
target_link_libraries()的作用是将 生成的可执行文件和 ros一些库做链接的(主要是C++ 的一些接口)。
总结:先做代码的编译,然后再做 链接。
Python 版本:
#!/usr/bin/env python # -*- coding:utf-8 -*- #该例子 将发布turtle1/cmd_vel 话题,消息类型为geometry_msgs::Twist import rospy from geometry_msgs.msg import Twist def velocity_publisher(): #ROS 节点初始化 rospy.init_node("velocity_publisher",anonymous=True) #匿名的 #创建一个Publisher ,消息名字为/turtle1/cmd_vel 的topic ,消息类型为geometry_msgs::Twist 队列长度为10 turtle_vel_pub = rospy.Publisher(‘/turtle1/cmd_vel‘,Twist,queue_size=10) #设置循环的频率 rate = rospy.Rate(10) #1s 10次 while not rospy.is_shutdown(): #初始化 geometry_msgs:: Twist 类型的消息 vel_msg = Twist() vel_msg.linear.x = 0.8 vel_msg.angular.z = 0.2 #发布消息 turtle_vel_pub.publish(vel_msg) rospy.loginfo("Publish turtle velocity command [{:.2f}m/s, {:.2f}rad/s ]".format(vel_msg.linear.x,vel_msg.angular.z)) #按照循环 频率延时 rate.sleep() if __name__ == ‘__main__‘: try: velocity_publisher() except: pass
注意要给python 文件加上可执行的权限。Python 的代码不需要进行cmake 编译。
原文:https://www.cnblogs.com/zach0812/p/11743604.html