@twj0011001010 解决了嘛?
6.2.1
urdf_to_graphviz first_robot.urdf first_robot运行时报错
Error: Error=XML_ERROR_EMPTY_DOCUMENT ErrorID=13 (0xd) Line number=0
at line 101 in ./urdf_parser/src/model.cpp
ERROR: Model Parsing the xml failed
现在在用slam_toolbox进行建图但是发现里程计走一段时间(10s)就会漂移,导致我无法建图要怎么办(是要修改哪些参数吗)!以下是我建图时的截图
c168b0f1-5875-4290-adb1-b5a87ae35b89-d1dbe63c5d6a49b418393d4032b4e22d.jpg
970da9ff-f16b-4acb-a1d9-b904e62629c9-c74e8d86d8c2e458b50a0fc987d60a33.jpg
错误信息:
问题描述:[在运行指令ros2 launch fishbot_description gazebo_sim.launch.py 加载gazebo模型时报错,地图能够正常加载,ros2 service list | grep controller指令输出内容与6.5.2课程一致]
错误信息:[gzserver-2] [INFO] [1747732192.143868178] [controller_manager]: Configuring controller 'fishbot_joint_state_broadcaster'
[gzserver-2] [INFO] [1747732192.144086737] [fishbot_joint_state_broadcaster]: 'joints' or 'interfaces' parameter is empty. All available state interfaces will be published
[ros2-5] Successfully loaded controller fishbot_joint_state_broadcaster into state active
[INFO] [ros2-5]: process has finished cleanly [pid 48739]
[INFO] [ros2-6]: process started with pid [48791]
[gzserver-2] [ERROR] [1747732193.055398508] [controller_manager]: The 'type' param was not defined for 'fishbot_diff_drive_controller'.
[ros2-6] Error loading controller, check controller_manager logs
[ERROR] [ros2-6]: process has died [pid 48791, exit code 1, cmd 'ros2 control load_controller --set-state active fishbot_diff_drive_controller'].
import launch
import launch_ros
from ament_index_python.packages import get_package_share_directory
from launch.launch_description_sources import PythonLaunchDescriptionSource
def generate_launch_description():
# 获取默认路径
robot_name_in_model = "fishbot"
urdf_tutorial_path = get_package_share_directory('fishbot_description')
default_model_path = urdf_tutorial_path + '/urdf/fishbot/fishbot.urdf.xacro'
default_world_path = urdf_tutorial_path + '/world/custom_room.world'
# 为 Launch 声明参数
action_declare_arg_mode_path = launch.actions.DeclareLaunchArgument(
name='model', default_value=str(default_model_path),
description='URDF 的绝对路径')
# 获取文件内容生成新的参数
robot_description = launch_ros.parameter_descriptions.ParameterValue(
launch.substitutions.Command(
['xacro ', launch.substitutions.LaunchConfiguration('model')]),
value_type=str)
controller_manager:
ros__parameters:
update_rate: 100 # Hz
use_sim_time: true
fishbot_effort_controller:
ros__parameters:
joints:
- left_wheel_joint
- right_wheel_joint
command_interfaces:
- effort
state_interfaces:
- position
- velocity
- effort
背景:
我在尝试使用fishbot based的机器人仿真框架进行多机navigation实例操作,当我单独加载任意机器人模型时,都能够正常启动,启动部分log如下:
381f701a-0531-457a-814b-872983c88972-image.png
从图中可以看出<robot_namespace>_diff_drive_controller和<robot_namespace>_joint_state_broadcaster都已经被正常发布,同时service和topic也都正常启动,机器人可以通过teleop_twist_keyboard命令正常运行。
当我在用一个gazebo仿真环境中加载成功第一个机器人后,我希望继续加载第二个机器人,这时,在启动机器人模型的过程中,load controller出现了问题,如下图红框所示:
ae1c2b98-e96d-431a-b8d8-fedcece530e7-image.png
我启动了namespace为scout_mini_1_的机器人节点,但是从图中可以看出,gazebo_ros2_control仍然试图从scout_mini_0_的namespace中进行控制器搜索,从而导致无法正确加载控制器配置文件,导致两个控制器服务器都发布失败。
###测试与尝试
我也尝试过使用统一namespace下的controller manager,通过定义不同名称的diff_drive_control来实现控制,但是在launch文件中由于加载机器人节点时也需要明确其namespace,导致controller manager实际上也会与namespace挂钩,从而加载失败,我的机器人加载代码如下:
我的gazebo控制插件代码如下:
<gazebo> <plugin filename="libgazebo_ros2_control.so" name="${robot_namespace}gazebo_ros2_control"> <parameters>$(find scout_mini_description)/config/${robot_namespace}.yaml</parameters> <ros> <namespace>${robot_namespace}</namespace> </ros> </plugin> </gazebo>此外,也尝试过手动启动服务,也无法成功运行,但是无论是否正确启动,controller相关的service都能够正常启动。个人推测是gazebo ros2 control插件默认会启动在第一个namespace下,但是不知道如何规避这个问题
ubuntu22.04,ROS2humble,在安装catkin时出现下面的冲突
12d8582d-4313-4961-af99-5a79ca4f8397-1747656625794.png
请问怎么解决,感谢
# rosdepc安装不上
## 一键安装
858ea0bd-f28b-434c-bb97-260de9c59420-1747560599814.png
raise ConnectionError(e, request=request)
requests. exceptions. ConnectionError: HTTPConnectionPo
ol (host='0.0.0.0', port=8000): Max retries exceeded w
ith url: /novell. txt (Caused by NewConnectionError('<
urllib3. connection. HTTPConnection object at 0x792acd9
4a350>: Failed to establish a new connection: [Errno
111] Connection refused' ) )
[ros2run]: Process exited with failure 1![)
61f0c9b1-021f-484f-9232-bb61ba8cbe9d-图片.png
与车连接也有这样的错误不知道有没有影响
3f09d0f0-7788-4908-b427-04744e7a2918-图片.png
ros2第三章3.2.2要引入一个espeakg的软件包,用指令pip3 inatall espeakng指令安装软件包时提示无法找到软件包espeakng怎么解决
6c55ef0c-742a-467c-aba0-b567433f2a27-image.png
4603c07d-394b-4ea1-9768-17a08464c55f-image.png
0953e6fc-7112-45d0-b518-06ece124c72a-ce8a0540250aae09042b8432ecb88d58_720.jpg
400f79ff-8a2f-4584-b099-ffe7dbc31462.jpeg
机械臂,遥操作+加力反馈,如何实现?
遥操作:通过手柄,手机,或者任何形式的“遥控器”遥控机械臂的运动。最简单的形式就是以一个机械臂(主臂)遥控另一个机械臂(从臂)。
力反馈:当从臂碰到障碍物时,主臂可以以力的形式感受到这个障碍物,所谓“感受”就是操作者感受到主臂的力。
代码:https://gitee.com/qingqing-gaq/feel_force.git
视频:https://www.bilibili.com/video/BV1KoEqzyEFR/?vd_source=36451ca805358187c4a0efa1c5694b35
我的实现思路:
软件:rso2
硬件:双通道usb转can模块,六个达妙4310电机。
六个电机,组成两个三自由度机械臂。一个can通道控制一个机械臂。
大体逻辑:
主臂时重力补偿模式,因为只有重力补偿才能任意拖动。主臂把实时的关节位置,发送给从臂,因此从臂必然是位置控制模式,这样才能跟踪主臂的位置。
那么主臂如何感受从臂的力呢?这里就需要电机有力矩接口了(达妙电机的mit模式),当从臂电机受到阻力时,pid控制力就会变大,电机反馈会的力也会变大,这个变大的值就是阻力了。把这个力反馈给主臂即可。
程序运行逻辑:
23467808-ec76-44af-b4b5-f339ae8f85d4.png
操作逻辑的代码:
其中:主臂位置发送给从臂的逻辑好理解。
pos2[i] = curret_joint_states.at(i).position; //curret_joint_states.at(i).position:主臂的实时关节位置 //pos2[i]:发送给从臂的关节位置这一句是从臂的力矩反馈给主臂。有一步操作是从臂反馈的力矩减去了重力补偿力矩,这是因为,反馈的电机力矩是pid产生的。这个pid产生的控制力矩就包含重力力矩,如果把这个力也算上发送给主臂,那主臂就会变的很称,因为从臂把重力也传过来了。
tor[i] += -0.5 * (curret_joint_states2.at(i).torque - tor2[i]); //tor[i]: 发送给主臂的关节力矩 //curret_joint_states2.at(i).torque:从臂电机反馈会来的力矩 //tor2[i]:发送给从臂的重力补偿力矩。 //-0.5:缩放系数这个if判断的作用是,避免从臂传来的力一直在小幅度波动,只有从臂反馈的力大于一个值,这个力才会被加载到主臂上。
float torque_threshold = 0.04f; // 设置阈值 //从臂受到的阻力,返回给主臂 for (size_t i = 0; i < arm->getDof(); i++) { if (std::abs(curret_joint_states2.at(i).torque) > torque_threshold) { tor[i] += -0.5 * (curret_joint_states2.at(i).torque - tor2[i]); // 如果超过阈值,按原逻辑计算 } else { tor[i] += 0.0f; // 否则赋值为 0 } }这又是一个神奇的操作。就是让从臂有期望速度。作用就是会影响操作手感。
vel2[i] = 0.10 * curret_joint_states.at(i).velocity; // 系数越大手感越硬。ok这就是整个的实现逻辑,非常简陋。
程序框架简介:https://zwf9l1z0bm3.feishu.cn/docx/Ee3EdW8meoy79uxzBQVcXe11nfh?from=from_copylink
qq交流群:523255719
50a727c9-ba1a-440f-9dcf-f9c4d06d0eea-image.png
如图所示,按书中6.2.3章修改代码之后,报错:No link elements found in urdf file。ros版本是:ROS2-jazzy 24.04。请问如何解决呢?谢谢!
鱼哥 我是想写一个自己的局部路径规划器,具体功能是这样的,在没有碰到新添加的障碍物时就是用路径跟踪的方法进行移动,如果扫描到新障碍物就调用局部路径规划器进行避障,前一部分已经完成了,现在小车遇到新障碍物会自动调用全局路径规划器进行避障,而我想要的是用局部路径规划器就是ros2_navigation里面那个dwb局部控制器来进行避障,我想问一下,如何在我的代码就比如以您课程里面的代码局部规划器代码为例子,如何在我的代码的基础上调用dwb控制器的插件来完成避障,主要是这个调用问题怎么解决,是要重新再写一个控制器插件吗,如果是的话 又要怎样来写这个新的控制器插件呢
Screenshot from 2025-05-16 13-48-38.png
如图所示,按书中6.2.3章修改代码之后,报错:No link elements found in urdf file。ros版本是:ROS2-jazzy 24.04。请问如何解决呢?谢谢!
我这边只有热点,可不可以直接用串口与ros进行节点通信啊
moveit 添加障碍物路径规划如何有时会碰撞有时不会,咋调节,使用的默认ompl的geometric::RRTConnect,之前尝试设置过collision的padding但是还是一样
e061e652-e318-48b1-acd9-bd3bfb82d252-image.png
上图蓝色线段是teb规划的路径(仿真环境)
2f5d56cb-d451-4b79-8f8d-c00aaf2cacb4-image.png
上图黑色线段是teb规划的路径(实车环境)
我想请教以下,可以修改哪些参数增加路径的平滑性
版块
-
1.3k
主题4.8k
帖子 -
419
主题2.8k
帖子 -
39
主题167
帖子 -
1.0k
主题4.2k
帖子 -
976
主题3.6k
帖子 -
5
主题11
帖子 -
353
主题1.6k
帖子