1. 多usb设备以及摄像头端口地址分配问题

https://blog.csdn.net/xp_fangfei/article/details/129516515?spm=1001.2014.3001.5506

从以上两图可以知道同一个摄像头的video0和video1或video0和video1两个的ATTR{index}是不一样的,索引可以加上这一项进行区分。

在/etc/udev/rules.d/下,创建.rules 规则配置文件;

在该文件中写入以下内容完成绑定:

KERNEL=="video0", ATTR{index}=="0", KERNELS=="2-4.2:1.0", MODE:="0777", SYMLINK+="video_right"

完成绑定后重启计算机,就完成了USB 口的映射;

2. 双版本ROS兼容性问题

2.1 版本切换

使用鱼香肉丝配置终端交互式版本切换及选择:


# >>> fishros initialize >>>
echo "ros:foxy(1) noetic(2) ?"
read choose
case $choose in
1) source  /opt/ros/foxy/setup.bash;
source ~/cyclonedds_ws/install/setup.bash;
export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp;
export CYCLONEDDS_URI=~/cyclonedds_ws/cyclonedds.xml;
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH;;
2) source  /opt/ros/noetic/setup.bash;
source /home/unitree/catkin_ws/devel/setup.bash;;
esac

2.2 python环境配置

参考:

1. Jetson Xavier NX / Orin NX ROS及视觉检测环境配置、移植、部署指南

https://blog.csdn.net/hhaowang/article/details/159160567?spm=1001.2014.3001.5501https://blog.csdn.net/hhaowang/article/details/159160567?spm=1001.2014.3001.5501https://blog.csdn.net/hhaowang/article/details/159487452?spm=1001.2014.3001.5501https://blog.csdn.net/hhaowang/article/details/159487452?spm=1001.2014.3001.55012. 目标检测与跟踪(10)-- Jetson Xavier NX刷机、移植&部署YOLOv8量化模型(中)

https://blog.csdn.net/hhaowang/article/details/159553905?spm=1001.2014.3001.5501https://blog.csdn.net/hhaowang/article/details/159553905?spm=1001.2014.3001.55013. 目标检测与跟踪(13)-- Jetson Xavier NX / Orin NX 松灵机械臂PiPer SDK、ROS功能包、官方文档解读

2.3 异构通信ros1_bridge配置

针对 Ubuntu 20.04 + ROS1 Noetic + ROS2 Foxy 给出完整步骤。


一、前提条件

  • 系统:Ubuntu 20.04(必须)
  • 已安装:
    • ROS1 Noetic:/opt/ros/noetic
    • ROS2 Foxy:/opt/ros/foxy
  • 确认环境正常:
# ROS1
source /opt/ros/noetic/setup.bash
roscore --version

# ROS2
source /opt/ros/foxy/setup.bash
ros2 --version

二、方式 1:直接安装二进制(简单、推荐)

# 更新
sudo apt update

# 安装 foxy 版 ros1_bridge
sudo apt install ros-foxy-ros1-bridge

安装后会自动放在 /opt/ros/foxy 里,可直接使用,无需编译。


三、方式 2:源码编译安装(适合自定义 / 最新版)

1. 创建工作空间

mkdir -p ~/ros1_bridge_ws/src
cd ~/ros1_bridge_ws/src

# 拉取 foxy 分支源码
git clone -b foxy https://github.com/ros2/ros1_bridge.git

2. 同时导入 ROS1 + ROS2 环境

关键:编译前必须同时 source 两个环境!

cd ~/ros1_bridge_ws

# 载入 ROS1 Noetic
source /opt/ros/noetic/setup.bash

# 载入 ROS2 Foxy
source /opt/ros/foxy/setup.bash

3. 编译 ros1_bridge

colcon build --packages-select ros1_bridge \
  --cmake-force-configure \
  --cmake-args -DBUILD_TESTING=OFF
  • 成功后会生成:~/ros1_bridge_ws/install

4. 生效环境

source ~/ros1_bridge_ws/install/setup.bash

四、运行测试(必做)

终端 1:启动 ROS1 Core

source /opt/ros/noetic/setup.bash
roscore

终端 2:启动 ros1_bridge

# 若用二进制安装:
source /opt/ros/foxy/setup.bash

# 若用源码编译:
# source ~/ros1_bridge_ws/install/setup.bash

ros2 run ros1_bridge dynamic_bridge --bridge-all-topics

终端 3:ROS1 发消息

source /opt/ros/noetic/setup.bash
rostopic pub /test std_msgs/String "data: 'hello from ros1'" -r 1

终端 4:ROS2 收消息

source /opt/ros/foxy/setup.bash
ros2 topic echo /test std_msgs/String

能看到 hello from ros1 即成功。


五、常见问题

  1. 编译报错:找不到 ROS1 头文件
    • 确认编译前 同时 source 了 noetic 和 foxy
  2. 运行时提示:ROS_MASTER_URI not set
    • 桥接端需能访问 ROS1 Core,默认 http://localhost:11311
    • 可手动 export:
      export ROS_MASTER_URI=http://localhost:11311

3. 编译时需要对自定义消息类型做先后编译:

ros1-ros2-ros1_bridge的顺序进行编译

运行脚本

#!/bin/bash
# 先加载ROS1
source /opt/ros/noetic/setup.bash
source /home/unitree/catkin_ws/devel/setup.bash

# 再加载ROS2
source /opt/ros/foxy/setup.bash
source /home/unitree/ros1_bridge_ws/install/setup.bash
source /home/unitree/ros2_msg_bridge/install/setup.bash

# 启动动态双向桥
ros2 run ros1_bridge dynamic_bridge --bridge-all-topics

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐