ROS开发笔记(1):基于RoboWare Studio 与Python编写话题(topic)通讯节点(node)

版权声明:转载请注明出处,谢谢。 https://blog.csdn.net/wsc820508/article/details/81431486

Roboware机器人开发平台在ROS的基础上构建了更具特色的图形化界面,让机器人开发者开发机器人变得更具便捷。由于它是基于visual studio code实现的,具有强大的代码提示等功能,编写调试代码确实非常方便。

本系列笔记源代码参考《ROS机器人编程实践》。

1、RoboWare Studio 下载安装

进入官方网站下载deb文件直接安装即可,安装包下载地址:

https://raw.githubusercontent.com/TonyRobotics/RoboWare/master/Studio/roboware-studio_1.2.0-1524709819_amd64.deb

2、工作空间配置

打开软件, 在file菜单或者Start 里点击 New Workspace,建立ros1_ws的工作空间:

可以看出自动创建了src目录,目录里自动添加了CMakeLists.txt文件,等效为在终端执行了

mkdir -p ~/ros1_ws/src

cd  ~/ros1_ws/src

catkin_init_workspace

然后点击执行ROS菜单下的Build命令:

由于软件的默认参数配置,这里会报Remote Arguments not configured! 的一个错误,原因是在上图左上方,有个锤子图标的设置项目默认设置成了Remote Deploy,本地应用应该配置为Debug等,更改后命令执行正常,结果如下:

相当于在终端执行了 catkin_make 指令,创建 build 与 devel等目录,build 是使用 C++时catkin 存放库和可执行文件的地方,使用Python时可以忽略bulid下面的内容。devel 下需要注意的是setup.bash 文件,执行 source  devel/setup.bash 可以让系统使用这个工作区以及包含的代码,可以将这条指令添加到 ~/.bashrc文件里,这样每次打开终端时这条指令自动执行。

3、添加ROS包

右键点击工作空间的src选择 add ros package,输入ros_dev_test 是包名,std_msgs rospy是依赖包,如果是基于C++开发,那就要依赖roscpp包。

建好ROS包后,系统在包目录下自动创建了src目录以及CMakeLists.txt、package.xml   两个文件。      

在文件目录中选中该ROS包名,点击右键可以添加msg、srv等文件夹,这些以后会用到, 这里先在src文件夹下新建两个topic测试的py文件。如果添加的是C++文件需要选择是添加到库还是可执行文件。py文件需要在终端中(软件右下方有增/删终端执行指令)通过chmod命令给它们增加运行权限,否者后面会报错。

chmod u+x topic_pub.py
chmod u+x topic_sub.py

topic_pub.py内容如下:

#!/usr/bin/env python
import rospy
from std_msgs.msg import Int32

rospy.init_node('wsc_topic_pub')

pub =rospy.Publisher('counter',Int32,subscriber_listener=None,tcp_nodelay=False,latch=False,headers=None,queue_size=None)

rate =rospy.Rate(2)

count = 0

while not rospy.is_shutdown():
    pub.publish(count)
    count += 1
    rate.sleep()

topic_sub.py内容如下:

#!/usr/bin/env python
import rospy
from std_msgs.msg import Int32
def callback(msg):
    print msg.data

rospy.init_node('wsc_topic_sub')
pub=rospy.Subscriber('counter',Int32,callback)
rospy.spin()

也可以这样添加node节点:

4、topic话题发布与订阅节点测试

首先点击ROS菜单下的Run roscore:

最后通过 rosrun ros_dev_test topic_pub.py 指令启动了话题发布节点 wsc_topic_pub ,注意成功启动前需要完成以下这几步:

(1)、run roscore

(2)、source devel/setup.bash

(3)、chmod u+x topic_pub.py       chmod u+x topic_sub.py

新开终端,同样通过rosrun ros_dev_test topic_sub.py 指令启动了话题发布节点 wsc_topic_sub:

可以看出成功订阅到了发布者发布的/counter 话题。

运行ROS 菜单下的 Run rqt_graph,结果如下:

点击RoboWare Studio软件左边纵向菜单最下面的菜单项,可以查看当前的话题列表、节点列表(刷新后查看):

也可以通过rostopic命令在终端查看话题相关信息:


wsc@wsc-pc:~/ros1_ws$ rostopic
rostopic is a command-line tool for printing information about ROS Topics.

Commands:
        rostopic bw     display bandwidth used by topic
        rostopic delay  display delay of topic from timestamp in header
        rostopic echo   print messages to screen
        rostopic find   find topics by type
        rostopic hz     display publishing rate of topic
        rostopic info   print information about active topic
        rostopic list   list active topics
        rostopic pub    publish data to topic
        rostopic type   print topic or field type

Type rostopic <command> -h for more detailed usage, e.g. 'rostopic echo -h'
wsc@wsc-pc:~/ros1_ws$ rostopic info counter
Type: std_msgs/Int32

Publishers:
 * /wsc_topic_pub (http://wsc-pc:46481/)

Subscribers:
 * /wsc_topic_sub (http://wsc-pc:43941/)
wsc@wsc-pc:~/ros1_ws$ rostopic list
/counter
/rosout
/rosout_agg
wsc@wsc-pc:~/ros1_ws$ rostopic echo counter -n 5
data: 3077
---
data: 3078
---
data: 3079
---
data: 3080
---
data: 3081
---

5、定义自己的消息类型

选中msg目录名,右键AddMsg File,这里添加 Complex.msg,文件内容:

float32 real
float32 imaginary

这里特别方便的是,添加msg文件需要对CMakeLists.txt、package.xml 进行的修改RoboWare Studio替我们自动完成了:

CMakeLists.txt主要修改了以下几处:

## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS
  message_generation
  roscpp
  rospy
  std_msgs
)


## Generate messages in the 'msg' folder
add_message_files(FILES
  Complex.msg
)


## Generate added messages and services with any dependencies listed here
generate_messages(DEPENDENCIES
  std_msgs
)


###################################
## catkin specific configuration ##
###################################
## The catkin_package macro generates cmake config files for your package
## Declare things to be passed to dependent projects
## INCLUDE_DIRS: uncomment this if your package contains header files
## LIBRARIES: libraries you create in this project that dependent projects also need
## CATKIN_DEPENDS: catkin_packages dependent projects also need
## DEPENDS: system dependencies of this project that dependent projects also need
catkin_package(
  CATKIN_DEPENDS
  message_runtime
#  INCLUDE_DIRS include
#  LIBRARIES ros_dev_test
#  CATKIN_DEPENDS rospy std_msgs
#  DEPENDS system_lib
)

package.xml 增加了:

<build_depend>message_generation</build_depend>
<build_export_depend>message_generation</build_export_depend>
<exec_depend>message_runtime</exec_depend>

然后就 可以点击 ROS菜单下的Build 重新编译工作空间,生成消息文件。

使用自己的msg文件:

from ros_dev_test.msg import Complex 


c=Complex(real=1.0,imaginary=3.0)

可以通过下面指令查看某一包定义的msg列表:

wsc@wsc-pc:~/ros1_ws$ rosmsg package ros_dev_test
ros_dev_test/Complex

另外,在开发过程中,为了保证msg的通用性、标准性、规范性,除非项目确实需要,否则尽量使用通用的msg来实现,这也和ROS避免重复造轮子的初衷是一致的。

猜你喜欢

转载自blog.csdn.net/wsc820508/article/details/81431486
今日推荐