最近在学习ROS,在古月老师的ROS探索总结(十二)坐标系统遇到一些问题,总结如下:
我使用的是ubuntu16.04 + ROS kinect。
我没法像古月博客里那样创建包,会出现一些奇怪问题,rosmake感觉也怪怪的,我还是选择使用catkin_make,具体操作如下:
mkdir -p tutorials/src
cd tutorials
cd src
catkin_create_pkg learning_tf tf rospy roscpp turtlesim
cd ..
catkin_make
博客里说创建/nodes/turtle_tf_broadcaster.py文件,也不知道nodes是个啥,我就在src里创建的,然后把launch也创建了。
py文件不需要编译,把东西都创建好,然后打开一个终端
cd tutorials
source devel/setup.bash
roslaunch learning_tf start_demo.launch
可以看到一只乌龟,到这里是没有什么问题的。
接下来创建了tutorials/src/learning_tf/src/turtle_tf_listener.py文件,修改了launch,但是运行不了,报错信息为:
就是说没有turtlesim.msg.Velocity这个对象,一脸懵逼,然后我打开一个终端
python
import turtlesim.msg
print(turtlesim.msg)
这样就可以找到这个包的路径,顺着路径查看了一下,发现这个包里没有Velocity,我只看到了Pose和Color两个文件,所以这个Velocity应该是不能用的,可能是版本原因吧,还是说我少安装了什么?
查看了许多博客,找到了这位朋友基于turtlesim的ROS_TF应用案例详解这篇博客写的非常棒,解释了python文件的语句含义,也解决了我的问题,感谢!
具体解决办法:
首先把import turtlesim.msg更换为import geometry_msgs.msg
然后把原代码里turtle_vel的定义改为
turtle_vel = rospy.Publisher(‘turtle2/cmd_vel’, geometry_msgs.msg.Twist, queue_size=1)
最后定义一个twist = geometry_msgs.msg.Twist()
twist.linear.x = linear
twist.angular.z = angular
turtle_vel.publish(twist)
然后就可以实现turtle2跟随turtle1了。
另开一个终端,输入查看节点情况命令
rosrun rqt_graph rqt_graph
rosrun tf tf_echo /world /turtle1 可以查看乌龟一号的坐标系相对于world的位置
rosrun tf tf_echo /world /turtle2 可以查看乌龟二号的坐标系相对于world的位置
rosrun tf tf_echo /turtle1 /turtle2 可以查看二号相对于一号的位置,代码中(trans,rot) = listener.lookupTransform(’/turtle2’, ‘/turtle1’, rospy.Time(0))就是获取了这个位置然后进行处理。
world坐标系是以左下角作为原点的。