Raspberry Pi & Ubuntu Server & ROS2(Foxy)에서 마이크로-ROS & Raspberry Pico의 동작을 확인합니다

이것은 첫 번째 투고다.
조금이라도 도움이 됐으면 좋겠어요.

기재 목적


나는 마이크로-ROS로 랩베리 피코를 이동하고 싶었지만 정리된 자료를 찾지 못했다.
Pico의 펌웨어는 Ubuntu PC(20.04LTC &foxy)가 제작해 설치한 것이다.

컨디션


항목

OS
ROS
PC
Thinkpad x260
Ubuntu Desktop 20.04
Foxy
SBC
Raspberry Pi 4(4GB)
Ubuntu Server 20.04
Foxy

PC의 Ubuntu에서 펌웨어 개발 환경 만들기


Pico SDK 설치


참조:
https://github.com/micro-ROS/micro_ros_raspberrypi_pico_sdk/tree/foxy
# Install dependencies
sudo apt install cmake g++ gcc-arm-none-eabi doxygen libnewlib-arm-none-eabi git python3

git clone --recurse-submodules https://github.com/raspberrypi/pico-sdk.git $HOME/pico-sdk

# Configure environment
echo "export PICO_SDK_PATH=$HOME/pico-sdk" >> ~/.bashrc
source ~/.bashrc

github에서 micro-Los support package를 clone으로 시작하여 example을 Pico에 쓰기


mkdir ~/pico
cd ~/pico
git clone https://github.com/micro-ROS/micro_ros_raspberrypi_pico_sdk.git -b foxy
mkdir build
cd build
cmake ..
make
# To flash, hold the boot button, plug the USB and run:
cp pico_micro_ros_example.uf2 /media/$USER/RPI-RP2

Raspberry Pi4의 Ubuntu에서 마이크로-ROS 실행 환경 만들기


ROS2 Foxy에 마이크로-ROS 구축 환경 만들기


참조:
https://micro.ros.org/docs/tutorials/core/first_application_rtos/freertos/
# Source the ROS 2 installation
source /opt/ros/$ROS_DISTRO/setup.bash

# Create a workspace and download the micro-ROS tools
mkdir microros_ws
cd microros_ws
git clone -b $ROS_DISTRO https://github.com/micro-ROS/micro_ros_setup.git src/micro_ros_setup

# Update dependencies using rosdep
sudo apt update && rosdep update
rosdep install --from-path src --ignore-src -y

# Install pip
sudo apt-get install python3-pip

# Build micro-ROS tools and source them
colcon build
source install/local_setup.bash

마이크로-ROS 에이전트 만들기


참조:
https://micro.ros.org/docs/tutorials/core/first_application_rtos/freertos/
# Download micro-ROS-Agent packages
ros2 run micro_ros_setup create_agent_ws.sh
# Build step
ros2 run micro_ros_setup build_agent.sh
source install/local_setup.bash

마이크로-Los 에이전트 시작


펌웨어가 새겨진 Pico를 Raspberry Pi에 연결합니다.
# Run a micro-ROS agent
ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyACM0
디바이스의 포트 이름은 환경에 따라 다릅니다.매번 찾아보거나 udev로 포트 이름을 고정합니다.
순조롭다면 아래와 같다.잘 안 되면 USB 케이블을 다시 꽂으세요.
그래도 안 되면 /dev/ttyACM0 케이블이 충전전용인지 확인해 보세요
[1636278871.515104] info     | TermiosAgentLinux.cpp | init                     | Serial port not found. | device: /dev/ttyACM0, error 2, waiting for connection...
[1636278872.518239] info     | TermiosAgentLinux.cpp | init                     | Serial port not found. | device: /dev/ttyACM0, error 2, waiting for connection...
[1636278873.521781] info     | TermiosAgentLinux.cpp | init                     | Serial port not found. | device: /dev/ttyACM0, error 2, waiting for connection...
[1636278873.806098] info     | TermiosAgentLinux.cpp | init                     | running...             | fd: 3
[1636278873.806299] info     | Root.cpp           | set_verbose_level        | logger setup           | verbose_level: 4
[1636278874.283705] info     | Root.cpp           | create_client            | create                 | client_key: 0x19A5DA75, session_id: 0x81
[1636278874.283839] info     | SessionManager.hpp | establish_session        | session established    | client_key: 0x19A5DA75, address: 0
[1636278874.316559] info     | ProxyClient.cpp    | create_participant       | participant created    | client_key: 0x19A5DA75, participant_id: 0x000(1)
[1636278874.321438] info     | ProxyClient.cpp    | create_topic             | topic created          | client_key: 0x19A5DA75, topic_id: 0x000(2), participant_id: 0x000(1)
[1636278874.323820] info     | ProxyClient.cpp    | create_publisher         | publisher created      | client_key: 0x19A5DA75, publisher_id: 0x000(3), participant_id: 0x000(1)
[1636278874.328616] info     | ProxyClient.cpp    | create_datawriter        | datawriter created     | client_key: 0x19A5DA75, datawriter_id: 0x000(5), publisher_id: 0x000(3)
다른 Terminal 중 노드가 일어서고,publisher가 있고,publish의 데이터가 어떤지 보여 줍니다.
$ ros2 node list
/pico_node
$ ros2 topic list
/parameter_events
/pico_publisher
/rosout
$ ros2 topic info /pico_publisher
Type: std_msgs/msg/Int32
Publisher count: 1
Subscription count: 0
$ ros2 topic echo /pico_publisher
data: 390
---
data: 391
---
data: 392
---
data: 393
---
^C$ 

최후


로스세리알로 만든 로봇의 모터 제어부를 ROS2로 옮기고 싶어요.

좋은 웹페이지 즐겨찾기