Roboware机器人开发平台在ROS的基础上构建了更具特色的图形化界面,让机器人开发者开发机器人变得更具便捷。由于它是基于visual studio code实现的,具有强大的代码提示等功能,编写调试代码确实非常方便。
本系列笔记源代码参考《ROS机器人编程实践》。
1、RoboWare Studio 下载安装
进入官方网站下载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避免重复造轮子的初衷是一致的。