ros2结合conda,实现通过ros2 topic控制yolo检测,附带ros1
·
1.搭建
注意:conda虚拟环境中安装的Python版本必须与ROS 2版本要求的Python版本保持一致。
如humble是python3.10,conda虚拟环境就必须是3.10
cd ~/yolo3d_ws/src #没有就新建
创建ros2功能包,ament_python 表示这是一个纯Python包,使用setup.py来构建和安装
--dependencies这个参数会自动在生成的 package.xml 和 setup.py 中添加依赖项
ros2 pkg create yolo3d --build-type ament_python --dependencies rclpy
建完包就自动生成了。把yolo3d.py run2.py topic_sub.py等文件放进来
cd yolo3d/yolo3d
修改~/yolo3d_ws/src/yolo3d中的setup.py,用于按包的方式启动,添加这些:
entry_points={
'console_scripts': [
"topic_pub = yolo3d.topic_pub:main",
"topic_sub = yolo3d.topic_sub:main",
"run2 = yolo3d.run2:main",
"yolo3d = yolo3d.yolo3d:RealSenseYOLOCupDetector"
然后编译,在yolo3d_ws下,每次修改代码后也需要重新编译
colcon build
2.运行
cd ~/yolo3d_ws
source install/setup.zsh
conda activate yolo3d
设置PYTHONPATH包含conda环境的库,这样才能在ros2中用上conda环境
可通过进环境后输入:python -c “import site; print(site.getsitepackage())” 查询路径
export PYTHONPATH=/home/mxzbos/anaconda3/envs/yolo3d/lib/python3.10/site-packages:$PYTHONPATH
开启程序,会先完成初始化后等待startgrab话题发布
ros2 run yolo3d run2
新开终端,发布startgrab话题,触发开始cup位置检测
#-r 5就是以5hz频率一直发布,-t 5就是5秒后话题关闭,-1就是只发布一下
ros2 topic pub -r 5 /startgrab std_msgs/msg/Bool "data: true"
再新开终端,打开订阅者,我写在yolo3d_ws里了,测试用
cd ~/yolo3d_ws
source install/setup.zsh
ros2 run yolo3d topic_sub
3.最终效果

4.ros1
ros1非常简单,不需要创建ros包,直接在虚拟环境
pip install rospkg rospy catkin_tools
就可以直接运行含import rospy的python文件
python run_ros.py
rostopic pub /startgrab std_msgs/Bool true -1 #发布话题开始抓取
rostopic echo -c cup_pos #订阅 返回结果
不过别忘了先roscore
更多推荐
所有评论(0)