Ubuntu-22.04.5加ros2-humble加gazebo-11.10.2;
代码是在gitee上面粘贴过来的,fishbot.urdf.xacro也引用文件和调用宏了,launch后在gazebo界面中点击PLUGINS-->diff_drive时无法显示信息,同时报错 [Err] [JointControlWidget.cc:393] Error advertising topic [/data://world/default/model/fishbot/plugin/diff_drive/joint_cmd];
命名空间<namespace>/</namespace>代码没有问题,主路经前面一直是data://而不是/,有什么解决办法吗,gpt说的是可能不兼容,需要升级为gazebo garden版本。升级后会解决吗😵 ,有没有其他办法?6.4.4question.png 854bb1f9-6188-4281-add1-cf76bdc82202-image.png
如何在虚拟机中安装增强功能实现桌面文件和虚拟机ubuntu文件拖拽传递,要安装什么插件,视频前面还没看到,后面还会有吗
所有源码使用第九章的成品源码,上位机器程序去除原雷达驱动和串口转wifi的功能包,添加蓝海广电雷达驱动包。雷达直接串口连接的电脑。tf树正常,雷达的scan话题也能正常显示点云。但建图时一直提示队列满。如下图,向各位大佬求援,请不吝赐教。截图 2025-03-27 13-56-05.png
wsl2环境 ROS2 jazzy版本 ubuntu24
我使用的是官方教程,导入的udrf文件为panda_arm的udrf文件,按照官方教程操作,网址如下
https://moveit.picknik.ai/main/doc/examples/setup_assistant/setup_assistant_tutorial.html
我遇到了如下问题,我使用moveit setup assisstant时在设置虚拟关节时终端显示以下错误
edecdaa5-eecc-4cc2-bebd-c46f13a33357-image.png
此外,我在定义规划组的时候,在点击Add Joints的时候,终端出现错误提示,我并不理解这是为什么
41a50af8-1688-492f-be03-803aad9431ab-image.png
并且我在点击添加关节后点击保存,终端出现报错:
[moveit_setup_assistant-1] Warning: Group 'panda_arm' is empty. [moveit_setup_assistant-1] at line 262 in ./src/model.cpp [moveit_setup_assistant-1] [INFO] [1742974235.032554245] [moveit_3411427826.moveit.core.robot_model]: Loading robot model 'panda'... [moveit_setup_assistant-1] [WARN] [1742974235.040723479] [moveit_3411427826.moveit.core.robot_model]: Group 'panda_arm' must have at least one valid joint [moveit_setup_assistant-1] [WARN] [1742974235.040786511] [moveit_3411427826.moveit.core.robot_model]: Failed to add group 'panda_arm'后来添加了机器人手部的links,但依然报错
最后在设置姿态修改关节角度时直接卡退
moveit_setup_assistant: /home/maikie/Desktop/ws_moveit/src/moveit2/moveit_core/robot_state/include/moveit/robot_state/robot_state.hpp:1305: const Eigen::Isometry3d& moveit::core::RobotState::getCollisionBodyTransform(const moveit::core::LinkModel*, std::size_t) const: Assertion `checkCollisionTransforms()' failed.505dd223-be96-419c-a05b-b7c7bfd98af2-image.png
我烧录至ESP32中程序主体如上,可以查看到ros2的节点和服务,但是发送请求后无法受到回应(会卡在那里),通过agent可以看到ESP32接收到了请求,我在服务回调函数添加了串口打印信息如下,
534c779f-34ff-4bf9-87f1-cb1eacac5a4b-image.png
但实际情况是我三次请求都是a=1,b=2,ESP32接收到的数据是随机大数,并不正确。并且串口信息显示已发送回应但是主机接受不到,尝试写该QOS至reliable,但是似乎没有这个函数,请问有人遇到过这样的问题吗?我尝试过串口连接和wifi连接,结果都是这样,希望有高人指点一下,万分感谢!
*补充:microROS的话题发布和订阅没有问题,就是服务跑不通
下图为我发送请求后状态
3064b8c8-5a19-49f8-a897-daff63dc132d-image.png
下图为我看到的agent届收到请求的所有反应
d59019c3-9a0e-455f-825c-4efff3bc9fd0-image.png
rviz2里面fixed Frame没有odom的下拉菜单选项.37325330-fb9a-4777-9d49-76e2304cf5f3-截图 2025-03-26 14-15-00.png /home/ros2/图片/截图/截图 2025-03-26 14-15-00.png
进行路点导航时,无法像视频一样连续规划,进入了一个窄房间后就旋转卡住
#include "rclcpp/rclcpp.hpp"
#include <chrono>
#include <memory>
#include "tf2/LinearMath/Quaternion.h"
#include "tf2_ros/buffer.h"
#include "tf2_ros/transform_listener.h"
#include "tf2_geometry_msgs/tf2_geometry_msgs.hpp"
#include "tf2/utils.h"
#include "geometry_msgs/msg/transform_stamped.hpp"
using namespace std::chrono_literals;
class TFListener:public rclcpp::Node
{
public:
TFListener():Node("tf2_listener")
{
buffer_=std::make_shared<tf2_ros::Buffer>(this->get_clock());
listener_=std::make_shared<tf2_ros::TransformListener>(*buffer_);
timer_=this->create_wall_timer(5s,std::bind(&TFListener::getTransform,this));
};
int main(int argc,char**argv)
{
rclcpp::init(argc,argv);
auto node=std::make_shared<TFListener>();
rclcpp::spin(node);
rclcpp::shutdown();
return 0;
}
跟着书本7.4.2完成python版本的用TF获取机器人实时位置,后面自己尝试cpp版本,但是一直不能接收到坐标情况,python版本的可以,代码有什么问题吗
轮式底盘只能平面运动,如何标定单线激光雷达和imu的相对外参?有什么开源的方案吗?
嵌入式入门 ing
硬件: Fishbot 二驱机器人
软件代码: https://github.com/fishros/fishbot_motion_control_microros.git
ROS 版本: humble
修改 fishbot_config.h 中 WIFI_SERVER_IP, WIFI_SERVER_PORT, WIFI_STA_SSID, WIFI_STA_PSWK 后烧录代码,Serial Monitor 出现,且 ros-agent 无日志打印
[ 33525][E][WiFiUdp.cpp:185] endPacket(): could not send data: 12 [ 33632][E][WiFiUdp.cpp:185] endPacket(): could not send data: 12 尝试解决方案 排查内存问题根据 github issus [E][WiFiUdp.cpp:183] endPacket(): could not send data: 12 · Issue #845 · espressif/arduino-esp32 说 errno 12 is ENOMEM, 内存问题。
在fishbot_motion_control_microros/lib/MicroRosRwm/micro_ros_transport_wifi_udp.cpp 的 platformio_transport_write_wifi_udp 添加打印日志
Monitor 输出如下,且 ros-agent 无日志打印
[WiFiUDP] Before send - Free heap: 126924 bytes [WiFiUDP] After write - Free heap: 126924 bytes, wrote 16 bytes [473117][E][WiFiUdp.cpp:185] endPacket(): could not send data: 12 [WiFiUDP] After endPacket - Free heap: 126924 bytes, result: failed [WiFiUDP] Memory change: 0 bytes 写个简单的连接 wifi 和发送 UDP 包逻辑 /** * @file main.cpp * @brief 极简WiFi连接和UDP发送示例 */ #include <Arduino.h> #include <WiFi.h> #include <WiFiUdp.h> // WiFi配置 const char* ssid = "xxx"; const char* password = "xxx"; // UDP服务器配置 const char* udpServerIP = "192.168.110.124"; const int udpServerPort = 8888; // UDP实例 WiFiUDP udp; // 函数声明 void setupWiFi(); bool sendUdpPacket(const char* message); void setup() { // 初始化串口 Serial.begin(115200); delay(1000); Serial.println("\n\n极简WiFi和UDP测试程序启动"); // 连接WiFi setupWiFi(); // 如果WiFi连接成功,初始化UDP if (WiFi.status() == WL_CONNECTED) { Serial.println("初始化UDP..."); udp.begin(8889); // 本地端口(与服务器端口不同) // 发送初始测试包 sendUdpPacket("测试连接 - ESP32已连接"); } } void loop() { // 检查WiFi连接状态 if (WiFi.status() != WL_CONNECTED) { Serial.println("WiFi连接断开,尝试重连..."); setupWiFi(); } // 每2秒发送一个UDP数据包 static unsigned long lastSendTime = 0; if (WiFi.status() == WL_CONNECTED && millis() - lastSendTime > 2000) { lastSendTime = millis(); // 创建带时间戳的消息 char message[64]; snprintf(message, sizeof(message), "ESP32测试包 时间:%lu秒 内存:%u字节", millis()/1000, ESP.getFreeHeap()); // 发送UDP包 bool success = sendUdpPacket(message); if (success) { Serial.println("UDP包发送成功"); } else { Serial.println("UDP包发送失败"); } } delay(100); // 防止循环过快 } void setupWiFi() { Serial.printf("正在连接WiFi: %s\n", ssid); // 重置WiFi WiFi.disconnect(true); delay(100); // 设置为站点模式 WiFi.mode(WIFI_STA); WiFi.setSleep(WIFI_PS_NONE); // 禁用WiFi睡眠模式,提高稳定性 // 开始连接 WiFi.begin(ssid, password); // 等待连接完成 int attempts = 0; while (WiFi.status() != WL_CONNECTED && attempts < 20) { delay(500); Serial.print("."); attempts++; } if (WiFi.status() == WL_CONNECTED) { Serial.println("\nWiFi连接成功!"); Serial.print("IP地址: "); Serial.println(WiFi.localIP()); Serial.print("信号强度: "); Serial.print(WiFi.RSSI()); Serial.println(" dBm"); } else { Serial.println("\nWiFi连接失败!"); } } bool sendUdpPacket(const char* message) { // 确保WiFi已连接 if (WiFi.status() != WL_CONNECTED) { Serial.println("WiFi未连接,无法发送UDP包"); return false; } // 记录发送前的内存 uint32_t freeHeapBefore = ESP.getFreeHeap(); Serial.printf("发送前内存: %u字节\n", freeHeapBefore); // 初始化UDP包 if (!udp.beginPacket(udpServerIP, udpServerPort)) { Serial.println("无法初始化UDP包"); return false; } // 写入数据 size_t bytesWritten = udp.write((const uint8_t*)message, strlen(message)); if (bytesWritten != strlen(message)) { Serial.printf("UDP写入不完整: %d/%d字节\n", bytesWritten, strlen(message)); return false; } // 发送数据包 bool result = udp.endPacket(); // 记录发送后的内存 uint32_t freeHeapAfter = ESP.getFreeHeap(); Serial.printf("发送后内存: %u字节 (变化: %d)\n", freeHeapAfter, (int)freeHeapAfter - (int)freeHeapBefore); if (!result) { Serial.println("UDP包发送失败 (endPacket错误)"); } // 在发送后小延迟,避免发送过快 delay(50); return result; }Monitor 输出如下,且 ros-agent 有日志
发送前内存: 168836字节 ��送后内存: 168596字节 (变化: -240) UDP包发送成功 发送前内存: 168836字节 ��送后内存: 168596字节 (变化: -240) UDP包发送成功 发送前内存: 168836字节 ��送后内存: 168596字节 (变化: -240) UDP包发送成功Screenshot from 2025-03-25 10-59-19.png
Adafruit Feather ESP32-S3 2MB PSRAM
Adafruit Feather ESP32-S3 No PSRAM
Adafruit Feather ESP32-S3 Reverse TFT
Adafruit Feather ESP32-S3 TFT
是在上边选哪个芯片型号?
fe8cc470-c2c7-4d6c-8d7a-8b376a5e0880-1742803018220.png
里程计应该在哪里校准啊
我在进行图像处理任务时遇到了opencv版本问题,打算卸载后重新安装。
卸载过程中发现会卸载非常多的ros2组件,推测是ros2环境是需要opencv库支持的,那么重新安装新版本的opencv库以后,需要如何操作来恢复opencv与ros2环境的兼容性
在9.3.2章节中,尝试获取编码器的值,轮子匀速运动,但打印一直显示为0。
具体细节和上下文及尝试方案:1、初步排查是否为代码问题,仔细检查无异常
2、 排查是否为硬件问题(控制板/电机)
使用万用表蜂鸣器档位测量了IO32和IO33(电机1的编码口也就是图中的黄色和绿色)、IO25和IO26(电机2的编码口也就是图中的黄色和绿色)
2.1 在正常接线且未开机情况下,两组均未导通。
2.2 在正常接线且开机情况下,两组均导通。
2.3 在如图异常接线且未开机情况下,两组均未导通。
2.4 在如图异常接线且开机情况下,电机2导通(即io32和io33),电机1拔出的黄色和绿色端口未导通且控制板上ESP_IO25和26也未导通。导致无法判断是电机编码器的问题还是主控板的问题。
微信图片_20250322234038.jpg
打印内容tick1 = 0, tick2 = 0
tick1 = 0, tick2 = 0
tick1 = 0, tick2 = 0
Ubuntu-22.04.5加ros2-humble加gazebo-11.10.2;
代码是在gitee上面粘贴过来的,fishbot.urdf.xacro也引用文件和调用宏了,launch后在gazebo界面中点击PLUGINS-->diff_drive时无法显示信息,同时报错 [Err] [JointControlWidget.cc:393] Error advertising topic [/data://world/default/model/fishbot/plugin/diff_drive/joint_cmd];
命名空间<namespace>/</namespace>代码没有问题,主路经前面一直是data://而不是/,有什么解决办法吗,gpt说的是可能不兼容,需要升级为gazebo garden版本。升级后会解决吗😵 ,有没有其他办法?6.4.4question.png 854bb1f9-6188-4281-add1-cf76bdc82202-image.png
RT,我在使用ROS2_odrive_control包的时候在launch中写了如下语句想映射/cmd_vel话题,但并没有效果,网上也没有相关案例,特来求教大佬
robot_state_pub_node = Node( package="robot_state_publisher", executable="robot_state_publisher", output="both", parameters=[robot_description], remappings=[("/diffbot_base_controller/cmd_vel_unstamped", "/cmd_vel")], )lwb@Lwbr:~/lwb_ws$ ros2 run yolov5_ros2 yolo_detect_2d --ros-args -p device:=cpu -p image_topic:=/fishbot_camera_raw
Traceback (most recent call last):
File "/home/lwb/lwb_ws/install/yolov5_ros2/lib/yolov5_ros2/yolo_detect_2d", line 33, in <module>
sys.exit(load_entry_point('yolov5-ros2==0.0.0', 'console_scripts', 'yolo_detect_2d')())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/lwb/lwb_ws/install/yolov5_ros2/lib/yolov5_ros2/yolo_detect_2d", line 25, in importlib_load_entry_point
return next(matches).load()
^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/importlib/metadata/init.py", line 205, in load
module = import_module(match.group('module'))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/importlib/init.py", line 90, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 995, in exec_module
File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
File "/home/lwb/lwb_ws/install/yolov5_ros2/lib/python3.12/site-packages/yolov5_ros2/yolo_detect_2d.py", line 3, in <module>
from torch import imag
ModuleNotFoundError: No module named 'torch'
[ros2run]: Process exited with failure 1
ubuntu2404 pipx 安装的yolo5 但它好像导入不进来
最近制作了一个三自由度并联机构,但是不想用解析法算逆运动学,想尝试使用一些仿真软件的运动学插件进行解算,但是urdf文件不支持闭链机构,但因为鱼哥给了很多gazebo仿真相关的经验,不知道gazebo是否可以支持逆运动学解算,不能的话只能使用untiy平台了。
期待回答!!!!
e8227771-9c14-40d7-918f-60c38f81849a-image.png
版块
-
1.2k
主题4.7k
帖子 -
379
主题2.5k
帖子 -
21
主题85
帖子 -
969
主题4.0k
帖子 -
945
主题3.5k
帖子 -
4
主题10
帖子 -
343
主题1.5k
帖子