ROS编程:试图让我的套头衫漫游不遇到障碍

2024-04-28 20:38:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我不认识罗斯。 我试着让我的套头衫向前移动,直到它离障碍物的最小距离内,然后旋转直到路径清晰,然后再向前移动,等等。。。在

我写了这个代码:

import rospy, sys
from stopper import Stopper
if __name__ == "__main__":
    rospy.init_node("stopper_node", argv=sys.argv)
    forward_speed = 0.5
    angular_speed = 45
    if rospy.has_param('~forward_speed'):
        forward_speed = rospy.get_param('~forward_speed')
    if rospy.has_param('~angular_speed'):
        angular_speed = rospy.get_param('~angular_speed')
    my_stopper = Stopper(forward_speed, angular_speed)
    my_stopper.start_moving();

还有这个:

^{pr2}$

但即使我找不到任何逻辑错误,它只是不起作用,偶尔会碰到一些东西。我用gazebo模拟运行它 “海龟世界”。我很想得到一些帮助。 谢谢!在


Tags: importnodegetifparammysysrospy
2条回答

我有一个bugs导航算法的解决方案,希望能帮助您:

有了这些存储库(agn_gazebobugs),你可以打开一个有界地图和一些障碍物的凉亭模拟,以及一个装有激光扫描仪(Hokuyo URG)进行环境感知的移动轮式机器人平台(pioner P3dx)。在


用法:

  • ~/catkin_ws/src中的这些存储库克隆后,使用:

    git clone https://github.com/agn-7/agn_gazebo.git
    git clone https://github.com/agn-7/bugs.git
    
  • 然后在catkin工作区中使用catkin_make构建它们。

  • 包生成后,您需要更改agn_gazebo/worlds/final.world文件:

    打开它并用Ctrl+FCtrl+H来更改所有/home/agn/catkin_ws/src/...

    我打开了一个issue,使其成为动态路径而不是静态路径,但目前,我无法这样做。

  • 然后打开模拟器:roslaunch agn_gazebo gazebo.launch

  • 使用位置目标运行任何bugs算法:

    rosrun bugs bug.py bug0 11 0

    rosrun bugs bug.py bug1 11 0

    rosrun bugs bug.py bug2 11 0

好吧,我已经实现了一些应该很好用的方法。在

我有3个文件,使流浪高领动物工作,如你所要求。在

  1. 游荡_机器人发射 职责:此文件是一个启动文件,将运行gazebo world并存储可配置参数。

  2. 毛绒衫_节点.py 职责:这个python文件将初始化ROS节点并加载可配置的参数,然后它将运行使turtlebot移动的代码。

  3. 毛绒衫_逻辑.py 职责:这个python文件将监听激光,它将实现使漫游机器人工作的所有逻辑。

徘徊_机器人发射

<launch> 
    <param name="/use_sim_time" value="true" />   

    <!  Launch turtle bot world  >
    <include file="$(find turtlebot_gazebo)/launch/turtlebot_world.launch"/>       

    <!  Launch stopper node  >
    <node name="wander_bot" pkg="wander_bot" type="turtlebot_node.py" output="screen">
        <param name="forward_speed" type="double" value="0.2"/>
        <param name="minimum_distance_from_obstacle" type="double" value="1.0"/>
        <param name="rotation_speed" type="int" value="2"/>
        <param name="minimum_angle" type="int" value="-30"/>
        <param name="maximum_angle" type="int" value="30"/>
    </node>
</launch>

毛绒衫_节点.py

^{pr2}$

毛绒衫_逻辑.py

^{3}$

激光看起来是180度,直角是指数0 在ranges数组中,forward是ranges数组的索引359,left是ranges数组中的索引719,ranges数组来自订阅服务器:

rospy.Subscriber("scan", LaserScan, self.scanCallback, queue_size=10)

回调函数是scanCallback


好吧,那就直截了当了,我不认为我需要解释代码,它有很好的文档记录并且易于理解,对于任何进一步的问题,请在这里评论。在

相关问题 更多 >