- JetPack v5
- ROS2 Foxy
We used a Jetson AGX Xavier Developer Kit. To set up the Jetson AGX Xavier Developer Kit, we need a host computer installed Ubuntu 20.04.
- Download and install NVIDIA SDK Manager onto the host computer.
- Connect the host computer and Jetson AGX Xavier Developer Kit (see this video).
- Run NVIDIA SDK Manager and follow the instruction.
Unleash the limitation of CPU (the reference).
$ sudo nvpmodel -m 0
$ sudo /usr/bin/jetson_clocks --fan
- Settings > Power > Blank Screen >
Never
On the Jetson, you can use nmcli
command to change the network settings.
Set the static IP on the UCT network (reference).
$ nmcli c show
NAME UUID TYPE DEVICE
Wired connection 1 b72f3d20-4de2-3d44-9c45-9689d79f22e4 ethernet eth0
docker0 bcb6f95d-5cf5-483d-ac09-c312a4da8c0b bridge docker0
$ sudo nmcli c modify "Wired connection 1" ipv4.address [NEW_ADDRESS]/27
HOST COMPUTER
For the ssh login from your computer, you should make a pair of ssh key on the host computer.
$ ssh-keygen -t rsa
Then, copy the public key into the Jetson.
$ ssh-copy-id -i ~/.ssh/wildpose_jetsonagx.pub [user]@[ip address]
Add the jetson IP address information in ~/.ssh/config
:
Host [ip address]
HostName [ip address]
User naoya
IdentityFile ~/.ssh/wildpose_jetsonagx
UseKeychain yes
AddKeysToAgent yes
Set the dotfiles you wanna use (e.g., Naoya's dotfiles).
Let's install ROS2 Foxy following with the official guide.
See setup_scripts/ros2_foxy.sh
.
$ cd setup_scripts
$ ./ros2_foxy.sh
This is the original GitHub repository and the Guide for Jetson.
$ cd setup_scripts/
$ chmod +x ./xiapi.sh
$ ./xiapi.sh
# reopen the shell
This is done to make sure that the USB FS buffering size is sufficient for high bandwidth streams through USB 3.0
Set this with every new shell:
Put echo 0 > /sys/module/usbcore/parameters/usbfs_memory_mb
into /etc/rc.local
Or
Apply to current shell:
echo "0" | sudo tee /sys/module/usbcore/parameters/usbfs_memory_mb
To show the ximea camera image data, you are recommended to install image_view.
$ sudo apt install -y ros-foxy-image-view \
ros-foxy-rqt-image-view \
ros-foxy-rqt-reconfigure \
ros-foxy-image-transport-plugins \
ros-foxy-camera-info-manager
$ mkdir ~/ros2_ws
$ cd ~/ros2_ws
$ git clone git@github.com:African-Robotics-Unit/ximea_ros2_cam.git
$ cd ~/ros2_ws/ximea_ros2_cam/
$ git fetch
$ git checkout -b develop
$ sudo apt install -y ros-foxy-camera-info-manager
$ colcon build
$ colcon build --packages-select cam_bringup --symlink-install
# Test the camera driver
$ ros2 launch cam_bringup cam_test.launch.py
Then, add source ~/ros2_ws/ximea_ros2_cam/install/setup.bash
into ~/.bashrc
.
To avoid the error 45, you have to run the following command.
$ sudo tee /sys/module/usbcore/parameters/usbfs_memory_mb >/dev/null <<<0
This is the original GitHub repository.
$ sudo apt install -y cmake gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
$ cd ~/Documents
$ git clone https://github.com/Livox-SDK/Livox-SDK.git
$ cd Livox-SDK
Edit Livox-SDK/sdk_core/CMakeLists.txt
by adding -fPIC
.
Ref: Livox-SDK/livox_ros2_driver#9 (comment)
$ cd build && cmake .. -DCMAKE_SYSTEM_NAME=Linux -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++
$ make
$ sudo make install
$ source /opt/ros/foxy/setup.bash
Set the network configuration:
- IP address:
192.168.1.2
- Netmask:
255.255.255.0
- Gatway:
192.168.1.1
This is the original GitHub repository.
$ sudo apt install -y ros-foxy-rviz2
$ cd ~/ros2_ws
$ git clone https://github.com/DenDen047/livox_ros2_driver.git livox_ros2_driver/src
$ cd livox_ros2_driver
$ colcon build
$ source ~/ros2_ws/livox_ros2_driver/install/setup.bash
Add source ~/ros2_ws/livox_ros2_driver/install/setup.bash
into ~/.bashrc
.
Don't forget to change the config file.
Update the ROS middleware for fast recording ros bag files.
Install eCAL.
$ sudo add-apt-repository ppa:ecal/ecal-latest
$ sudo apt-get update
$ sudo apt-get install -y ecal
Setup rosidl_typesupport_protobuf.
$ sudo apt-get install -y libprotobuf-dev protobuf-compiler
$ cd ~/ros2_ws
$ git clone https://github.com/eclipse-ecal/rosidl_typesupport_protobuf.git
$ cd ~/ros2_ws/rosidl_typesupport_protobuf
$ colcon build
$ vim ~/.bashrc # add "source ~/ros2_ws/rosidl_typesupport_protobuf/install/setup.bash"
$ source ~/.bashrc
Clone latest release of this repository into your ROS2 workspace and build it.
$ cd ~/ros2_ws
$ git clone https://github.com/eclipse-ecal/rmw_ecal.git
$ cd ~/ros2_ws/rmw_ecal
$ colcon build --packages-skip rmw_ecal_proto_cpp
$ vim ~/.bashrc # add "source ~/ros2_ws/rmw_ecal/install/setup.bash"
$ source ~/.bashrc
Add the following line into your .bashrc
.
export RMW_IMPLEMENTATION=rmw_ecal_dynamic_cpp
Install Python eCAL API.
$ sudo apt install -y python3 python3-pip
$ sudo apt install -y python3-ecal5
To check the Jetson status, jtop
should be installed.
$ sudo -H pip install -U jetson-stats
$ sudo reboot
You should get a connection listing similar to something like this:
$ nmcli d
DEVICE TYPE STATE CONNECTION
wlan0 wifi connected AirPort41594
docker0 bridge connected docker0
p2p-dev-wlan0 wifi-p2p disconnected --
eth0 ethernet unavailable --
...
Next we will make sure that the WiFi module is turned on by typing the following command:
$ nmcli r wifi on
Now we can scan and list off all visible WiFi networks available to us by typing the following command:
$ nmcli d wifi list
IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY
* 34:76:C5:37:A2:7A AirPort41594 Infra 6 130 Mbit/s 87 ▂▄▆█ WPA1 WPA2
...
To connect to a given network make sure you have its SSID and password ready. Both are case sensitive! Type the following command with [SSID]
being your SSID and [PASSWORD]
being the password for that network:
$ nmcli d wifi connect [SSID] password [PASSWORD]
If all goes according to plan, you should get a connection confirmation!
$ sudo apt install -y busybox
Add the following code into your /etc/rc.local
:
sh /home/naoya/WildPose_v1.1/wildpose/src/dji_rs3_pkg/enable_CAN.sh &
Check the status of can0
:
$ ip -s -d -h link show can0
Check the CAN connection.
# AA:1A:00:03:00:00:00:00 22:11:A2:42:0E:00:20:00 30 00 40 00 01 14 7B 40 97 BE
$ cansend can0 223#AA1A000300000000 && \
cansend can0 223#2211A2420E002000 && \
cansend can0 223#3000400001147B40 && \
cansend can0 223#97BE
References:
- Enabling CAN on Nvidia Jetson Xavier Developer Kit
- hmxf/can_xavier -- GitHub
- Controller Area Network (CAN) -- nVIDIA
$ sudo apt install -y xrdp
$ cd
$ echo "xfce4-session" | tee .xsession
$ sudo reboot
Mode X
.
$ usb-devices
...
T: Bus=01 Lev=02 Prnt=03 Port=02 Cnt=01 Dev#= 10 Spd=12 MxCh= 0
D: Ver= 2.00 Cls=ff(vend.) Sub=ff Prot=ff MxPS= 8 #Cfgs= 1
P: Vendor=046d ProdID=c21f Rev=03.05
S: Manufacturer=Logitech
S: Product=Wireless Gamepad F710
S: SerialNumber=3DA39E79
C: #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=98mA
I: If#=0x0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=5d Prot=01 Driver=xpad
...
Check the connection between Jetson and F710.
$ sudo apt-get install -y jstest-gtk
$ jstest /dev/input/js0
Install joy_linux
package.
$ sudo apt install -y ros-foxy-joy-linux
$ ros2 run joy_linux joy_linux_node --ros-args -p dev_name:="Wireless Gamepad F710"
Install the preprequirements.
$ sudo apt-get install -y python3-serial
TTY setting.
$ systemctl stop nvgetty
$ systemctl disable nvgetty
$ udevadm trigger
Add an user group, dialout
, to use tty ports without sudo.
$ sudo usermod -aG dialout ${USER}
Then, you should reboot the jetson.
References
This is the setup on Jetson AGX Orin for Teensy 4.0.
$ sudo usermod -a -G tty naoya
To develop ROS2 programs on your host/local computer, VS Code ROS Extension was used. Please refer to see the following video:
<iframe width="560" height="315" src="https://www.youtube.com/embed/teA20AjBlG8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>Recommend Extensions:
$ cd ~/WildPose_v1.1/wildpose
$ colcon build --symlink-install
Run WildPose with the following commmand, and the data will be recorded in a rosbag file in rosbags/
.
$ sudo ip link set down can0 && sudo ip link set up can0
$ ros2 launch wildpose_bringup wildpose_launch.py
After that, you can open eCAL Recorder.
$ ecal_rec_gui --config ~/WildPose_v1.1/wildpose/src/wildpose_bringup/config/config.ecalrec --activate
Install requirements:
$ sudo apt install -y ffmpeg
$ sudo apt install -y python3-roslib python3-rospy python3-sensor-msgs python3-opencv
$ pip3 install tqdm ffmpeg-python
Convert a rosbag file into a video file:
$ cd src/
$ ./rosbag2video.py --input_db ~/WildPose_v1.1/wildpose/rosbags/20221002_192302/20221002_192302_0.db3
$ ros2 run image_view image_view --ros-args --remap /image:=/image_raw