利用Pycharm书写ROS并调用roslaunch的API

前言:

        怎么感觉在开发路上老是挑战不断,今天亲爱的严同学说:我想在UI界面上点击一个按钮来启动ros的一个节点。我义不容辞的推荐了我的博客方法。Ros如何在.cpp可执行文件中启动或关闭某一节点_ros包内杀死节点-优快云博客文章浏览阅读2.1k次,点赞3次,收藏42次。前言: 今天,亲爱的peter同学在调试机器人时发现了一个问题(机器人的周围一圈突然多出障碍物时,局部代价地图会形成一圈的代价层,他会导致move_base节点出现报错,就算是障碍物消失后也会如此),所以他希望能在程序(.cpp文件中)判断是否出现此类情况从而做到在程序中杀死move_base进程,再利用launch文件的重生属性做到重启。实现方式: 废话不多说,直接上干货。经过一系列的头脑风暴和网络人肉爬虫后,找到了这个函数 system();直接起飞。具体用法如下:r..._ros包内杀死节点icon-default.png?t=O83Ahttps://blog.youkuaiyun.com/qq_60640693/article/details/122559833?spm=1001.2014.3001.5501结果,他不接受,额...

他说:有没有什么不利用系统层的方法啊,ros就没有自带的API吗?我开始查阅资料,找到了这个网页:roslaunch/API Usage - ROS Wikiicon-default.png?t=O83Ahttp://wiki.ros.org/roslaunch/API%20Usage 细心研究后总结一下,得到这篇博客。

我在此基础上书写了一个rosnode和roslaunch的启动ros包,供大家参考和使用。
链接icon-default.png?t=O83Ahttps://pan.baidu.com/s/1RpjU7DT_SYyQsLZ_BLsckA?pwd=xs66

正文:

模块一: 安装Pycharm

        说明:

        其实,ros是支持Python和C++两种语言的,博主使用C++的频率是比较高的,本来想通过C++实现我的需求,但是很遗憾,roslaunch API仅仅支持Python,所以我打算安装一个编辑器来书写py脚本,当然你也可以用vscode或者gedit等等,不过我还是比较推荐Pycharm这款IDE的。

1、下载安装文件

        直接搜索官网,或进入Download PyCharm: The Python IDE for data science and web development by JetBrains

下载linux版本(.tar.gz)的就ok了,不过安装有些麻烦,所以我建议直接下我的网盘资源,我有写的有安装脚本。

网盘链接icon-default.png?t=O83Ahttps://pan.baidu.com/s/1vFZ2WsH-WczjwgAU-dBYDg?pwd=xs66

2、安装软件

        注意:

        如果是下载我的资源的,直接解压后可以看到文件夹下有一个install.bash 文件 打开它,最后一行有一个Anaconda安装的指令,如果你不需要创建虚拟环境我建议你不要安装,所以给它屏蔽掉或者删除。

2-1 命令安装
tar -xvf pycharm-community-2023.2.3.tar.gz -C "你的安装目录"

bash "你的安装目录"/pycharm-community-2023.2.3/bin/pycharm.sh

sudo gedit /usr/share/applications/Pycharm.desktop

#创建快捷方式
#输入

[Desktop Entry]
Type=Application
Name=Pycharm
GenericName=Pycharm
Comment=Pycharm:The Python IDE
Exec=sh 你的安装目录/pycharm-community-2023.2.3/bin/pycharm.sh          
Icon= 你的安装目录/pycharm-community-2023.2.3/bin/pycharm.png
Terminal=pycharm
Categories=Pycharm;

#然后保存
2-2脚本安装

如果是用我的脚本安装,注意上面的注意项,输入bash install.sh 后就按照提示安装就好了。

3、配置软件

模块二:创建rospy项目

1、创建工作空间

#创建目录
mkdir -p ws/src

#进入工作空间
cd ws/

#预编译下
catkin_make

2、创建功能包

        注意: 功能包需要在ws/src下创建。

#进入 ws/src下

#创建一个 名为 py_test 的包 依赖rospy 后面可以加其他包 和 c++编写一样
catkin_create_pkg py_test rospy

        创建好包后在包下创建scripts目录,并准备在下面添加py代码。

3、配置cmakelists

其实,python写ros和c++写差不多,什么msg和srv的生成是一样的,不同的是我们如果需要用py脚本那就需要将我们的脚本被ros系统加载,所以需要一行配置。

cmake_minimum_required(VERSION 3.0.2)
project(py_test)
find_package(catkin REQUIRED COMPONENTS
  rospy
)


catkin_package()

include_directories(
# include
  ${catkin_INCLUDE_DIRS}
)

# 主要是这一段需要增加 或者在原生的cmakelists文件中找到修改 就好了
 catkin_install_python(PROGRAMS
   scripts/main.py # 这里就是我包下的 py脚本位置
   DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
 )

模块三:pycharm编写代码

1、pycharm项目建立

2、IDE环境问题

        可能有些同学不喜欢用这个虚拟环境,或者想用其他的环境,那么你需要这么操作。

        

        那么你包下的venv目录也就没作用了,可以删除啦,以后你创建项目也有这个环境就可以直接选择了

        注意:  这个环境是ROS所有包的解释器,如果对这个不熟悉建议不要乱来,容易崩。

3、rospy、roslaunch等包调不了等问题

        有些小伙伴在下图找不到rospy包或者其他包,但是有rosbag。而且代码中 import rospy 也报错。

      

那么,我们只需要加载一次这些包就好了。

        把这个目录添加好就行了。

结果:

4、书写代码

        示例一:发布话题
import rospy
import roslaunch

#这里需要区修改cmakelists 和package.xml 依赖std_msgs包
from std_msgs.msg import Bool

if __name__ == '__main__':
    rospy.init_node("xs")
    pub = rospy.Publisher("/xs", Bool, queue_size=10)
    m = Bool()
    m.data = 1
    r = rospy.Rate(10)
    while not rospy.is_shutdown():
        pub.publish(m)
        r.sleep()
    rospy.spin()
        示例二:通过roslaunch API 启动节点或launch文件
import rospy
import roslaunch.rlutil
# import roslaunch.parent
from roslaunch import parent

if __name__ == "__main__":
    rospy.init_node("xs")
    # roslaunch启动roslaunch文件
    uuid = roslaunch.rlutil.get_or_generate_uuid(None, False)
    roslaunch.configure_logging(uuid)

    #这里我写了一个启动小乌龟的br.launch文件放在 br空包下
    launch = parent.ROSLaunchParent(uuid, ["/home/xs/xs/ws/src/br/launch/br.launch"])
    launch.start()
    rospy.sleep(5)
    launch.shutdown()
    rospy.spin()

    # roslaunch 启动节点
    # launch = roslaunch.scriptapi.ROSLaunch()
    # launch.start()
    # node = roslaunch.core.Node(package="turtlesim",node_type="turtlesim_node")
    # process = launch.launch(node)
    # rospy.sleep(10)
    # process.stop()

5、加载运行

# 第一次写完需要加载下py代码到环境中,后面修改可以不用了
catkin_make
# 直接rosrun运行 注意开roscore 当然也可以仿照书写roslaunch文件
rosrun py_test main.py

        如果运行不了,注意是权限问题,可以对main.py文件加运行权限。

        可以在文件的属性页完成。

也可以用

sudo chmod 777 main.py

这就搞定啦。

总结:

        其实,有人提出问题是好事,有人提问题那么就会有人解决问题,那么技术就会进步;所以仁兄们,欢迎大家积极交流。

        加油,道阻且长......

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值